Skip to content

Upload the three floor disposition receipts the job already writes and discards - #8875

Merged
briansrls merged 2 commits into
mainfrom
floor-receipt-upload
Aug 22, 2026
Merged

briansrls merged 2 commits into
mainfrom
floor-receipt-upload

Conversation

@briansrls

@briansrls briansrls commented Aug 22, 2026 •

Copy link
Copy Markdown
Contributor

What this does

The three identity-grain receipts the witness floor already computes on every run — required_floor_disposition.tsv, expected_red_roster_join.tsv, long_home_storage_agreement.tsv — were written to the runner's working directory and then discarded with the runner. This uploads them.

Why

A PR was blocked by sixteen failures in witness families its diff could not reach; the summary counters said fifteen identities had moved between dispositions, and the incident could not be closed because the rows naming which fifteen no longer existed anywhere. Two independent recomputations from the trees then disagreed with the floor's own counts at both ends — so the only instrument that could settle it is the one the job was deleting. A receipt computed and dropped is worse than one never computed, because the summary it backs keeps being quoted as though the detail were available.

long_home_storage_agreement.tsv is in the set deliberately: it records a file whose PATH and whose declared MODULE disagree about long-home, which is the first hypothesis any recurrence has to eliminate.

Verified, not assumed

  • The TSVs are written, not merely named. cli_run.rs reads all three env vars and calls write_required_floor_disposition_tsv / write_expected_red_roster_join_tsv / write_long_home_storage_agreement_tsv at the end of the run. All three vars are already in the committed job env, so all three files exist on every run today.
  • upload_artifact_action is single-bound — one declaration in dag/extdeps/github/actions.dag. The v2/v4 double binding that tool_pin_witness_test.dag records was deleted; every other reference is a consumer.
  • The emitted bytes came from the authority, not from hand-editing the yaml: regenerated via dag/tools/generated_artifact_gate.dag main_wet in one remote dispatch (amd64 build + run together). witnesses.yml was the only path the regen modified, so no unrelated drift rode in.

Two deliberate choices

  • if: "!cancelled()" rather than success(): the run this evidence is for is the failing one, so a step that only fires after a green floor would capture exactly the runs nobody needs it for. Cancellation is excluded because a cancelled run's TSVs are partial by construction, and a partial receipt read as a complete one is the fabricated-output failure.
  • if-no-files-found: warn: the upload must never turn a green run red. A missing receipt is a gap to notice, not a reason to fail the floor.

Scope

This uploads receipts. It changes nothing about what the floor plans, routes, or refuses, and it does not close the open declined_long 558→543 question — it is the instrument that makes the next instance of that question closable.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@gunbai-bot gunbai-bot Bot changed the title shell -> dag Upload the floor disposition receipts the job already writes (INCOMPLETE — emission pending) Aug 22, 2026
…s disk

The modeling landed one commit earlier and the emitted projection did not,
so the step existed in .dag and not in the workflow GitHub runs. Regenerated
via the sanctioned actuator (dag/tools/generated_artifact_gate.dag main_wet)
in one remote dispatch; witnesses.yml was the ONLY path the regen modified,
so nothing else drifted in with it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@gunbai-bot gunbai-bot Bot changed the title Upload the floor disposition receipts the job already writes (INCOMPLETE — emission pending) Upload the three floor disposition receipts the job already writes and discards Aug 22, 2026
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review August 22, 2026 07:06
@briansrls
briansrls merged commit 7490d77 into main Aug 22, 2026
1 check passed
@briansrls
briansrls deleted the floor-receipt-upload branch August 22, 2026 16:27
briansrls pushed a commit that referenced this pull request Aug 22, 2026
…orrection was in review

My own correction went stale inside a day, which is the failure mode it exists
to name, so it is fixed here rather than merged as written.

gunbc#8875 (2026-08-22) added an upload step to `witnesses.yml`. A
`required-floor-receipts` artifact DOES leave the runner today, carrying
`required_floor_disposition.tsv`, `expected_red_roster_join.tsv`, and
`long_home_storage_agreement.tsv`. My prose said "No live workflow carries that
step" full stop, and the PR body said "witnesses.yml uploads nothing" -- the
second is now flatly false, and the first is true only of the specific deleted
`ci_floor_receipts_upload_step` while reading as a claim about all transport.

WHY THE COARSER CLAIM WAS WRONG EVEN BEFORE #8875 MADE IT FALSE: it answered
"does any upload exist" when the fact that matters is "is THIS receipt
retrievable". Those come apart exactly when someone restores transport for a
different population, which is what happened. A reader on current main sees an
`upload-artifact` step in `witnesses.yml` and a note saying no workflow uploads
anything, and cannot tell whether the note is stale or the artifact is
something else.

So the claim is now made at the population grain: transport exists and carries
the DISPOSITION receipts; none of the cost receipts these two notes name is
among them. The gap is no longer "no transport" but "the transport that exists
carries a different population" -- and a reader must not infer from a green
run's artifact that these receipts are in it.

The producer half is unchanged and unaffected: required CI still reaches none
of the three cost producers, so even complete transport would not restore
either protocol.

Comment-only, as before. No declaration touched, no behavior changed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PgpEN2jnUGsLhM5vRKH6fD
briansrls pushed a commit that referenced this pull request Aug 22, 2026
…both present-tense claims, keep both open (#8906)

* Two evidence protocols name a transport that does not exist: correct both present-tense claims, keep both open

`gunbc.witness_row_cost` `placement_workstream_task_20_open_unknown_note` and
`gunbc.ci_spec` `gunbc_ci_compile_clean_clamp_note` each tell a reader to
retrieve a receipt from the `floor-receipts` artifact, citing
`gunbc.ci_workflow ci_floor_receipts_upload_step`. No live workflow carries
that step -- it died with `ci.yml` in the floor cut. `witnesses.yml` uploads
nothing.

WHAT MAKES THIS WORSE THAN AN ORDINARY STALE LINE: both notes had already
CORRECTED THEMSELVES away from log scraping toward the artifact, and each says
so emphatically -- the row-cost note records that its drift tag "now has zero
emit sites and the row bodies are no longer mirrored to stderr on any cadence",
and the compile-clean note that "the log lines are GONE, not merely deprecated:
a seeding attempt that greps a run log for them will find nothing". So each note
closes the only alternative route it names, and the route it endorsed instead
was then deleted underneath it. A reader following either one finds nothing and
has no reason to suspect the transport rather than their own procedure.

THE PRODUCERS ARE ALSO UNREACHABLE ON THE NAMED INVOCATION, so this is not a
transport-only gap and correcting only the upload sentence would have left a
second false premise standing. Measured against certified main run
32553487573 (967b5bc), not inferred: required CI produces NONE of the three
receipts and the run log carries zero markers for any of them. The row-cost and
drift writers sit inside `run_walk`, below the `required_floor_mode` early
return. `install_floor_compile_clean_receipt`'s `claim_executor` caller sits
below that same return, and the one path that could reach it under required CI
-- the `consume_floor_compile_clean_gate_verdict` builtin via
`tools.dag_compile_clean_transport` -- is reached only by compile-clean
witnesses that are themselves route-gapped and never arrive at their subject.

Both notes keep their STATUS and DISSOLVE-ON unchanged in substance. TASK #20
stays `OpenUnknown`: this records that its reproduction protocol has no
operative leg, which is a declared evidence-route refusal, not a resolution --
the precise thing its own "never silently closed again" clause exists to
forbid. The compile-clean note keeps its `BasisAbsent` requirement, which is
what already forbids inferring a basis from the aggregate log or fabricating
one from an absent receipt.

Comment-only; no declaration touched and no behavior changed. Historical
rationale for retiring the log route is preserved in both, since that reasoning
is still correct and is what makes the current gap legible.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PgpEN2jnUGsLhM5vRKH6fD

* Transport is partial, not absent: #8875 landed an upload while this correction was in review

My own correction went stale inside a day, which is the failure mode it exists
to name, so it is fixed here rather than merged as written.

gunbc#8875 (2026-08-22) added an upload step to `witnesses.yml`. A
`required-floor-receipts` artifact DOES leave the runner today, carrying
`required_floor_disposition.tsv`, `expected_red_roster_join.tsv`, and
`long_home_storage_agreement.tsv`. My prose said "No live workflow carries that
step" full stop, and the PR body said "witnesses.yml uploads nothing" -- the
second is now flatly false, and the first is true only of the specific deleted
`ci_floor_receipts_upload_step` while reading as a claim about all transport.

WHY THE COARSER CLAIM WAS WRONG EVEN BEFORE #8875 MADE IT FALSE: it answered
"does any upload exist" when the fact that matters is "is THIS receipt
retrievable". Those come apart exactly when someone restores transport for a
different population, which is what happened. A reader on current main sees an
`upload-artifact` step in `witnesses.yml` and a note saying no workflow uploads
anything, and cannot tell whether the note is stale or the artifact is
something else.

So the claim is now made at the population grain: transport exists and carries
the DISPOSITION receipts; none of the cost receipts these two notes name is
among them. The gap is no longer "no transport" but "the transport that exists
carries a different population" -- and a reader must not infer from a green
run's artifact that these receipts are in it.

The producer half is unchanged and unaffected: required CI still reaches none
of the three cost producers, so even complete transport would not restore
either protocol.

Comment-only, as before. No declaration touched, no behavior changed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PgpEN2jnUGsLhM5vRKH6fD

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <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