Repository navigation
Fleet acquisition census: lots, tax standing, and srv1-srv4 assemblies - #11199
Conversation
…no gate compiles with it (#11100) * File the class: a change green in one repository breaks another that no gate compiles with it One row under dag/gunbc/recurring_failure_mode/. INVALID STATE: a merge admitted on a gate whose compiled closure is a strict subset of the closure its result governs. The specimen is gunbc#11057 (a correct public change, green on public CI) against gunbc-private, whose CI builds against public main: eleven private witnesses used a bare ExitFailure as their failure arm, so private_roster_main stopped resolving ENTIRELY -- 0 PASS, not a partial failure -- and every private PR plus private main went red at once. Repaired by hand in gunbc-private#82. The totality is part of the class: a zero reads as infrastructure, not as a semantic break, so the first hypothesis is "our CI is broken" rather than "an upstream change removed a construction we depend on". Bounded against three neighbours. NOT the same-repo jointly-incompatible class (gunbc.plans.ci_merge_freshness, instance 1 recorded by gunbc#10984; gunbc.plans.joint_incompatibility_claim_join, scoped by gunbc#11044): there the deficit is FRESHNESS and one gate can compile the union, which is why a merge queue is the ceiling; here the deficit is COVERAGE and no gate on either side has both repositories in scope. NOT a published-API break: B pins A's main branch, so there is no release boundary and no deprecation window. NOT the stale-merge-base class: both sides were current. RUNG mitigatable. CEILING argued at mechanically preventable, not asserted: the question is decidable (compile A+B), but the invalid state stays writable, and what stands between here and rung 3 is a COST -- doubling A's gate on a fleet at capacity -- which is not a decidability answer. TRIGGER named as the capability: a gate whose compiled closure includes every repository that builds against this one, with the dependent set DISCOVERED rather than hand-listed; a trigger naming one dependent would retire the class while a third stayed invisible. EVIDENCE, executed against a gunbc built from this tree: - GREEN: docs_projection_gate regen exits 0, writes docs/design-failure-modes.md (1752004 bytes) carrying the row's text. - RED: mutating the fifth receipt (the RUNG sentence) from its String to the Int 42 -- a consumed element of the List<String> that gunbc.recurring_failure_mode::authored folds -- refuses with a typed, located diagnostic at :26:5 (expected String, got Int), exits 1, and PRODUCES NO ARTIFACT AT ALL: with the projection deleted first, the run leaves docs/design-failure-modes.md absent. The text is removed, not stale. - RESTORED: the same regen exits 0 and is byte-identical to the first green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013YcKjgpfRzhjNJrjaNZjJG * Rewrite the class as a split between closure and merge authority; correct the repair provenance; migrate to the join separator Three blocking findings from quick-ibex-468, all verified against the tree before acting on them. 1. THE BOUNDARY CONTRADICTED ITS OWN MECHANISM. The row asserted both "B's gate compiles A+B, but it only ever runs for changes authored in B" and "no gate on either side ever had both repositories in scope". Those cannot both hold, and the second is both false and the weaker claim: B's gate has exactly the right closure. The invalid state is now stated as NO GATE ELIGIBLE TO BLOCK A'S MERGE COMPILES BOTH REPOSITORIES -- a split between two properties a gate normally holds together, (i) compiling the closure a merge governs and (ii) being able to refuse that merge. In a one-repository lane they are the same gate and the split is invisible. That is not a wording fix; it re-derives the ceiling and the trigger. The ceiling previously argued about the cost of building a second full compile of B inside A's gate. Under the corrected statement the compile ALREADY EXISTS AND ALREADY RUNS, so the repair is to BIND it to A's merge admission -- runner time on an existing job, not a new one. Rung 3 is still not claimed, and now for the right reason: not cost, but that the binding is ENROLLMENT and the invalid state stays writable. The trigger gains its missing conjunct and is now three: refusal authority over this repository's merges, closure covering every dependent, and a DISCOVERED dependent set -- each separately able to be satisfied while the class stays live. 2. THE REPAIR PROVENANCE WAS WRONG. The row cited gunbc-private#82 as the repair; #82 CLOSED UNMERGED at 21:03:18Z. The repair that landed is gunbc-private#81 (1b7f87e88f), merged 20:55:06Z -- eight minutes earlier. A failure-mode authority about merges was citing an unmerged branch as the event that restored main. Corrected with the genealogy kept rather than the number swapped, because two lanes independently building the same repair is itself a fact about this class: with no signal naming the origin, every observer starts from the symptom and duplicated repair effort is the default. The row now says so, and says that its own mis-citation was produced by the same condition. 3. #11047 CHANGED THE RENDERING CONTRACT AND THIS FILE MISSED IT. RecurringFailureMode.authored is now join(r.receipts, " "); the trailing-space convention is deleted. All eleven receipts still carried trailing spaces, which would have rendered TWO spaces at every boundary. Migrated: 0 trailing-space receipts, and 0 double-spaces in the rendered row, measured against a pre-existing row on the same page as control. Note the shape, because it is this row's own class applied to this row: the file is additive and imports nothing anyone changed, and was still incompatible -- the coupling is the RENDERER, not the import graph. Judging it safe because "a single additive file no module imports" is the same closure error the class describes. EVIDENCE RE-RUN ON A TREE CONTAINING #11047 (the prior evidence was real and proved the row against a producer that no longer exists): - GREEN: regen exit 0, writes docs/design-failure-modes.md (1786641 bytes); corrected invalid-state text and #81 provenance both render; 0 double-spaces. - RED: fifth receipt -> Int 42 refuses at :30:5 (expected String, got Int), exit 1, and with the projection deleted first NO ARTIFACT IS PRODUCED. - RESTORED: exit 0, byte-identical to the green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013YcKjgpfRzhjNJrjaNZjJG --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ment-only enrolment gate (#11183) * File two failure-mode classes: admitted reclaim billed by first touch, and an increment-only enrolment gate. Both classes were measured today; the rows carry the uncertainties rather than rounding them into coverage. Co-authored-by: Cursor <cursoragent@cursor.com> * Close the wrapping parenthesis that spanned receipt bullets in both new failure-mode rows. The list balanced as data; the combined projection renders one receipt per bullet, so the opener and closer became orphaned across bullets. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Completed purchases now have lots and typed tax arms (transcribed, derived, attested, unread) without publishing amounts, and srv1-srv4 are assemblies with dredge obligations rather than invented component receipts. Co-authored-by: Cursor <cursoragent@cursor.com>
A product SalesTaxRateMillionthsOfUnity type was a third dimensionless-ratio nickname; coverage by equal list lengths still admitted swapped lots. Rates now inhabit Measure<Dimensionless, Micro, Nat>, and lot_tax_covers_ledgers joins ledger identities to tax rows. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed review 64736 (dashboard Sales-tax rate carrier. Deleted Tax coverage join. |
… it. A product sales_tax_rate constructor and bare Nat millionths rows were a third dimensionless-ratio nickname. The Micro-scale carrier now sits beside Percent/BasisPoint; NJ and NYC rates are that carrier, not a unit-in-the-identifier Nat. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed review 64757 (dashboard Micro-scaled ratio home. Deleted Statute rows. NJ 6.625% / UEZ 3.3125% and NYC 8.875% are |
…er acquired. Census already recorded Dynatron W1 purchases for srv3/srv4; the assembly had marked those components unrecorded, and the shared tax obligation said no acquisition existed. Coolers now bind the census lots, unread tax copy matches the DIMM row, and PartsPerMillion consumes the dimensionless ppm factor. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed review 64776 (dashboard Cooler meaning fork. Tax unreadness copy. Replaced ppm factor. |
… identity. first_ordinal was the current ledger length, so a duplicate of index 0 reported 5,5. Coverage and assembly checks also used length/count literals; they now join named lots, components, and containments. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed review 64792 (dashboard Located duplicate. Count oracles. Remote compile of |
…s annotations. Those NonEmptyStr declarations had no fold and were commentary wearing semantic data. The cited effective date and NYC composition stay on the rate rows as //, which is the quarantine §4c requires. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed review 64813 (dashboard Deleted |
Tax and assembly each minted contain/cover and six predicate folds that differed only by equality or standing. Those now consume list_any, list_member, list_cover, list_count_by, and list_select_by. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed review 64823 (dashboard Membership / cover. Predicate family. Remote compile of |
…n by identity. list_any/select_by/count_by re-minted substrate methods; keep only caller-eq membership/cover. Omit Mt. Collins by lot identity, and refuse assembly cover when a rostered component is dropped. Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
fleet_acquisition_ledgerspopulation whose witness fails if the Mt. Collins lot is omitted.CI
This PR currently has no GitHub checks and will not get any while it is based on
session/royal-koi-731. The witness workflow only triggers on basemain. A stacked PR renders as pending, which is silence, not green. Do not infer that CI passed.When #11182 lands, retarget with
gh pr edit 11199 --repo gunb-ai/gunbc --base main. Until then the only execution evidence is local/remotegunbcruns of the three witness modules below — and those runs are incomplete relative to the required floor (a stacked base was required to avoid forking #11182's files).Census derived
Floor, not closed. Joined acquired/received/owned = 134 across 14 lots.
Could not close
Based on #11182 (
session/royal-koi-731) so Spark lots are not restated.Test plan
main: required witness lanes actually runtest.claim.fleet_acquisition_census_witnessderives 134 and drops to 114 without Mt. Collinstest.claim.lot_sales_tax_witnessdistinguishes transcribed vs derived vs attested and refuses a repeated lottest.claim.fleet_host_assembly_witnessbinds four boards and keeps other components unrecorded