Skip to content

Deferred items: a second, numbered copy of the register - #510

Open
m2ux wants to merge 2 commits into
workflowsfrom
workflow/491-register-takes-no-prefix
Open

Deferred items: a second, numbered copy of the register#510
m2ux wants to merge 2 commits into
workflowsfrom
workflow/491-register-takes-no-prefix

Conversation

@m2ux

@m2ux m2ux commented Aug 25, 2026

Copy link
Copy Markdown
Owner

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:

  "artifacts":        [ "NNNN-{decision_title}.md", "deferred-items.md", "COMPLETE.md", … ]
  "artifactsWritten": [ "14-NNNN-decision_title.md", "14-deferred-items.md", "14-COMPLETE.md", … ]

So a run that raised an issue for a deferred item would write the link into deferred-items.md and then publish 14-deferred-items.md next 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

  • Completion's artifact contract does not name the deferred-items register.
  • No numbered copy of the register is written.
  • The register is still updated in place when a row is raised.
  • The group states that the register takes no prefix and no owner.

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.

m2ux and others added 2 commits August 25, 2026 08:54
…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>
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