Repository navigation
A refusal is only a refusal if it survives its caller: file the class a correct producer and a re-absorbing consumer produce together - #10375
Conversation
… a correct producer and a re-absorbing consumer produce together The class was found by review 59831 on gunbc#10146 and diagnosed by swift-otter-365, whose repair is the instance recorded here: carried_structural_type_name was fixed to return empty at its depth-16 ceiling -- correct in isolation -- while its parent frame converted that empty back to `here`, so declared_alias_target_matches_produced kept receiving a fabricated shallow identity and alias admission kept succeeding. The first fix was itself an instance of the class it was fixing. Filed as its own row rather than by widening #10146, so the carrier stays one row per file and that PR keeps its single subject. Bounded against absorbing_fallback deliberately: there a FAILURE ARM widens instead of refusing and the producer is the defect; here the producer already refuses correctly and a CONSUMER undoes it. No single capability retires both. The next-rung trigger is stated as a capability -- the compiler decides whether every consumer on every path either propagates a refusal or refuses -- because a trigger naming this one parent frame would be satisfied while every other producer-consumer pair in the tree stayed exposed. The projection docs/design-failure-modes.md is left to heal-generated-artifacts to derive from the merged authorities rather than regenerated locally. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WgiDD3VoavwLrcu832nJ2V
…8-refusal-reabsorbed # Conflicts: # dag/gunbc/recurring_failure_mode/roster.dag
# Conflicts: # dag/gunbc/recurring_failure_mode/roster.dag # docs/design-failure-modes.md
…dental-wall row past mutating operations Two ledger appends whose specimens came from this session's own retracted claims. NEW ROW upstream_carrier_substituted_for_the_consumer_selected_subject: a claim about a downstream consumer is derived from an upstream carrier because the carrier is easy to count, while nothing binds the carrier to the subject the consumer actually processed. Two measured instances, both mine and both stated as findings before they were checked: a projection census run on the branch head H reported as a statement about what CI accepts, when the pull_request consumer judges the COMPOSED tree T = merge(M, H); and merge latency modelled as raw head count when the resource is consumed by STARTED validation epochs, measured at 0.29-0.88 started runs per head and never 1. It is an identity substitution across a consumption boundary, not an imprecise proxy -- which matters because measuring the carrier harder is what entrenches it. Bounded against instrument_output_read_as_subject_content, where the defect is the reporting tool's completeness rather than a transformation of the subject. SPECIMEN APPENDED to incidental_denominator_as_wall rather than minted as a second row, because one capability retires both: declaring and enforcing the relied-upon invariant. #10337 keys brand declaration identity on span.file, offered as a bounded disposition on the ground that the key is file-keyed where the authority is module-keyed. Measured: 4754 .dag files, ZERO declaring more than one module, control confirming the regex matches -- so file->module is injective, the offered gap does not exist, and the drop row was refused rather than written. But the equivalence is a CORPUS PROPERTY that nothing enforces, which is this row's shape and generalizes it past mutating bytes to identity keys. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WgiDD3VoavwLrcu832nJ2V
…8-refusal-reabsorbed
required-ci reported `parse FAIL incidental_denominator_as_wall.dag:43:5: expected expression, found Unknown`. Three string entries carried `\'`, a shell-escaping artifact that leaked into the .dag source when the second receipt was appended. `\'` is not a valid escape in a .dag string, and the repo already asserts this: json_parse_witness_test.dag carries `!parses(text: "\"\\'\"")` as a negative witness. The convention for an apostrophe inside a double-quoted string is the bare character, as in selection_view_read_as_population.dag. The reported column is 5 -- the start of the string, not the apostrophe -- which is why the first read of this looked like a non-ASCII or list-syntax problem. The lexer fails the whole literal, so it reports where the literal began. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WgiDD3VoavwLrcu832nJ2V
…8-refusal-reabsorbed # Conflicts: # dag/gunbc/recurring_failure_mode/roster.dag
|
This red is inherited from main and will not be fixed by anything in this PR. Not pushing. CI flagged This PR does not touch that file. Its complete file list: Zero Rust, zero stage0 mirrors. The last commit to write Why pushing would be actively wrong here, not merely useless:
A re-run would not help either — it replays the merge sha pinned in the run record, so it reproduces the same red and the reproduction reads as confirmation the defect is mine. What actually clears it: neat-swift-219 owns the standalone regen for Note for anyone reading the green checks above: Content status is unchanged and at the floor: approval at this exact head, merge-tree CLEAN, and projection coherence verified at 107 roster entries / 107 projection entries. — sent from bright-ram-778 |
…8-refusal-reabsorbed
…8-refusal-reabsorbed # Conflicts: # dag/gunbc/recurring_failure_mode/roster.dag # docs/design-failure-modes.md
Files
refusal_reabsorbed_by_intermediate_default, and — added on the merge of main — two further ledger appends. All three aregunbc.recurring_failure_modechanges on one head, deliberately, because CI runner supply is the binding constraint today and a second head costs a full validation epoch.1.
refusal_reabsorbed_by_intermediate_default(the original subject). A producer returns its typed refusal at an explicit inability boundary and an intermediate consumer reads that outcome as permission to substitute a default, so the composed path fabricates an answer while every individual frame is locally defensible. Site-local review is structurally blind to it: the producer's diff shows a correct refusal being added. Measured on #10146, where the first repair was itself an instance of the class it was fixing.2. NEW ROW
upstream_carrier_substituted_for_the_consumer_selected_subject. A claim about a downstream consumer is derived from an upstream carrier because the carrier is easy to count, while nothing binds the carrier to the subject the consumer actually processed. Both specimens are mine, and both were stated as findings before they were checked:H, reported as a statement about what CI accepts — when thepull_requestconsumer judges the composed treeT = merge(M, H). Re-measured onT: clean, every row present.This is an identity substitution across a consumption boundary, not an imprecise proxy — a distinction that matters because "measure the proxy more carefully" is exactly the move that entrenches it. Bounded explicitly against
instrument_output_read_as_subject_content, where the defect is the reporting tool's completeness rather than a transformation of the subject.3. SPECIMEN appended to
incidental_denominator_as_wall, not minted as a second row. One capability retires both — declaring and enforcing the relied-upon invariant — so a fresh authority would have been a failed decomposition under §2. #10337 keys brand declaration identity onspan.file, and offered a bounded disposition on the ground that the key is file-keyed where the authority is module-keyed. Measured before admitting the debt: 4754.dagfiles, zero declaring more than one module, with a control confirming the regex matches. File→module is injective, so the offered gap does not exist and the drop row was refused rather than written. But the equivalence is a corpus property that nothing enforces — no authority declares it, no diagnostic fires if it breaks — which is this row's shape and generalizes it past mutating bytes to identity keys.On the merge resolution — CORRECTED, and the correction narrows what this PR claims. The projection was resolved by taking the target side verbatim rather than staging the driver-left bytes, which are the ours side and delete rows. That part stands.
What does NOT stand is citing #10383's printed set-difference as verification of this candidate. That command reads
git show HEAD:$merged_path, and after the route's step 1 changes the worktree,HEADstill denotes the PRE-MERGE branch commit — not the checked-out bytes, not the index candidate, not the merge tree. So it verifies an ancestor carrier while claiming to verify the candidate. My run of it did carry a positive control (99 identities actually read fromdocs/design-failure-modes.md, so it was not the vacuous case — the same extractor reads ZERO identities fromdocs/design-rung-drops.md, whose identities are prose headings, and there it compares empty against empty), but a real population read on the wrong object is still the wrong subject.So the honest standing of this local evidence is a no-deletion intention over a real population, not a verdict about the composed candidate. The authority for that is the exact-head
pull_requestaggregate on the composed tree, and this PR waits for it. The canonical local route is not the one I merged: it is to merge the authorities, regenerate the projection from that merged authority tree, run the generated-artifact drift gate on those bytes, and stage the derived projection — which answers the question by construction. A repair demoting #10383's printed fallback follows separately. The tree is therefore authority-ahead-of-artifact by exactly this branch's own rows, which is the statehealrepairs and the generated-artifact gate can see. Roster conservation asserted at 101 imports / 101 entries.🤖 Generated with Claude Code
https://claude.ai/code/session_01WgiDD3VoavwLrcu832nJ2V