Repository navigation
Fix fleet-red drift: derive §2A census from .dag authority (structured rows) - #5671
Merged
Merged
Conversation
…tured rows) The fleet-wide main-red on generated_artifact_drift_gate for docs/plans/dsl-v2-defork-audit.md: #5652 hand-added the "## 2A executed Q2 confirmation" 9-concept census to the .md, but the #5655 fan-out re-authored dsl_v2_defork_audit.dag WITHOUT §2A — lossy. The committed .md no longer == regenerate(.dag), so the drift gate fails closed fleet-wide (a stale-green: two PRs individually green, RED on the merged tree). Fix-forward (option a, content-preserving): restore §2A INTO the .dag authority as STRUCTURED ROWS — a TableBlock (one row(cells:[...]) per concept, all 9: algebra/nat/effects/float/integer/verification/logic/ coercion/node) plus an ol() for the two scope refinements, matching the 3 existing census TableBlocks in this generator. The markdown table is now genuinely DERIVED from data, not a prose blob — editing a cell can no longer re-drift the table (§3 single authority). Dual-oracle note: the regenerated .md is byte-identical to current-main §2A EXCEPT two whitespace classes the std.markdown serializer owns — table separator (|---| → | --- |) and ordered-list continuation indent (3-space → lazy/flush). Both render identically in GFM; every word, number, and Q2 disposition is preserved. This whitespace-only deviation is the unavoidable (and correct) consequence of making the table data-derived rather than reproducing hand-authored prose — structure (parent's authority-quality oracle) is fundamentally incompatible with a literal byte-match to the hand-stuffed bytes, and structure wins. Verified by execution: drift gate (main) ⇒ ExitSuccess; full CI floor (src/v2 + dsl, both source roots) ⇒ FLOOR_EXIT=0, including generated_artifact_drift_gate_passes. Decoupled from #5651 (the A1 re-land); unblocks the fleet-red and #5650 (cool-boar, same drift). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fleet-red unblock (decoupled from #5651)
The fleet-wide main-red on
generated_artifact_drift_gatefordocs/plans/dsl-v2-defork-audit.md: #5652 hand-added the## 2A executed Q2 confirmation9-concept census to the .md, but the #5655 fan-out re-authoreddsl_v2_defork_audit.dagwithout §2A — lossy. Committed.md≠regenerate(.dag), so the drift gate fails closed fleet-wide (a stale-green: #5652 and #5655 each individually green, RED on the merged tree). Unblocks the fleet and #5650 (cool-boar hit the same drift).Fix — option (a), content-preserving: §2A restored INTO the .dag authority as STRUCTURED ROWS
TableBlockwith onerow(cells: [...])per concept (all 9: algebra / nat / effects / float / integer / verification / logic / coercion / node), plus anol()for the two scope refinements — matching the 3 existing censusTableBlocks in this generator. The markdown table is now genuinely derived from data, not a prose blob; editing a cell can no longer re-drift the table (§3 single authority). Not the interim-prose escape hatch.BUILD-TO-SPEC (bold-otter batch-B) — all met
h2(text:)in the body list; "supersedes theverificationcensus row" wording verbatim. Placement = current-main's byte-position (before §0) where #2 resolver-wall DESIGN (model-only): type-name-collision fail-closed guard #5652 put it — the diff is pure-whitespace with no content-move hunks, proving position match. (Note: bold-otter's "after §2/before §3" mismodels main's actual layout; relocating would itself be a large content-drift vs main and fail oracle 1.)cell/row(cells:)helpers — norow(texts:)map-over-param. ✓\{/\},\",\\|for the literal\|in the nat row; unicode (§ — → ↔) raw. ✓//comments. ✓HasTriggeruntouched. ✓Dual-oracle resolution
cell/rowdata)..mdis word-for-word identical to current-main §2A (comm -23andcomm -13on sorted word-sets both empty — zero words lost, zero added). It differs ONLY in two whitespace classes thestd.markdownserializer owns: table separator (|---|→| --- |) and ordered-list continuation indent (3-space → lazy/flush). Both render identically in GFM. This whitespace-only deviation is the unavoidable, correct consequence of making the table data-derived rather than reproducing hand-stuffed prose — structure and a literal byte-match to hand-authored bytes are mutually exclusive here, and structure wins.Verified by execution
generated_artifact_drift_gate(main) ⇒ExitSuccess--source-root dsl --source-root src/v2,gunbc_ci_floor_batches) ⇒ FLOOR_EXIT=0, incl.generated_artifact_drift_gate_passesPASSresolver-type-name-collision-wall.mdexistsdsl/gunbc/plans/dsl_v2_defork_audit.dag(+§2A rows) anddocs/plans/dsl-v2-defork-audit.md(regenerated)🤖 Generated with Claude Code