Skip to content

ci: generate docs/roadmaps/roadmap.yaml instead of committing it (Refs #5897) - #5898

Closed
noahgift wants to merge 6 commits into
mainfrom
ci/roadmap-aggregate-generated
Closed

noahgift wants to merge 6 commits into
mainfrom
ci/roadmap-aggregate-generated

Conversation

@noahgift

Copy link
Copy Markdown
Member

Fixes the stale-aggregate failure of check_roadmap_fragment_required.sh (#5862 twice, #5876). Pick A (aprender-57).

  • roadmap.yaml -> roadmap-base.yaml (frozen); roadmap.yaml is gitignored, built by make roadmap-aggregate (byte-identical to main's today).
  • x86-main generates it before any section, so the vendored sov.roadmap-valid does not go NOT-RUN.
  • fragment_required gets generated-mode rules G1/G2/G3; diff_additive and batch_fold adapted. Self-tests 17/17, 27/27, 21/21.

Gate content: needs non-Sonnet quorum + 2 non-author seats + arbiter sign-off before arming. Single commit.

Open follow-ups (readers not adapted): pmat work add/complete write roadmap.yaml (needs a fragment shim), session_docs_commit.sh, .githooks/pre-commit B4, check_row_pr_write_set.sh, ci_resolve_dirty.sh, check_roadmap_completion_is_cited.sh.

🤖 Generated with Claude Code

…#5897)

The committed aggregate drifted from entries/ after every main merge and
check_roadmap_fragment_required.sh failed (#5862 twice, #5876). Freeze the
base as roadmap-base.yaml, gitignore roadmap.yaml, produce it with
make roadmap-aggregate, and generate it in x86-main before any section so
sov.roadmap-valid never reports NOT-RUN. Guards learn generated mode.

Pmat-Ticket: PMAT-5897

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

@noahgift noahgift left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

REQUEST-CHANGES @2dcb3bf9ce: quorum NOT 3/3. Blocking: (1) fat_driver clones HEAD per section so the generated roadmap.yaml never reaches guard-tree/sov.* (generate inside the sections); (2) guard-tree runs 4 roadmap guards bare, red when file absent (ids_unique/sorted rc2, completion_is_cited/kind_labels rc1); (3) sov.roadmap-valid NOT-RUN rc0; (4) deleting entries/.yaml passes G1-G3 and diff_additive (additive rule lost); (5) deleting/renaming roadmap-base.yaml falls to legacy judge and passes: key generated mode on base OR head; (6) g_dup_fragment is dead, add G3 and migration self-test rows. Receipt handoff/triage-quorum-5898-2dcb3bf9ce.md

…ase-or-head keying (Refs #5897)

Quorum #58982dcb3bf findings: fat_driver clones HEAD per section so the
gitignored roadmap.yaml never reached guard-tree or sov.*; generate it in
setup_workspace. fragment_required: key generated mode on base OR head
carrying the base file, add G4 (a fragment is never deleted) and G3b
(one fragment = one id = its filename), and self-test rows for the dup,
delete, rename and migration cases (23/23).

Pmat-Ticket: PMAT-5897

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

@noahgift noahgift left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

REQUEST-CHANGES @a8c00da50a: earlier 6 blockers verified fixed (self-tests 23/23, 27/27, fat_driver 60/60). New executed blocker: check_roadmap_completion_is_cited.sh is rc 1 at head (287 FAIL docs/roadmaps/roadmap-base.yaml PMAT-0xx) and rc 0 on main: scripts/roadmap_uncited_completion_baseline.txt (1094 rows) is keyed on docs/roadmaps/roadmap.yaml, entries now report under roadmap-base.yaml. guard-tree is required. Re-key the baseline or the path label. Receipt handoff/triage-quorum-5898-a8c00da50a.md

…-base.yaml (Refs #5897)

The guard's universe is every roadmap*.yaml, so the frozen base reported 287
entries under a path the baseline is not keyed on (rc 1 at head, rc 0 on
main). Exclude the base (the aggregate carries every entry) and fail loudly
if the base exists without the generated aggregate. Case-table row added
(36/36).

Pmat-Ticket: PMAT-5897

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

@noahgift noahgift left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

REQUEST-CHANGES @92a9536bce: quorum NOT 3/3. Earlier blockers verified fixed (selftests 23/23, 27/27, 60/60, 36/36; completion guard rc0 generated). Remaining: (1) G4 rename bypass EXECUTED: entries/PMAT-5897.yaml renamed to PMAT-5899.yaml with id edited gives PASS (git diff reports R not D); use --no-renames and require every base id present at head; refuse nested/non-.yaml paths under entries/. (2) additive-diff rule lost in generated mode (diff_additive PASSes early): a fragment can rewrite title/criteria of a base entry; aggregate base side and head side and run the additive check on both. (3) sov roadmap-fragment-parity turns on at merge and wants Pmat-Ticket trailers; recent fragment commits carry none: measure or plan. Receipt handoff/triage-quorum-5898-92a9536bce.md

…nested fragments (Refs #5897)

Quorum #589892a9536: (1) G4 now diffs with --no-renames so a renamed
fragment (id edited) is a deletion, and refuses any path under entries/ that
is not a top-level <ID>.yaml (the generator reads only those). (2)
check_roadmap_diff_additive no longer PASSes early in generated mode: it
aggregates base file + entries/ at both refs and runs the additive check on
the pair, so a fragment rewriting a base entry's title is refused (rows
28-29). Self-tests: 25/25, 29/29.

Pmat-Ticket: PMAT-5897

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

@noahgift noahgift left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

REQUEST-CHANGES @900b8518df: blockers 1 (G4 rename, executed FAIL G4 now) and 2 (additive on aggregates, rewrite refused) verified closed; self-tests 25/25, 29/29, completion ok. Remaining BLOCKING: sov roadmap-fragment-parity arms after merge and wants Pmat-Ticket trailers (0/30 fragment commits carry one) so nearly every fragment PR goes red at ci/gate; re-cut trailer does not help this PR and a follow-up ticket lands nothing before arming. Either add a G5 trailer check with the remedy to check_roadmap_fragment_required.sh in this PR, or land a quorum receipt accepting the reds before arming. Non-blocking: G3b should load YAML (one mapping, id==filename) to stop a second entry in a new fragment; rc capture after 'if out=$(..)' is always 0; setup_workspace generate self-test row. Receipt handoff/triage-quorum-5898-900b8518df.md

…5897)

Quorum #5898900b851 blocker 3: sov roadmap-fragment-parity arms after
the migration and wants a Pmat-Ticket trailer per changed fragment; none
of the recent fragment PRs carry one. G5 fails in our own guard with the
remedy printed (an empty commit carrying the trailer). G3b now loads the
YAML so a second entry cannot hide from the grep. Self-test 27/27.

Pmat-Ticket: PMAT-5897

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

@noahgift noahgift left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

REQUEST-CHANGES @43ca7b900f (opus-5-5-lane; argon lane not run at this delta, brief file failed to write). quorum NOT 3/3.
BLOCKING: G5 greps ^Pmat-Ticket: ID$ on any line, but sov roadmap-fragment-parity (ci/vendor/sovereign-ci.yml:1343) reads git log --format='%(trailers:key=Pmat-Ticket,valueonly)', which only sees the LAST paragraph. This PR's own commits put the trailer in its own paragraph before Co-Authored-By; git's parser returns nothing for them (reproduced: 0 trailers for 900b851..head), so the first fragment PR with that layout passes G5 and goes red at sov. Fix: G5 uses sov's exact command (tr -d ' ', grep -Fx) + a self-test row with trailer in a non-final paragraph that must be refused.
BLOCKING (follows): with git's parser a merge-queue squash may lose trailers; skip G5 on merge_group (PR run already judged) or keep grep-anywhere for merge_group only, with a row.
NON-BLOCKING: shallow pull_request checkout (fetch-depth 1) makes base..HEAD return only the synthetic merge message; judge pull_request.head.sha vs base.sha. Ids are spliced into an ERE; use grep -Fx on extracted values. G3b: assert len(d)==1 and isinstance dict and id==name in python (a file with no id passes as "None.yaml"; names with spaces). Missing self-test rows: wrong-id trailer, setup_workspace generate.
Executed OK: self-test 27/27, additive 29/29, completion/fat_driver/wiring guards rc 0, real range PASS, mutant disabling G5 turns row 18 red.

…p (Refs #5897)

Quorum #589843ca7b9: G5 now uses sov's exact `git log
%(trailers:key=Pmat-Ticket,valueonly)` and fixed-string match, so a trailer
outside the final paragraph is refused (row), as is a wrong-id trailer
(row). merge_group is skipped: the queue composes the squash message.
Self-test 29/29; on this branch the range now passes only with this
commit's trailer block.

Pmat-Ticket: PMAT-5897
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

@noahgift noahgift left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

seat opus-5-5-lane APPROVE @3e876403e9. Parity with sov line 1343 confirmed; self-test 29/29; non-blocking: unset GITHUB_EVENT_NAME in self_test, shallow-checkout note, setup_workspace row.

@noahgift noahgift left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

seat argon-high-lane APPROVE @3e876403e9. Exact sov pipeline, -Fx, merge_group skip safe; same non-blocking carry-forwards.

@noahgift noahgift left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

quorum 3/3 AGREED PASS @3e876403e9 (opus-5-5 + argon-high + executed run by triage-worker). Not armed; arbiter sign-off next. Receipt: handoff/triage-quorum-5898-3e876403e9.md

@noahgift

Copy link
Copy Markdown
Member Author

superseded by #5901 (operator ruling 2026-10-22 06:19Z, relayed by the cop)

@noahgift noahgift closed this Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant