Skip to content

Falsifier execution topology: four-job split + ColdCorpusExecution - #7998

Closed
gunbai-bot[bot] wants to merge 6 commits into
mainfrom
session/royal-ferret-75
Closed

gunbai-bot[bot] wants to merge 6 commits into
mainfrom
session/royal-ferret-75

Conversation

@gunbai-bot

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

Copy link
Copy Markdown
Contributor

Summary

  • Splits affected-set-falsifier into four jobs per operator ruling (proud-bear-834 / adhoc-8b992195-d13): falsifier-build (artifacts only), selection-control, cold-corpus (needs: [falsifier-build] alone — not selection-control), and aggregate-verdict (always() && !cancelled()).
  • Adds narrow carrier gunbc.falsifier_cold_corpus_execution with ColdCorpusExecution = CorpusExecuted | CorpusNotRun { cause } so a workflow failure is never read as “falsifier found a regression.” Cites the pre-authorized follow-up in gunbc.falsifier_run_control falsifier_control_prerequisite_note.
  • aggregate-verdict writes target/falsifier-cold-corpus-execution.json and fails red if either arm is red; CorpusNotRun arms name infrastructure (build unavailable, corpus skipped/cancelled).

Ownership: falsifier_workflow.dag only (confirmed with calm-fox-748). No changes to falsifier-alert.yml, claim_executor.rs, or floor_component_receipt.dag.

Specimen: run 31181460723 — selection control failed in falsifier-build and the entire falsifier job was skipped.

Test plan

  • Witness updates in falsifier_workflow_witness_test.dag (topology order, cold-corpus needs build-only, selection-control placement, ColdCorpusExecution classification fixtures)
  • CI: falsifier_workflow_witness_test + generated-artifact drift on falsifier.yml
  • Acceptance bar (post-merge): first scheduled falsifier run shows cold-corpus executed (non-skipped) even when selection-control is red; compile-clean and native-cache cold controls non-skipped per falsifier_control_prerequisite_execution_proof_note; target/falsifier-cold-corpus-execution.json reads corpus-executed when build succeeded

Made with Cursor

gunbc-ci-auto-heal and others added 6 commits August 7, 2026 17:39
When selection-control failed inside falsifier-build, the entire corpus job was skipped (run 31181460723), conflating infrastructure failure with falsifier regression. This separates build, selection-control, cold-corpus (needs build only), and aggregate-verdict, and models ColdCorpusExecution in gunbc.falsifier_cold_corpus_execution so CorpusNotRun is distinguishable from corpus redness.

Co-authored-by: Cursor <cursoragent@cursor.com>
aggregate-verdict now downloads the cold-corpus receipt artifact and emits
CorpusExecuted only when the file is present and parses; failures before
upload classify as CorpusNotRun { cold-corpus-failed-before-receipt }.
Witnesses distinguish ran-and-red from failed-before-running.

Co-authored-by: Cursor <cursoragent@cursor.com>
In .dag a newline terminates an expression, so continuation lines
beginning with + are parse errors. Collapse job backstop sums onto one
line per ci_workflow.dag idiom; same fix in the witness oracle.

Co-authored-by: Cursor <cursoragent@cursor.com>
v2 resolve treats bare ${VAR} inside String data as dag interpolation.
Use $\{VAR} per string_brace_escape_witness_test so BUILD_RESULT,
COLD_RESULT, SELECTION_RESULT, and FLOOR_RECEIPT_PRESENT remain
shell syntax while ${{ needs.* }} stays GHA expression syntax.

Co-authored-by: Cursor <cursoragent@cursor.com>
Marked Scaffold disposition on falsifier_aggregate_verdict_script;
receipt JSON literals route through classify_cold_corpus_execution
helpers in falsifier_cold_corpus_execution. Transport remains
concat-built shell — dissolve-on bash-emit / shell→intent Phase 2.

Follow-up PR lane: cold-corpus-receipt-artifact-absent arm still
outstanding. Side branch preserves WIP; parent session/royal-ferret-75
parse fix landed separately on #7998.

Co-authored-by: Cursor <cursoragent@cursor.com>
Mark falsifier_aggregate_verdict_script as Scaffold with dissolve-on;
emit receipt JSON via aggregate_shell_receipt_* builders rooted in
classify_cold_corpus_execution / cold_corpus_execution_receipt_json
(build cancelled/skipped no longer collapsed to build-job-failed).
Escape $\{VAR} in concat shell literals for v2 resolve. Witnesses:
YAML embeds builder JSON, distinguishes build-cancelled/skipped tags,
and identity-joins each builder to receipt_json authority.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

Addressed review 50231 (REQUEST_CHANGES) in cdc54b50d0d.

Scaffold discipline — falsifier_aggregate_verdict_shell_emit_scaffold (Disposition = Scaffold, dissolves_to: SingleAuthority) now binds falsifier_aggregate_verdict_script. The emitted script carries the 🟡 dissolve-on: header from falsifier_aggregate_verdict_shell_emit_dissolution_trigger. Witness: aggregate_verdict_shell_has_dissolve_on_marker.

Single receipt authority — Removed the hand-written JSON literals from the inline shell string. Production run: is built from falsifier_aggregate_verdict_script(), which calls aggregate_shell_receipt_*() helpers; each helper is cold_corpus_execution_receipt_json(classify_cold_corpus_execution(...)). Build arms now distinguish cancelled/skipped/failed (separate shell branches + BuildJobCancelled / BuildJobSkipped tags). Witnesses: aggregate_verdict_shell_receipt_literals_match_model (emitted YAML embeds each builder JSON), aggregate_verdict_shell_distinguishes_build_cancelled_from_failed, and aggregate_shell_receipt_builders_are_receipt_json_authority (identity join at model grain, not substring-only).

v2 resolve — Shell ${VAR} references in concat literals escaped as $\{VAR} per string_brace_escape_witness_test (fixes regen/heal undefined-variable refusal on BUILD_RESULT et al.).

Transport remains concat-built bash (scaffold, not wall) — dissolve trigger names bash-emit / shell→intent Phase 2.

— sent from royal-ferret-75

@gunbai-bot

gunbai-bot Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

Acknowledging review 50252 (REQUEST_CHANGES) — deliberately unaddressed on this HEAD per lane STOP-PUSH (parent proud-bear-834, 2026-08-07).

Finding is correct: .github/workflows/falsifier.yml at cdc54b50d still carries the pre-scaffold aggregate-verdict shell (any non-success build → hand-written build-job-failed JSON). The .dag model on this HEAD routes through falsifier_aggregate_verdict_script() / aggregate_shell_receipt_* rooted in classify_cold_corpus_execution / cold_corpus_execution_receipt_json, with witnesses on expected_falsifier_yml(). Committed YAML is parallel representation until regen.

CI on this HEAD (run 31208438888): build + regen green; heal_generated_artifacts red with HealAuthorCommitRequired author_commit_paths=.github/workflows/falsifier.yml (heal ran main_wet, detected drift, could not author-commit workflow path from Actions); ci red as upstream-heal failure only.

Intended fix (not pushed): gunbc run --source-root dag --source-root src/v2 --entry dag/tools/generated_artifact_gate.dag --function main_wet → commit regenerated .github/workflows/falsifier.yml.

No further commits on this PR until freeze lifts; follow-up can land as a separate PR if needed.

— sent from royal-ferret-75

briansrls pushed a commit that referenced this pull request Aug 8, 2026
* Split falsifier cadence into four jobs with typed cold-corpus execution.

When selection-control failed inside falsifier-build, the entire corpus job was skipped (run 31181460723), conflating infrastructure failure with falsifier regression. This separates build, selection-control, cold-corpus (needs build only), and aggregate-verdict, and models ColdCorpusExecution in gunbc.falsifier_cold_corpus_execution so CorpusNotRun is distinguishable from corpus redness.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix CorpusExecuted to require floor-component receipt, not job status.

aggregate-verdict now downloads the cold-corpus receipt artifact and emits
CorpusExecuted only when the file is present and parses; failures before
upload classify as CorpusNotRun { cold-corpus-failed-before-receipt }.
Witnesses distinguish ran-and-red from failed-before-running.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix falsifier backstop plus chains that broke .dag parse.

In .dag a newline terminates an expression, so continuation lines
beginning with + are parse errors. Collapse job backstop sums onto one
line per ci_workflow.dag idiom; same fix in the witness oracle.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Escape shell vars in aggregate verdict script string literal.

v2 resolve treats bare ${VAR} inside String data as dag interpolation.
Use $\{VAR} per string_brace_escape_witness_test so BUILD_RESULT,
COLD_RESULT, SELECTION_RESULT, and FLOOR_RECEIPT_PRESENT remain
shell syntax while ${{ needs.* }} stays GHA expression syntax.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Scaffold: aggregate verdict shell receipt builders (not for #7998).

Marked Scaffold disposition on falsifier_aggregate_verdict_script;
receipt JSON literals route through classify_cold_corpus_execution
helpers in falsifier_cold_corpus_execution. Transport remains
concat-built shell — dissolve-on bash-emit / shell→intent Phase 2.

Follow-up PR lane: cold-corpus-receipt-artifact-absent arm still
outstanding. Side branch preserves WIP; parent session/royal-ferret-75
parse fix landed separately on #7998.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Address review 50231: scaffold shell + receipt authority join.

Mark falsifier_aggregate_verdict_script as Scaffold with dissolve-on;
emit receipt JSON via aggregate_shell_receipt_* builders rooted in
classify_cold_corpus_execution / cold_corpus_execution_receipt_json
(build cancelled/skipped no longer collapsed to build-job-failed).
Escape $\{VAR} in concat shell literals for v2 resolve. Witnesses:
YAML embeds builder JSON, distinguishes build-cancelled/skipped tags,
and identity-joins each builder to receipt_json authority.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Distinguish cold-corpus receipt artifact absent from failed-before-receipt.

When cold-corpus succeeds but the floor-component receipt never arrives,
classify as ColdCorpusReceiptArtifactAbsent instead of lumping it with
pre-run infrastructure failures — keeps falsifier cadence noise honest.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Regenerate falsifier.yml for receipt-artifact-absent topology.

Adds scoped emit_falsifier_yaml tool so falsifier workflow drift can be
refreshed without the full main_wet artifact pass.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix aggregate verdict shell: receipt redirect and grep guard.

shell_printf_line's trailing newline split printf from the file redirect,
truncating the cold-corpus execution receipt to zero bytes. Keep redirect
on the same line via bash_escape_for_double_quotes. Remove spurious ] from
the floor-receipt schema grep test (review 50484).

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix falsifier yaml literal witness to match bash-escaped shell bytes.

aggregate_verdict_shell_receipt_literals_match_model compared raw JSON
to emitted printf arguments; the workflow carries bash_escape_for_double_quotes
form, so the witness now pins the same encoding the shell actually runs.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Restore generated_artifact import dropped in bash-escape witness fix.

Re-adds FalsifierYamlArtifact and artifact_path for falsifier_artifact_path_is_workflow_file (review 50504).

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix floor witness reds: registry collision on live_tree and doc-graph roots.

g2_implies_reads_live_tree_for_roster_gate compared imported live_tree_disposition
against ReadsLiveTree, but the merged item_registry bare-name lookup could resolve
SubstrateInputsOnly from another witness file; route the roster-gate disposition
through a uniquely named entry helper returning ReadsLiveTree.

doc_graph floor witnesses now call doc_graph_floor_orphan_clean_holds and
doc_graph_floor_clean_holds defined in gunbc.doc_graph_roots so roots are derived
inside the authority module during discovery-corpus batch runs.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Enroll roster-gate live_tree disposition helper for test-module hygiene.

Adds roster_gate_entry_live_tree_disposition_is_reads_live_tree so the
cross-module disposition export is reachable from a test fn in the same
*_test.dag file (CI naming hygiene refused the orphan plain fn).

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix CI admission refusal for offline roster-gate hygiene witness.

The hygiene enrollment test in accumulator_copy_roster_gate_test was discovered
as UnclassifiedPathDeferral; move the ReadsLiveTree literal helper into
live_read_classification_test where g2_implies_reads_live_tree_for_roster_gate
already runs on the discovery cadence.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Restore roster-gate G2 fixtures and enroll disposition helper in frozen witness.

Reverting the local-only disposition helper broke g2_roster_gate_entry_classifies_literal_paths
and g2_union_retains_g1_import_carriers_with_g2_literal_paths because fn_arrow G2 classification
requires the roster-gate test module's live_tree disposition surface. Enroll the helper via the
existing frozen roster_machine_code_zero_suspects_within_ratchet witness instead of adding a
new offline-path test that discovery refuses as UnclassifiedPathDeferral.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Route doc_graph floor wrappers through v2.lens.doc_reachability predicates.

Review 50522: doc_graph_floor_{orphan_,}clean_holds in gunbc.doc_graph_roots now
delegate to doc_graph_{orphan_,}clean_holds(plan_roots: doc_graph_roots_all())
instead of re-minting orphan/dangling count checks beside the lens authority.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix CI heal refusal and doc-graph orphan from merged spark doc.

Bind spark-standup-program-accounting.md per #8052 so the live-tree orphan
wall passes after main merge, and align falsifier.yml with generated_artifact
authority (trailing newline) so heal no longer requires author-commit for
workflow drift.

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>
@briansrls briansrls closed this Aug 8, 2026
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