docs/vrs/requirements.md on main declares two different live requirements as R27:
R27 Transactional catalog authoring — introduced by 7e1bd02 feat: publish agent specs transactionally
R27 Typed agent desired state — introduced by 65f82fb feat(agent-spec): add reversible desired state (#175)
Both are present and neither is retired, so every reference to "R27" is ambiguous.
Which one the existing references mean
All of them mean the second:
docs/vrs/ontology.md:108 Authority: [R27 typed agent desired state](requirements.md)
docs/vrs/ontology.md:117 Authority: [R27 typed agent desired state](requirements.md)
docs/vrs/ontology.md:125 Authority: [R27 typed agent desired state](requirements.md)
docs/vrs/ontology.md:133 Authority: [R27 typed agent desired state](requirements.md)
docs/vrs/spec.md:564 **R27/R28:** Agent lifecycle intent is one closed declaration state
docs/vrs/.experiments/2026-08-04-agent-desired-state-prototype.md:58 adds root R27 and R28
Nothing anywhere references R27 Transactional catalog authoring. So the low-risk repair is to renumber that one and leave Typed agent desired state as R27, which keeps all six references correct without touching them.
Choosing the replacement id
The list currently runs R01–R28 with R12 and R18 absent. Those two look like retired requirements rather than accidents, and refilling a retired id is worse than leaving a gap — a gap is visibly nothing, whereas a refilled id silently changes what an old reference resolves to. So the natural target is the next free id past the end rather than either gap.
Worth noting for sequencing: #77 appends R29 and R30, so if that lands first the next free id is R31.
Why it seems worth fixing rather than living with
A duplicate id is strictly worse than a gap for exactly the reason above: a reader who follows "R27" from ontology.md lands on a list containing two of them and has no way to tell which was meant, and a future requirement that cites R27 inherits the ambiguity permanently. It is also the kind of thing that gets harder to repair the longer both live, because each new reference has to be individually disambiguated later.
Happy to send the renumbering PR if you would like it, and equally happy for you to pick the other direction — you own which requirement keeps the number, and the reference count is only an argument, not a decision.
Posted on behalf of @schickling
| field |
value |
agent_name |
unknown |
agent_tool |
Claude Code |
agent_tool_version |
2.1.220 |
agent_runtime |
Claude Code 2.1.220 |
agent_session_lookup |
unavailable |
tooling_profile |
dotfiles@unknown-dirty |
docs/vrs/requirements.mdonmaindeclares two different live requirements asR27:R27 Transactional catalog authoring— introduced by7e1bd02 feat: publish agent specs transactionallyR27 Typed agent desired state— introduced by65f82fb feat(agent-spec): add reversible desired state (#175)Both are present and neither is retired, so every reference to "R27" is ambiguous.
Which one the existing references mean
All of them mean the second:
Nothing anywhere references
R27 Transactional catalog authoring. So the low-risk repair is to renumber that one and leaveTyped agent desired stateasR27, which keeps all six references correct without touching them.Choosing the replacement id
The list currently runs
R01–R28withR12andR18absent. Those two look like retired requirements rather than accidents, and refilling a retired id is worse than leaving a gap — a gap is visibly nothing, whereas a refilled id silently changes what an old reference resolves to. So the natural target is the next free id past the end rather than either gap.Worth noting for sequencing: #77 appends
R29andR30, so if that lands first the next free id isR31.Why it seems worth fixing rather than living with
A duplicate id is strictly worse than a gap for exactly the reason above: a reader who follows "R27" from
ontology.mdlands on a list containing two of them and has no way to tell which was meant, and a future requirement that cites R27 inherits the ambiguity permanently. It is also the kind of thing that gets harder to repair the longer both live, because each new reference has to be individually disambiguated later.Happy to send the renumbering PR if you would like it, and equally happy for you to pick the other direction — you own which requirement keeps the number, and the reference count is only an argument, not a decision.
Posted on behalf of @schickling
agent_nameagent_toolagent_tool_versionagent_runtimeagent_session_lookuptooling_profile