Drop the pre-0.3.0 pin path fallback - #54
Merged
Merged
Conversation
The pin moved to `.agent-instructions.toml` in 0.3.0, and `pin_file.py` went on reading `.agents/instructions.toml` where that was the only file present, with every write moving the repository across and deleting the old one. That was never meant to last: both reusable workflows run these scripts from `@main` while each consumer carries whatever path its last apply wrote, so a hard switch would have turned every repository red at once. Every repository has since been carried across. Re-checked before removing anything: all thirteen in repos.json carry `.agent-instructions.toml` at `ref = "0.3.0"`, and none has a file at the old path. Two of them -- aice-web-next and aimer-web -- do keep `.agents/skills/`, which is the directory this pin was sitting inside and the reason it left. What the fallback covers now is a checkout restored from a branch older than the move. Reading that one silently is the worse answer: it reports a release from a file no driver has written since, and the repository carries on looking pinned. It now fails naming `.agent-instructions.toml`, which is a file somebody can create. The `.agents/` name stays in the docstrings that explain why the pin is called what it is. That history is why the file has an awkward name, and a reader meeting it needs it; what goes is every path that reads or writes there. No block and no roster entry moves, so `check_release_surface.sh` would refuse a tag for this, correctly. It reaches consumers through `@main` the moment it merges, and the changelog entry opens a new `[Unreleased]` -- the first change to land since 0.3.1, which is exactly what the rule that release added says happens. Closes #46
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.
pin_file.pystops reading the pre-0.3.0 pin path. The fallback existed so the move out of.agents/was not a flag day — both reusable workflows run these scripts from@mainwhile each consumer carries whatever path its last apply wrote — and every consumer has since been carried across by an ordinary apply.Precondition, re-checked before removing anything
All thirteen repositories in
repos.jsoncarry.agent-instructions.tomlatref = "0.3.0", and none has a file at.agents/instructions.toml. Checked against GitHub on 2026-08-12, after 0.3.1 was tagged.Worth noting:
aice-web-nextandaimer-webdo still keep.agents/skills/. That is the directory the pin was sitting inside, and the reason it left — thermdirinwrite()would have quietly declined to remove it, which is what it was written to do.What changes
scripts/pin_file.py—path_in()returns the current path unconditionally;LEGACYand the two-step lookup go, andwrite()stops deleting the old file and its directory.scripts/test_pin_file.py— the fallback and migrating-write cases go. The superseded-path case stays but inverts: a repository on the old path now fails, naming.agent-instructions.toml.writekeeps its coverage as a plain write against a repository with no pin, so removing the migration does not leave the function untested.scripts/test_apply_blocks.py,scripts/test_sync.py— the migrating-consumer fixtures become ordinary ones on the current path.README.md— the paragraph describing the fallback goes, along with its claim that it comes out "in its own release", which was wrong.Reading a stale pin silently was the worse of the two failures: it reports a release from a file no driver has written since, and the repository carries on looking pinned. Failing names a file somebody can create.
Not a release
No block and no roster entry moves, so
check_release_surface.shrefuses a tag for this — confirmed:git diff --name-only 0.3.1 HEAD -- blocks/ repos.jsonis empty. It reaches consumers through@mainthe moment it merges. The changelog entry opens a new[Unreleased], which is the first change to land since 0.3.1 and exactly what the rule that release added says happens.One deviation from the issue
The acceptance criteria say no reference to
.agents/should remain inscripts/, but the scope section of the same issue sayspin_file.py's docstring keeps why the file is named what it is — which is the paragraph about.agents/being a generic name. I read the criterion as being about code paths, not prose, so:.agents/is gonepin_file.pyandREADME.mdprose, as the scope section asksscripts/test_pin_file.pystill names the old path in a fixture, because the criterion that a repository on it must now fail cannot be tested otherwiseVerification
python3 scripts/lint_blocks.py— blocks OKcheck_drifthas been added since it was filed)markdownlint-cli2 "**/*.md"— 0 issues in 9 filesCloses #46