Skip to content

fix(roadmap): umbrella states, Plan-ID line, rule-6 seams, unresolved deps (PLAN-AUTO-1b) - #1598

Merged
mergify[bot] merged 11 commits into
mainfrom
claude/plan-auto-1b-c
Oct 16, 2026
Merged

mergify[bot] merged 11 commits into
mainfrom
claude/plan-auto-1b-c

Conversation

@Cuarroc

@Cuarroc Cuarroc commented Oct 16, 2026 •

Copy link
Copy Markdown
Owner

Die Roadmap-Daten zeigen jetzt zuverlässiger, welche Pakete wirklich fertig sind: Ein einzelner gemergter Teil-PR schließt ein Paket nicht mehr ab, solange der PLAN es noch als offen führt. Außerdem sind nicht auflösbare Abhängigkeiten im Ergebnis sichtbar (neues Feld unresolvedDeps), Beschreibungstabellen überschreiben die definierende Planzeile nicht mehr, und die Naht-Erkennung meldet nur noch die vier Nähte aus Regel 6. Du musst dafür nichts tun; der PR ist ein Entwurf und wartet auf die unabhängige Prüfung.

Report

Plan-ID: PLAN-AUTO-1b-c

Package: PLAN-AUTO-1b (Nachläufer aus #1580) · Operator: UMSETZEN · Tier: B · Base: main @ c7a43fbd
Scope: scripts/lib/roadmap-data.mjs, scripts/lib/roadmap-data.test.mjs only. No plan-model.mjs, no PLAN/docs, no renderer, no scripts/ci/, no dependency, no seam. 114 diff lines (104 added, 10 deleted) against the 300-line cap.

Finding table

ID Finding Disposition
R1580-B1 Umbrella Plan-ID turns "Erledigt" after its first sub-PR merged Fixed in 4243a75a, refined in 70f04d4e: a merged PR finishes a package unless the PLAN row claims open work (planned, in progress, in review, blocked). The forecast counts finished packages only.
R1580-B2 \s* after Plan-ID: spans a newline Fixed in 4243a75a: [ \t]*, the value must start on the marker's own line.
R1580-B3 Seam heuristic over-matches Fixed in 4243a75a, 70f04d4e: only api.rs, main.rs, store.rs, store/, bin/pa.rs (bare or under src-tauri/src/) count; words like "Naht"/"seam" and other directories in front (queue/main.rs, tools/x/store/) do not.
R1580-B4 Unresolved dependency IDs invisible Fixed in 4243a75a: additive package field unresolvedDeps; deps unchanged.
R1580-C1 File-write branch of scripts/roadmap-data.mjs untested Closed in 7eacc844 (test only): writes and refuses tracked, unignored and symlinked output paths in a throwaway repository.
REFS-07 Description rows override the defining row (last wins) Fixed in 4243a75a: a row without status never replaces or outlives a defining row (also not when the defining row sits in a historical section); among defining rows the last still wins.

No finding is open.

Evidence

Command Exit / observation
node --test scripts/lib/roadmap-data.test.mjs with the base roadmap-data.mjs and the tests of e61519fa (red) 1; 19 tests, 5 failing, one per finding B1, B2, B3, B4, REFS-07
node --test scripts/lib/roadmap-data.test.mjs scripts/lib/plan-model.test.mjs at head 70f04d4e 0; 34 tests, 0 failing
bash scripts/ci/red-first.sh 0
bash scripts/ci/gates.sh lane prepush in this worktree, HEAD 70f04d4e 0; 356 s
bash scripts/ci/secret-scan.sh before each commit 0 (the precommit lane also ran it)
git push -u origin claude/plan-auto-1b-c, then git ls-remote push 0; remote = 70f04d4e
Mutation checks (guard removed once, restored) tracked, ignore and symlink guard each turn the C1 test red; dropping p.finished in the forecast turns the B1 test red
node scripts/roadmap-data.mjs --stdout old vs new code, same origin/main 23d0c91e, 2026-10-15 ~23:55Z both 0. 371 packages both. No field removed; only unresolvedDeps added; head identical.

Live comparison (old → new): finished 236 → 224, "Erledigt" 163 → 151, seam 19 → 15, unresolvedDeps non-empty 0 (the unknown IDs seen earlier on the previous main are gone).

  • The 12 packages that lose "Erledigt" all have a merged PR but a PLAN row that still says open work: DR-03, DR-08, HQ2-05b, W5-02b3, W1-03f, M5-02, ARCH-D1, ARCH-D2, ARCH-D4, ARCH-D7, ARCH-D8, PLAN-CLEAN-1. Which are umbrellas and which are stale PLAN rows (e.g. "offen, nach v1.5.1") was not checked per package; the roadmap now shows them as PLAN says, not as GitHub implies.
  • The 4 seams that drop are over-matches: DR-04B-FU (tools/…/store/delivery.mjs) and DF-05/DF-10/DF-16 (lane labels such as CORE/SEAM). 15 real seams stay.
  • REFS-07 changes DR-07c/d/e1/e2 and ARCH-11: status, owner and title now come from the defining row instead of the later description table.

Decisions and judgment calls (for the reviewer)

  • Unknown status stays "Erledigt". The literal order says "PLAN row not done". A row without any status (description-only rows such as ARCH-02, P0..P3) makes no claim; blocking it would have turned about a dozen merged packages into pending work in the first live run. Only an open claim blocks. Say so if the stricter reading is wanted.
  • Existing tests: three existing tests got a done PLAN row in their merged-PR fixtures (merged wins over error and human signals, identity matching is exact and explicit Plan-ID takes priority, forecast needs ten distinct recent merges and excludes seam paths). Their assertions are unchanged; the old fixtures were planned rows with a merged PR, which the new contract no longer calls finished.
  • Trailers: e61519fa and 7eacc844 carry one Test-First: line per new test. The fix commits carry Regression-For: pointing at e61519fa. A test name with a comma is rejected by the hook, so the C1 test has none.
  • Renderer contract: existing fields are stable; lane membership can change for the 12 packages above (a merged-but-open package is no longer finished, so it can appear in the "next"/"later" lanes).

NICHT ABGEDECKT

  • Linux does not compile the #[cfg(windows)] tests or the Windows clippy arms; the Windows lane runs in the merge queue.
  • Umbrella detection relies on the PLAN row. A stale open row hides a finished package, a stale or missing row shows an unfinished umbrella as done; fixing PLAN rows belongs to PLAN-CLEAN. docs/PLAN.md was not edited in the first version (superseded: the PLAN rows PLAN-AUTO-1b-c and PLAN-AUTO-1b are edited in this PR, see fix rounds 1 and 2).
  • Seam detection reads the package title only. A title that names no seam file is never flagged, however the package is implemented.
  • The live comparison is one snapshot (single origin/main commit, no repeat). The renderer job (roadmap-page*) was not run against the new output.
  • gh behaviour is covered with fake runners only; the C1 tests use real git in a temporary repository, no network.

Review

Review: ausstehend (Stufe B). Root commissions the independent non-Anthropic reviewer; this worker does not review or approve itself. Author family: Anthropic.

Fix round 1 (NACHBESSERN)

Source: independent review of head 70f04d4e by Codex gpt-6.1-sol (OpenAI), verdict REQUEST CHANGES. Plan-ID is now PLAN-AUTO-1b-c (see R1598-P1). This round supersedes two statements above: the scope line (now also docs/PLAN.md, one row) and the NICHT-ABGEDECKT note that docs/PLAN.md was not edited.

New head: f206ba0e0d7b0bab0efcc0a0683f6e1c49a92c80 (verified with git ls-remote). Size against main: 117 added, 10 deleted = 127 lines, under the 300-line cap; no overrun.

Disposition table

ID Source Severity Finding Disposition
R1598-B1 Codex gpt-6.1-sol medium A parked umbrella ("Verschoben: Rest nach v2.0; Teil A erledigt") turns Erledigt when a sub-PR merged, because claimsOpen omitted parked Accepted. Red test b517141c (a parked umbrella with a merged sub-PR stays unfinished, via Markdown input, asserts state, finished, parked, PR and that the package sits in an open lane). Fixed in 68e71cb7: parked is an open claim. The documented exception for status-less description rows is unchanged.
R1598-P1 Codex gpt-6.1-sol medium No own PLAN row for this package; PR text named a Plan-ID without a row Accepted. origin/main merged first (ee80dc68, no conflict; main now carries the PLAN-AUTO-1b umbrella row). Row PLAN-AUTO-1b-c added in 9695e478 as proposed, first with status In Prüfung: #1598; the alias part #1594 (PLAN-AUTO-1b-a) stays separate. PR text Plan-ID line changed to PLAN-AUTO-1b-c. The first version left the umbrella row PLAN-AUTO-1b and the post-merge status to a later change; the reviewer rejected that (partial fix), see R1598-P1 and R1598-P2 in fix round 2.
R1598-B2 Codex gpt-6.1-sol low Seam check accepts appended extensions: api.rs.bak, src-tauri/src/main.rs.old, store.rs.md resolve to seam=true Accepted. Same red test commit b517141c (appended extensions or name parts after a seam file are not seams, 4 negative and 4 positive titles). Fixed in 68e71cb7, refined in f206ba0e: after .rs neither a word character nor .x / /x may follow; sentence punctuation, :12, ) and a hyphen (api.rs-Routen) still match, because missing a real seam is the unsafe side of the forecast. No live PLAN title is affected (grep of docs/PLAN.md for seam names followed by -, .x or /x: no hit).

Evidence

Command Exit / observation
npm run dev:start-check 0; 10.4 GB free, 0 cargo builds, no usage file (limit not checked)
node --test scripts/lib/roadmap-data.test.mjs with the two new tests on the unfixed code (before 68e71cb7) 1; exactly the two new tests fail (['Erledigt', true, true, 1] instead of [null, false, true, 1]; five extension titles matched as seams)
node --test scripts/lib/roadmap-data.test.mjs scripts/lib/plan-model.test.mjs at f206ba0e 0; 36 tests, 36 pass, 0 fail, 0 skipped
npm run plan:check at 9695e478 1; 30 findings that already exist on main (duplicate IDs, v2 aliases, PLAN-CLEAN rows vs merged #1591/#1592); none mentions PLAN-AUTO-1b-c or #1598
bash scripts/ci/red-first.sh at f206ba0e 0; Regression-For references resolve to ancestors
bash scripts/ci/secret-scan.sh before each commit 0
bash scripts/ci/gates.sh lane prepush in this worktree, HEAD f206ba0e 0; 295 s (earlier run at 9695e478: 0; 462 s)
git push -u origin claude/plan-auto-1b-c, then git ls-remote push 0; remote = f206ba0e0d7b0bab0efcc0a0683f6e1c49a92c80

Observation: the first precommit run for b517141c failed in an unrelated gate (tools/denkraum/server-security.test.mjs, read ECONNRESET, while many workers shared the server). The same file alone: exit 0, 7 of 7 pass. The retry of the same commit (hooks active, no bypass) passed.

NICHT ABGEDECKT (additions)

  • Linux does not compile the #[cfg(windows)] tests or the Windows clippy arms; the Windows lane runs in the merge queue.
  • The live old-vs-new comparison against real gh data was not repeated for this round; the reviewer found no parked package in real data that hits B1, so the effect is covered by the input case only.
  • (Superseded by fix round 2: both rows now state the post-merge status in this PR; no follow-up for them.)
  • The renderer job (roadmap-page*) was not run against the output.

Review

Review: ausstehend (Stufe B), Root commissions the delta review (one outside reviewer, not Anthropic). This worker does not review, label, mark ready or merge.

Fix round 2 (NACHBESSERN)

Source: independent delta review of head f206ba0e by Codex gpt-6.1-sol (OpenAI), verdict APPROVE WITH CONDITIONS (conditions: R1598-P1 and R1598-P2 fixed in this PR before review-ok, report aligned). Both findings are docs-only (docs/PLAN.md, two table cells); no code and no test changed in this round.

New head: 3811dd2ea8163ceb70587d342fe93564f4fc48e7 (verified with git ls-remote): fix commit 18b0ab58, then the merge of origin/main e21710de (merge commit 3811dd2e). Size against main: 118 added, 11 deleted = 129 lines in 3 files, under the 300-line cap; no overrun. The fix round itself changes two lines of docs/PLAN.md.

Disposition table

ID Source Severity Finding Disposition
R1598-P1 Codex gpt-6.1-sol medium Own row PLAN-AUTO-1b-c read In Prüfung: #1598; AGENTS.md:121 wants the state after merge Accepted, fixed in 18b0ab58: the status cell now reads Erledigt mit Merge von PR #1598; Alias-Teil #1594 (PLAN-AUTO-1b-a) bleibt separat. No merge SHA is anticipated. The statements in this report that moved the status update to a later change are corrected above.
R1598-P2 Codex gpt-6.1-sol medium Umbrella row PLAN-AUTO-1b stayed Geplant: nicht disponiert although this PR does B1–B4/C1 and REFS-07; #1594 has since merged Accepted, fixed in 18b0ab58 and 3811dd2e: status cell is Teilweise: Alias-Auflösung (PLAN-AUTO-1b-a, #1594) erledigt; Roadmap-Befunde B1–B4/C1 und REFS-07 (PLAN-AUTO-1b-c) erledigt mit Merge von #1598; Rest offen: Grenzen aus #1564 (PLAN-AUTO-1b-b). Main's merged alias part is kept.

Merge of origin/main: my row edit and main's rewrite of the PLAN-AUTO-1b cell (from #1594) touch the same line, so git reported a real conflict (git merge-tree, exit 1, only docs/PLAN.md). Merge commit, no rebase, no force-push. Resolution keeps main's alias text inside the new cell; git diff origin/main -- docs/PLAN.md shows exactly the two rows above. No other row, the user section or the decision inbox mentions #1598 or PLAN-AUTO-1b-c (grep); the rows that only reference PLAN-AUTO-1b (PLAN-AUTO-1, PLAN-GATE) stay correct because its rest (PLAN-AUTO-1b-b) is still open.

Evidence

Command Exit / observation
git rev-parse HEAD at start f206ba0e0d7b0bab0efcc0a0683f6e1c49a92c80, tree clean
node --test scripts/lib/roadmap-data.test.mjs scripts/lib/plan-model.test.mjs at 3811dd2e 0; 38 tests, 38 pass, 0 fail, 0 skipped (36 before plus 2 from main)
npm run plan:check at f206ba0e (before) 1; 35 findings, all already on main
npm run plan:check at 3811dd2e (after) 1; 13 findings (the alias findings are gone with #1594). One of them is mine and transient: docs/PLAN.md:1500 status-contradicts-github PLAN-AUTO-1b-c #1598: done / GitHub OPEN. It is the direct result of writing the post-merge state (AGENTS.md:121) and disappears when #1598 merges. The other 12 are not caused by these rows.
npm run dev:start-check first 1 (two cargo builds), waited, then 0 (7.6 GB free, 1 cargo build); no usage file, limit not checked
bash scripts/ci/secret-scan.sh before each commit 0
bash scripts/ci/gates.sh lane prepush in this worktree, HEAD 3811dd2e first run 1: gates up to lint green, then fe-test red on one test, src/screens/leitstand/perf/renderBudget.test.tsx ("Test timed out in 5000ms", 190 files, 1457 of 1458 tests passed, server under load). That test alone: npx vitest run … exit 0 (6.7 s). Resumed with --from fe-test: exit 0 (fe-test, hq-test, denkraum, clippy, rust-suite green, 392 s).
git push -u origin claude/plan-auto-1b-c (pre-push hook runs the full prepush lane again, hooks active, no bypass) push 0; hook lane green, 357 s; git ls-remote = 3811dd2ea8163ceb70587d342fe93564f4fc48e7

The renderBudget timeout is unrelated to this PR (no frontend file changed) and was not masked: it was rerun alone, the lane was resumed at that gate, and the push hook then ran the whole lane green.

NICHT ABGEDECKT (additions)

  • Linux does not compile the #[cfg(windows)] tests or the Windows clippy arms; the Windows lane runs in the merge queue.
  • bash scripts/ci/red-first.sh was not run on its own in this round (delta is No-Test: plan status row, docs only; the red-first-plan gate inside prepush is green).
  • The effect of the new PLAN text on buildRoadmap (state Erledigt, finished true once fix(roadmap): umbrella states, Plan-ID line, rule-6 seams, unresolved deps (PLAN-AUTO-1b) #1598 is merged) was not simulated here; the reviewer's simulation showed the old text gave state=null, finished=false.
  • The renderer job (roadmap-page*) was not run against the output.

Review

Review: ausstehend. The delta is docs-only (tier C); per Root's order Root verifies it, because the outside reviewer is blocked until 22.10. Root commissions; this worker does not review, label, mark ready or merge. Author family: Anthropic.

🤖 Generated with Claude Code on the ProjectA server worker

Second review (Root acceptance, 16.10.2026 ~04:05 MESZ)

Reviewer Family Head Verdict Findings / disposition
Codex gpt-6.1-sol (server) OpenAI 3811dd2 APPROVE R1598-P1/P2/B1/B2 closed (see above)
OpenRouter google/gemini-3.8-flash Google 3811dd2 no verdict (output truncated at the token limit) not counted; its unfinished note "SEAM_PATH lost /i": rejected — rule-6 seams are exact lowercase paths; the old case-insensitive word match (Naht, seam) was the false-positive source this PR removes
OpenRouter moonshotai/kimi-k3 (rerun) Moonshot 3811dd2 (full PR diff) APPROVE R1598-K1 (low, roadmap-data.mjs:77 mergedAt set for unfinished umbrellas): follow-up. R1598-K2 (medium, historisch-only IDs could show as unresolved deps): not reproduced — buildRoadmap on the real docs/PLAN.md gives 0 packages with unresolved deps on main and on this head; follow-up guard only. R1598-K3 (low, two extra umbrella test cases): follow-up.
Tier B: Codex + Kimi = two families other than the author's (Anthropic). Root accepts head 3811dd2.

Cuarroc and others added 11 commits October 16, 2026 01:45
…ate-row fixes

Five failing regression tests for the open #1580 review findings
R1580-B1..B4 and REFS-07, through the public buildRoadmap interface with
literal inputs. Existing merged-PR fixtures now carry a done PLAN row, as
the new contract requires; their assertions are unchanged.

Plan-ID: PLAN-AUTO-1b

Test-First: scripts/lib/roadmap-data.test.mjs::a merged sub-PR does not finish a package whose PLAN row is not done
Test-First: scripts/lib/roadmap-data.test.mjs::a Plan-ID marker does not borrow the next line
Test-First: scripts/lib/roadmap-data.test.mjs::only the four rule-6 seams count as seams
Test-First: scripts/lib/roadmap-data.test.mjs::unresolved dependency IDs are exposed additively
Test-First: scripts/lib/roadmap-data.test.mjs::description tables never override the defining PLAN row

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… expose unresolved deps

R1580-B1: a merged PR finishes a package only when its PLAN row is done or
dropped; the forecast counts finished packages only.
R1580-B2: the Plan-ID value must start on the marker's own line.
R1580-B3: only the four rule-6 seam paths mark a package as seam.
R1580-B4: additive package field unresolvedDeps lists dependency IDs
without a visible row; deps stays unchanged.
REFS-07: description-only rows no longer override or outlive the defining
row; among defining rows the last still wins.

Plan-ID: PLAN-AUTO-1b

Regression-For: e61519f

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
R1580-C1: run the real write path in a throwaway repository, then check the
tracked, unignored and symlinked refusals. Each guard was removed once to
confirm that the matching case fails.

Plan-ID: PLAN-AUTO-1b

Test-First: scripts/lib/roadmap-data.test.mjs::CLI writes the ignored output file and prints only the head
Test-First: scripts/lib/roadmap-data.test.mjs::CLI refuses tracked or unignored or symlinked output paths without writing

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…names still count

Live check against origin/main showed two over-corrections. Description-only
rows without any status (ARCH-02, P0 ...) would turn pending after their PR
merged, although PLAN makes no claim about them; only planned, in-progress,
in-review and blocked rows now keep a merged package open. The strict
full-path seam pattern missed real hits such as "aus api.rs"; bare seam
names count again, but a directory in front (tools/x/store/, queue/main.rs)
does not.

Plan-ID: PLAN-AUTO-1b

Regression-For: e61519f

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…in, R1598-P1)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…extensions

R1598-B1: a parked PLAN row with remaining work must not turn Erledigt
when a sub-PR merged. R1598-B2: api.rs.bak, main.rs.old, store.rs.md and
similar are not the rule-6 seams.

Test-First: scripts/lib/roadmap-data.test.mjs::a parked umbrella with a merged sub-PR stays unfinished
Test-First: scripts/lib/roadmap-data.test.mjs::appended extensions or name parts after a seam file are not seams

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…pended extensions

R1598-B1: a parked PLAN row ("Verschoben: Rest nach v2.0; Teil A erledigt")
is unfinished work, so a merged sub-PR no longer turns it Erledigt.
R1598-B2: api.rs.bak, main.rs.old, store.rs.md and api.rs-style are not the
rule-6 seams; sentence punctuation after the file name still matches.

Plan-ID: PLAN-AUTO-1b-c

Regression-For: b517141

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The package now has its own PLAN row, In Prüfung: #1598; the alias part
(#1594, PLAN-AUTO-1b-a) stays separate. plan:check reports no finding for
the new row.

Plan-ID: PLAN-AUTO-1b-c

No-Test: documentation-only plan row; plan:check shows no finding mentioning the row or PR

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…m (R1598-B2)

api.rs-Routen names the seam file; only an extension or path part after
.rs (api.rs.bak, api.rs/x) makes it another file. A missed seam is the
unsafe side for the forecast, so the lookahead no longer rejects "-".

Plan-ID: PLAN-AUTO-1b-c

Regression-For: b517141

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…erge (R1598-P1, R1598-P2)

PLAN-AUTO-1b-c now reads 'Erledigt mit Merge von PR #1598' instead of
'In Pruefung'. The umbrella row PLAN-AUTO-1b becomes 'Teilweise': alias
part (#1594) done, roadmap findings B1-B4/C1 and REFS-07 done with #1598,
open rest is the limits from #1564 (PLAN-AUTO-1b-b).

No-Test: plan status row

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…d on main, R1598-P2)

# Conflicts:
#	docs/PLAN.md
@Cuarroc
Cuarroc marked this pull request as ready for review October 16, 2026 01:49
@Cuarroc Cuarroc added the review-ok Pipeline: review disposition complete, no open high finding label Oct 16, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-16T01:54:15.095942Z 3811dd2 Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3811dd2ea8

ℹ️ 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".

const version = (s) => /^v?\d+\.\d+\.\d+$/.test(s || "") ? `v${s.replace(/^v/, "")}` : null;
const compareVersions = (a, b) => a.localeCompare(b, "en", { numeric: true });
const label = (pr, name) => pr?.labels?.some(l => (l.name || l) === name);
const claimsOpen = (p) => ["planned", "in_progress", "in_review", "blocked", "parked"].includes(p.status);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep unrecognized nonempty statuses open

When a defining row has a nonempty status that normalizeStatus cannot parse—for example, the current Z2-RECHTE-P1 row says “Geschnitten, noch nicht gestartet…”—claimsOpen returns false. Any merged sub-PR matched to that row is therefore reported as Erledigt and finished, recreating the umbrella-state regression even though the PLAN still describes open work. Treat a nonempty statusRaw with status unknown as open/fail-closed, and reserve the merged fallback for description rows whose statusRaw is empty.

AGENTS.md reference: AGENTS.md:L121-L121

Useful? React with 👍 / 👎.

// A description-only row never replaces (or outlives) the row that defines the package; the last defining row wins.
if (!/historisch|erledigt/i.test(p.section || "") && (defining(p) || !defined.has(p.id))) byId.set(p.id, p);
}
const rows = [...byId.values()], known = new Set(byId.keys());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Resolve dependencies against historical definitions

When a live package depends on an ID whose defining row is in a historisch or erledigt section, that row is intentionally omitted from byId, so building known from byId.keys() makes the new unresolvedDeps field report a valid PLAN ID as unresolved. parsePlan and checkPlan still treat such historical definitions as known, so the roadmap contradicts the validator and would surface a false missing-dependency warning. Build the resolution set from all defining model packages while continuing to omit historical packages from the displayed rows.

Useful? React with 👍 / 👎.

@Cuarroc

Cuarroc commented Oct 16, 2026

Copy link
Copy Markdown
Owner Author

Root: head 3811dd2 accepted (Codex + Kimi K3 APPROVE on this head), required checks pass. @Mergifyio queue

@mergify mergify Bot added the queued label Oct 16, 2026
@mergify
mergify Bot merged commit c8b613e into main Oct 16, 2026
25 checks passed
@mergify

mergify Bot commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

This pull request spent 13 minutes 15 seconds in the queue, including 12 minutes 33 seconds running CI.

Required conditions to merge
  • check-success = gates (linux)
  • check-success = gates (windows)
  • check-success = red-first
  • github-review-approved [🛡 GitHub repository ruleset rule main-pr-required-checks]
  • label != do-not-merge
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/gates (linux)
    • check-neutral = @github-actions/gates (linux)
    • check-skipped = @github-actions/gates (linux)
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/gates (windows)
    • check-neutral = @github-actions/gates (windows)
    • check-skipped = @github-actions/gates (windows)
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/red-first
    • check-neutral = @github-actions/red-first
    • check-skipped = @github-actions/red-first
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-neutral = @mergify/Mergify Merge Protections
    • check-skipped = @mergify/Mergify Merge Protections
    • check-success = @mergify/Mergify Merge Protections

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review-ok Pipeline: review disposition complete, no open high finding

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant