story-129: The Status field's name is matched the same way when it is read and when it is written - #201
Merged
Conversation
…it is read and when it is written
… 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
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.
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
statusagainst a board whose field is titledStatusread 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
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