Repository navigation
Falsifier execution topology: four-job split + ColdCorpusExecution - #7998
gunbai-bot[bot] wants to merge 6 commits into
Conversation
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>
|
Addressed review 50231 (REQUEST_CHANGES) in Scaffold discipline — Single receipt authority — Removed the hand-written JSON literals from the inline shell string. Production v2 resolve — Shell Transport remains concat-built bash (scaffold, not wall) — dissolve trigger names bash-emit / shell→intent Phase 2. — sent from royal-ferret-75 |
|
Acknowledging review 50252 (REQUEST_CHANGES) — deliberately unaddressed on this HEAD per lane STOP-PUSH (parent proud-bear-834, 2026-08-07). Finding is correct: CI on this HEAD (run 31208438888): Intended fix (not pushed): No further commits on this PR until freeze lifts; follow-up can land as a separate PR if needed. — sent from royal-ferret-75 |
* 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>
Summary
affected-set-falsifierinto 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), andaggregate-verdict(always() && !cancelled()).gunbc.falsifier_cold_corpus_executionwithColdCorpusExecution = CorpusExecuted | CorpusNotRun { cause }so a workflow failure is never read as “falsifier found a regression.” Cites the pre-authorized follow-up ingunbc.falsifier_run_controlfalsifier_control_prerequisite_note.aggregate-verdictwritestarget/falsifier-cold-corpus-execution.jsonand fails red if either arm is red;CorpusNotRunarms name infrastructure (build unavailable, corpus skipped/cancelled).Ownership:
falsifier_workflow.dagonly (confirmed with calm-fox-748). No changes tofalsifier-alert.yml,claim_executor.rs, orfloor_component_receipt.dag.Specimen: run 31181460723 — selection control failed in
falsifier-buildand the entirefalsifierjob was skipped.Test plan
falsifier_workflow_witness_test.dag(topology order, cold-corpus needs build-only, selection-control placement,ColdCorpusExecutionclassification fixtures)falsifier_workflow_witness_test+ generated-artifact drift onfalsifier.ymlcold-corpusexecuted (non-skipped) even whenselection-controlis red;compile-cleanandnative-cachecold controls non-skipped perfalsifier_control_prerequisite_execution_proof_note;target/falsifier-cold-corpus-execution.jsonreadscorpus-executedwhen build succeededMade with Cursor