Conversation
…-change Add two derived, read-only signals to the receipt outcome dimension. - rollback: when a run ends unverified (blocked/failed/finding) yet recorded touched files, name the trusted session that owns reverting them and the at-risk files, plus a gap line rendered on every surface. Never auto-reverts; status "unreconciled" means only that no reconciliation was recorded, never "not reverted" (agentacct has no working-tree/diff signal). - no_observed_change: flag a Task that reached "verified" on a passing check but touched zero files, so a no-op cannot hide behind a green check. Discloses without demoting the decision word and without touching evidence strength. Both are gated so they never couple to the evidence tier and add no agent-writable field, so nothing here can be forged. Full suite green (3020).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Two derived, read-only signals on the receipt outcome dimension:
Rollback owner (
rollback) — when a run ends unverified (blocked / failed / failing check) but recorded touched files, the receipt names the trusted session that owns reverting them, lists the at-risk files, and raises a gap line on every surface (CLI / TUI / app / pasteable markdown). A half-applied change is no longer silently left behind.No observed change (
no_observed_change) — a Task that reachedverifiedon a passing check but touched zero files is flagged with a gap line, so a no-op can't hide behind a green check.Why
A work receipt should describe partial and failed runs, not only the happy path, and stay honest about the gap between what an agent claims and what was observed. These two signals close the "what got left behind" and "green check, empty change" cases without changing how outcomes are graded.
Honesty guarantees (by design)
rollback.status = "unreconciled"means no reconciliation was recorded, never "not reverted" — agentacct captures no working-tree/diff and never auto-reverts.revert_owneris the trusted{client, client_session_id}session identity the receipt already exposes;section_owner_hintis a clearly-labeled unverified self-report.no_observed_changeis gated on a real passing check, so the legitimate check-lessstrong_without_checksverified path never trips it.Notes for review
rollbackblock is intentional machine-readable wire data for a future rollback-owner affordance; no UI consumes the structured fields yet (the Swift decoder tolerates the additive keys). Flag if you'd prefer it trimmed to the gap line only.RECEIPT_SCHEMA_VERSIONbump — additive optional fields, consistent with prior additions (e.g.quiet_since).rollbackto avoid colliding with the unrelatedusage_reconciliationconcept on the /v1 surface.Scope / testing
src/agentacct/receipt.py(_outcome_dimension+ one call-site refactor) andtests/test_receipt.py(+7 tests). Full suite green: 3020 passed.