Deferred items: a second, numbered copy of the register - #510
Open
m2ux wants to merge 2 commits into
Open
Conversation
…m it The register has no owning activity and takes no artifact prefix, because any activity may be the one that defers first. The raise writes a link into a row in place and declares no artifact, so the register stays the one copy at its bare name. An operation declaring it made completion its owner, and the activity published a prefixed second copy beside the register the run had been writing all along. The group states the constraint as a rule, so an operation added here later meets it. Refs #491 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The deferred-items resource states what a row means and what its Follow-up cell carries, and states it without naming the activity that raises from it, linking the technique that does the raising, or narrating the gate between them. Orchestration is what the activity YAML says. The technique group carries no rules: each one it held restated a convention the resource owns, and the prefix constraint is an authoring standard rather than runtime conduct. Its capability names the domain rather than listing the operations under it. Collecting the open rows produces its two values and nothing else; the activity's gate is where a row reaches a reader. Raising creates the issue and writes the link, holding no value the contract does not declare. Refs #491 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Summary
The deferred-items register is deliberately unlike every other planning artifact. Each of the others belongs to one activity, which is why they carry that activity's number in their filename —
06-work-package-plan.md,14-COMPLETE.md. The register belongs to none of them, because any activity may be the one that defers something first, so it lives at its bare name with no number.The raise step added in #509 declared the register as an artifact it produces. That made completion its owner, and completion publishes what it owns under its own number. A second copy appeared beside the register the run had been writing all along.
What happens today
The walk over the work package shows it. Completion's artifact list gained the register, and its written-artifact list gained a numbered copy:
So a run that raised an issue for a deferred item would write the link into
deferred-items.mdand then publish14-deferred-items.mdnext to it. Two files claiming to be the register, and the artifact rules the corpus holds itself to say there is exactly one home per fact.The register's own rules already said this could not happen — that it is created unprefixed and takes no
artifactPrefix, because it has no owning activity. Nothing enforced it, and the declaration that broke it read as ordinary.The fix
The raise declares no artifact. Its effect on the register is what its protocol describes: the issue's link written into that row's Follow-up cell, in place, leaving every other column as the deferring activity wrote it. This is how the assumption record already treats the register — it writes rows there while declaring only its own log as an artifact.
With no artifact and no session value to hand on, the raise declares no outputs at all, which is the shape of every operation whose whole effect is on a file or an external system. The branch sync and the cleanup application are the same shape.
The constraint becomes a rule on the group, so an operation added here later meets it rather than rediscovering it.
Verification
The corpus sweep passes 28 of 28.
The walk no longer carries either the register or a numbered copy of it in completion's artifacts. What remains in the walk is the one intended addition from #509 — the step that collects the open rows.
Scope
The artifact declaration, the outputs that depended on it, and the activity's write contract that mirrored them. A rule stating why.
Acceptance criteria
Non-goals
This does not change when a row is raised, what it is raised against, or the gate that approves it. The mechanism from #509 is unchanged apart from what it declares.
Nothing yet enforces that a technique declines to declare the register as an artifact. The rule is stated on the group and the corpus obeys it; a future operation that declared it would publish a second copy again and no check would say so.