Skip to content

story-129: The Status field's name is matched the same way when it is read and when it is written - #201

Merged
jerodw merged 5 commits into
mainfrom
story/story-129
Sep 9, 2026
Merged

story-129: The Status field's name is matched the same way when it is read and when it is written#201
jerodw merged 5 commits into
mainfrom
story/story-129

Conversation

@jerodw

@jerodw jerodw commented Sep 9, 2026

Copy link
Copy Markdown
Owner

Story

The Status field's name is matched the same way when it is read and when it is written.

The sync script asks "is this the field this target configured?" in three places, and they did not agree.

Reading what the board currently says normalised both sides — spaces removed, case ignored — so a target configuring status against a board whose field is titled Status read the value successfully. Resolving the id to write did not normalise at all: it matched the configured name verbatim against the names the board reported.

So the read succeeded, found the field empty, and the write then resolved no id.

What that costs, and it differs by field

For Status it ends the filing. The guard exits transiently, the entry stays pending, and it is retried forever without ever landing.

For the five classification fields it is quieter and worse to notice: the field is skipped with a line on stderr, the filing exits zero, and the board is simply missing the value. Any difference in case or internal spacing between what a target configures and what its board is titled produces that silently.

Evidence

  • Suite: 5604 passed, 1 skipped (exit 0)
  • Clean clone with the story committed: exit 0
  • Verification passed, no blocking issues
  • 0 retries, 0 self-routes, no correction pass, $12.72
  • 10 files changed, +429 / −21

Notes for review

One edit is unexplained, and the verifier says so. The tester changed tests/test_config_keys_are_obeyed.py, which this story's scope does not list, and the change has nothing to do with field names: two unrelated proofs now run under a relaxed timeout instead of a tight 6.5-second one.

The verifier checked what it could and reports the change weakens nothing — both proofs still assert what they always asserted, and the timeout's own proofs still pin the tight value. What it could not establish is why the tester made it.

Two readings, and the second is worth ruling out: it may be tidying, or it may be a stage quietly relaxing a bound that was failing under load. The second is the class story-109 spent a whole story on, and the rule it added says a test may bound how slow an operation is allowed to be and may not bound how slow the machine is. A relaxed timeout in a test that is not about timing is consistent with that rule rather than against it — but nobody decided that here, it just happened.

Planned from the brief filed under key 117, from story-105's inspection of the board wiring.

🤖 Generated with Claude Code

https://claude.ai/code/session_019WkxmJ5ArLEaC2RDPGkbRU

jerodw and others added 5 commits September 9, 2026 09:14
… read and when it is written

Implemented by the l5 harness story workflow.
3.13 split pathlib internally, so a Path annotation renders as
pathlib._local.Path where 3.10 and 3.14 render pathlib.Path. The test
compares rendered signatures against expected strings, so only 3.13
disagreed — the type is the same type and no resolver's signature changed.

Folded the way the HARNESS_ROOT default already is, so the assertion stays
about the resolvers rather than about which interpreter read them. Surfaced
by the matrix moving to 3.10, 3.13 and 3.14.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019WkxmJ5ArLEaC2RDPGkbRU
@jerodw
jerodw merged commit 00c0b0d into main Sep 9, 2026
3 checks passed
@jerodw
jerodw deleted the story/story-129 branch September 9, 2026 18:59
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