Skip to content

The field my own change made required left seven fixtures behind, and nothing measured it - #9646

Merged
briansrls merged 1 commit into
mainfrom
fix/training-capacity-class
Aug 28, 2026
Merged

briansrls merged 1 commit into
mainfrom
fix/training-capacity-class

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

gunbc#9542 added capacity_class to ExecutionRequirements as a required field. Seven training witness fixtures construct that literal and were not updated, so main has not compiled its witness corpus since 18:18Z. This adds the field and its import to all seven — two lines per file.

How it reached main — the mechanism, not the incident

#9542 merged while main was broken by a duplicate-definition pair, so every run died at Build the witness fold before the floor executed. It was approved and landed without ever being measured. Approvals never established that it worked; nothing did.

The defect surfaced the first time a floor ran to completion on a repaired main (33209193747), which is also the first run tonight whose red carried any information about a diff.

Why the value is CustomerExecutableCapacity

Decided on the model, not on what compiles. product/fabric/work.dag defines control-plane capacity as the cells "running our own scheduler, reconciliation, admission and receipt work", and states directly:

WHAT THIS FIELD IS NOT: it is not the executor's class. It is what THIS WORK REQUIRES.

A training run is not our scheduler, reconciliation, admission or receipt work — it is the customer workload the fabric exists to execute.

The counter-observation, and why it does not apply

Every other constructor in the tree passes ControlPlaneCapacity, and a peer declined to fill these in on exactly that ground — suggestive, not evidence. That caution was right. It loses because those five are control-plane because their subjects are: fabric_selection, fabric_terminal_contract and fabric_witness_run all model our own machinery. So the pattern is evidence for reading the field semantically, not for copying its value.

Recorded because a later reader will find seven fixtures disagreeing with every other constructor in the tree, and without this it looks like a mistake.

The field is inert here

Measured per file rather than in aggregate: all seven reference capacity_class zero times. They assert readback, checkpoint, resolution and reconciliation — never admission. So this changes no assertion in any of them, which is what makes it mechanical rather than a modeling decision with teeth.

Evidence

compile dag/test/claim/training_readback_witness_test.dag
  before: missing required field 'capacity_class' in literal of type 'ExecutionRequirements'
  after:  0 blocking error(s), 0 remaining capacity_class errors

What this does NOT do

It removes 7 of the 18 located failures in run 33209193747. The floor stays red on four families I do not own and have not touched:

file error
dag/extdeps/bmc/pid_control_program.dag (×4) Measure<…> vs Product(ZoneDemandValue)
dag/gunbc/source_integration_landing_spine.dag map unresolved on Optional, plus its frontier row count
dag/gunbc/live_deploy/repository_convergence_placement.dag no parameter primary_path
dag/test/claim/fabric/fabric_terminal_contract_witness_test.dag ExecutionGrant<String> declared vs ExecutionGrant<NonEmptyStr>

So #9598 still cannot go green, and neither can anything else. That last row is in the fabric tree and I checked it specifically: it is not in my diff, and I have not established whether #9542 caused it — so it needs whoever owns ExecutionGrant's parameterisation rather than a guess from me.

— sent from silent-bear-842

… nothing measured it

gunbc#9542 added capacity_class to ExecutionRequirements as a required
field. Seven training witness fixtures construct that literal and were not
updated, so main has not compiled its witness corpus since 18:18Z on
2026-08-28. This adds the field and its import to all seven.

WHY THE VALUE IS CustomerExecutableCapacity, decided on the model rather
than on what compiles. work.dag defines control-plane capacity as the cells
"running our own scheduler, reconciliation, admission and receipt work",
and states directly: "WHAT THIS FIELD IS NOT: it is not the executor's
class. It is what THIS WORK REQUIRES." A training run is not our scheduler,
reconciliation, admission or receipt work -- it is the customer workload the
fabric exists to execute.

THE COUNTER-OBSERVATION, AND WHY IT DOES NOT APPLY. Every other constructor
in the tree passes ControlPlaneCapacity, and a peer declined to fill these
in on exactly that ground -- suggestive, not evidence. That caution was
right. But those five are control-plane because their SUBJECTS are:
fabric_selection, fabric_terminal_contract and fabric_witness_run all model
our own machinery. The pattern is evidence for reading the field
semantically, not for copying its value. Recorded because a later reader
will find seven fixtures disagreeing with every other constructor, and
without this it looks like a mistake.

THE FIELD IS INERT HERE, measured per file rather than in aggregate: all
seven reference capacity_class zero times. They assert readback, checkpoint,
resolution and reconciliation, never admission. So this changes no assertion
in any of them, which is what makes it mechanical.

HOW IT REACHED MAIN, which is the mechanism rather than the incident: #9542
merged while main was broken by a duplicate-definition pair, so every run
died at "Build the witness fold" before the floor executed. It was approved
and landed WITHOUT EVER BEING MEASURED. Approvals never established that it
worked; nothing did. The defect was found the first time a floor ran to
completion on a repaired main.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@gunbai-bot gunbai-bot Bot mentioned this pull request Aug 28, 2026
@gunbai-bot

gunbai-bot Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

Measured on run 33211835142. The fix took, exactly and completely — and the number I put in this PR body was wrong, so I am correcting it in the same comment.

The located set, before and after, at identity grain

error occurrences distinct files
before (#9598 run 33209193747) 26 11
after (this PR, run 33211835142) 12 4

Cleared — exactly the seven this PR touches, and nothing else:

training_attempt_graph_witness_test.dag
training_checkpoint_witness_test.dag
training_execution_control_witness_test.dag
training_observation_cut_witness_test.dag
training_readback_witness_test.dag
training_reconciliation_witness_test.dag
training_resolution_witness_test.dag

New errors introduced: none. The set difference in the other direction is empty, so this diff cleared seven files and added nothing.

Correcting my own count

This PR body says "removes 7 of the 18 located failures." 18 was wrong. The true before-figure is 26 occurrences across 11 files — I had summed the families carelessly, counting each file once where the log reports every error twice (the floor compiles in two passes). The honest statement is:

26 → 12 occurrences, 11 → 4 files. This PR clears 14 occurrences across 7 files.

The error understated the total and therefore understated this fix's share (7 of 11 files, not 7 of 18 anything). I am correcting it because a wrong denominator in a PR body is the kind of figure a later reader quotes.

Why a red here is the evidence, not a consolation

A green check is impossible on this branch while four families I do not own remain on main, so a green would establish nothing — it would falsify my model of the floor, which compiles the corpus rather than the diff. The discriminating outcome is precisely this: red, with the located set dropped to 12 and my seven identities absent from it. That names what cleared instead of asserting a boolean, which is strictly more informative than a passing gate would have been.

What remains, and it is not mine

dag/extdeps/bmc/pid_control_program.dag                        x4
dag/gunbc/source_integration_landing_spine.dag                 x2 kinds
dag/gunbc/live_deploy/repository_convergence_placement.dag     x2
dag/test/claim/fabric/fabric_terminal_contract_witness_test.dag x2

These need rulings from owners who are not available — a Measure parameterisation, an ExecutionGrant type argument. I am deliberately not carrying them into this PR. gunbc#9634 combined two defects because they were byte-identical duplicates requiring no ruling; these require judgment, so combining them would not repeat #9634, it would repeat what #9634 avoided — swapping four loud breaks for four quiet wrong ones.

This PR is therefore merge-ready on evidence rather than on a check that cannot go green: discriminating RED is the pre-fix compile of the same entry, positive control is the post-fix compile at 0 blocking, and the corpus measurement above shows exactly the intended identities clearing with nothing introduced.

— sent from silent-bear-842

@gunbai-bot

gunbai-bot Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

Reconciling the counts, and widening my own remaining-work figure — my previous comment measured one phase and read as if it covered main's whole debt.

Both figures were right about different sets

figure what it counts
my 26 strict-preparation occurrences (13 unique, each reported twice — the floor compiles in two passes)
the 18 I called wrong 13 unique strict-prep + 5 declarations, across both phases

Neither is the other's denominator, which is why they never reconciled by inspection. 18 was not wrong — I retract that part of my correction. It was unique-failures-across-both-phases.

The reconciled measurement, both phases

strict-prep occurrences strict-prep unique declarations
before (#9598 run 33209193747) 26 13 5
after (this PR, run 33211835142) 12 6 5

Verified in this PR's own log, which states it outright:

required-ci: FAILED PHASE declarations (5 finding(s))

Where my last comment narrowed

I reported "12 occurrences across 4 files" remaining. That is strict-preparation only. It omits the declarations phase entirely, and those five failures are still on main, still blocking, and this PR does not touch them:

annotation_carrier_witness_test.dag 52:3, 58:12, 63:12, 84:24
  cites `test.fixture.frontier`, declared by no module          x4  CITED-MODULE-ABSENT
FIXTURE_CARRIER_CITATION_EXEMPTIONS stale row                    x1  CITATION-DEBT-ROW-STALE

They run in an earlier phase than strict-preparation, which is exactly why a strict-prep-shaped read misses them — the phase that fails first is not the phase people read.

So the honest remaining statement is five families, not four: the four I named plus this citation family — 12 strict-prep occurrences plus 5 declarations findings.

What is unchanged

This PR still clears exactly the seven files it touches, with an empty set difference in the other direction — nothing introduced. The reconciliation corrects what remains, which was never this fix's denominator.

And the caveat stands verbatim, because it is the distinction most easily skipped: this establishes that the seven capacity_class compile refusals are gone. It does not establish that the seven witnesses pass. Strict preparation still refuses, so no witness executed and no floor verdict exists on this branch. A cleared compile error is not a passing test.

— sent from silent-bear-842

@briansrls
briansrls merged commit 1573f21 into main Aug 28, 2026
0 of 3 checks passed
@briansrls
briansrls deleted the fix/training-capacity-class branch August 28, 2026 23:08
briansrls pushed a commit that referenced this pull request Aug 28, 2026
…ery PR's floor

All landed on main inside the masked window (#9612's parse refusal kept
the floor from typechecking anything); this branch is the first head to
reach strict preparation, so they surface here. Seven are ported
verbatim from #9646 (capacity_class on the training fixtures, value
CustomerExecutableCapacity per that PR's model reading — it no-ops when
that PR merges); four are fixed here:

- source_integration_landing_spine: the Optional-receiver '|> map' at
  the additional-continuation arm becomes a match (the module's own
  idiom two arms up), and the module's unresolved-method frontier row in
  v1/04_infer.dag is deleted per the diagnostic's own prescription — the
  deficit fully dissolves, so the row must not keep its ground.
- fabric_terminal_contract_witness_test: the positive-control receipt is
  bound as Receipt<NonEmptyStr> before the call, so the payload's P no
  longer infers String against the NonEmptyStr grant.
- repository_convergence_placement: drop the primary_path argument;
  repository_converge_wet derives it internally and no longer declares
  the parameter.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh
briansrls added a commit that referenced this pull request Aug 29, 2026
* Close the guarantee_rung_drop parse refusal and the generated-artifact drift the masked window accumulated

- guarantee_rung_drop.dag: restore the missing closing brace on the
  wall_deadline GuaranteeStall record (#9612); the unparseable module
  refused the whole module index, so both required lanes died before
  any drift adjudication could run.
- gitignore authority/model/emit: delete the seven hardcoded .py
  allowlist variants whose subjects the measurement bankruptcy and the
  plan-markdown cut deleted; drop the gate test fn that pinned those
  literal rows (a tree-copied oracle).
- generated_artifact.dag: repoint the two stage0 generated .dag
  ArtifactLocation rows to dag/gunbc/stage0/, where #9637 moved the
  files; the registry still named the old directory.
- Regenerate .gitignore, .gitattributes, and .githooks via
  generated_artifact_gate main_wet: .gitattributes drops the 41
  merge-driver rows for plan markdowns #9635 deleted (verified by
  executing expected_gitattributes()); .gitignore drops the dead
  allowlist rows and gains the derived ignore rows for authority-only
  plan markdowns; hook headers pick up the post-reorg githooks/ module
  paths.
- Delete dag/config/codegen_paths.dag: an orphan module no closure
  reaches, describing a layout that no longer exists.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh

* Remodel .gitignore: producer-declared workspace footprints with typed ignore reasons

Replaces gunbc.gitignore_model + gunbc.gitignore_authority (one nullary
variant per path, patterns restated in a central emit match — the shape
that let seven dead allowlist rows emit unnoticed) with a producer-owned
derivation:

- std.workspace_artifact: the agnostic shape — WorkspaceArtifact
  {pattern, meaning, reason} with a closed IgnoreReason vocabulary, and
  WorkspaceFootprint with CitedUpstream/RepoTool provenance.
- Each extdeps product declares its own footprint beside its citation
  (cargo, cargo-tarpaulin, CPython/PEP 3147, npm, tmux, macOS Finder,
  Windows Explorer, JetBrains, VS Code, Vim, Emacs, dotenv); repo-chosen
  locations are parameters, so policy stays a workflow fact.
- gunbc.repo_workspace joins extdeps footprints with the repo's own
  tools' declarations (each naming its owner module) — onboarding a
  concept now naturally carries what files it introduces, what they
  mean, and why they are untracked.
- gunbc.gitignore_emit becomes a pure renderer: it declares no pattern
  of its own; the emitted file carries each pattern's reason and
  meaning as comments. Generated-artifact rows remain a separate arm
  derived from gunbc.generated_artifact commit policy.
- src/v1/runtime_rust.dag: align the emitted trace_mark doc comment
  with the #9635 hand-edit of the generated v1_rt.rs mirror, restoring
  regen first-generation equality (drift was masked on main by the
  guarantee_rung_drop parse refusal).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh

* Install the stage0 mirror for std.workspace_artifact

The new module entered the v1 seed closure, so --required-regen refused
with 'emitted surface has no committed mirror'; this installs the
candidate the regen run produced (std_workspace_artifact.rs plus its
lib.rs module line), unmodified.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh

* Install the regen-produced stage0 mirrors the remodel drifted

--required-regen names four drifted surfaces, each a direct consequence
of this branch's edits: extdeps_cargo.rs (cargo.dag gained its workspace
footprint), v1_compiler_runtime_rust.rs and v1_rt.rs (the trace_mark doc
comment realignment), and emitted_population.rs (the population gained
std_workspace_artifact). All four installed from the regen candidate
tree unmodified.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh

* Use concat, not append, for the cargo footprint list join

The emitted v1_rt::append takes (list, one item) while the interpreter's
append(list, items:) concatenates lists — cargo.dag is the first
mirrored seed module to hit that divergence, so its emitted mirror
failed to compile (E0308 at extdeps_cargo.rs:277). concat has the same
list-concatenation meaning in both realizations. The regenerated mirror
follows in the next commit once the fixed-point verification completes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh

* Install the second-generation mirrors: concat-form extdeps_cargo, corrected v1_rt

extdeps_cargo.rs is the regenerated mirror of the concat fix (compiles
clean; verified by cargo locally). v1_rt.rs corrects a first-generation
install in the previous mirror commit: that candidate was emitted by the
pre-fix binary, so it reverted the trace_mark doc comment while the
generator mirror in the same commit moved forward; this is the second
generation's output, matching what the current generator emits.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh

* Port two masked-window main defects this branch unblocked CI into: frontier fixture exemptions, BMC demand-curve type error

Both pre-date this branch and were invisible while #9612's parse refusal
kept every required phase from running; this branch's head is the first
to reach the declarations census and the floor's strict preparation, so
they surfaced here.

- declaration_index.rs FIXTURE_CARRIER_CITATION_EXEMPTIONS: #9607
  re-pointed test.claim.annotation_carrier's planted rows at the
  deliberately-fictional test.fixture.frontier without updating the
  exemption roster. Add the four rows for the new deliberately-absent
  citations and delete the spent extdeps.network.mac row the census
  itself demands removed.
- extdeps/bmc/pid_control_program.dag curve_points_agree: the output
  half compared a ZoneDemandValue where decimal_measures_agree declares
  a Measure; compare the ExactDecimal magnitudes directly (verified: the
  entry now compiles with 0 blocking diagnostics).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh

* Close the remaining eleven strict-preparation diagnostics blocking every PR's floor

All landed on main inside the masked window (#9612's parse refusal kept
the floor from typechecking anything); this branch is the first head to
reach strict preparation, so they surface here. Seven are ported
verbatim from #9646 (capacity_class on the training fixtures, value
CustomerExecutableCapacity per that PR's model reading — it no-ops when
that PR merges); four are fixed here:

- source_integration_landing_spine: the Optional-receiver '|> map' at
  the additional-continuation arm becomes a match (the module's own
  idiom two arms up), and the module's unresolved-method frontier row in
  v1/04_infer.dag is deleted per the diagnostic's own prescription — the
  deficit fully dissolves, so the row must not keep its ground.
- fabric_terminal_contract_witness_test: the positive-control receipt is
  bound as Receipt<NonEmptyStr> before the call, so the payload's P no
  longer infers String against the NonEmptyStr grant.
- repository_convergence_placement: drop the primary_path argument;
  repository_converge_wet derives it internally and no longer declares
  the parameter.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh

* Resolve the three remaining audit leftovers: delete the import-strip dumps, register js_site's generated pages, keep the bound probe receipt

- docs/plans/import-strip-measurement/ and import-strip-residual-ledger.tsv:
  deleted as unconsumed transcription per the measurement-bankruptcy
  principle (unconsumed transcription disappears; consumed evidence stays
  attached to its consumer). Neither is bound in gunbc.doc_graph_roots —
  the bound import-strip doc is a different, surviving plan markdown. The
  citing plan's prose now records the deletion.
- dag/examples/js_site/generated/: the six committed generated files were
  produced by examples.js_site_emit and adjudicated by nothing. They are
  now JsSitePageArtifact rows in gunbc.generated_artifact (derived from
  the page roster, not hand-listed), located by js_site_emit's own path
  fns and generated through its pure per-page projections, so the
  generated-artifact drift phase adjudicates them like every other
  committed generated artifact.
- docs/probes/leading_minus_continuation_silently_truncates_2026-08-23.md:
  no change, deliberately — gunbc.doc_graph_roots already binds it as
  consumed evidence under an operator ruling that reverted its deletion.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh

* Install the infer mirror for the frontier-row deletion; adjudicate js_site under the drift gate

- src/v1/stage0/src/v1_compiler_infer.rs: regenerated mirror of the
  04_infer.dag frontier-row deletion; --required-regen reports
  first_generation_equal=true on this tree after one rebuild, and the
  landing_spine entry now compiles with 0 blocking diagnostics.
- generated_artifact_emit: the extra-validation match gains its
  JsSitePageArtifact arm (main_wet's fail-closed non-exhaustive refusal
  caught the omission).
- .gitattributes: regenerated; the six js_site pages join the derived
  merge-driver population. main_wet regenerates the pages byte-identical
  to what was committed, so registration changes no page content.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh

* Converge v1_rt on the authority's citation text after the merge of main

Main closed the v1_rt drift by restoring the mirror to the old
docs/plans/ci-floor-fractal-gantt.md citation; this branch had moved the
authority to 'ci-floor-fractal-gantt (plan doc deleted 2026-08-28)'.
Both were internally consistent and disagreed. The deciding fact: the
plan doc does not exist on the merged tree (#9635 deleted it;
gunbc.plans.ci_floor_fractal_gantt is authority-only), so main's
direction re-landed a citation to a nonexistent file — the §3
stale-citation class. The authority-side text survives the merge in
runtime_rust.dag and its generator mirror; this installs the emitted
v1_rt.rs so the pair agrees, verified by --required-regen on this tree.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CQPnTvxdvVjBLzjL6bcWVh

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant