Repository navigation
The observer could still see the goal, because the guarantee was a sentence - #10883
Conversation
…ntence std.goal_assessment said "the observer cannot see the goal" while `observe` took `(Subject, Scope)` -- and a subject is exactly where a goal travels. The sentence was true when written and false one binding later: fabric_switch matched on `subject.intent`, so the desired mode selected which lanes were read. Two of the three bindings broke the law the module advertised. inspect_goal now takes subject, goal and request as three arguments and hands the observer `(Subject, ObservationRequest)`. The observer is goal-blind because it has no goal-typed parameter, not because a note asks it to be. It is NOT subject-blind: handing it only the request would make `subject` a label on the result, free to name A while the read went to B. Both result arms carry the request, so a refusal says which read was attempted. Three defects this fixes were shipped by #10814 and ratified by its witnesses. MEMBER-LEVEL UNKNOWNS WERE PROMOTED TO WHOLE-OBSERVATION REFUSAL. The first unread lane short-circuited the observation and discarded every deviation proved on lanes that were read -- an unknown fact suppressing a known one, which is the ordering harm #10814 removed from repo_ruleset, reintroduced one module over. They are unknowns now, and the mixed case reports both. THE DENOMINATOR CAME FROM THE OBSERVATION. Unknowns were built from `LaneNeverRead` rows a caller authored, so a lane omitted from the readings entirely vanished from the population it was supposed to be measured against. The switch joins `SwitchIntent.lanes` -- the declared roster -- against what was read, so the denominator is the goal's. An intent naming lanes none of which were read is fully UNKNOWN, not empty; only an intent naming no lanes is the malformed question. cable_plant cannot do this join (it has no declared leg roster) and now states that ceiling with its next-rung trigger rather than implying the guarantee. THE COLLAPSE SURVIVED ONE MODULE DOWNSTREAM. fabric_switch_desired mapped divergence, indeterminacy AND assessment refusal onto one `PlantDivergedFromRequirement { legs: Nat }`, discarding every unknown and reporting a malformed assessment as `legs: 0`. It carries the rows now. The inspect-only modules stop advertising an actuator they never had: *_converge -> *_assessment, Crs812ConvergenceSubject -> Crs812SwitchSubject, *_convergence -> *_inspection. No alias or compatibility shim. EVIDENCE. 41 witnesses green, including four new controls: unknown is not a failed read; a proved deviation and an unread member are reported together; an unread roster is not an empty one; and a lane the readings omit ENTIRELY is still an unknown. The last two are proved discriminating by mutation -- reverting the join to the reading-derived shape fails both while the positive control stays green. A new generic control fixes the module's central claim: two goals over one request produce one observation. NOT VERIFIED BY EXECUTION: repo_ruleset. Its closure reaches gunbc.roadmap.roadmap_belt_actuate through extdeps.transports.rest, and that module fails to resolve on main (`if branches resolve to incompatible types`) byte-identically to this branch. Its changes typecheck with no errors attributed to them, which is not the same as green by execution. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PUtSkZTNvpWQv58Lk9cGzg
…not go red
Two review findings, both confirmed, and the first was worse than reported.
THE OBSERVER TOOK ONE ARGUMENT WHERE THE ROOT PASSES TWO.
`observe_repo_ruleset_attempt` kept the arity it had before the recut while
`inspect_goal` calls `observe(subject, request)`. Nothing else repaired it,
and it sits in the one module whose witnesses cannot execute -- so no green
run of mine would ever have found it.
Underneath it was a second defect the finding implies but does not name: the
`request` passed at the call site was a VERBATIM DUPLICATE of the subject,
the same RepositoryRulesetConvergenceSubject built twice. Re-typing the
parameter would have compiled and left this binding's request carrying nothing
about the read, making the module's own claim -- a refusal says which read was
attempted -- false here while the receipt still reported one.
So the repair is the split rather than the arity: subject is the `Repository`
(WHO), request is `RulesetReadRequest { ruleset_id }` (WHAT TO READ). The
fused RepositoryRulesetConvergenceSubject is deleted; it existed only to carry
both facts at once, which is the fusion this whole change is about.
THE GOAL-BLINDNESS CONTROL WAS PERMANENTLY GREEN.
`two_goals_over_one_request_produce_one_observation` passed the SAME
`fixture_observe` to both calls, and that function has no goal parameter, so
the equality could not go red for any authorable input. DESIGN section 4b asks
whether a check's RED is authorable BEFORE writing it; this one's was not,
which makes it worse than absent because it would have been cited as coverage
for the module's central claim. Deleted, not repaired.
The RED that IS authorable replaces it. `inspect_goal` closes the PARAMETER
route; it does not close LEXICAL CAPTURE -- a lambda may close over the goal
and shape the read by it. The new control holds that as an executing fact and
goes red if capture ever stops being expressible.
That forces an honest downgrade this change had claimed too strongly:
goal-blindness is STRUCTURAL against the parameter and MITIGATED BY REVIEW
against capture. Both the module and the witness now say so, and the
next-rung trigger is named: a lens refusing an `observe` argument whose free
variables include the goal bound at the same call site.
Also removes fixture_assess_echoing_goal, which the deletion left unconsumed.
EVIDENCE. 41 witnesses green across four entries, post-merge with main.
STILL NOT VERIFIED BY EXECUTION: repo_ruleset, and the cause is now located.
Its closure reaches gunbc.roadmap.roadmap_belt_actuate, where two coproducts
in the corpus declare an arm named `Observed` -- BeltObserve's and a nullary
one in gunbc.self_host_compile_phase_frontier. Resolution picks the nullary,
so a branch building `Observed { live: ... }` types as Primitive rather than
Coproduct(BeltObserve). That is a DESIGN section 3 collision on main: one
name, two declarations. It is unrelated to this subject and is not fixed here.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PUtSkZTNvpWQv58Lk9cGzg
|
Both findings from review 62850 confirmed against the code and fixed in
So the repair is the split, not the arity: subject is now
The replacement has an authorable RED, and finding it changed the claim. I also removed Evidence: 41 witnesses green across four entries, post-merge with current main. Still not verified by execution — Which means your finding caught a defect in the one module my evidence cannot reach. That is worth stating plainly rather than leaving implied by a green tally. — sent from sleek-newt-698 |
Three findings, all confirmed, and the first is the failure this change exists to delete -- reintroduced by the change itself. THE FLEET ENTRY POINT'S ANNOTATION DESCRIBED A REFUSAL STAGE THAT NO LONGER EXISTS. It claimed the entry "refuses at the observe stage today, and it refuses with the ONE fact that is missing -- the interface nobody read". The observer's refusal type is `Never` and it always establishes; the refusal comes from the ASSESSMENT and carries the CABLE cause, which this module's own witness asserts while returning false on GoalObservationRefused. The sentence was true of the shape BEFORE this cut and false of the one in the same diff. It is recorded rather than quietly swapped, because the recurrence is the point: a guarantee carried only by prose surviving one edit past the code it described is precisely what this change removes from the type, and it reappeared in the module while that removal was being written. A SIBLING SWEEP FOUND A SECOND SITE THE REVIEW DID NOT CITE. The module header said the "observe stage inherits that refusal rather than re-deciding it" -- same class, same edit, one paragraph away. The ASSESSMENT inherits it; the observe stage cannot refuse at all. Fixed, and the reason is now stated. Annotations are the one part of this change no witness can guard: no Accepted program reads one, so 41 green tests say nothing about whether the prose beside them is true. Review and a targeted sweep are the only mechanisms, and the sweep only worked because the specific false claim was known. MEMBERSHIP WAS A FAILED DECOMPOSITION, AND THE COST SHAPE COMPOUNDED IT. `interface_absent_from` minted `list_length(flat_map(...)) == 0` beside the corpus-canonical `any(xs, pred)` -- section 2's net-concepts test. Worse, `observed_lane_interfaces` was called INSIDE the fold, so n intent lanes and m read lanes did n*m work and allocated n copies of one list to answer a single membership question each, and `lane_intent_interface` computed twice per lane. The projection is hoisted once and the fold uses `any`. Section 6's standing rule: a proven cost-shape defect is fixed regardless of the realized n, because n is not a time-stable fact. A merged paragraph is also repaired: the new assessment block had been spliced into the tail of an unrelated one and lost its heading. EVIDENCE. 17 witnesses green across the switch and cable entries. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PUtSkZTNvpWQv58Lk9cGzg
|
All three findings from review 62866 confirmed and fixed in The fleet-entry annotation — confirmed, and it is this PR's own thesis failing. It claimed the entry point "refuses at the observe stage today, and it refuses with the ONE fact that is missing — the interface nobody read." The observer's refusal type is I've corrected it and recorded what it said and why it was wrong, rather than quietly swapping the text. A guarantee carried only by prose, surviving one edit past the code it described, is precisely what this change removes from the type — and it reappeared in the module while that removal was being written. That is worth leaving legible. A sibling sweep found a second site you did not cite. The module header said the "observe stage inherits that refusal rather than re-deciding it" — same class, same edit, one paragraph away. The assessment inherits it; the observe stage cannot refuse at all. Also fixed, with the reason now stated. Worth naming: annotations are the one part of this change no witness can guard. No Line 292 merged paragraph — confirmed. My splice landed in the tail of an unrelated block and lost its heading. Restored.
Evidence: 17 witnesses green across the switch and cable entries after the fixes.
— sent from sleek-newt-698 |
…8-goal-recut # Conflicts: # dag/gunbc/spark/fabric_switch_observed.dag # dag/test/claim/spark/fabric_switch_converge_witness_test.dag
main added test.claim.spark.spark_fabric_switch_witness while this branch was open, importing product.cable_plant_converge. The merge is textually clean -- an import naming a module that no longer exists is not a conflict -- so only the census finds it. Third time this cutover has been overtaken by new authorship against a module scheduled to move. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PUtSkZTNvpWQv58Lk9cGzg
|
Merge conflict with Both conflicts were more than mechanical, and one of them carried a correction I had gotten wrong. The modify/delete conflict on the renamed witness. #10869 renamed that test from "refuses because its cables do" to "refuses while its plant cannot answer", on the grounds that six of the eight legs have never been dumped — so the plant's answer is dominated by legs nobody read, not by the coding of the legs that were read. My rename in this branch had asserted the coding story ( Taking my deletion wholesale would have silently reverted that. I ported it, and the recut sharpens it: under this change the plant answers indeterminate rather than refusing, because unread legs are member-level unknowns now — so it reports them alongside any proved coding divergence instead of refusing the whole observation on the first one. The propagation the witness asserts is unchanged; the fidelity beneath it went up. Main's The import conflict in The census found a third consumer that no conflict would have surfaced. main added Evidence: 30 witnesses green across four entries post-merge, including main's new spark witness. Repo-wide grep for the old module and declaration names is clean. Unchanged from before: — sent from sleek-newt-698 |
The floor refused this head: `namespace-wave-admission (9 unadjudicated delta(s))`. All nine are `TargetChanged binding` -- a spelling authored on both sides that now resolves to `product.cable_plant_assessment` instead of `product.cable_plant_converge`, because this cut renames the module. That is the exact subject NAMESPACE_TRANSITION_ADMISSIONS exists for, and the roster's own note already states the claim these rows make. THE ARITHMETIC IS THE CHECK, not the green. The wave measured eighteen deltas. Nine auto-admit as the membership half of one motion: the old edge reports SameDeclarationIdentityRebind (every name it supplied still denotes the same declaration) and the new edge ExplicitlyEvaluatedZeroDelta (reached by a name the module authors). The nine below are the binding half. Consumers whose OWN module was renamed produce no binding delta at all -- a delta needs the module present on both sides -- which is why the two witness files this cut renamed are absent from the roster and `fabric_switch_observed` is present. Rows for the renamed modules would have meant I had misread what the wall measures. ENUMERATED BY EXACT IDENTITY, never by a pattern over the renamed module pair: a pattern would admit a genuine rebind that happened to land in the same pair, which is the absorbing fallback section 5 forbids. None of these nine changes WHICH DECLARATION the spelling denotes; a binding whose meaning had moved would refuse on its own row rather than be covered here. TRIGGER: removed when this PR merges. The base then binds each spelling to `product.cable_plant_assessment`, every row reports consumed-at-base, and leaving them would refuse every unrelated PR -- the cost the roster's own history records from the first fifty-three rows. This is the mechanism I declined earlier in this session for a different subject. There the row would have papered over a baseline-reconstruction defect, so writing it was a workaround. Here it adjudicates a rename that was intended, which is what the roster is for. Same mechanism, opposite standing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PUtSkZTNvpWQv58Lk9cGzg
The switch module's heading was corrected when the handler record was deleted; the cable module's was not, so it kept announcing an actuation stage and an unchanged-receipt stage that no longer exist and never ran for this subject. Found by re-reading the request against the code rather than the review tally: renaming the stale stage headings was an explicit item on the list this PR is answering, and it survived two approving reviews. An approval is 'no blocking defect found', which is not the same as 'this is what was asked'. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PUtSkZTNvpWQv58Lk9cGzg
REVIEW FINDING, CONFIRMED, AND IT IS RUNG INFLATION IN THE MODULE ABOUT RUNG HONESTY. `fabric_switch_subject()` built its observation REQUEST by mapping over the intent's own interfaces, so an undecided intent produced an empty request and therefore an empty snapshot BECAUSE OF THE GOAL. Closing the parameter route while the request stayed goal-derived renamed the mechanism and removed nothing. This change had been reporting goal-blindness as structural against the parameter while the live binding routed the goal into the read anyway -- section 4b(1): citing the strongest path while another stays silent. CLOSED RATHER THAN DECLARED. No RouterOS capture of this switch exists, so the honest request is empty whatever anyone wants. The unknowns are still one per intent lane because `switch_unknowns` joins the intent's declared roster on the ASSESSMENT side, which is the stage allowed to know the goal. Same reported answer; the goal no longer reaches the read. The goal-derived roster function is deleted -- nothing consumed it once the request stopped calling it. THE RESIDUAL DISCLOSURE WAS WRONG BY OMISSION. It named two routes; there are three. A `request` is caller-constructed, so no type can stop a caller computing it from the goal -- and this module's own binding was the proof. All three are now enumerated, with this binding recorded as the worked example, and ONE next-rung trigger covers both review-mitigated residuals because they are the same shape: a goal reaching the read through a VALUE rather than a parameter. "THE OBSERVER RECEIVES AN ObservationRequest AND NOTHING ELSE" WAS FALSE. It was written before an earlier review restored the subject to the observer, and went stale in that edit. Corrected in std.goal_assessment and in the switch module's own copy of the claim. AND THE FIRST CONTROL FOR THIS WAS PERMANENTLY GREEN -- the same fault this change deleted a check for, committed while correcting it. It compared the fleet subject against an undecided-intent subject and asserted both requests were empty; both are empty UNDER THE DEFECT too, because the fleet's real intent is undecided today. Mutation caught it: restoring the defect left the check PASS. The property was unobservable because the goal never varied, so `fabric_switch_subject_under(intent)` takes it as a parameter now and the control supplies a DECIDED intent naming two lanes. Under the defect that request carries two entries. Mutation-confirmed: FAIL on the defect, positive control green. The dead first version is recorded in the witness rather than swapped out, because it is the reason the mutation step is not optional. EVIDENCE. 12 witnesses green, including the new control, proved discriminating. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PUtSkZTNvpWQv58Lk9cGzg
|
Both findings from review 62920 confirmed and fixed in The goal still chose what was read — you are right, and it is the same mechanism, not a residue of it. Closed rather than declared. No RouterOS capture of this switch exists, so the honest request is empty whatever anyone wants. Unknowns are still one per intent lane because The residual disclosure was wrong by omission — three routes, not two. A
One thing you did not ask about, which I owe you: my first control for this was permanently green. It compared the fleet subject against an undecided-intent subject and asserted both requests were empty — but both are empty under the defect too, because the fleet's real intent is undecided today. Mutation caught it: I restored the defect and the check stayed PASS. That is the identical fault this PR deleted The property was unobservable because the goal never varied, so Evidence: 12 witnesses green, the new control proved discriminating by mutation. Standing count on this PR: three of the last four findings have been one class — a claim outliving the shape it described. Stale annotation, false "NOTHING ELSE", under-enumerated residual, inflated rung. All were invisible to 40+ green witnesses, because no — sent from sleek-newt-698 |
REVIEW FINDING, CONFIRMED ON ALL FIVE BINDINGS. `assess` took a `Subject` that `assess_cable_plant`, `assess_fabric_switch`, `ruleset_assess`, `fixture_assess` and `selection_assess` all ignore -- five signatures, zero uses -- while an annotation beside it claimed "a refusal cause that has to name what it could not assess should not have to be handed the identity through a closure". Section 3c dangling, and section 4c prose asserting a use that does not exist. DROPPED RATHER THAN CONSUMED, which was the other option offered. Locating `PlantHoldsNoLegs` or `SwitchIntentNamesNoLanes` by their subject would put a second copy of the identity beside the one `GoalInspection` already carries in BOTH arms -- the exact redundancy this change removed when it dropped `switch` from `SwitchHoldsNoLanes`. Consuming the parameter would have undone that reasoning to justify a parameter that should not have been added. THE ASYMMETRY THAT REMAINS IS REAL AND IS NOW STATED. The OBSERVER keeps its subject: gunbc.repo_ruleset's observer builds its request path from `subject.owner` and `subject.name`, which is the one consumer that earns it. A sweep for signature-only parameters confirms the two corpus-data observers ignore theirs -- legitimate, since their read is a projection of declared data and one genuine consumer is what section 3c asks of a generic parameter. The assessor had none anywhere, which is the difference. Dropping it cascaded: `witness_subject` in the repo-ruleset witness lost its only reader, so the fixture and its two imports went with it. The section 3c question asked one level down rather than stopped at the first answer. I INTRODUCED THIS WHILE FIXING THE PREVIOUS INSTANCE OF IT. An earlier review established that the OBSERVER needs its subject; I extended that to the assessor by symmetry without checking whether any assessor would read it. That is the fourth claim in this change to outlive the code it described, and the correction is recorded in the module rather than silently reverted. EVIDENCE. 41 witnesses green across four entries. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PUtSkZTNvpWQv58Lk9cGzg
|
Confirmed on all five bindings and fixed in Verified before acting: I took drop, not consume. Locating The asymmetry that remains is real and is now stated in the module. The observer keeps its subject: Dropping it cascaded: Provenance of the defect, since it is the interesting part: an earlier review established that the observer needs its subject. I extended that to the assessor by symmetry without checking whether any assessor would read it. Fourth claim in this change to outlive the code it describes — and the second I created in the act of correcting another. Recorded in Evidence: 41 witnesses green across four entries. — sent from sleek-newt-698 |
…8-goal-recut # Conflicts: # src/v1/stage0/src/namespace_wave_admission.rs
The merge of origin/main kept its five #10692 rows verbatim alongside my nine. Additive-only was the right instinct for my rows and the wrong one for rows whose trigger had already fired in the commits being merged in: main now binds each of those spellings to its own target, so the rows report consumed-at-base, and the floor refused with namespace-wave-admission (0 unadjudicated delta(s), 0 stale admission(s), 5 consumed admission(s) due for deletion on this roster-touching change) Leaving them is not harmless. A consumed row matches nothing, so it would refuse every unrelated PR until someone else deleted it -- the standing cost the roster's first 53 rows were written down to record. The deletion is adjudicated by the instrument, not by the trigger sentence: main's own block warned that "a trigger sentence is not evidence that the trigger fired", and claim_executor performed the (module, in_declaration, spelling, target) join against the base tree and returned consumed. The rows, their label const, and their doc block go together; nine rows remain and the wave reports ADMITTED. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PUtSkZTNvpWQv58Lk9cGzg
Both conflicts were additive collisions at the same insertion point, not disagreements; both sides are kept. namespace_wave_admission.rs -- main merged #10692 (ebb1da8), which is the trigger that made this branch's five consumed #10692 admissions due, so main deleted them independently and added nine #10883 cable_plant rows at the same position. Resolution keeps main's nine and re-adds this branch's two live `gunbc#10818 CpuBoundStanding rehome` rows plus their doc block: 11 rows total. The two are still live because their trigger is this PR merging, which has not happened. guarantee_stall/roster.dag -- main appended information_retrieval_transport_cannot_report_status_stall where this branch appended module_cited_only_in_annotation_prose_stall. Both are kept, in import and roster order. Merge commit rather than rebase, per the branch policy. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BJGbrvU2EgNeUiWfc5yK2c
The floor refused adjudication on the merge head with `0 unadjudicated delta(s), 0 stale admission(s), 9 consumed admission(s) due for deletion on this roster-touching change` -- the same 4b(4) obligation this branch already discharged once for #10692's five, now for #10883's nine. The mechanism is worth stating because it will recur: #10883 merged to main, which made its own nine admissions CONSUMED. Merging main into this branch brought them here, and this branch touches the roster (it adds two rows of its own), so their deletion comes due on this head. A branch that integrates main inherits main's due deletions. Joined against main's tree before deleting rather than trusting the count, per the rows' own instruction: gunbc.spark.fabric_switch_observed fabric_cable_plant CablePlant gunbc.spark.fabric_switch_observed fabric_leg_reading LegReadingTaken test.claim.spark.spark_fabric_switch_witness plant_readings_never LegNeverRead each now binding to `product.cable_plant_assessment` on main. The two `gunbc#10818 CpuBoundStanding rehome` rows stay. Their trigger is this PR merging, which has not happened. Deletes the nine rows and their now-unreferenced doc block. No evidence retired -- 4b(4) dissolves production handling only, and these rows carry no discriminating control. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BJGbrvU2EgNeUiWfc5yK2c
* Land the receipts main already cites gunbc.runner.runner_host_filtered_egress merged to main citing gunbc.runner.runner_guest_egress_attempt, which did not. That receipt and two siblings -- the cgroup placement and guest network observations -- were stranded on a sibling PR that never merged, so main carried a citation naming a module the repository does not contain. That is the positional-reference failure in its worst form. A stale line number decays quietly; a citation to an absent module means a reader cannot find what was cited at all, and the claim resting on it becomes uncheckable. They matter to what landed. runner_host_filtered_egress rejects the bridged topology, and the record of that bridge being tried, what it exposed and why it was abandoned lives in runner_guest_egress_attempt. Without it the rejection reads as a preference rather than a finding. Cherry-picked onto current main rather than resurrecting the stale branch, which is hundreds of files behind and carries the same foreign PCI-identity content this lane just removed from its own PR. Taking the six files leaves all of that behind. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * Cite the stranded runner receipts by import, not annotation The three modules #10818 added were still dangling: the citing sites named them only in comments, which DESIGN 4c erases, so they were neither citations nor consumers. Fold the attempt, placement, and guest-network facts into the modules that already depended on them, carry typed DeclarationRefs, and file the class on the 4b ledgers. Co-authored-by: Cursor <cursoragent@cursor.com> * Inhabit ByteSize, type the prose rows, and file the three receipt classes The stranded receipts still carried byte quantities as Int and four findings as String commentary. They now consume std.measure, hold those findings as typed carriers beside PlacementDefect, and each newly discovered class has its own 4b row rather than living only inside a per-attempt receipt. Co-authored-by: Cursor <cursoragent@cursor.com> * Type the three remaining narrative receipt rows bridge_readback_defect, guest_tap_retired and corrected_claim were the same 4c class as finding 3 — withdrawn and corrected rulings held as NonEmptyStr after this PR had already established typed carriers beside them. Co-authored-by: Cursor <cursoragent@cursor.com> * Fold the cpu.max refusal once, next to cpu_bound_failure The two consumer modules were matching the same coproduct under two names, so the consumption witness counted one fact twice. One fold, imported; the witness asserts it once. Co-authored-by: Cursor <cursoragent@cursor.com> * Inhabit existing network, hash, path, arch, and rate authorities in the receipts GuestReachability was restating IPv4, prefix, and MAC as strings; those already live in extdeps.network. A sweep of the other added scalars put evidence paths on FilePath, fixture digests on Sha256Digest, guest arch on Architecture, link speed on Bandwidth, and pids on Nat, instead of waiting for the next one-field review round. Co-authored-by: Cursor <cursoragent@cursor.com> * Join values to their summaries and give duplex and NUD a home A record that carried empty: true beside procs_at_retirement: "empty", and a member list that restated placement_verdict.pid as prose, could disagree with nothing refusing. Derive the members from the verdict, drop the redundant retirement string, one CpuBoundStanding on the attempt, and inhabit IEEE duplex and Linux NUD instead of leaving those as untracked strings. Co-authored-by: Cursor <cursoragent@cursor.com> * Admit the two CpuBoundStanding TargetChanged bindings #10818 produced The floor was FloorClean and the consumption witness passed; adjudication refused on namespace-wave-admission with exactly two unadjudicated deltas — cpu_bound_standing rebinding CpuBoundStanding and CpuBoundInterfacePresent onto the attempt module. Those rows dissolve when this PR merges. Co-authored-by: Cursor <cursoragent@cursor.com> * Drop the permanently-green consumption witness and the cites_* rows A receipt of observed constants cannot make that test red except by editing the receipt. Imports and folds are the consumption claim; the stall no longer cites the deleted witness as coverage. Co-authored-by: Cursor <cursoragent@cursor.com> * Retire the five consumed #10692 admissions the roster touch makes due The required floor refused adjudication on this head with `0 unadjudicated delta(s), 0 stale admission(s), 5 consumed admission(s) due for deletion on this roster-touching change`. Nothing was missing: the five `gunbc#10692` binding admissions became CONSUMED when that PR merged, and adding this change's own two rows is the roster touch that brings their deletion due (DESIGN 4b(4), dissolution on climb -- a climb deletes the lower-rung machinery it obsoletes). The rows' own trigger prose forbids taking its word for it -- "adjudicate that deletion by joining each row against main's tree on its own (module, in_declaration, spelling, target) tuple rather than trusting this sentence, because a trigger sentence is not evidence that the trigger fired." Joined all five against origin/main; each declaration now binds its spelling to the named authority module: v2.std.integer integer_string_to_decimal_digits_step -> v2.std.text v2.std.compilers.target_model EmitSpellingEscape -> v2.std.text v2.std.compilers.target_model apply_emit_spelling_... -> v2.std.text v2.extdeps.languages.python py_bool_grounding -> v2.std.logic v2.extdeps.languages.typescript ts_bool_grounding -> v2.std.logic The two `gunbc#10818 CpuBoundStanding rehome` rows stay: their own trigger is this PR merging, which has not happened. Deleting all seven to make the count come out right would drop live admissions. Pure deletion -- the five rows, their now-unreferenced label constant, and the doc block describing them. No evidence retired: these rows carry no discriminating control, so 4b(4)'s "production handling only, never the evidence" has nothing to preserve here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BJGbrvU2EgNeUiWfc5yK2c * Retire the nine consumed #10883 admissions the merge made due The floor refused adjudication on the merge head with `0 unadjudicated delta(s), 0 stale admission(s), 9 consumed admission(s) due for deletion on this roster-touching change` -- the same 4b(4) obligation this branch already discharged once for #10692's five, now for #10883's nine. The mechanism is worth stating because it will recur: #10883 merged to main, which made its own nine admissions CONSUMED. Merging main into this branch brought them here, and this branch touches the roster (it adds two rows of its own), so their deletion comes due on this head. A branch that integrates main inherits main's due deletions. Joined against main's tree before deleting rather than trusting the count, per the rows' own instruction: gunbc.spark.fabric_switch_observed fabric_cable_plant CablePlant gunbc.spark.fabric_switch_observed fabric_leg_reading LegReadingTaken test.claim.spark.spark_fabric_switch_witness plant_readings_never LegNeverRead each now binding to `product.cable_plant_assessment` on main. The two `gunbc#10818 CpuBoundStanding rehome` rows stay. Their trigger is this PR merging, which has not happened. Deletes the nine rows and their now-unreferenced doc block. No evidence retired -- 4b(4) dissolves production handling only, and these rows carry no discriminating control. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BJGbrvU2EgNeUiWfc5yK2c --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Brian Searls <briansearls1@gmail.com>
std.goal_assessmentsaid "the observer cannot see the goal" whileobservetook(Subject, Scope)— and a subject is exactly where a goal travels. The sentence was true when written and false one binding later:fabric_switchmatched onsubject.intent, so the desired mode selected which lanes were read. Two of the three bindings broke the law the module advertised.inspect_goalnow takessubject,goalandrequestas three arguments and hands the observer(Subject, ObservationRequest). It is goal-blind because it has no goal-typed parameter, not because a note asks it to be. It is not subject-blind — handing it only the request would makesubjecta label on the result, free to name A while the read went to B. Both result arms carry the request, so a refusal says which read was attempted.Three defects this fixes were shipped by #10814, and its witnesses ratified them
Member-level unknowns were promoted to whole-observation refusal. The first unread lane short-circuited the observation and discarded every deviation proved on lanes that were read — an unknown fact suppressing a known one, which is the ordering harm #10814 removed from
repo_ruleset, reintroduced one module over.The denominator came from the observation. Unknowns were built from
LaneNeverReadrows a caller authored, so a lane omitted from the readings entirely vanished from the population it was supposed to be measured against. The switch now joinsSwitchIntent.lanes— the declared roster — against what was read. An intent naming lanes none of which were read is fully unknown, not empty; only an intent naming no lanes is the malformed question.cable_plantcannot do this join (no declared leg roster) and now states that ceiling with its next-rung trigger rather than implying the guarantee.The collapse survived one module downstream.
fabric_switch_desiredmapped divergence, indeterminacy and assessment refusal onto onePlantDivergedFromRequirement { legs: Nat }— discarding every unknown, reporting a malformed assessment aslegs: 0. It carries the rows now.Renames
The inspect-only modules stop advertising an actuator they never had:
*_converge→*_assessment,Crs812ConvergenceSubject→Crs812SwitchSubject,*_convergence→*_inspection. No alias, no compatibility shim.Evidence
41 witnesses green, including four new controls: unknown is not a failed read; a proved deviation and an unread member are reported together; an unread roster is not an empty one; and a lane the readings omit entirely is still an unknown.
The last two are proved discriminating by mutation — reverting the join to the reading-derived shape gives:
A new generic control fixes the module's central claim: two goals over one request produce one observation.
One deliberate divergence from review guidance
The recommendation was to eliminate
GoalObservationRefusedfor cable (whoseObserveRefusalisNever) "through theNeverfold already used by the corpus". That fold does not exist, and.dagrefusesmatch f { }("match expression has no arms"). The alternative that compiles is fabricating aCablePlantAssessRefusalfor the arm to carry, which asserts a reason that isn't the real one. I kept a payload-free arm that fails closed to undecided, never a speed, wrote into the module that this is a language limit rather than a modelling choice, and named the trigger: empty-match support or aNeverelimination fold.Not verified by execution
repo_ruleset. Its closure reachesgunbc.roadmap.roadmap_belt_actuateviaextdeps.transports.rest, and that module fails to resolve (if branches resolve to incompatible types) byte-identically tomain— a pre-existing break I did not introduce and am not fixing here. Its changes typecheck with no errors attributed to them, which is not the same as green by execution. Flagging rather than letting 41 green witnesses imply coverage they don't have. That main defect wants its own change.🤖 Generated with Claude Code
https://claude.ai/code/session_01PUtSkZTNvpWQv58Lk9cGzg