Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 3 additions & 18 deletions .github/workflows/witnesses.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,24 +32,9 @@ jobs:
- name: Build the witness fold
id: build_witness_fold
run: |
cargo build --release -p v1-compiler --bin claim_executor --bin gunbc --bin v1_src_dag_parse
- name: src/v1 .dag sources parse
cargo build --release -p v1-compiler --bin claim_executor --bin gunbc
- name: "Required CI: parse, regen, regen determinism, witness floor"
run: |
ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
cd "$ROOT" && "$ROOT/target/release/v1_src_dag_parse"
- name: "Regen fixed point: first generation matches committed candidate"
id: required_regen
run: |
ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
"$ROOT/target/release/claim_executor" --required-regen --source-root "$ROOT/dag" --source-root "$ROOT/src/v2"
if: "!cancelled() && steps.build_witness_fold.outcome == 'success'"
- name: "Regen determinism: G0 emit reproduces itself on a second pass"
run: |
ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
"$ROOT/target/release/claim_executor" --required-regen-fixed-point --source-root "$ROOT/dag" --source-root "$ROOT/src/v2"
if: "!cancelled() && steps.required_regen.outcome == 'success'"
- name: All witnesses (one prepared subject, one fold)
run: |
ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
"$ROOT/target/release/claim_executor" --required-floor --source-root "$ROOT/dag" --source-root "$ROOT/src/v2"
"$ROOT/target/release/claim_executor" --required-ci --source-root "$ROOT/dag" --source-root "$ROOT/src/v2"
if: "!cancelled() && steps.build_witness_fold.outcome == 'success'"
2 changes: 1 addition & 1 deletion DESIGN.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dag/gunbc/ci_layer_roots.dag

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dag/gunbc/design_document.dag

Large diffs are not rendered by default.

35 changes: 27 additions & 8 deletions dag/gunbc/fabric_witness_run.dag
Original file line number Diff line number Diff line change
Expand Up @@ -49,17 +49,36 @@ import std.types { String, List }
// about where or when it runs -- scheduling facts live in ExecutionRequirements
// beside it, so revising a thread estimate cannot mint a new semantic Work.
//
// Two steps, not one, because the workflow gates them separately and the v1
// parse gate is a blocking step in its own right: collapsing them into one step
// would make a parse failure and a floor failure indistinguishable in the
// receipt, which is the distinction gunbc#8466 -> #8519 was paid to learn.

// ONE STEP, FOUR PHASES (2026-08-20). This read "Two steps, not one, because the
// workflow gates them separately and the v1 parse gate is a blocking step in its
// own right: collapsing them into one step would make a parse failure and a floor
// failure indistinguishable in the receipt, which is the distinction
// gunbc#8466 -> #8519 was paid to learn."
//
// THE CONCERN WAS RIGHT AND IS NOW BETTER SERVED, which is why the row changed
// rather than the concern being dropped. The workflow no longer gates the phases
// separately -- the operator directed that the sequencing move out of the GitHub
// Actions step list and into the binary -- so a contract listing two steps is a
// SECOND, now-false description of a job shape that has one. What made the two
// steps worth having was the receipt's ability to say WHICH part failed, and that
// distinction survives at a finer grain: `--required-ci` reports four phases and
// prints `FAILED PHASE <name>` per failure, so parse, regen, regen-determinism
// and floor are four distinguishable outcomes where there were two. Measured on
// the first CI run of the composed step (32347573121), which reported
// `phases_run=4 failed=2` and named both -- a regen drift AND a floor failure --
// where a step ladder would have surfaced them one merge at a time.
//
// WHAT THIS DOES COST, stated rather than glossed: resumability was per-step, so
// a green parse could previously be receipt-satisfied and skipped on a rerun.
// One step means one receipt and the whole run repeats. That is a real
// consequence of the consolidation, not an oversight, and the phase-grain
// resumability that would restore it belongs with the cost basis rather than
// here.
fn floor_work_contract(source: SourceManifestRef) -> WorkContract {
WorkContract {
program: "gunbc.claim_executor",
steps: [
WorkStep { step_id: "v1-dag-parse", resumability: ReceiptSatisfiable },
WorkStep { step_id: "required-floor", resumability: ReceiptSatisfiable },
WorkStep { step_id: "required-ci", resumability: ReceiptSatisfiable },
],
source: source,
inputs: floor_inputs_manifest_ref(),
Expand Down Expand Up @@ -137,7 +156,7 @@ fn floor_run_command() -> ArgvCommand {
ArgvCommand {
argv: fold(
witness_layer_roots,
init: ["target/release/claim_executor", "--required-floor"],
init: ["target/release/claim_executor", "--required-ci"],
f: fn(acc, root) { append(acc, items: ["--source-root", root]) },
),
}
Expand Down
Loading