What happens
A record captured through the full unattended pipeline lands on the commit with no Record-Id.
Reproduced end to end against current dev:
commitlore capture --transcript <t> --draft <d> --unattended # staged: true, rejected: []
git commit -m "fix: bound the limiter"
fix: bound the limiter
Ruled-out: Redis-backed sliding window | pricing must answer when Redis is down
Provenance: drafted
Provenance is stamped by the pipeline. Record-Id is not stamped by anything, so a draft that does not carry one produces an anonymous record — and nothing in prepare, verify or stage reports its absence.
Why this is not a drafting nit
The product's claim is that recording leaves the user's workflow: install it, work normally, and the decision is preserved without anyone remembering an extra step. A pipeline that requires the author to invent a well-formed unique identifier has not left the workflow — it has moved one step of it onto whoever writes the draft, and that step is the one most likely to be skipped, because omitting it produces no error.
Measured across four repositories running unattended capture today:
CommitLore trailers Record-Id
agent-operator-score 250 28
logic-pro-mcp 101 0
stock-ai-newsletter 39 0
hermes-agent 106 0
The one repository with identities is the one whose records were hand-authored by someone who knew to add them. Every repository relying on the automatic path has none.
What is lost without an identity
Record-Id is not decoration. Without it:
- supersession cannot resolve. A later record that retires an earlier one has nothing to name, so lifecycle state cannot be folded (SPEC §5).
- identity-collision detection has no key. The
withheld: ... due to a Record-Id collision path cannot fire on records that have no id to collide.
- the injected payload renders
- where the id belongs. An agent handed a constraint cannot cite the record it is about to act on, which is the whole point of delivering it.
- CDEB candidate registration requires
record_ids (PRD §3.2), so records accumulating now cannot back a task later.
Expected
The capture pipeline mints a Record-Id when the draft does not carry one, the same way it already stamps Provenance. A draft that supplies its own valid id keeps it.
Properties worth pinning:
- the minted id matches
^r-[a-z0-9]{6,}$ — the same grammar validate enforces
- it is unique within the repository at stage time; an id already present is not reused
- re-preparing an unchanged record yields the same id rather than a second one, so a retried capture does not create a duplicate identity for one decision
- an id the draft supplied is never silently replaced
Related
Not the same as #527, which is about init overstating what unattended capture does when no host initiator exists. This one is about what the pipeline produces once it does run.
What happens
A record captured through the full unattended pipeline lands on the commit with no
Record-Id.Reproduced end to end against current
dev:Provenanceis stamped by the pipeline.Record-Idis not stamped by anything, so a draft that does not carry one produces an anonymous record — and nothing inprepare,verifyorstagereports its absence.Why this is not a drafting nit
The product's claim is that recording leaves the user's workflow: install it, work normally, and the decision is preserved without anyone remembering an extra step. A pipeline that requires the author to invent a well-formed unique identifier has not left the workflow — it has moved one step of it onto whoever writes the draft, and that step is the one most likely to be skipped, because omitting it produces no error.
Measured across four repositories running unattended capture today:
The one repository with identities is the one whose records were hand-authored by someone who knew to add them. Every repository relying on the automatic path has none.
What is lost without an identity
Record-Idis not decoration. Without it:withheld: ... due to a Record-Id collisionpath cannot fire on records that have no id to collide.-where the id belongs. An agent handed a constraint cannot cite the record it is about to act on, which is the whole point of delivering it.record_ids(PRD §3.2), so records accumulating now cannot back a task later.Expected
The capture pipeline mints a
Record-Idwhen the draft does not carry one, the same way it already stampsProvenance. A draft that supplies its own valid id keeps it.Properties worth pinning:
^r-[a-z0-9]{6,}$— the same grammarvalidateenforcesRelated
Not the same as #527, which is about
initoverstating what unattended capture does when no host initiator exists. This one is about what the pipeline produces once it does run.