Measured while implementing #12181, on origin/main at 87042b5de.
What was measured
packages/cli/src/commands/meta/delete.ts:58 is the only in-repo caller of the SDK reset:
const result = await client.meta.deleteItem(args.type, args.name);
The command declares no --if-match and no --state flag, so every CLI reset is the unpinned, full one:
- unpinned — a concurrent edit is silently destroyed instead of answering
409 metadata_conflict, on the one verb whose whole job is destroying an overlay row (ADR-0008; the door reads If-Match and threads it as parentVersion);
- full — it drops the published overlay as well as any pending draft, so an operator who wants to throw away only an unpublished draft has to take the more destructive path.
Until #12181 this was not the CLI's gap to close: the SDK method it calls took (type, name) and nothing else. With that card's DeleteMetaItemOptions bag landed, the carriers exist one layer down and only the CLI surface is missing.
Not taken in #12181
#12181's ruling is scoped to the two SDK declarations and deliberately ships two of the three carriers (?dropStorage is withheld). Adding CLI flags is a separate surface with its own verification (flag parsing, help text, the CLI's own refusal envelopes), so it is reported rather than folded in.
Blocked-by: #12181
Sketch, for triage only
--if-match <version> forwarding to options.ifMatch, and --draft (or --state draft) forwarding to options.state. Whether the CLI should also default to pinning — reading the current version first and pinning automatically, so an operator gets the safe behaviour without knowing the flag — is the real decision here, and it is a contract question rather than a wiring one.
Related: #12181 (the SDK bag), #11713 (the same story on saveItem), ADR-0008.
Measured while implementing #12181, on
origin/mainat87042b5de.What was measured
packages/cli/src/commands/meta/delete.ts:58is the only in-repo caller of the SDK reset:The command declares no
--if-matchand no--stateflag, so every CLI reset is the unpinned, full one:409 metadata_conflict, on the one verb whose whole job is destroying an overlay row (ADR-0008; the door readsIf-Matchand threads it asparentVersion);Until #12181 this was not the CLI's gap to close: the SDK method it calls took
(type, name)and nothing else. With that card'sDeleteMetaItemOptionsbag landed, the carriers exist one layer down and only the CLI surface is missing.Not taken in #12181
#12181's ruling is scoped to the two SDK declarations and deliberately ships two of the three carriers (
?dropStorageis withheld). Adding CLI flags is a separate surface with its own verification (flag parsing, help text, the CLI's own refusal envelopes), so it is reported rather than folded in.Blocked-by: #12181
Sketch, for triage only
--if-match <version>forwarding tooptions.ifMatch, and--draft(or--state draft) forwarding tooptions.state. Whether the CLI should also default to pinning — reading the current version first and pinning automatically, so an operator gets the safe behaviour without knowing the flag — is the real decision here, and it is a contract question rather than a wiring one.Related: #12181 (the SDK bag), #11713 (the same story on
saveItem), ADR-0008.