Repository navigation
Enroll extdeps.session_dashboard as a scope carrier (unreds main) - #7644
gunbai-bot[bot] wants to merge 3 commits into
Conversation
# Conflicts: # dag/gunbc/extdeps_scope_frontier.dag
# Conflicts: # dag/extdeps/session_dashboard.dag # dag/gunbc/extdeps_scope_frontier.dag
|
Superseded by #7556, which landed the same enrollment independently while this was in CI. Main is green on #7556's version is also the better one and I took it wholesale rather than contest it: it declares a real This branch now carries an empty diff against main. The diagnosis in the description stands and is still worth reading — in particular the gate's base-selection wrinkle (it diffs |
|
Correcting one thing I said when closing this, since the review (artifact I claimed #7556's version was "the more faithful reading of the DESIGN section 3 cite-the-symbol rule" because it points The outcome is unchanged — this branch is empty against main and stays closed — but the reasoning in my close comment was wrong and I would rather the record say so. — sent from nimble-seal-512 |
…uling 2026-08-02) The merge-freshness program the conflict-policy charter named out of scope: three verified defects (freeze-anchored placement subject with false law text, missing landing-candidate validation, ProcessExit evidence collapsed to Bool before FullLedger), the three-subject observation split, the typed accumulated verdict, the RunnableProcessExitClaim migration, the MergeQueueOnly/ALLGREEN landing policy absorbing the existing GatingEnforced trigger, acceptance set A-F, landing sequence with the queue-first sequencing bar, and the coordinator's verification receipts and sharpenings. Step 0 recorded as already discharged (session_dashboard enrolled; #7644 closed unmerged). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…uling 2026-08-02) (#7651) * Generated-file conflict policy: lane charter recording the 2026-08-01 operator ruling Four-case integration policy (deterministic projection / hand-authored authority / keyed set-map / roster-naming-outputs), derivation chain with .gitattributes and git config as projections never authority, commit-writer admission with the 218dea6 reproduction as lane 1, landing order, and the hard-reject bars. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * WIP: what is our conflict policy for generated files? * Address review 46546: state the interim status of the invert-hand-maintained row explicitly The amendment rides with lane 2's implementation by operator sequencing: amending the row before the modeled policy lands would make the planning authority assert an emitted .gitattributes while the tree's file is still hand-authored. The charter now states the interim so no two-instructions reading exists. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Address review 46572: anchor lane 3's carrier in the charter's typed work set Adds gunbc.stage0_emit_model generated_stage0_files to additional_works — it exists on main today and is lane 3's subject. Lane 4's keyed-roster carrier is deliberately NOT cited: it does not exist on main yet, and its on-main admission surface (commit_gate_roster) is already anchored. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Address review 46587: cite the invert-hand-maintained row symbolically gunbc.plans.invert_hand_maintained invert_hand_maintained_body, not a line number in the projected markdown — the charter's own §3 rule. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Encode the operator second-pass acceptance walls per lane and the corrected merge sequence Lane 1: complete staged-index observation (population equality, observed classification, bound provenance receipt, forgery REDs), writer bindings as countable carriers. Lane 2: converge before the first Git consumer; named countable clone-rollout carrier; typed read-back refusals; derived stage0 paths feed merge attributes. Lane 3: refusal preserved through supply->plan->generation->writer; located output-path collision refusal. Lane 4: a live path-keyed carrier consumes keyed construction end-to-end; canonical verdict never collapsed to Bool; coordinator sequencing note on the deleted incident carrier. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Charter candidate-scoped gates + atomic landing admission (operator ruling 2026-08-02) The merge-freshness program the conflict-policy charter named out of scope: three verified defects (freeze-anchored placement subject with false law text, missing landing-candidate validation, ProcessExit evidence collapsed to Bool before FullLedger), the three-subject observation split, the typed accumulated verdict, the RunnableProcessExitClaim migration, the MergeQueueOnly/ALLGREEN landing policy absorbing the existing GatingEnforced trigger, acceptance set A-F, landing sequence with the queue-first sequencing bar, and the coordinator's verification receipts and sharpenings. Step 0 recorded as already discharged (session_dashboard enrolled; #7644 closed unmerged). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Address review 46971 (commit vs tree subjects) and repair main's stale ContentHash import IntegrationCandidate now carries base_commit/candidate_commit as the ancestry subjects merge-base actually computes over, with candidate_tree retained separately as the exact-tree admission subject; freeze-law carriers follow. Also repoints dag/extdeps/transports/rest.dag's ContentHash import to std.content_hash — main's #7480 re-home left this module importing from std.types, which breaks main_wet's closure on any branch (the heal job's failure here); fix identical to #7609's. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * WIP: what is our conflict policy for generated files? * Complete the fleet heal: seed mints the grounded ContentHash, digest.dag enrolls, regen converges Three coupled repairs riding the charter PR because main is red without them: (1) v1_interpreter rest_bound_invocation_value minted a bare Str input_digest while #7480's model requires the Fnv1a64(Fnv1a64Structural) coproduct arm — every fixture-match replay witness silently failed (model/realization fork, hidden behind main's compile error); the seed now mints the coproduct shape (probed empirically: positional field 0). (2) dag/extdeps/container/oci/digest.dag gains its ExternalModelScope and scope_carrier_paths enrollment — the unenrolled-file case the operator's verdict named live; placement gate now ExitSuccess. (3) regenerated extdeps_container_oci_digest.rs for the new declaration; fixed point converges. EMITTER DEFECT FLAGGED, not fixed here: the fully-qualified module-local reference extdeps.container.oci.digest.extdeps_external_authority_anchor emitted as crate::extdeps_cargo::... (wrong module, E0308) — first enrolled carrier in the emitted set exposed the dotted-path resolution class; the declaration uses the module-local spelling and the defect belongs to the dotted-path emitter bucket. Local receipts: replay witnesses 9/9 PASS, placement gate ExitSuccess, dry artifact gate ExitSuccess, regen second pass clean, build 0 errors. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Address review 47056: tree-kind carrier + HAND-RUST receipt candidate_tree is now GitTreeObjectId — a kind-refined carrier the implementation lane introduces in extdeps.git.object_store (which today types even GitCommitObject.tree as generic GitObjectId; the lane re-grounds every kind-fixed position, not a charter-local special) so a blob or tag is unrepresentable as a landing subject. Added the HAND-RUST GATE receipt for the v1_interpreter rest replay bridge hunk: a model-conformance repair to an existing seed mint (no new decision surface; dissolves with the seed's rest transport bridge), checkable by the 6-red-then-9-green replay witness split. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Address review 47071: DefaultBranchAudit subject is GitTreeObjectId too Same class as the IntegrationCandidate fix — every audit/admission subject in the charter is a tree by construction. Swept the doc for remaining generic GitObjectId type positions; the three other mentions are prose about the generic carrier itself. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Address review 47097: verdict total over both surfaces, subject on the wrapper, receipt names lane + ROADMAP row ExtdepsScopeVerdict gains DefaultBranchAuditCovered (the audit surface had no faithful success result) and ExtdepsScopeRefused carries the run's ExtdepsScopeEvaluation subject once at the wrapper — refusal arms keep only law-local facts, the six duplicated per-arm candidate fields delete, and the rendering law now names identities that flow forward rather than demanding base/tree on arms that never carried them. HAND-RUST receipt gains the explicit-deferral header naming the v1-exit lane (zero hand-maintained Rust finish line) and the witness-realization rest-bridge trigger, matching the compile-clean-forcecheck receipt form. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Receipt records its landing vehicle: the interpreter hunk merged via #7665 The HAND-RUST receipt opened with 'This PR touches v1_interpreter.rs', which stopped being true when main's piecemeal heal chain (#7656/#7663/ #7665) landed the same repair and the merge dissolved this branch's inline copy into main's factored helper. The receipt stays as the program record of the repair's class and triggers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
What was red
extdeps_scope_placement_gate_passes(batch 1) refused on main for 10 consecutiveciruns, from #7573 through #7608. It was the sole failure in every one of those runs — thecijob carried no other FAIL, so nothing else was hiding behind it.Because the required check is
ci, this blocked every open PR in the fleet, not just the lane that caused it.Root cause
dag/extdeps/session_dashboard.dagwas added by #7573 and enrolled in none of the three frontier populations thatgunbc.extdeps_scope_frontierextdeps_scope_frontier_lawrequires — notscope_carrier_paths, notscope_machinery_exempt_paths, and (correctly) not the frozen legacy manifest, which is not an admission channel for a new file.tools.extdeps_scope_placement_gatescope_placement_gate_verdicttherefore refused viascope_placement_refused_paths.How it reached main without its own PR refusing it: the gate landed in #7571 at
8a4e43f62c3(2026-08-01 17:09:02 -0400) and #7573 merged atea1c781097eeleven seconds later (17:09:13 -0400). #7573's CI ran against a base where the gate did not yet exist, so the wall never evaluated it. The first run that could see the file was the merge commit's own — on main.The fix
Exactly the landing state the law prescribes for a new extdeps file — become a scope carrier:
dag/extdeps/session_dashboard.dagdeclaresextdeps_model_scope: ExternalModelScope, subjectsession_dashboard.Api(the service that is the modeled upstream interface), cited to the module's existingextdeps_external_authority_anchor.dag/gunbc/extdeps_scope_frontier.dagscope_carrier_pathsgains the row.The authored shape matches
extdeps.github.actions_environment, which #7623 landed independently and correctly — same imports, sameExternalSubjectRef/DeclarationRefstructure. That module is not part of this defect; it declared its scope and took its roster row in its own PR.Verified by execution, not inspection
Against the merged tree, each arm of
scope_placement_gate_verdict:scope_placement_refused_paths(added ∖ rostered)manifest_freeze_holds(manifest row naming a post-freeze add)manifest_remove_only_exit(this change adds a manifest line)ManifestUntouchedcarrier_content_declares_scope)Not fixed here — a real design wrinkle, reported separately
scope_placement_added_pathsdiffslegacy_manifest_freeze_sha..HEAD, not the merge base. So the placement arm judges every extdeps file added since the freeze anchor by anyone, not the files the change itself introduces — which is whatextdeps_scope_frontier_lawclaims it does ("only paths the change itself introduces are judged"). Consequence: once one unrostered file merges, every branch inherits the refusal, and the party who learns is an unrelated lane.The manifest-freeze arm genuinely needs
freeze..HEAD(it must know the whole post-freeze added set). The placement arm does not. Splitting the two bases is the fix, but changing the base semantics of a merge-gating wall is a substantive change that deserves its own review rather than riding along with an urgent fleet unblock.🤖 Generated with Claude Code