Skip to content

story-133: A run whose tracker commands moved under it says so in its own post-story record - #224

Merged
jerodw merged 5 commits into
mainfrom
story/story-133
Sep 10, 2026
Merged

story-133: A run whose tracker commands moved under it says so in its own post-story record#224
jerodw merged 5 commits into
mainfrom
story/story-133

Conversation

@jerodw

@jerodw jerodw commented Sep 10, 2026

Copy link
Copy Markdown
Owner

A run reads its target's configuration once, before the run directory exists, and threads that one dictionary through to the end. That is deliberate — the pre-flight that refuses an undeclared key does so exactly once from the loaded dictionary, so a run cannot quietly exercise something other than what it was launched under.

The consequence is that a story whose own work moves a tracker command spends the rest of its run acting on a path the tree no longer has. Its sync command files under a path it just removed; its item command sends ready-to-merge through a command that is gone; its dedupe query answers for a tracker the tree no longer points at. Each of those already reported something — an entry left pending, a "was not sent" line, an empty answer — and none of them said why, so all three read as the mechanism being broken rather than as the run holding a value the tree has moved on from.

What this adds is noticing, not re-reading

harness_config.moved_command compares the value the caller holds against the value the file now carries, and answers with both side by side or with None. Nothing routes on the answer. The loaded dictionary stays the one every decision, check and status is made from; a caller reports a move and then does exactly what it would have done without it.

A configuration file that is absent, unreadable or unparseable answers "nothing moved". This is a report about a run whose work is already committed, so it may not become the thing that fails — every path is guarded and every path returns.

Three callers, three consequences

Each writes its own sentence, because what a stale filed query means is not what a stale sync command means:

  • the sweep — an entry was offered to a command this tree no longer names, and a later run will file it under the new one, which is why those entries are still pending
  • the completion — the line sits beside the one reporting whether the status was sent, so a reader meeting "was not sent" learns whether the command is broken or merely superseded
  • the post-story inspection — said whether or not dedupe answered, because a query that ran against a stale-but-existing command answered for a tracker the tree no longer points at: the same doubt reached by a different road

Planned from the brief filed under 209.

🤖 Generated with Claude Code

https://claude.ai/code/session_01U1HiUf7CrMjZMj32TySdiH

jerodw and others added 5 commits September 10, 2026 11:46
… own post-story record

Implemented by the l5 harness story workflow.
Four conflicts, none a disagreement. The three append-only history logs
each gained one record on either side - story-132's on main, story-133's
on the branch - and both are kept, ordered by their own timestamps.
ARCHITECTURE.md gained a new section from each documenter at the same
position; both are kept, story-132's first, matching the order the
document already runs in.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01U1HiUf7CrMjZMj32TySdiH
@jerodw
jerodw merged commit 64ec383 into main Sep 10, 2026
3 checks passed
@jerodw
jerodw deleted the story/story-133 branch September 10, 2026 21:33
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