Jules ae95d72289 feat(ci): add /ai-review dual-model PR review workflow (pilot, review-only)
* feat(ci): add dual-model AI review orchestrator

Fetches the PR diff, runs Claude Sonnet 4.6 and GPT-5.3-Codex in
parallel, merges both reviews with Haiku 4.5 and posts the result
as an inline PR review. Dependency-free, Node 20+. Supports DRY_RUN=1.

* feat(ci): add ai-review tuning config

Calibration threshold (minor), ignore globs for lockfiles and
Payload-generated artifacts, AGENTS.md as review guidelines.

* ci: add /ai-review comment-triggered workflow

Collaborator-gated, review-only pilot. Before first use: add
ANTHROPIC_API_KEY and OPENAI_API_KEY repo secrets; triggers only
once merged to the default branch (develop).

* chore(ci): update ai-review models and pricing

Use claude-opus-4-8 / gpt-5.4; add their $/MTok prices and warn on models with no configured price so their cost is not silently counted as $0.

* feat(ci): guide reviewers on dependency versions

Tell reviewers not to flag or downgrade dependency versions newer than their knowledge cutoff, while still checking cross-package version coherence.

* feat(ci): gather AGENTS.md guidelines per touched dir

Prefer AGENTS.md as the guideline source and collect the root file plus any AGENTS.md in a directory the diff touches, instead of only the first match.

* feat(ci): add SKIP_GUIDELINES env var

When SKIP_GUIDELINES is truthy, run reviewers without loading any guideline files.

* style(ci): reflow codexReview fetch call

* fix(ci): run ai-review from default branch, not PR head

Checking out the PR head SHA ran the PR author's review.mjs and config
with the job's write token and secrets. Check out the default branch
instead; the diff is fetched via the GitHub API by PR number, so PR
changes are still reviewed while reviewer code/config stay trusted.

* chore(ci): drop unavailable /ai-review --fix prompt

The auto-fix feature is not implemented; remove its mention from the
posted review body and the workflow header.

* chore(ci): update ai models used for ai-review worflow

* fix(ci): skip traversal paths when collecting AGENTS.md

PR filenames are untrusted; ignore absolute paths and .. segments.

* docs(ci): document ai-review config replace semantics

Config keys fully replace defaults, lists are not merged; restate the
default ignore patterns in the pilot config so none are lost.

* fix(ci): surface unreviewable files, pack past over-budget ones

Track files GitHub returns without a patch and files over the token
budget; warn on the PR instead of dropping them silently. Use continue,
not break, so small files after a large one still get reviewed.

* fix(ci): sanitize inline comment line anchors

Anchor inline comments only on valid line numbers and list the rest in
the summary body; one bad anchor rejected the whole review. Compute the
non-critical count directly.

* feat(ci): degrade gracefully when a review provider fails

Synthesize with the OpenAI reviewer model when Anthropic is down, fall
back to a local merge if synthesis itself fails, and note the failed
model in the PR comment.

* fix(ci): fail fast on missing env vars

Validate GITHUB_TOKEN, REPO, PR_NUMBER and at least one API key at
startup; a single missing key still degrades to one reviewer.

* fix(ci): unquote scalar config values

Quoted values like min_severity_to_post: 'minor' kept their quotes and
silently fell back to the major threshold.

* fix(ci): try direct JSON parse before brace extraction

Brace-slicing on prose-wrapped output could produce malformed JSON and
silently drop an entire review.

* chore(ci): log which guideline files are used

Warn explicitly when none of the configured files exist instead of
silently reviewing without guidelines.

* chore(ci): drop ineffective prompt caching

The system prompt is far below the minimum cacheable prefix and the
call is one-shot, so cache_control never did anything.

* fix(ci): detect truncated GitHub file listings

Compare the PR's changed_files count with the files API results (capped
at 3,000) and warn on the PR when files are unlisted.

* fix(ci): pack smallest files first, report only packed files

Smallest-first packing fits the most files into the token budget, and
the returned file list (used for guideline collection) now reflects
what the reviewers actually saw.

* fix(ci): anchor inline comments only to reviewed diff lines

One out-of-diff line anchor made GitHub reject the whole review. Parse
hunks per file and demote issues outside them to the summary body; the
fallback flat list now keeps line numbers and suggested fixes.

* fix(ci): neutralize @mentions in posted model output

Model text derives from untrusted PR content; a zero-width space after
@ stops crafted diffs from pinging arbitrary users or teams.

* style(ci): apply prettier formatting, prune redundant comments
2026-07-20 22:26:59 +09:00
2026-05-19 17:57:00 +09:00
2026-04-20 22:24:39 +09:00
2026-05-19 17:57:00 +09:00
2026-06-02 09:13:55 +02:00
2026-06-04 13:56:30 +09:00
2026-06-04 13:56:30 +09:00
2026-04-20 22:24:39 +09:00
2026-07-08 12:55:25 +02:00

logos-co

pnpm + Turborepo monorepo for the Logos website and its content CMS.

  • apps/web — public Next.js 16 site (Tailwind v4, next-intl, static export)
  • apps/cms — Payload CMS 3.x admin (Postgres-backed; edits ship as GitHub PRs)
  • packages/content — content schemas, loaders for content/**, GitHub mutation helpers
  • packages/ui — shared React primitives and SVG icons (<LogosMark />, etc.)
  • packages/tokens — design tokens
  • packages/types — shared types incl. Payload-generated
  • packages/config — shared ESLint / TypeScript / Prettier config
  • content/** — production source of truth (pages, press, circles, builders-hub, site)

Apps are entrypoints only. Shared logic lives in packages. The web app reads content/** at build time and never calls GitHub at request time.

Requirements

Node 24, pnpm 11.1.0.

Quick start

pnpm install
pnpm dev            # web → http://localhost:3000, cms → http://localhost:3001

Payload Admin: http://localhost:3001/admin.

apps/cms requires PAYLOAD_SECRET and DATABASE_URL (Postgres). Copy apps/cms/.env.example to apps/cms/.env and fill it in. See docs/deployment.md for the full env matrix.

Workspace package builds

Apps consume internal packages (@acid-info/logos-ui, @acid-info/logos-content, etc.) through their compiled dist/ outputs declared in each package's exports map. Turborepo's dev task declares dependsOn: ["^build"], so pnpm dev builds upstream packages before starting the app servers.

If a dist/ directory goes missing (e.g. after git clean -fdx or manually removing node_modules) and an app is started directly without going through pnpm dev, you may see errors like:

Module not found: Can't resolve '@acid-info/logos-ui/client'

Rebuild the affected workspace package to fix it:

pnpm --filter @acid-info/logos-ui build

Or run pnpm build once at the repo root to compile every package.

Common scripts

pnpm build           # web static export + cms build
pnpm test            # vitest (apps/web)
pnpm lint            # eslint --max-warnings 0
pnpm check-types     # next typegen + tsc --noEmit
pnpm generate-types  # regenerate packages/types/src/payload.ts from Payload schema

Branch model

  • develop — default branch + staging. CMS-generated content PRs target this
  • master — production (created when production deploys spin up)

Direct pushes to either are blocked by branch protection.

Documentation

S
Description
No description provided
Readme
1.7 GiB
Languages
TypeScript 90.5%
CSS 5.3%
JavaScript 2.3%
HTML 1.5%
Dockerfile 0.2%
Other 0.2%