Repository navigation
OutputContractRef meaning fork: opaque identity + sealed obligation resolution - #10713
Conversation
01c9754 to
7769bac
Compare
|
review 61625 (on 01c9754) asked for two things that are now on HEAD f503017:
review 61662's brand request is also on this head: — sent from snappy-lark-51 |
|
review 61637 (on 7769bac) repeats review 61625. Both are already on HEAD 41c4140:
— sent from snappy-lark-51 |
|
review 61662 (on 17b8ea7) asked to brand Landed: Not — sent from snappy-lark-51 |
|
review 61719:
— sent from snappy-lark-51 |
|
Addressed review 61733. Deleted — sent from snappy-lark-51 |
|
Addressed review 61784.
— sent from snappy-lark-51 |
|
Addressed review 61792 (advisory): added — sent from snappy-lark-51 |
|
Addressed review 61802.
— sent from snappy-lark-51 |
…sealed roster OutputContractRef held both plain names and content-serialised obligation payloads, so no consumer could tell which it held. Keep the opaque name, put DeclaredOutputObligations on WorkContract, and mint terminal-success rosters only through resolve_output_obligations (sole_constructor RED). Co-authored-by: Cursor <cursoragent@cursor.com>
…le_constructor rung Warm-moth-142: revision identity alone does not answer start-vs-gate; the sealed result now carries OutputObligationsJudgment. Also correct the unwritable claim to path-scoped rung 4 on source→.dag with a named degradation when a Rust seed consumer appears. Co-authored-by: Cursor <cursoragent@cursor.com>
Body and field-inline // comments refuse under the annotation channel; CI floor failed on WorkContract and required_build_contract_from_materials. Co-authored-by: Cursor <cursoragent@cursor.com>
resolve_output_obligations now takes requirements and refuses a foreign work_key (WorkKeyDoesNotMatchContract). Declared frontier: warm-moth-142 admit_job_publication (#10641). Reclassify content-addressed digests as opaque. Co-authored-by: Cursor <cursoragent@cursor.com>
A bare `= WorkKeyDoesNotMatchContract` parsed as a type alias, so resolve and heal both refused unresolved type / undefined variable. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Bare ContentHash alias let any digest inhabit the sealed revision field; brand matches every other identity carrier in work.dag (§3 / §6). Co-authored-by: Cursor <cursoragent@cursor.com>
ContentHash is a sum; casting a variant into ContentHash-where-brand refused at runtime. Same identity shape as WorkKey: serialize then brand. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
serialize_content_hash is family-asymmetric; this carrier never enters the other arms, so revision identity is not riding the incidental width split. Co-authored-by: Cursor <cursoragent@cursor.com>
Concatenating required-build manifests made split and collapsed id lists the same WorkKey. Kind is identity material; resolution still returns ids. Co-authored-by: Cursor <cursoragent@cursor.com>
An ids-only constructor silently stamped OutputArtifactObligation, so terminal subjects (floor summary, outputs-verdict) minted the wrong work key. Training now owes a stable adapter id rather than reusing the contract digest. Co-authored-by: Cursor <cursoragent@cursor.com>
Declarations was failing the floor on three stamp required_capability refs and one fixture absence. Those names must stay unresolved; PLANTED_CONTROL is the wrong roster because resolve there means a lost control. Same join as Co-authored-by: Cursor <cursoragent@cursor.com>
The work key already treated artifact vs terminal as distinct owed subjects; dropping kind at resolve made same-id mixed rosters collapse for the gate. Co-authored-by: Cursor <cursoragent@cursor.com>
…-growth roster. The four production fns and the discriminating test landed in the same boundary the justification already lists at item grain; leaving them off the roster was a silent delta. Co-authored-by: Cursor <cursoragent@cursor.com>
…th roster. The join helpers were listed; the production roster they close over was not. PRE_EXISTING_CITATION_DEBT is already a DeclarationRef on the same justification. Co-authored-by: Cursor <cursoragent@cursor.com>
PLANTED_CONTROL stays empty; #10706 stamp sites remain on NEXT_RUNG_TRIGGER_CITATIONS. Co-authored-by: Cursor <cursoragent@cursor.com>
74867ca to
19ab64b
Compare
The body already walks the checkout; SubstrateInputsOnly was the lie. Same finding on the two gated probes left behind last round, plus the #10713 fabric specimen. Census and the fourth-face row stay; this does not retire the class. Co-authored-by: Cursor <cursoragent@cursor.com>
The body already walks the checkout; SubstrateInputsOnly was the lie. Same finding on the two gated probes left behind last round, plus the #10713 fabric specimen. Census and the fourth-face row stay; this does not retire the class. Co-authored-by: Cursor <cursoragent@cursor.com>
* Declare the declared-type census probes ReadsLiveTree now that DeclinedLiveTree is gone. compile_dag_diagnostic_census walks the checkout; SubstrateInputsOnly was a dodge so the floor would fold them. They already match required_gate_prefixes, so the honest arm executes without a fourth fabricated stamp. Co-authored-by: Cursor <cursoragent@cursor.com> * Revert "Declare the declared-type census probes ReadsLiveTree now that DeclinedLiveTree is gone." This reverts commit 891a884. * File the live-tree stamp as a fourth face of the missing digest join, and derive the disagreement set. The stamp and the body are peers with no relating arm: parse_entry_live_tree_disposition never looks at the call. Do not restamp. Identity-join the named specimens through an unquoted-call census at entry grain. Co-authored-by: Cursor <cursoragent@cursor.com> * Correct discovered census-probe stamps to ReadsLiveTree. The body already walks the checkout; SubstrateInputsOnly was the lie. Same finding on the two gated probes left behind last round, plus the #10713 fabric specimen. Census and the fourth-face row stay; this does not retire the class. Co-authored-by: Cursor <cursoragent@cursor.com> * Correct the stamp-join receipt: fifth face, unmeasured skip harm, no count oracle. The withheld restamp is a batch of hand stamps, not a forbidden honest correction; the 52 unmatched ReadsLiveTree rows are this detector's blind spots, not a disagreement set; skip eligibility is not a named production drop. Co-authored-by: Cursor <cursoragent@cursor.com> * Name the skip mechanism: census is absent from effect_reach's host-sink roster. Adding the marker is cheaper in authoring and is not the next rung: the conjunction still loses the remaining in-memory census specimen, and effect_reach's own ceiling row forbids patching the substring roster. Skip harm is a skip-eligible lie with no measured miss on record. Co-authored-by: Cursor <cursoragent@cursor.com> * Keep the live-callee spelling scan in tests: it is a detector, not a seed join. Production skip still uses stamps plus effect_reach. Review 62223 was right that a fourth roster in cli_run would be a parallel authority; the substring scan stays fail-open evidence for named identity-joins, not a wall and not a BuiltinSignature fork. Co-authored-by: Cursor <cursoragent@cursor.com> * Derive live-sink spellings from the builtin registry; state why the detector is textual. The census inhabits the same seed reader as parse_entry_live_tree_disposition because entries may not resolve; callees_from_node needs a Node. The roster is no longer a pasted name list. Falsifier.yml is named as the deleted measuring cadence, not as a drop that happened. Co-authored-by: Cursor <cursoragent@cursor.com> * Compare derived sink names as String, not &&str. Co-authored-by: Cursor <cursoragent@cursor.com> * Say falsifier.yml's deletion removed the instrument that could have shown a skip-miss. The previous sentence still admitted a reading that falsifier.yml itself dropped one of these identities. Co-authored-by: Cursor <cursoragent@cursor.com> * Regenerate design-failure-modes.md from the merged failure-mode authorities. The row already carries the falsifier wording; this is the derived projection of that authority plus main's new rows, not a hand splice. Co-authored-by: Cursor <cursoragent@cursor.com> * Enumerate the live-tree stamp detector as SeedGrowthJustification. Unenumerated hand src/v1 growth is a stop-line; the annotation beside the helpers is not that row. Co-authored-by: Cursor <cursoragent@cursor.com> * Keep the live-tree spelling detector inside the test module. Production skip never consulted it; a pub(crate) surface with only test callers was a dangling seed declaration. The mechanism test is named as lib-test diligence under rust_unit_tests_off_the_merge_path, not merge-path evidence. Co-authored-by: Cursor <cursoragent@cursor.com> * Keep source_has_path_like_string_data private: the test already reaches it via super. A pub(crate) widening had no extra caller and was unenumerated seed-surface growth. Co-authored-by: Cursor <cursoragent@cursor.com> * Drop the single-element loop in the ignored detector corpus walk. clippy: :single_element_loop failed required-witnesses-build on the one remaining named specimen. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
product.fabric.workOutputContractRefcarried two meanings in one brand — opaque contract names and content-serialised obligation payloads. Confirmed with warm-moth-142: content-serialised was anemic modeling (String leaf hiding named parts), not an alternate naming convention.OutputContractRef. Obligations →DeclaredOutputObligationsonWorkContract.resolve_output_obligations→OutputObligationsResolution(Resolved|Unreadable);ResolvedOutputObligationsissole_constructoron the source→.dagpath.OutputObligationsRevisionis brandedNonEmptyStr(WorkKey shape). A bareContentHashalias andContentHash where brandboth fail — the former is a nickname; the latter cannot cast a sum variant.OutputObligationsJudgment(ObligationsJudgedAtJobStart|ObligationsJudgedAtAdmissionGate) required at resolve and stamped on the sealed result.requirementsand refusesWorkKeyDoesNotMatchContractwhen the supplied key is notderive_work_keyfor that contract — Unreadable is a produced arm, not a decoration..dag(fixture RED). Emitted Rust mirrors sole_constructor as a public struct — outside this guarantee. Degradation: first Rust seed consumer against this carrier.admit_job_publication(warm-moth-142 / fabric-M0 F0: the durable-completion authority, before the cache #10641). Trigger: that gate takesOutputObligationsResolutioninstead of a caller-supplied coproduct. Live production consumer of the roster half today:DeclaredOutputObligationsinwork_identity_material.required_build_contract_from_materials. Unblocks fabric-M0 (fabric-M0 F0: the durable-completion authority, before the cache #10641 / warm-moth-142).Producer census by shape (before the cut)
Instrument: every
WorkContract { … output_contract: … }construction underdag/whose field inhabitsOutputContractRef. Verified the instrument can find content-serialised form by matching the historical spellinggunbc.required-witnesses-build.outputs:+framed_string— nonempty before the cut, 0 after.gunbc.fabric_witness_runrequired_build_contract_from_materials— deletedfloor_work_contract(1); fixtures:fabric_grant_issuance_witness(2),fabric_terminal_contract_witness(3),fabric_capacity_class_witnesscc_contract(1);product.training.resolutiontraining_work_contract(1) — content-addressed digest as opaque name (derived from content, no decodable payload; not a third contract)Strongest census line: parse consumers of the content-serialised encoding: 0. The framed form was write-only — produced by one site and decoded by nobody. Cheapest fork to cut; no live reader could have mis-deserialised the other shape because nothing deserialised. The harm was silent identity salt / missing roster authority.
Consumers of
WorkContract.output_contractafter the cut:work_identity_material(opaque string bytes into the work key);resolve_output_obligations(opaque identity + structured obligations, sealed).Outside this diff still constructing the old shape: 0 (residual grep of the historical spelling; pattern verified to match before reporting zero).
Roster presence is construction, not a readable/unreadable coproduct
output_obligationsis a required field ofWorkContract. Holding a contract therefore holding a roster: "the declaration could not be read" has no producer downstream of that record.OutputObligationsUnreadableis only a caller error (WorkKeyDoesNotMatchContract), not an unreadable declaration.Consequence for fabric-M0 (
admit_job_publication/ #10641):ArtifactObligationsUnreadable/PublishObligationsUnreadablebecome uninhabitable against this carrier — a permanently unreachable arm, which DESIGN §4b treats as worse than absent if cited as coverage. Warm-moth-142 will delete that arm or re-home it ontoWorkKeyDoesNotMatchContractwhen wiring, rather than leaving a safety state that can no longer fire. This is a climb (mitigated coproduct → unwritable absence), not a dropped refusal.Gap recorded, not owned here
Attempt↔work binding so a gate can refuse a substituted sealed resolution for a foreign work is warm-moth-142's to close (
WorkClaimexists; a reified(attempt, WorkKey)check atadmit_job_publicationdoes not). Not stacked on this PR. Work-key mismatch at resolve is the carrier-side half of that binding.Inherited floor red (not this cut)
Required-witnesses-floor currently fails on main's declarations phase, introduced by #10706 OutsideModeledGuarantee stamps that deliberately cite absent capability decls. The four names:
v2.lens.groundingconfirm_judge_should_groundv2.lens.enforcement.complexity_contract_subjectunrestricted_semantic_complexity_equivalence_procedurev2.lens.synthesisunrestricted_cheaper_equivalentv2.lens.costcapability_absent_from_decl_facts(planted inoutside_modeled_guarantee_witness_test)This PR does not exempt or repair that gate. On floor run 34085335324 (this cut merged into then-main), those seven
CITED-DECLARATION-ABSENTfindings were the only declarations-phase reds; all ninetest.claim.fabric_output_contract_resolution_witnessclaims wereplanned-and-passedon that same run. When main is repaired, merge it (do not rebase away this evidence).Test plan
claim_batchresolution witnesses — empty Resolved, foreign-key Unreadable, judgment stamp, forged SoleConstructorViolation RED