Skip to content

docs(163): normalize the contract to as-built; fix(166): pinned refs are hash or alias-vN - #173

Merged
paddymul merged 3 commits into
mainfrom
docs/163-postmerge-normalize
Jul 31, 2026
Merged

paddymul merged 3 commits into
mainfrom
docs/163-postmerge-normalize

Conversation

@paddymul

@paddymul paddymul commented Jul 31, 2026 •

Copy link
Copy Markdown
Contributor

What

Two follow-ups to the #163 merge:

Doc normalization. #167 merged with docs/system-contract.md still framed as the pre-fix proposal ("as it will be", the Deviations-on-main list, the Open-questions section). This flips the doc to describe the system as built — by cutting, not adding (net −79 lines in the contract): status reduced to "Normative, implemented (PR #167)"; Deviations and Open-questions deleted (the ADR and the red tests are the durable record; the two resolutions with standing content are folded into the body in a sentence each); remaining conditional phrasing rewritten as description or past-tense history. Recorded in the ADR under "Post-merge doc normalization".

#166. pinned_expr_from_alias now accepts a content hash or an explicit "<alias>-v<N>" version reference and rejects a bare alias with an error naming both forms — a pin must denote the same entry forever, and a bare alias silently pinned the build-time head. An out-of-range version reports how many versions exist. Alias names matching -v<N> are rejected at creation and rename (the issue's collision closure), steering a parallel take on a concept to the -o<N> (option) naming convention instead. TDD: the four tests were seen failing on CI (4 failed, 690 passed) before the fix commit.

Closes #166.

🤖 Generated with Claude Code

paddymul and others added 3 commits July 31, 2026 11:27
The contract merged still written as the pre-fix proposal. Flip it to
describe the system as built, net -79 lines: status reduced to
"Normative, implemented"; the Deviations and Open-questions sections
deleted (the ADR and the red tests are the durable record; the two
resolutions with standing content — canonical sort key order, the D3
profile guard — folded into the body in a sentence each); remaining
future/conditional phrasing rewritten as description or past-tense
history. The changes are recorded in the ADR's post-merge
normalization note.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Four red tests for #166: a bare alias passed to pinned_expr_from_alias
must be rejected with an error naming the two accepted forms (today it
silently pins the build-time head); "<alias>-v<N>" must resolve against
the alias history and denote that revision forever; an out-of-range
version must say how many versions exist; and an alias literally named
like a version reference must be rejected at creation and rename.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
pinned_expr_from_alias now accepts a content hash or an explicit
"<alias>-v<N>" version reference (1-based into the alias history, the
V1..Vn the UI shows) and rejects a bare alias with an error naming both
accepted forms — a pin must denote the same entry forever, and a bare
alias silently pinned whatever the head happened to be at build time.
An out-of-range version reports how many versions exist.

The collision closure from the issue: alias names matching '-v<N>' are
rejected at creation and rename (aliases.validate_alias_name, enforced
in set_alias/rename_alias and surfaced as error dicts by
catalog_create/catalog_rename). The steer for the common intent — a
parallel take on an existing concept — is the '-o<N>' (option) naming
convention, suggested in the error itself.

Guidance strings (catalog_run docs, the import-error hint,
docs/mcp-server.md) updated to the two accepted forms; scope change
recorded in the ADR's post-acceptance note.

Closes #166.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@paddymul paddymul changed the title docs(163): normalize the contract to as-built docs(163): normalize the contract to as-built; fix(166): pinned refs are hash or alias-vN Jul 31, 2026
@paddymul
paddymul merged commit 7630424 into main Jul 31, 2026
4 checks passed
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.

pinned_expr_from_alias: bare alias silently pins the build-time head — require alias-vN or a hash

1 participant