[fathom (gale) — hit while splitting a conflated requirement into new series]
Three related papercuts in add / next-id. Toolchain identity: varve layer
2026.09.0, rivet 0.35.0 (4ff980e0 HEAD 2026-08-05).
Context: gale needed two new artifact series — REQ-DRV-GRAPH-* and REQ-DRV-SILICON-*
— split out of an existing requirement whose clauses had drifted apart.
1. add offers no way to set the ID, and the derived one ignores every input
rivet add has no --id. The ID it derives was identical across every input I varied:
--tags "graph" -> REQ-DRV-GPIO-002
--tags "graphenv" -> REQ-DRV-GPIO-002
--tags "gust,graph" -> REQ-DRV-GPIO-002
--file artifacts/gust_driver_model.yaml -> REQ-DRV-GPIO-002
--field id=REQ-DRV-GRAPH-001 -> REQ-DRV-GPIO-002
Title, tags, target file and an explicit --field id= all make no difference: it
returns the next number in some pre-existing series. For a graph-wide env-import
requirement, landing as REQ-DRV-**GPIO**-002 is not merely arbitrary — it is wrong in
a way a later reader would have to un-learn. In a traceability system the ID is the
handle everything else cites, so it is one of the few fields worth being able to choose.
2. next-id <PREFIX> strips the hyphens
rivet next-id sw-req -> REQ-DRV-GPIO-002
rivet next-id REQ -> REQ-001
rivet next-id REQ-DRV -> REQDRV-001
rivet next-id REQ-DRV-GRAPH -> REQDRVGRAPH-001
REQDRVGRAPH-001 does not match the convention every existing ID in the project uses
(REQ-DRV-COMPONENT-001, VER-OS-WCET-001, FIND-DMA-SHM-CANONICAL-001). So even the
command whose job is "tell me the next ID" cannot name a new hyphenated series.
3. add --field release=v0.7.1 is silently ignored
rivet add --type sw-req … --field release=v0.7.1
rivet get <new-id> # no Release line
rivet modify <id> --set-release v0.7.1 # works
release is a first-class field, and modify has --set-release, so add accepting
--field release= and dropping it is the bad case: it looks like it worked. modify's
help already warns about this shape for description ("a top-level base field — use
this rather than --set-field description=..."), which suggests the general problem is
known; add just has no equivalent guard. A rejection would have been fine. Silence
was not — I only noticed because the artifacts were missing from
rivet list --release.
What I did meanwhile
Added via rivet add, then corrected the two id: lines directly, then re-attached
links with rivet link and confirmed with rivet validate (PASS) and rivet get.
Recording that plainly because "never hand-edit the YAML" is the right rule and I had to
step outside it — which is exactly the kind of workaround that should show up as an
issue rather than quietly become local practice.
Suggestions, in the order I would want them
--id <ID> on add, validated for uniqueness and against the schema's ID pattern.
Smallest change, removes the need for the workaround entirely.
add errors on a --field naming a first-class field, pointing at the right flag.
next-id preserves the prefix it was given.
Happy to send a PR for (1) or (2) if the shape is agreed — (2) in particular looks like
it belongs next to the existing description guard.
[fathom (gale) — hit while splitting a conflated requirement into new series]
Three related papercuts in
add/next-id. Toolchain identity: varve layer2026.09.0,
rivet 0.35.0 (4ff980e0 HEAD 2026-08-05).Context: gale needed two new artifact series —
REQ-DRV-GRAPH-*andREQ-DRV-SILICON-*— split out of an existing requirement whose clauses had drifted apart.
1.
addoffers no way to set the ID, and the derived one ignores every inputrivet addhas no--id. The ID it derives was identical across every input I varied:Title, tags, target file and an explicit
--field id=all make no difference: itreturns the next number in some pre-existing series. For a graph-wide
env-importrequirement, landing as
REQ-DRV-**GPIO**-002is not merely arbitrary — it is wrong ina way a later reader would have to un-learn. In a traceability system the ID is the
handle everything else cites, so it is one of the few fields worth being able to choose.
2.
next-id <PREFIX>strips the hyphensREQDRVGRAPH-001does not match the convention every existing ID in the project uses(
REQ-DRV-COMPONENT-001,VER-OS-WCET-001,FIND-DMA-SHM-CANONICAL-001). So even thecommand whose job is "tell me the next ID" cannot name a new hyphenated series.
3.
add --field release=v0.7.1is silently ignoredreleaseis a first-class field, andmodifyhas--set-release, soaddaccepting--field release=and dropping it is the bad case: it looks like it worked.modify'shelp already warns about this shape for
description("a top-level base field — usethis rather than
--set-field description=..."), which suggests the general problem isknown;
addjust has no equivalent guard. A rejection would have been fine. Silencewas not — I only noticed because the artifacts were missing from
rivet list --release.What I did meanwhile
Added via
rivet add, then corrected the twoid:lines directly, then re-attachedlinks with
rivet linkand confirmed withrivet validate(PASS) andrivet get.Recording that plainly because "never hand-edit the YAML" is the right rule and I had to
step outside it — which is exactly the kind of workaround that should show up as an
issue rather than quietly become local practice.
Suggestions, in the order I would want them
--id <ID>onadd, validated for uniqueness and against the schema's ID pattern.Smallest change, removes the need for the workaround entirely.
adderrors on a--fieldnaming a first-class field, pointing at the right flag.next-idpreserves the prefix it was given.Happy to send a PR for (1) or (2) if the shape is agreed — (2) in particular looks like
it belongs next to the existing
descriptionguard.