Repository navigation
ci(plan): PLAN-GATE run the plan check as a gate - #1625
Conversation
Drives gates.sh run plan-check on a fixture with a known finding and on a clean plan; red until the gate exists. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gate plan-check (node scripts/plan-check.mjs --offline) joins the lanes precommit, prepush, branchpush, linux and linux_1. Offline keeps GitHub and the events log out of the verdict (listed as NICHT GEPRUEFT). docs/decisions.md is now read by a gate, so lane-plan classifies it heavy. Test-First: scripts/lib/plan-gate.test.mjs::plan-check gate fails on a plan finding and passes on a clean plan Test-First: scripts/lib/plan-gate.test.mjs::plan-check gate runs in the local and the linux CI lanes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 068f9a735d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| # server events log are listed as NICHT GEPRUEFT, never a verdict - a PR's | ||
| # own "Erledigt: #<n>" row would contradict its still-open PR. Selftest: | ||
| # scripts/lib/plan-gate.test.mjs (hq-test). | ||
| "plan-check|precommit,prepush,branchpush,linux,linux_1|.|node scripts/plan-check.mjs --offline" |
There was a problem hiding this comment.
Aktiviere die GitHub-gestützten Planprüfungen im Pflicht-Gate
Mit --offline bleibt prs immer leer, sodass dieses Pflicht-Gate weder Paket-PRs ohne Plan-ID noch Statuswidersprüche oder einen nach mehreren Merges veralteten Plan erkennen kann. Ein Paket-PR kann daher ohne Planzeile beziehungsweise ohne Statusaktualisierung vollständig grün werden, obwohl PLAN-GATE laut eigener Planzeile genau das Veralten verhindern soll; die PR-eigene done / OPEN-Sonderlage sollte gezielt behandelt werden, statt sämtliche GitHub-Prüfungen abzuschalten.
AGENTS.md reference: AGENTS.md:L121-L121
Useful? React with 👍 / 👎.
|
Root auto-queue: head 068f9a7 unchanged since review-ok, all checks green. @Mergifyio queue |
Merge Queue Status
This pull request spent 13 minutes 7 seconds in the queue, including 12 minutes 49 seconds running CI. Required conditions to merge
|
Die Plan-Prüfung läuft jetzt bei jedem Commit, vor jedem Push und in der Linux-Prüfung von GitHub mit. Hat
docs/PLAN.mdeinen Befund (zum Beispiel eine unbekannte Abhängigkeit oder eine Entscheidung ohne Planzeile), wird die Prüfung rot und der PR kann nicht gemergt werden. Was GitHub oder das Server-Ereignislog bräuchte, wird nur als „NICHT GEPRÜFT“ gemeldet und blockiert nichts.Plan-ID: PLAN-GATE
Report
Base:
main@5667eea8(HEAD at start). Head:068f9a73. Diff: 6 files, +61/−9 (≤ 300).What changed
scripts/ci/gates.sh: new gateplan-check=node scripts/plan-check.mjs --offline, lanesprecommit, prepush, branchpush, linux, linux_1. Not inwindows*/release(dev tooling, platform-neutral; the Linux lane proves it). It rides inside the existing requiredgates (linux)job; no YAML, branch-protection or.mergify.ymlchange.scripts/plan-check.mjs: unchanged. The existing--offlineflag already does what the gate needs.scripts/ci/lane-plan.sh: removed the twoNOT_A_READentriesdocs/decisions.md|scripts/plan-check.mjs/…|scripts/lib/plan-model.mjs(their comment said "remove at gate wiring (then heavy)"). A gate now readsdocs/decisions.md, so a decisions-only PR runs the Linux lane instead of being green by absence.docs/PLAN.mdwas already heavy (HEAVY_DOCS);docs/plan/v2.0/plan.mdis heavy viainclude_str!.scripts/test-lane-plan.sh:docs/decisions.mdmoved fromreal_lighttoreal_heavy(comment updated);.pa/report_ci-01.md,KNOWN_ISSUES.md,docs/ci-lokal.mdremain the light canaries.scripts/lib/plan-gate.test.mjs(new, runs in gatehq-test): copiesgates.sh+plan-check.mjs+ its two libs into a temp tree and runs the real runnergates.sh run plan-checkon a PLAN fixture with a known finding (unknown-dependency, expect exit 1) and on a clean one (expect exit 0,NICHT GEPRÜFTline names GitHub/--offlineand the events log), with emptyGH_TOKEN/GITHUB_TOKEN. Second test:gates.sh --list <lane>containsplan-checkfor all five lanes.docs/ci-lokal.md: lane table names the gate.docs/PLAN.md: row PLAN-GATE →Erledigt: #1625 …; one decision row next to the 16.10. decisions (quota up to 99 % for Claude only, server Claude Code 2.1.287 → 2.1.301; source Root-Chat 16.10.). Written as "Nutzer", not by name: the repo is public and PLAN.md uses no personal names anywhere. The DS-T-01/DS-T-03 rows were not touched.Offline / no-token behaviour
--offlinenever callsgh; GitHub PR state, plan-age comparison and running jobs (no--events) are printed asNICHT GEPRÜFT: …and do not affect the exit code (no--strict). Why offline even when a token exists: online, a PR's own rowErledigt: #<n>contradicts its still-open PR (status-contradicts-github), andpr-without-plan-rowdepends on other people's open PRs – the gate would be non-deterministic per commit. Without git history (fixture) the last-plan-commit lookup is also listed as not checked. Onlinenpm run plan:checkstays the report-only tool.Evidence
node --test scripts/lib/plan-gate.test.mjsat4507c1ad(test only, no gate)Unbekanntes Gate: plan-check)BASE_SHA=$(git merge-base origin/main HEAD) HEAD_SHA=$(git rev-parse HEAD) bash scripts/ci/red-first.shat5cb45b3anode --test scripts/lib/plan-gate.test.mjs scripts/lib/plan-model.test.mjsnpm run plan:check -- --offlineat head (= the gate)Plan-Prüfung: 0 Befunde)npm run plan:checkonline at headPLAN-GATE #1625: done / GitHub OPEN– the own row, by design until mergebash scripts/ci/gates.sh --listplan-check precommit,prepush,branchpush,linux,linux_1bash scripts/test-lane-plan.sh,bash scripts/ci/ci-shape.sh,bash scripts/test-ci-shape.sh,bash scripts/test-precommit-lane.sh,bash scripts/test-prepush-lane.sh,bash scripts/test-gates.sh,node --test scripts/ci/linux-split.test.mjsbash scripts/ci/gates.sh lane prepushat5cb45b3aand at068f9a73plan-checkgreen 1 s)npm run dev:start-check--usagefile)git ls-remote origin claude/plan-gate068f9a735d9ab9f262facc1ff154b88eb85ee901Red-first trailers (commit
5cb45b3a):Test-First: scripts/lib/plan-gate.test.mjs::plan-check gate fails on a plan finding and passes on a clean planTest-First: scripts/lib/plan-gate.test.mjs::plan-check gate runs in the local and the linux CI lanesNICHT ABGEDECKT
#[cfg(windows)]tests and the Windows arms of clippy did not run (Linux server); the Windows lane runs in the merge queue.plan-checkitself is not in a Windows lane;plan-gate.test.mjsruns only inhq-test(not on Windows).linuxlane itself (hq-visual, fe-build, e2e, workflow gates) did not run locally; CI runs it on this PR.decision-without-plan-rowuses the wall clock (14-day window overdocs/decisions.mdheadings): a future-dated heading could turn a later run red without a commit. Not changed (non-goal); worth noting for Root.Review
Review: ausstehend (Stufe A-equivalent:
scripts/ci/is user area). Two reviewers from two different non-Anthropic families; Root commissions. No self-review counted.🤖 Generated with Claude Code on the ProjectA server worker
Root acceptance (16.10.2026 ~11:15 MESZ)
scripts/ci/gates.sh:159gate inprecommitblocks every local commit if main ever has a plan finding--offline(deterministic, no GitHub/time input) and the same gate keeps main at 0 findings, so main cannot drift through the queue; escape-hatch doc = follow-uplinuxandlinux_1docs/decisions.mdnow heavy in lane-planplan-gate.test.mjs:16temp dirs not cleaned