Repository navigation
feat(op): the consumed-Gone guard with the narrated verdict; Skip is dropped — phase 3's docket completes - #605
Merged
Conversation
…dropped -- phase 3's docket completes Phase 3, PR D of the resource-construction plan (#585). Skip is DROPPED (USER ruling, 2026-08-22). Its undo story was trivially clean -- a skipped unit never dispatched, so nothing to undo, just move on -- but the forward side killed it: a skipped unit's promise consumers would see nil (misattributing the downstream failure), and the trace could not tell "skipped" from "ran and produced nothing" without marker machinery that Ignore never needs. Choose cases already express optional steps structurally, with their claims judged only when hit. The enum is {Stop 0, Ignore 1}; "skip" refuses at parse, pinned; re-adding later is purely additive. The destroyer stamp lands: MarkGone(r, destroyerID) records the mutator's authorship, symmetric with producerID -- file's delete family threads the activation's CallerID through markEntryGone -- and the trace row gains destroyed_by (reporting metadata; reactive Gone transitions stamp nothing). The guard lands at the ruled seam -- Method.Invoke, after conversion (the earliest point the complete consumed set exists) and before the forward call: a consumed entry the catalog knows is Gone WARNS and routes by the caller's policy, found among the converted arguments by type. Stop fails the dispatch on the narrated verdict -- "consumes X, destroyed by unit N before it could run" -- and Ignore proceeds, the provider handling the absence. The consumer sees the state; it never rediscovers the loss through its own I/O. Judgment scenario 1 sharpens to assert the narrated verdict (expect_error "file.copy.*destroyed by") -- the full ruled semantics of the delete-then-copy question, proven end to end, exactly as predicted when the scenario was authored. The new gone-tolerance scenario pins Ignore: two removes of one file, the second on_missing="ignore", one deletion plus one recorded no-op, run succeeds. The design doc's consumption table and taxonomy update to the delivered, two-policy state. Verified with make check (103 packages ok, 0 failures) and make vet under GOOS windows. Refs #585, #581.
This was referenced Aug 23, 2026
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.
Phase 3, PR D of resource-construction (#585) — the docket's final
item.
Skip is dropped (ruled)
Undo was never the problem — a skipped unit ran nothing, so there is nothing to undo. The forward side
was: nil promises downstream, and a trace that cannot tell "skipped" from "ran and produced nothing"
without marker machinery
Ignorenever needs. Choose cases already express optional steps structurally.The enum is
{Stop 0, Ignore 1};"skip"refuses at parse, pinned.The destroyer stamp
MarkGone(r, destroyerID)— the mutator's authorship, symmetric withproducerID; the trace row gainsdestroyed_by. Reactive Gone transitions stamp nothing.The guard, at the ruled seam
Method.Invoke, post-conversion, pre-forward-call: a consumed Gone entry warns and routes by thecaller's policy (found among the converted arguments by type).
Stopfails on the narrated verdict —"consumes X, destroyed by unit N before it could run" — and
Ignoreproceeds to the provider. Theconsumer sees the state; it never rediscovers the loss through its own I/O.
The scenarios
Scenario 1 now asserts the narrated verdict (
file.copy.*destroyed by) — the delete-then-copyquestion you posed at the start of this feature, answered end to end exactly as ruled. The new
gone-tolerance scenario pins Ignore: two removes, the second
on_missing="ignore", one deletion + onerecorded no-op, green run.
Verified
make check— 103 ok, 0 failuresmake vetGOOS=windows; gofmt clean; expectation: green stays greenRefs #585, #581.