@adhd/backlog 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/README.md +194 -39
- package/api.d.ts +87 -0
- package/api.ir.json +1 -1
- package/citation.d.ts +176 -0
- package/envelope.d.ts +35 -1
- package/index.d.ts +23 -3
- package/index.js +106 -58
- package/index.mjs +11627 -7068
- package/ir-artifact.d.ts +7 -3
- package/lifecycle.d.ts +49 -0
- package/package.json +5 -5
- package/query/canonical.d.ts +16 -0
- package/query/card.d.ts +116 -4
- package/query/get.d.ts +8 -1
- package/query/index.d.ts +1 -0
- package/query/query.d.ts +20 -13
- package/query/redirect.d.ts +30 -0
- package/query/resolve.d.ts +48 -0
- package/query/similar-clusters.d.ts +8 -0
- package/query/similarity-signals.d.ts +47 -0
- package/query/spec-staleness.d.ts +21 -0
- package/query/types.d.ts +249 -34
- package/query/verdict-core.d.ts +21 -0
- package/query/verdict.d.ts +22 -0
- package/query/views/catalog.d.ts +47 -0
- package/query/views/registry.d.ts +27 -7
- package/query/views/report.d.ts +49 -0
- package/query/views/semantic.d.ts +28 -5
- package/query/views/stats.d.ts +38 -2
- package/readiness.d.ts +29 -0
- package/retry-policy.d.ts +44 -0
- package/serve.d.ts +1 -1
- package/server.d.ts +71 -3
- package/service-config.d.ts +109 -0
- package/service-errors.d.ts +51 -0
- package/skill/SKILL.md +688 -81
- package/store/catalog-invariant-guard.d.ts +4 -4
- package/vocabulary.d.ts +48 -0
- package/write/anchor-check.d.ts +139 -0
- package/write/attestation.d.ts +64 -0
- package/write/catalog-merge.d.ts +15 -8
- package/write/catalog.d.ts +63 -0
- package/write/citation-path.d.ts +31 -0
- package/write/citation.d.ts +157 -0
- package/write/create-issue.d.ts +143 -29
- package/write/errors.d.ts +159 -0
- package/write/gate.d.ts +67 -0
- package/write/merge-project.d.ts +54 -0
- package/write/obligation.d.ts +133 -0
- package/write/relate.d.ts +1 -1
- package/write/revision.d.ts +27 -0
- package/write/similarity-scan.d.ts +84 -0
- package/write/spec-revision.d.ts +131 -0
- package/write/spec-revision.reconcile.d.ts +48 -0
- package/write/transition.d.ts +13 -2
- package/write/tx.d.ts +21 -1
- package/write/update.d.ts +23 -1
package/api.ir.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"formatVersion":1,"operations":[{"id":"backlog/get","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"get","words":["get"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"oneOf":[{"type":"object","properties":{"uid":{"type":"string"},"fields":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","oneOf":[{"$ref":"#/definitions/IIssuePlainField"},{"$ref":"#/definitions/IIssuePseudoField"}],"x-apigen-logical":"union"}}},"required":["uid"],"additionalProperties":false},{"type":"object","properties":{"registry":{"type":"string","enum":["project","component","location"]},"name":{"type":"string"},"filter":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"project":{"type":"string"},"component":{"type":"string"}},"additionalProperties":false}},"required":["registry","name"],"additionalProperties":false}],"x-apigen-logical":"union"}},"required":["input"],"definitions":{"IIssuePlainField":{"type":"string","enum":["uid","title","kind","status","priority","project","component","createdAt","updatedAt","assignee","author","closedAt","gitContext"],"description":"The closed field vocabulary a `get`/`query` caller may request (SPEC.md §6.5). `assertKnownFields` (this module's {@link assertKnownIssueFields } ) rejects any name outside this union with a `BacklogValidationError` naming it — never a silent drop.\n\n`plain` fields are cheap: each is either a column on the `issue` node itself or a scalar living in `issue.meta.metadata` (`assignee`, `closedAt`, `gitContext` — SPEC.md §6.5's own reclassification of `closedAt` as `plain`, since it is read in the SAME single-row fetch as `assignee`, not a second query; `gitContext` is the item-level disclosure-contract git context, a sibling of `assignee` in the same metadata blob).\n\n`pseudo` fields are opt-in only: each costs a genuine extra read (an edge traversal to another node kind, or only exists on a `searchRanked` response) and is therefore NEVER included in the default card."},"IIssuePseudoField":{"type":"string","enum":["body","citations","notes","auditTrail","blockers","related","_score","_vector"]}}},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/types\").IIssueGetInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/types\").IIssueGetResult>"},"hasCtx":true},{"id":"backlog/query","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"query","words":["query"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"text":{"type":"string"},"filter":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"project":{"type":"string","description":"uid or name (SPEC.md §6.1)."},"component":{"type":"string","description":"uid or name, scoped within `project`."},"kind":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"status":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"string","const":"open"},{"type":"string","const":"closed"},{"type":"string","const":"all"}]},"priority":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"assignee":{"type":"string"},"claimedBy":{"type":"string"},"author":{"type":"string","description":"Resolves via `authored_by` edge traversal — uid or name."},"grep":{"type":"string","description":"FTS keyword, title+body — keyword-only, never hybrid."},"semantic":{"type":"string","description":"Routes to `searchRanked` (§5a) — composes with `grep`, neither swallows the other."},"anchor":{"type":"string","description":"Item-anchored similarity/traversal seed (§6.1) — uid of the reference item."},"plan":{"type":"string","description":"uid or name of the parent `issue` this one is filed under via the `part_of` edge (SPEC.md §1052/§1471: a plan is itself an `issue` row, not a dedicated node kind — attaching an item to it is `relate(childUid, planUid, 'part_of', 'add')`). Resolves candidate issues by the incoming `part_of` edge into the resolved plan node, exactly like the `project`/`component` edge-scoped filters."},"projectPath":{"type":"string","description":"`component.meta.path` (repo-relative package path, SPEC.md §3) — exact match against every live `component` row, unioned across matches. Distinct from `component`, which takes a uid/name rather than a filesystem path."},"closedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"createdAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"updatedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false,"description":"SPEC.md §6.5's `IIssueFilter`."},"fields":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","oneOf":[{"$ref":"#/definitions/IIssuePlainField"},{"$ref":"#/definitions/IIssuePseudoField"}],"x-apigen-logical":"union"}},"sort":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["priority","updated","created","relevance","textMatch"]},"direction":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["asc","desc"]},"limit":{"type":"number"},"offset":{"type":"number"},"after":{"type":"string"},"view":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["list","ready","graph","order","stale","similar","overlap","projects","components","locations"],"description":"`projects`/`components`/`locations` (SPEC.md §3a/§8 AC-9) are the registry LIST views — every live `project`/`component`/`location` row, optionally narrowed by `filter.project` (and, for `locations`, `filter.component`) — routed to `views/registry.ts`'s `listProjects`/`listComponents`/ `listLocations`, distinct from the issue-search views above (§6.1: \"conflating the two would be wrong\")."},"format":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["json","markdown"]},"overlapAxis":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["file","project","component","author"],"description":"SPEC.md §5, §6.1's `axis` — the grouping dimension for `overlapUids` (§6.2)."},"overlapUids":{"type":"array","items":{"type":"string"}},"staleAfterMin":{"type":"number"}},"additionalProperties":false}},"required":["input"],"definitions":{"IIssuePlainField":{"type":"string","enum":["uid","title","kind","status","priority","project","component","createdAt","updatedAt","assignee","author","closedAt","gitContext"],"description":"The closed field vocabulary a `get`/`query` caller may request (SPEC.md §6.5). `assertKnownFields` (this module's {@link assertKnownIssueFields } ) rejects any name outside this union with a `BacklogValidationError` naming it — never a silent drop.\n\n`plain` fields are cheap: each is either a column on the `issue` node itself or a scalar living in `issue.meta.metadata` (`assignee`, `closedAt`, `gitContext` — SPEC.md §6.5's own reclassification of `closedAt` as `plain`, since it is read in the SAME single-row fetch as `assignee`, not a second query; `gitContext` is the item-level disclosure-contract git context, a sibling of `assignee` in the same metadata blob).\n\n`pseudo` fields are opt-in only: each costs a genuine extra read (an edge traversal to another node kind, or only exists on a `searchRanked` response) and is therefore NEVER included in the default card."},"IIssuePseudoField":{"type":"string","enum":["body","citations","notes","auditTrail","blockers","related","_score","_vector"]}}},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"oneOf":[{"type":"object","properties":{"view":{"type":"string","enum":["list"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"closedAt":{"type":"string"},"gitContext":{"type":"string","description":"The item-level disclosure-contract git context (repo `AGENTS.md`'s \"Cite what you read\": the FIRST element of a `Citations:` block is `<active git context>`). A plain field — a sibling of `assignee` in `issue.meta.metadata`, read in the same single-row fetch. Rendered once at the head of the `Citations:` block by `markdown.ts`; never per-citation. Absent on every issue filed before the field existed, and on any issue whose `create`/`transition` supplied no `gitContext`."},"body":{"type":"string"},"citations":{"type":"array","items":{"$ref":"#/definitions/IIssueCitation"}},"notes":{"type":"array","items":{"$ref":"#/definitions/IIssueNote"}},"auditTrail":{"type":"array","items":{"$ref":"#/definitions/IIssueAuditEntry"}},"blockers":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"related":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"_score":{"type":"number"},"_vector":{"type":"array","items":{"type":"number"}}},"required":["uid"],"additionalProperties":false,"description":"The projected issue card (SPEC.md §6.5's `IIssueCard`). Every field is OPTIONAL here because the shape is fields-projected: a caller that asked for `['uid','title']` gets a card with only those two keys populated. `uid` is always present regardless of the requested `fields` — an issue card with no addressable identity is never a useful response."}},"nextCursor":{"type":"string"},"hasMore":{"type":"boolean"}},"required":["view","items","hasMore"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["ready"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"closedAt":{"type":"string"},"gitContext":{"type":"string","description":"The item-level disclosure-contract git context (repo `AGENTS.md`'s \"Cite what you read\": the FIRST element of a `Citations:` block is `<active git context>`). A plain field — a sibling of `assignee` in `issue.meta.metadata`, read in the same single-row fetch. Rendered once at the head of the `Citations:` block by `markdown.ts`; never per-citation. Absent on every issue filed before the field existed, and on any issue whose `create`/`transition` supplied no `gitContext`."},"body":{"type":"string"},"citations":{"type":"array","items":{"$ref":"#/definitions/IIssueCitation"}},"notes":{"type":"array","items":{"$ref":"#/definitions/IIssueNote"}},"auditTrail":{"type":"array","items":{"$ref":"#/definitions/IIssueAuditEntry"}},"blockers":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"related":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"_score":{"type":"number"},"_vector":{"type":"array","items":{"type":"number"}}},"required":["uid"],"additionalProperties":false,"description":"The projected issue card (SPEC.md §6.5's `IIssueCard`). Every field is OPTIONAL here because the shape is fields-projected: a caller that asked for `['uid','title']` gets a card with only those two keys populated. `uid` is always present regardless of the requested `fields` — an issue card with no addressable identity is never a useful response."}}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["graph"]},"graph":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"}},"required":["uid","title","status"],"additionalProperties":false}},"edges":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"rel":{"type":"string","enum":["blocks","relates_to","part_of"]}},"required":["from","to","rel"],"additionalProperties":false}}},"required":["nodes","edges"],"additionalProperties":false,"description":"SPEC.md §5's `DependencyGraph`, using this system's edge vocabulary (§6.2: `blocks`, not `DEPENDS_ON`)."}},"required":["view","graph"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["order"]},"order":{"$schema":"http://json-schema.org/draft-07/schema#","oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":true},"order":{"type":"array","items":{"type":"string"}}},"required":["ok","order"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":false},"cycle":{"type":"array","items":{"type":"string"}}},"required":["ok","cycle"],"additionalProperties":false}],"x-apigen-logical":"union"}},"required":["view","order"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["stale"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"closedAt":{"type":"string"},"gitContext":{"type":"string","description":"The item-level disclosure-contract git context (repo `AGENTS.md`'s \"Cite what you read\": the FIRST element of a `Citations:` block is `<active git context>`). A plain field — a sibling of `assignee` in `issue.meta.metadata`, read in the same single-row fetch. Rendered once at the head of the `Citations:` block by `markdown.ts`; never per-citation. Absent on every issue filed before the field existed, and on any issue whose `create`/`transition` supplied no `gitContext`."},"body":{"type":"string"},"citations":{"type":"array","items":{"$ref":"#/definitions/IIssueCitation"}},"notes":{"type":"array","items":{"$ref":"#/definitions/IIssueNote"}},"auditTrail":{"type":"array","items":{"$ref":"#/definitions/IIssueAuditEntry"}},"blockers":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"related":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"_score":{"type":"number"},"_vector":{"type":"array","items":{"type":"number"}}},"required":["uid"],"additionalProperties":false,"description":"The projected issue card (SPEC.md §6.5's `IIssueCard`). Every field is OPTIONAL here because the shape is fields-projected: a caller that asked for `['uid','title']` gets a card with only those two keys populated. `uid` is always present regardless of the requested `fields` — an issue card with no addressable identity is never a useful response."}}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["similar"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"closedAt":{"type":"string"},"gitContext":{"type":"string","description":"The item-level disclosure-contract git context (repo `AGENTS.md`'s \"Cite what you read\": the FIRST element of a `Citations:` block is `<active git context>`). A plain field — a sibling of `assignee` in `issue.meta.metadata`, read in the same single-row fetch. Rendered once at the head of the `Citations:` block by `markdown.ts`; never per-citation. Absent on every issue filed before the field existed, and on any issue whose `create`/`transition` supplied no `gitContext`."},"body":{"type":"string"},"citations":{"type":"array","items":{"$ref":"#/definitions/IIssueCitation"}},"notes":{"type":"array","items":{"$ref":"#/definitions/IIssueNote"}},"auditTrail":{"type":"array","items":{"$ref":"#/definitions/IIssueAuditEntry"}},"blockers":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"related":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"_score":{"type":"number"},"_vector":{"type":"array","items":{"type":"number"}}},"required":["uid"],"additionalProperties":false,"description":"The projected issue card (SPEC.md §6.5's `IIssueCard`). Every field is OPTIONAL here because the shape is fields-projected: a caller that asked for `['uid','title']` gets a card with only those two keys populated. `uid` is always present regardless of the requested `fields` — an issue card with no addressable identity is never a useful response."}}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["overlap"]},"groups":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"axisValue":{"type":"string"},"uids":{"type":"array","items":{"type":"string"}}},"required":["axisValue","uids"],"additionalProperties":false,"description":"`view:'overlap'`'s output shape (§6.2) — one entry per distinct axis value shared by ≥1 of the input `uids`."}}},"required":["view","groups"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["projects"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"repoUrl":{"type":"string"},"monorepo":{"type":"boolean"},"description":{"type":"string"}},"required":["uid","name"],"additionalProperties":false}}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["components"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"projectUid":{"type":"string"},"path":{"type":"string"},"description":{"type":"string"}},"required":["uid","name","projectUid"],"additionalProperties":false}}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["locations"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"locType":{"$ref":"#/definitions/ILocationType"},"value":{"type":"string"},"componentUid":{"type":"string"}},"required":["uid","locType","value","componentUid"],"additionalProperties":false}}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["list","ready","stale","similar"]},"format":{"type":"string","enum":["markdown"]},"markdown":{"type":"string"}},"required":["view","format","markdown"],"additionalProperties":false}],"x-apigen-logical":"union"},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"IIssueCitation":{"type":"object","properties":{"uid":{"type":"string"},"file":{"type":"string"},"lines":{"type":"string"},"context":{"type":"string","description":"Free-text prose for this citation (the write layer's `ICitationInput.context`). NOT the item's disclosure-contract git context — that is ITEM-level provenance and lives on {@link IIssueCard.gitContext } , a sibling of `assignee`, rendered once at the head of the `Citations:` block. This per-citation `context` is never rendered by `markdown.ts` and cannot carry the git context."},"symbol":{"type":"string"},"sha":{"type":"string"},"at":{"type":"string"}},"required":["uid","file","sha","at"],"additionalProperties":false,"description":"A citation, projected for read (mirrors the write layer's `ICitationInput` shape plus the server-computed `sha`)."},"IIssueNote":{"type":"object","properties":{"uid":{"type":"string"},"author":{"type":"string"},"text":{"type":"string"},"at":{"type":"string"}},"required":["uid","author","text","at"],"additionalProperties":false},"IIssueAuditEntry":{"type":"object","properties":{"uid":{"type":"string"},"actor":{"type":"string"},"action":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"note":{"type":"string"},"sha":{"type":"string"},"at":{"type":"string"}},"required":["uid","actor","action","sha","at"],"additionalProperties":false},"IIssueRef":{"type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"}},"required":["uid","title","status"],"additionalProperties":false,"description":"A minimal cross-reference to another issue — used by the `blockers`/`related` pseudo-fields."},"ILocationType":{"type":"string","enum":["path","url","tool"]}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/types\").IIssueQueryInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/types\").IIssueQueryResult>"},"hasCtx":true},{"id":"backlog/priority-matrix","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"priorityMatrix","words":["priority","matrix"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"filter":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"project":{"type":"string","description":"uid or name (SPEC.md §6.1)."},"component":{"type":"string","description":"uid or name, scoped within `project`."},"kind":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"status":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"string","const":"open"},{"type":"string","const":"closed"},{"type":"string","const":"all"}]},"priority":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"assignee":{"type":"string"},"claimedBy":{"type":"string"},"author":{"type":"string","description":"Resolves via `authored_by` edge traversal — uid or name."},"grep":{"type":"string","description":"FTS keyword, title+body — keyword-only, never hybrid."},"semantic":{"type":"string","description":"Routes to `searchRanked` (§5a) — composes with `grep`, neither swallows the other."},"anchor":{"type":"string","description":"Item-anchored similarity/traversal seed (§6.1) — uid of the reference item."},"plan":{"type":"string","description":"uid or name of the parent `issue` this one is filed under via the `part_of` edge (SPEC.md §1052/§1471: a plan is itself an `issue` row, not a dedicated node kind — attaching an item to it is `relate(childUid, planUid, 'part_of', 'add')`). Resolves candidate issues by the incoming `part_of` edge into the resolved plan node, exactly like the `project`/`component` edge-scoped filters."},"projectPath":{"type":"string","description":"`component.meta.path` (repo-relative package path, SPEC.md §3) — exact match against every live `component` row, unioned across matches. Distinct from `component`, which takes a uid/name rather than a filesystem path."},"closedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"createdAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"updatedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false,"description":"SPEC.md §6.5's `IIssueFilter`."}},"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"rows":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"priority":{"type":"string"},"priorityUid":{"type":"string"},"rank":{"type":"number","description":"`priority.meta.metadata.rank` (`nextPriorityRankTx`, §2) — lower is more urgent. Absent only for a malformed pre-existing row with no numeric rank; the count itself is still real."},"count":{"type":"number"}},"required":["priority","priorityUid","count"],"additionalProperties":false}},"unassigned":{"type":"number"},"statusScope":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"x-apigen-logical":"union"}},"required":["rows","unassigned","statusScope"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IPriorityMatrixInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IPriorityMatrixResult>"},"hasCtx":true},{"id":"backlog/part-of-rollup","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"partOfRollup","words":["part","of","rollup"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"}},"required":["uid"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"childrenTotal":{"type":"number"},"childrenOpen":{"type":"number"},"childrenClosed":{"type":"number"},"childrenOpenUids":{"type":"array","items":{"type":"string"}}},"required":["uid","childrenTotal","childrenOpen","childrenClosed","childrenOpenUids"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IPartOfRollupInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IPartOfRollupResult>"},"hasCtx":true},{"id":"backlog/open-curve","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"openCurve","words":["open","curve"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"filter":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"project":{"type":"string","description":"uid or name (SPEC.md §6.1)."},"component":{"type":"string","description":"uid or name, scoped within `project`."},"kind":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"status":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"string","const":"open"},{"type":"string","const":"closed"},{"type":"string","const":"all"}]},"priority":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"assignee":{"type":"string"},"claimedBy":{"type":"string"},"author":{"type":"string","description":"Resolves via `authored_by` edge traversal — uid or name."},"grep":{"type":"string","description":"FTS keyword, title+body — keyword-only, never hybrid."},"semantic":{"type":"string","description":"Routes to `searchRanked` (§5a) — composes with `grep`, neither swallows the other."},"anchor":{"type":"string","description":"Item-anchored similarity/traversal seed (§6.1) — uid of the reference item."},"plan":{"type":"string","description":"uid or name of the parent `issue` this one is filed under via the `part_of` edge (SPEC.md §1052/§1471: a plan is itself an `issue` row, not a dedicated node kind — attaching an item to it is `relate(childUid, planUid, 'part_of', 'add')`). Resolves candidate issues by the incoming `part_of` edge into the resolved plan node, exactly like the `project`/`component` edge-scoped filters."},"projectPath":{"type":"string","description":"`component.meta.path` (repo-relative package path, SPEC.md §3) — exact match against every live `component` row, unioned across matches. Distinct from `component`, which takes a uid/name rather than a filesystem path."},"closedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"createdAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"updatedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false,"description":"SPEC.md §6.5's `IIssueFilter`."},"at":{"type":"array","items":{"type":"string"}}},"required":["at"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"points":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"at":{"type":"string"},"existed":{"type":"number","description":"In-scope issues that EXISTED at this instant (`NodeFilter.validAt`: `t_created <= at` and `t_invalid` is null or after `at`) — exact, never reconstructed."},"open":{"type":"number","description":"Of `existed`, the count whose RECONSTRUCTED status was non-terminal at this instant (never the issue's CURRENT status) — see {@link reconstructStatusAt } ."},"closed":{"type":"number","description":"`existed - open`."}},"required":["at","existed","open","closed"],"additionalProperties":false}}},"required":["points"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IOpenCurveInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IOpenCurveResult>"},"hasCtx":true},{"id":"backlog/embedding-status","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"embeddingStatus","words":["embedding","status"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{},"required":[]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"configuredEnabled":{"type":"boolean"},"effectiveEnabled":{"type":"boolean"},"provider":{"type":"string"},"model":{"type":"string"},"membersPresent":{"type":"object","properties":{"embedding":{"type":"boolean"},"search":{"type":"boolean"}},"required":["embedding","search"],"additionalProperties":false},"divergent":{"type":"boolean"},"startupHash":{"type":"string"},"currentHash":{"type":"string"}},"required":["configuredEnabled","effectiveEnabled","provider","model","membersPresent","divergent","startupHash","currentHash"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"()","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/api\").IEmbeddingStatusResult>"},"hasCtx":true},{"id":"backlog/lookup","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"lookup","words":["lookup"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"q":{"type":"string"}},"required":["q"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"project":{"type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"repoUrl":{"type":"string"}},"required":["uid","name"],"additionalProperties":false},"component":{"type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"}},"required":["uid","name"],"additionalProperties":false},"location":{"type":"object","properties":{"uid":{"type":"string"},"locType":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["path","url","tool"]},"value":{"type":"string"}},"required":["uid","locType","value"],"additionalProperties":false},"hint":{"type":"string"}},"required":["project"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: { q: string; })","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/types\").ILookupResult>"},"hasCtx":true},{"id":"backlog/create","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"create","words":["create"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"title":{"type":"string"},"body":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"citations":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"file":{"type":"string"},"lines":{"type":"string"},"context":{"type":"string"},"symbol":{"type":"string"},"blastRadius":{"description":"Best-effort enrichment payload — not re-specified here; carried through verbatim into the citation node's metadata."}},"required":["file"],"additionalProperties":false,"description":"A filing-time citation (§6.3.2, carried forward from the established `Citation` shape in spirit — `blastRadius` stays best-effort, `model.ts:110-120`). Named `ICitationInput` here (not the spec's bare `Citation`) per this repo's \"prefix shared/data interfaces with `I`\" convention."}},"author":{"type":"string"},"assignee":{"type":"string"},"gitContext":{"type":"string"},"by":{"type":"string"},"duplicateAction":{"type":"string","enum":["abort","force","comment"]},"awaitEmbed":{"type":"boolean"}},"required":["title","body","project","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"created":{"type":"boolean"},"uid":{"type":"string"},"item":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"createdAt":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"closedAt":{"type":"string"},"gitContext":{"type":"string","description":"The item-level disclosure-contract git context, echoed back from {@link ICreateIssueInput.gitContext } — present iff one was supplied."}},"required":["uid","title","kind","status","project","component","createdAt"],"additionalProperties":false,"description":"The \"plain\" card fields (§6.5) this verb already has in hand after a create — never field-projected, unlike a `query` response.\n\nBUG-APIGEN-CORE-CLIENT-BARE-NAME-COLLISION-001: named `ICreateIssueCard`, not `IIssueCard`, deliberately. `query/types.ts` also exports an `IIssueCard` (the fields-projected card `query`/`get` return, every field but `uid` optional) — both interfaces were reachable from `api.d.ts`'s type graph, and apigen's extraction (`ts-json-schema-generator`, invoked per-operation but apparently resolving/caching declarations by bare name across the whole extracted program) non-deterministically resolved the `IIssueCard` bare name to EITHER declaration depending on extraction order — confirmed empirically: `dist/index.js` (CJS) resolved `query`'s own `items: IIssueCard[]` to THIS file's stricter shape (wrongly requiring `project`/`component`/`createdAt`), while `dist/index.mjs` (ESM) failed to resolve it at all (`items: {}`, unconstrained) — from the exact same source, built in the same pass. This is what broke `backlog_query`'s MCP `oneOf` output-schema validation the moment `get()`'s return type union (AC-11) made the extractor visit both `IIssueCard` declarations. The correct, permanent fix is what's below: give the two interfaces distinct bare names so extraction can never conflate them, not a workaround in the `get()`/`query()` call sites. Filed as BUG-APIGEN-CORE-CLIENT-BARE-NAME-COLLISION-001 (apigen-core-client, out of this package's ownership) — this rename is the local mitigation; the extractor itself should also stop keying declarations by bare name.\n\nThis rename fixes the CJS path (`dist/index.js`, the only bundle any real transport here — CLI, MCP-stdio, HTTP serve — ever spawns/requires; confirmed empirically, `dist/index.mjs` is loaded by none of them). It does NOT fix a second, DISTINCT defect also present in `dist/index.mjs`: every `$ref` to a NAMED exported interface (`ICreateIssueCard` here, `IDuplicateCandidate`, `IIssueCard`, …) dereferences to `{}` (empty/ unconstrained) in the ESM build specifically, while inline/anonymous object types on the SAME operation (e.g. `ICreateIssueResult.commentedOn`) resolve correctly in both builds — ruling out a general extraction failure and pointing at `dereferenceSchema`'s named-`$ref` resolution specifically misbehaving under ESM. Reproduced on `create`'s `item`/ `duplicateCandidates` fields, which this file's own diff never touched, so it predates and is independent of the collision above. Filed separately as BUG-APIGEN-CORE-CLIENT-ESM-DEREF-EMPTY-001 — not fixed here (out of this package's ownership, and no real consumer loads `dist/index.mjs` today), but must not be silently dropped."},"duplicateCandidates":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"score":{"type":"number","description":"Cosine similarity in `[0,1]`, straight off the vector channel — directly comparable to `project_policy.dedupe_threshold`."}},"required":["uid","title","score"],"additionalProperties":false,"description":"A dedupe candidate surfaced at filing time (§6.4), carrying the cosine similarity that produced it — see {@link scanForDuplicates } 's own doc comment for where that number comes from and why it is the only score this gate will accept."}},"reason":{"type":"string","enum":["duplicate-suppressed"]},"supersededUid":{"type":"string"},"commentedOn":{"type":"object","properties":{"uid":{"type":"string"},"noteId":{"type":"string"}},"required":["uid","noteId"],"additionalProperties":false}},"required":["created"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/create-issue\").ICreateIssueInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/create-issue\").ICreateIssueResult>"},"hasCtx":true},{"id":"backlog/update","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"update","words":["update"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"by":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"kind":{"type":"string"},"priority":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"awaitEmbed":{"type":"boolean"}},"required":["uid","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"changed":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["title","body","kind","priority","assignee","author"]}}},"required":["uid","changed"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/update\").IUpdateIssueInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/update\").IUpdateIssueOutcome>"},"hasCtx":true},{"id":"backlog/transition","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"transition","words":["transition"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"by":{"type":"string"},"toStatus":{"type":"string"},"note":{"type":"string"},"citations":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"file":{"type":"string"},"lines":{"type":"string"},"context":{"type":"string"},"symbol":{"type":"string"},"blastRadius":{"description":"Best-effort enrichment payload — not re-specified here; carried through verbatim into the citation node's metadata."}},"required":["file"],"additionalProperties":false,"description":"A filing-time citation (§6.3.2, carried forward from the established `Citation` shape in spirit — `blastRadius` stays best-effort, `model.ts:110-120`). Named `ICitationInput` here (not the spec's bare `Citation`) per this repo's \"prefix shared/data interfaces with `I`\" convention."}},"gitContext":{"type":"string"}},"required":["uid","by","toStatus"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"fromStatus":{"type":"string"},"toStatus":{"type":"string"},"closedAt":{"type":"string"},"transitionUid":{"type":"string"}},"required":["uid","fromStatus","toStatus","transitionUid"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/transition\").ITransitionInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/transition\").ITransitionOutcome>"},"hasCtx":true},{"id":"backlog/claim","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"claim","words":["claim"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"by":{"type":"string"},"action":{"type":"string","enum":["claim","release","renew"]},"force":{"type":"boolean"}},"required":["uid","by","action"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"status":{"type":"string","enum":["claimed","held","reclaimed-stale","renewed","released","release-noop"]},"claimedBy":{"type":"string"},"claimedAt":{"type":"string"},"heldBy":{"type":"string"},"heldSince":{"type":"string"},"previousClaimant":{"type":"string"},"wasClaimedBy":{"type":"string"}},"required":["uid","status"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/claim\").IClaimInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/claim\").IClaimOutcome>"},"hasCtx":true},{"id":"backlog/relate","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"relate","words":["relate"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"sourceUid":{"type":"string"},"targetUid":{"type":"string"},"rel":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["relates_to","supersedes","blocks","duplicate_of","part_of"],"description":"The closed `rel` union `relate` accepts (§3/§6.3.6) — issue → issue in every case."},"action":{"type":"string","enum":["add","remove"]},"by":{"type":"string"}},"required":["sourceUid","targetUid","rel","action","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"sourceUid":{"type":"string"},"targetUid":{"type":"string"},"rel":{"type":"string"},"action":{"type":"string","enum":["add","remove"]},"noop":{"type":"boolean"}},"required":["sourceUid","targetUid","rel","action","noop"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/relate\").IRelateInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/relate\").IRelateOutcome>"},"hasCtx":true},{"id":"backlog/move","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"move","words":["move"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"toProject":{"type":"string"},"toComponent":{"type":"string"},"by":{"type":"string"}},"required":["uid","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"noop":{"type":"boolean"},"fromProject":{"type":"string"},"toProject":{"type":"string"},"fromComponent":{"type":"string"},"toComponent":{"type":"string"}},"required":["uid","noop","fromProject","toProject","fromComponent","toComponent"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/move\").IMoveIssueInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/move\").IMoveIssueOutcome>"},"hasCtx":true},{"id":"backlog/upsert-project","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"upsertProject","words":["upsert","project"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string"},"repoUrl":{"type":"string"},"monorepo":{"type":"boolean"},"description":{"type":"string"},"by":{"type":"string"}},"required":["name","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"created":{"type":"boolean"},"project":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"repoUrl":{"type":"string"},"monorepo":{"type":"boolean"},"description":{"type":"string"}},"required":["uid","name"],"additionalProperties":false}},"required":["uid","created","project"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertProjectInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertProjectOutcome>"},"hasCtx":true},{"id":"backlog/upsert-component","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"upsertComponent","words":["upsert","component"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"project":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"description":{"type":"string"},"by":{"type":"string"}},"required":["project","name","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"created":{"type":"boolean"},"component":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"projectUid":{"type":"string"},"path":{"type":"string"},"description":{"type":"string"}},"required":["uid","name","projectUid"],"additionalProperties":false}},"required":["uid","created","component"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertComponentInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertComponentOutcome>"},"hasCtx":true},{"id":"backlog/upsert-location","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"upsertLocation","words":["upsert","location"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"component":{"type":"string"},"project":{"type":"string"},"locType":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["path","url","tool"]},"value":{"type":"string"},"by":{"type":"string"}},"required":["component","locType","value","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"created":{"type":"boolean"},"location":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"locType":{"$ref":"#/definitions/ILocationType"},"value":{"type":"string"},"componentUid":{"type":"string"}},"required":["uid","locType","value","componentUid"],"additionalProperties":false}},"required":["uid","created","location"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"ILocationType":{"type":"string","enum":["path","url","tool"]}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertLocationInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertLocationOutcome>"},"hasCtx":true},{"id":"backlog/rm-location","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"rmLocation","words":["rm","location"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"by":{"type":"string"},"reason":{"type":"string"}},"required":["uid","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"invalidated":{"type":"boolean","const":true}},"required":["uid","invalidated"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IRmLocationInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IRmLocationOutcome>"},"hasCtx":true},{"id":"backlog/delete","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"delete","words":["delete"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"reason":{"type":"string"},"by":{"type":"string"},"awaitEmbed":{"type":"boolean"}},"required":["uid","reason","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"invalidated":{"type":"boolean","const":true}},"required":["uid","invalidated"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset — the TRUE count."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/delete\").IDeleteIssueInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/delete\").IDeleteIssueOutcome>"},"hasCtx":true}],"extractorVersion":"0.3.3","createdAt":"2026-09-27T03:15:51.151Z","artifactSource":{"path":"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/api.d.ts","sha256":"ebfcef5f1d5890f7b6442890b59613fa8583e9d8d2353b12ad98e0b1110bda52","bytes":10898,"deps":{"api.d.ts":"ebfcef5f1d5890f7b6442890b59613fa8583e9d8d2353b12ad98e0b1110bda52","cli-input-envelope.d.ts":"9254390c27f31ab6598e623731007de3d143e50e8cd9e4824cae944e389851b3","cli.d.ts":"51a94638d3c71e0769022a71ae271a286e5f34cb3b43e60926bf7c0a635317fa","env.d.ts":"b8dbe8fb14a7dda4745fdac154dacdf8bacec49657830c88bf9344fed84a69d2","envelope.d.ts":"baee1dbc75eb16a44773f85c215b71d368208894c7c6323857524c2541a8601e","extract-live.d.ts":"11a6c52c95a703deeae932b5813922bd7773a544904ce0e4c06c6466d3049934","index.d.ts":"a57f1ad199cdce9e4595c14042ee12a196d69a9edbca42fb6b4262a461ce6651","install-skill.d.ts":"ac52fbea0674a76508a1b38ce2791191e1d6fa8ced8099dd5da81a18b68d1aa2","install.d.ts":"cc9944d6ec2d12af9963deecf2a2f288e433d1f59cfdba8a9ca9b3b4613b4f31","ir-artifact.d.ts":"10a615c14f483f24f01b6b3c53d38320d6c4aa10ebdb1bc4b5c2da4f84b59e8e","query/card.d.ts":"a4902fc8e3ea4ee8f80e74523c35d8c72b6df4949f4b724b2e3b52431ae93343","query/get.d.ts":"ed9344df7f91cad622c6e531883ce72fd6512b8ad7bc2a81ec65947d02c5de3a","query/index.d.ts":"2426d6dc6e3e7e3f2a5ae440250b6233e56edd5aac400bd9dea5ee878501e290","query/markdown.d.ts":"0aefdc5c216491ec2d98986c834fd66da5969c36da55e1c5c92030f2f79a8e87","query/query.d.ts":"5fdc656863f61c0c3a854a5888e8be57a01a3c9e4c7937cfcd947c895c7472d2","query/resolve.d.ts":"775a6c4f3414e01879ffacb4bcd032ef1d2e09dcd7139f08312433215b8631c3","query/types.d.ts":"83a6e4c0bc43f497ffe30b86d95799c823f09f4a93adff3acda2ec2cd4ddf231","query/views/registry.d.ts":"5baee362c591688fe5ea38f8fd3586f80cccb09a2bf6166d3e9e155307bdd08a","query/views/semantic.d.ts":"6ab4a6fe8967e4a79a3d720e006355278e7aaf74ddba1eb2ada829ba90c7d8ed","query/views/stats.d.ts":"5e98526a9d5978e2fbfac2a90c485f5d1b13cec6ca788fdb16e4412e3fc9ab8e","search-shortcut.d.ts":"a9575c3cc4496566859900935031a0e2607f134b557cd3a4462382255dbc0126","serve.d.ts":"768604b57bfd1c31a9a2900d10e77e7a619f4d201f1d6c9f4641e1504e9a0a1c","server.d.ts":"f84b29cd101b50ee0c97c86d3da49f742c9759d55ba0905486ee78b0438cded2","store/catalog-invariant-guard.d.ts":"2f77ebbd9c7b2aa66f165eeb9d84a2dee83dd279da695af2a84546b18a08f270","store/graph-backlog-store.d.ts":"1fe364b91a951677f756e0d44f00baab412be040aaed9938e89dc2c8996b9bee","store/immediate-retry.d.ts":"db564719cb7e75e13275a90872de72ff8f7fd4798c73351677ed32329eb52173","store/signal-cleanup.d.ts":"f2b7fa6071337f862891653d02df99db06feff18bf090e048b1f382a6b21e0d1","store/type-policy.d.ts":"8c46b0611170294765383b9f00791e4fd855185a62c69943219f2d40fa3e9415","store/vocabulary-guard.d.ts":"84c88bc4c825977f48f46efec5667b70cbd50195f0c8bafdbe4eb36154b041b0","version-info.d.ts":"9d2a66fb1dc9a9fa227cdb224c53ff5695ad21b23de66c4be1e02e67c9c08eb3","write/audit.d.ts":"b4871edceb1d2c4fbadf0b1801afdd84138e26a7351011b17e81b5dff0e3bf26","write/bootstrap.d.ts":"652fdfcb1d81e5b0569e64e1f588eb2fbe70411e16553a3043ac5e80e9d68276","write/catalog-merge.d.ts":"6bc0be5931541091473ff071d34cc9831a21b03c89daef723a7427dd10ad0133","write/catalog-repair.d.ts":"d91805b046d77e3b6c33146634b8ffccf86f0c1d3ae6727180647cce8c255282","write/catalog.d.ts":"37e91b1f78c54ff6d43feed0bf4411443a36ea932a07d80f4e876607e9b9541d","write/citation-path.d.ts":"78a01a711ec78cba6be9a1e1ef4709c3f8b12bacf8f8b84ea44531702579516f","write/claim-lease.d.ts":"a742912d7d74e5c0221792effdd15452a23e195a88c299e3f7cd60ed26fdc4ff","write/claim.d.ts":"0897712218653b4d71fd5031b65b73e13fe9a56c64f6c348ef1b2d8aed7de2c2","write/create-issue.d.ts":"ef4868d3abb174ae9789f8e2aee35aac089a437b7e30628482a824e936122960","write/delete.d.ts":"73577bd1340a8cb8d078d97d0a7417cf3c1031d3e95ed16d9d087801da6b80df","write/embed-drain.d.ts":"a6295da99822d289187e506281545ca09da490bcda56c497d5571ab674872209","write/embedding-config.d.ts":"b3245db358bf7bbd7db94f412be613b8bb4ac9b3d7b778f07ca019b062c785f1","write/embedding-observer.d.ts":"2ccac6173aba3830bf60652cbf916250d7765f5d704364205a5e08c3f0f4969f","write/errors.d.ts":"9cce78196a1b533bcaf73aac349ea17911d69d0467727d377d60162b2ec951ad","write/issue-status.d.ts":"0df49e4e88d69122d545037c36e97b67da9bec1e882877833bb33077dc10d753","write/move.d.ts":"3dbe164e938a9cb4459231b3c61b9fae89e9c21d8aa7de3fed719732da9fc62e","write/relate.d.ts":"7567c5e07a78b332999591fa77eede9a3d33b5db5d5b3fb5588588be57b4f1ca","write/transition.d.ts":"b7f24a3b773768e31755902b9325c86a8d3391b1985788d4520cf4aa418f4cf7","write/tx.d.ts":"40a166839509dd7693981012f07444fc3aab00a5635dbb9b24a27bbf4e4a5eb8","write/uid-prefix.d.ts":"19c46bffd134092cae77deee38dfdfb584cd431abf86e1825476bf95af6163cb","write/update.d.ts":"3901403b32b892d19df57f68f0824c4f8d70d6d0b9d3583fd0e155441c036311"}}}
|
|
1
|
+
{"formatVersion":1,"operations":[{"id":"backlog/get","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"get","words":["get"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"oneOf":[{"type":"object","properties":{"uid":{"type":"string"},"fields":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","oneOf":[{"$ref":"#/definitions/IIssuePlainField"},{"$ref":"#/definitions/IIssuePseudoField"}],"x-apigen-logical":"union"}},"lastN":{"type":"number"},"after":{"type":"string"},"deriveThrough":{"type":"number","enum":[1,2,3,4,5]}},"required":["uid"],"additionalProperties":false},{"type":"object","properties":{"registry":{"type":"string","enum":["project","component","location"]},"name":{"type":"string"},"filter":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"project":{"type":"string"},"component":{"type":"string"}},"additionalProperties":false}},"required":["registry","name"],"additionalProperties":false}],"x-apigen-logical":"union"}},"required":["input"],"definitions":{"IIssuePlainField":{"type":"string","enum":["uid","title","kind","status","priority","project","component","createdAt","updatedAt","assignee","author","closedAt","gitContext"],"description":"The closed field vocabulary a `get`/`query` caller may request (SPEC.md §6.5). `assertKnownFields` (this module's {@link assertKnownIssueFields } ) rejects any name outside this union with a `BacklogValidationError` naming it — never a silent drop.\n\n`plain` fields are cheap: each is either a column on the `issue` node itself or a scalar living in `issue.meta.metadata` (`assignee`, `closedAt`, `gitContext` — SPEC.md §6.5's own reclassification of `closedAt` as `plain`, since it is read in the SAME single-row fetch as `assignee`, not a second query; `gitContext` is the item-level disclosure-contract git context, a sibling of `assignee` in the same metadata blob).\n\n`pseudo` fields are opt-in only: each costs a genuine extra read (an edge traversal to another node kind, or only exists on a `searchRanked` response) and is therefore NEVER included in the default card."},"IIssuePseudoField":{"type":"string","enum":["body","citations","notes","auditTrail","blockers","related","_score","_vector","blocksOut","dependents","partOf","obligations","verdict","spec","similar"]}}},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/types\").IIssueGetInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/types\").IIssueGetResult>"},"hasCtx":true},{"id":"backlog/query","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"query","words":["query"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"text":{"type":"string"},"filter":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"project":{"type":"string","description":"uid or name (SPEC.md §6.1)."},"component":{"type":"string","description":"uid or name, scoped within `project`."},"kind":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"status":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"string","const":"open"},{"type":"string","const":"closed"},{"type":"string","const":"all"}]},"priority":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"assignee":{"type":"string"},"claimedBy":{"type":"string"},"author":{"type":"string","description":"Resolves via `authored_by` edge traversal — uid or name."},"grep":{"type":"string","description":"FTS keyword, title+body — keyword-only, never hybrid."},"semantic":{"type":"string","description":"Routes to `searchRanked` (§5a) — composes with `grep`, neither swallows the other."},"anchor":{"type":"string","description":"Item-anchored similarity/traversal seed (§6.1) — uid of the reference item."},"plan":{"type":"string","description":"uid or name of the parent `issue` this one is filed under via the `part_of` edge (SPEC.md §1052/§1471: a plan is itself an `issue` row, not a dedicated node kind — attaching an item to it is `relate(childUid, planUid, 'part_of', 'add')`). Resolves candidate issues by the incoming `part_of` edge into the resolved plan node, exactly like the `project`/`component` edge-scoped filters."},"projectPath":{"type":"string","description":"`component.meta.path` (repo-relative package path, SPEC.md §3) — exact match against every live `component` row, unioned across matches. Distinct from `component`, which takes a uid/name rather than a filesystem path."},"closedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"createdAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"updatedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"similarTo":{"type":"string","description":"C9 — uid of X: return items linked `similar_to` X (i.e. the SOURCE side of an outgoing `similar_to` edge whose target is X). Renamed from the removed `duplicateOf`; `similar_to` is the reviewed similarity relation."},"hasSimilar":{"type":"boolean","description":"C9 — true: return items with ≥1 incoming `similar_to` link (the DST side). Renamed from the removed `hasDuplicates`."}},"additionalProperties":false,"description":"SPEC.md §6.5's `IIssueFilter`."},"fields":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","oneOf":[{"$ref":"#/definitions/IIssuePlainField"},{"$ref":"#/definitions/IIssuePseudoField"}],"x-apigen-logical":"union"}},"sort":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["priority","updated","created","relevance","textMatch"]},"direction":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["asc","desc"]},"limit":{"type":"number"},"offset":{"type":"number"},"after":{"type":"string"},"view":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["list","ready","graph","order","stale","similar","overlap","projects","components","locations","kinds","catalogs"],"description":"`projects`/`components`/`locations` (SPEC.md §3a/§8 AC-9) are the registry LIST views — every live `project`/`component`/`location` row, optionally narrowed by `filter.project` (and, for `locations`, `filter.component`) — routed to `views/registry.ts`'s `listProjects`/`listComponents`/ `listLocations`, distinct from the issue-search views above (§6.1: \"conflating the two would be wrong\")."},"format":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["json","markdown"]},"overlapAxis":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["file","project","component","author"],"description":"SPEC.md §5, §6.1's `axis` — the grouping dimension for `overlapUids` (§6.2)."},"overlapUids":{"type":"array","items":{"type":"string"}},"staleAfterMin":{"type":"number"},"catalog":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["kind","status","priority","relation","field","error_code","location_type","verb"],"description":"The catalogs this view exposes. `kind`/`status`/`priority` are store-backed (open vocabularies minted by the write layer); the rest are fixed in-code vocabularies projected from their validating source."}},"additionalProperties":false}},"required":["input"],"definitions":{"IIssuePlainField":{"type":"string","enum":["uid","title","kind","status","priority","project","component","createdAt","updatedAt","assignee","author","closedAt","gitContext"],"description":"The closed field vocabulary a `get`/`query` caller may request (SPEC.md §6.5). `assertKnownFields` (this module's {@link assertKnownIssueFields } ) rejects any name outside this union with a `BacklogValidationError` naming it — never a silent drop.\n\n`plain` fields are cheap: each is either a column on the `issue` node itself or a scalar living in `issue.meta.metadata` (`assignee`, `closedAt`, `gitContext` — SPEC.md §6.5's own reclassification of `closedAt` as `plain`, since it is read in the SAME single-row fetch as `assignee`, not a second query; `gitContext` is the item-level disclosure-contract git context, a sibling of `assignee` in the same metadata blob).\n\n`pseudo` fields are opt-in only: each costs a genuine extra read (an edge traversal to another node kind, or only exists on a `searchRanked` response) and is therefore NEVER included in the default card."},"IIssuePseudoField":{"type":"string","enum":["body","citations","notes","auditTrail","blockers","related","_score","_vector","blocksOut","dependents","partOf","obligations","verdict","spec","similar"]}}},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"oneOf":[{"type":"object","properties":{"view":{"type":"string","enum":["list"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"closedAt":{"type":"string"},"gitContext":{"type":"string","description":"The item-level disclosure-contract git context (repo `AGENTS.md`'s \"Cite what you read\": the FIRST element of a `Citations:` block is `<active git context>`). A plain field — a sibling of `assignee` in `issue.meta.metadata`, read in the same single-row fetch. Rendered once at the head of the `Citations:` block by `markdown.ts`; never per-citation. Absent on every issue filed before the field existed, and on any issue whose `create`/`transition` supplied no `gitContext`."},"body":{"type":"string"},"citations":{"type":"array","items":{"$ref":"#/definitions/IIssueCitation"}},"notes":{"type":"array","items":{"$ref":"#/definitions/IIssueNote"}},"auditTrail":{"type":"array","items":{"$ref":"#/definitions/IIssueAuditEntry"}},"blockers":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"related":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"_score":{"type":"number"},"_score_kind":{"$ref":"#/definitions/IScoreKind","description":"Provenance tag for `_score` (DESIGN §2 Invariant 5). Present iff `_score` is; a rank-derived score is ordinal, never similarity/confidence."},"_vector":{"type":"array","items":{"type":"number"}},"blocksOut":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"},"description":"Outbound `blocks` — issues that cannot start until this one is terminal."},"dependents":{"type":"number","description":"Transitive dependent count: how many nodes reach THIS node via `blocks` (inclusive of direct dependents). Deterministic, scope-bounded (bounded to a page's candidate id set on a list read; unbounded but cycle-safe on a single `get`)."},"partOf":{"anyOf":[{"$ref":"#/definitions/IIssueRef"},{"type":"null"}],"description":"The `part_of` parent, if any (`n:1` — at most one)."},"obligations":{"type":"array","items":{"$ref":"#/definitions/IObligationView"},"description":"The declared obligations on this item, in `has_obligation` edge order."},"verdict":{"$ref":"#/definitions/IVerdict","description":"The derived actionability verdict + its typed reasons."},"spec":{"$ref":"#/definitions/IIssueSpecProjection","description":"C10 — the work item's current spec revision pointer. The card carries the revision uid + its `'sha256:<hex>'` token (the token a reader holds and compares) and the sequence — NEVER the revision body. Absent when the item has no spec, or when the `spec` pseudo field was not requested."},"similar":{"$ref":"#/definitions/ISimilarLinks","description":"C9 — reviewed `similar_to` links touching this item, both directions (`ISimilarLinks`). This is the ADVISORY similarity relation, populated only when explicitly requested via `fields:['similar']`; it never includes the reserved `duplicate_of` same-judgement relation."}},"required":["uid"],"additionalProperties":false,"description":"The projected issue card (SPEC.md §6.5's `IIssueCard`). Every field is OPTIONAL here because the shape is fields-projected: a caller that asked for `['uid','title']` gets a card with only those two keys populated. `uid` is always present regardless of the requested `fields` — an issue card with no addressable identity is never a useful response."}},"nextCursor":{"type":"string"},"hasMore":{"type":"boolean"}},"required":["view","items","hasMore"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["ready"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"closedAt":{"type":"string"},"gitContext":{"type":"string","description":"The item-level disclosure-contract git context (repo `AGENTS.md`'s \"Cite what you read\": the FIRST element of a `Citations:` block is `<active git context>`). A plain field — a sibling of `assignee` in `issue.meta.metadata`, read in the same single-row fetch. Rendered once at the head of the `Citations:` block by `markdown.ts`; never per-citation. Absent on every issue filed before the field existed, and on any issue whose `create`/`transition` supplied no `gitContext`."},"body":{"type":"string"},"citations":{"type":"array","items":{"$ref":"#/definitions/IIssueCitation"}},"notes":{"type":"array","items":{"$ref":"#/definitions/IIssueNote"}},"auditTrail":{"type":"array","items":{"$ref":"#/definitions/IIssueAuditEntry"}},"blockers":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"related":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"_score":{"type":"number"},"_score_kind":{"$ref":"#/definitions/IScoreKind","description":"Provenance tag for `_score` (DESIGN §2 Invariant 5). Present iff `_score` is; a rank-derived score is ordinal, never similarity/confidence."},"_vector":{"type":"array","items":{"type":"number"}},"blocksOut":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"},"description":"Outbound `blocks` — issues that cannot start until this one is terminal."},"dependents":{"type":"number","description":"Transitive dependent count: how many nodes reach THIS node via `blocks` (inclusive of direct dependents). Deterministic, scope-bounded (bounded to a page's candidate id set on a list read; unbounded but cycle-safe on a single `get`)."},"partOf":{"anyOf":[{"$ref":"#/definitions/IIssueRef"},{"type":"null"}],"description":"The `part_of` parent, if any (`n:1` — at most one)."},"obligations":{"type":"array","items":{"$ref":"#/definitions/IObligationView"},"description":"The declared obligations on this item, in `has_obligation` edge order."},"verdict":{"$ref":"#/definitions/IVerdict","description":"The derived actionability verdict + its typed reasons."},"spec":{"$ref":"#/definitions/IIssueSpecProjection","description":"C10 — the work item's current spec revision pointer. The card carries the revision uid + its `'sha256:<hex>'` token (the token a reader holds and compares) and the sequence — NEVER the revision body. Absent when the item has no spec, or when the `spec` pseudo field was not requested."},"similar":{"$ref":"#/definitions/ISimilarLinks","description":"C9 — reviewed `similar_to` links touching this item, both directions (`ISimilarLinks`). This is the ADVISORY similarity relation, populated only when explicitly requested via `fields:['similar']`; it never includes the reserved `duplicate_of` same-judgement relation."}},"required":["uid"],"additionalProperties":false,"description":"The projected issue card (SPEC.md §6.5's `IIssueCard`). Every field is OPTIONAL here because the shape is fields-projected: a caller that asked for `['uid','title']` gets a card with only those two keys populated. `uid` is always present regardless of the requested `fields` — an issue card with no addressable identity is never a useful response."}}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["graph"]},"graph":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"}},"required":["uid","title","status"],"additionalProperties":false}},"edges":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"rel":{"type":"string","enum":["blocks","relates_to","part_of"]}},"required":["from","to","rel"],"additionalProperties":false}}},"required":["nodes","edges"],"additionalProperties":false,"description":"SPEC.md §5's `DependencyGraph`, using this system's edge vocabulary (§6.2: `blocks`, not `DEPENDS_ON`)."}},"required":["view","graph"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["order"]},"order":{"$schema":"http://json-schema.org/draft-07/schema#","oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":true},"order":{"type":"array","items":{"type":"string"}}},"required":["ok","order"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":false},"cycle":{"type":"array","items":{"type":"string"}}},"required":["ok","cycle"],"additionalProperties":false}],"x-apigen-logical":"union"}},"required":["view","order"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["stale"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"closedAt":{"type":"string"},"gitContext":{"type":"string","description":"The item-level disclosure-contract git context (repo `AGENTS.md`'s \"Cite what you read\": the FIRST element of a `Citations:` block is `<active git context>`). A plain field — a sibling of `assignee` in `issue.meta.metadata`, read in the same single-row fetch. Rendered once at the head of the `Citations:` block by `markdown.ts`; never per-citation. Absent on every issue filed before the field existed, and on any issue whose `create`/`transition` supplied no `gitContext`."},"body":{"type":"string"},"citations":{"type":"array","items":{"$ref":"#/definitions/IIssueCitation"}},"notes":{"type":"array","items":{"$ref":"#/definitions/IIssueNote"}},"auditTrail":{"type":"array","items":{"$ref":"#/definitions/IIssueAuditEntry"}},"blockers":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"related":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"_score":{"type":"number"},"_score_kind":{"$ref":"#/definitions/IScoreKind","description":"Provenance tag for `_score` (DESIGN §2 Invariant 5). Present iff `_score` is; a rank-derived score is ordinal, never similarity/confidence."},"_vector":{"type":"array","items":{"type":"number"}},"blocksOut":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"},"description":"Outbound `blocks` — issues that cannot start until this one is terminal."},"dependents":{"type":"number","description":"Transitive dependent count: how many nodes reach THIS node via `blocks` (inclusive of direct dependents). Deterministic, scope-bounded (bounded to a page's candidate id set on a list read; unbounded but cycle-safe on a single `get`)."},"partOf":{"anyOf":[{"$ref":"#/definitions/IIssueRef"},{"type":"null"}],"description":"The `part_of` parent, if any (`n:1` — at most one)."},"obligations":{"type":"array","items":{"$ref":"#/definitions/IObligationView"},"description":"The declared obligations on this item, in `has_obligation` edge order."},"verdict":{"$ref":"#/definitions/IVerdict","description":"The derived actionability verdict + its typed reasons."},"spec":{"$ref":"#/definitions/IIssueSpecProjection","description":"C10 — the work item's current spec revision pointer. The card carries the revision uid + its `'sha256:<hex>'` token (the token a reader holds and compares) and the sequence — NEVER the revision body. Absent when the item has no spec, or when the `spec` pseudo field was not requested."},"similar":{"$ref":"#/definitions/ISimilarLinks","description":"C9 — reviewed `similar_to` links touching this item, both directions (`ISimilarLinks`). This is the ADVISORY similarity relation, populated only when explicitly requested via `fields:['similar']`; it never includes the reserved `duplicate_of` same-judgement relation."}},"required":["uid"],"additionalProperties":false,"description":"The projected issue card (SPEC.md §6.5's `IIssueCard`). Every field is OPTIONAL here because the shape is fields-projected: a caller that asked for `['uid','title']` gets a card with only those two keys populated. `uid` is always present regardless of the requested `fields` — an issue card with no addressable identity is never a useful response."}}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["similar"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"closedAt":{"type":"string"},"gitContext":{"type":"string","description":"The item-level disclosure-contract git context (repo `AGENTS.md`'s \"Cite what you read\": the FIRST element of a `Citations:` block is `<active git context>`). A plain field — a sibling of `assignee` in `issue.meta.metadata`, read in the same single-row fetch. Rendered once at the head of the `Citations:` block by `markdown.ts`; never per-citation. Absent on every issue filed before the field existed, and on any issue whose `create`/`transition` supplied no `gitContext`."},"body":{"type":"string"},"citations":{"type":"array","items":{"$ref":"#/definitions/IIssueCitation"}},"notes":{"type":"array","items":{"$ref":"#/definitions/IIssueNote"}},"auditTrail":{"type":"array","items":{"$ref":"#/definitions/IIssueAuditEntry"}},"blockers":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"related":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"}},"_score":{"type":"number"},"_score_kind":{"$ref":"#/definitions/IScoreKind","description":"Provenance tag for `_score` (DESIGN §2 Invariant 5). Present iff `_score` is; a rank-derived score is ordinal, never similarity/confidence."},"_vector":{"type":"array","items":{"type":"number"}},"blocksOut":{"type":"array","items":{"$ref":"#/definitions/IIssueRef"},"description":"Outbound `blocks` — issues that cannot start until this one is terminal."},"dependents":{"type":"number","description":"Transitive dependent count: how many nodes reach THIS node via `blocks` (inclusive of direct dependents). Deterministic, scope-bounded (bounded to a page's candidate id set on a list read; unbounded but cycle-safe on a single `get`)."},"partOf":{"anyOf":[{"$ref":"#/definitions/IIssueRef"},{"type":"null"}],"description":"The `part_of` parent, if any (`n:1` — at most one)."},"obligations":{"type":"array","items":{"$ref":"#/definitions/IObligationView"},"description":"The declared obligations on this item, in `has_obligation` edge order."},"verdict":{"$ref":"#/definitions/IVerdict","description":"The derived actionability verdict + its typed reasons."},"spec":{"$ref":"#/definitions/IIssueSpecProjection","description":"C10 — the work item's current spec revision pointer. The card carries the revision uid + its `'sha256:<hex>'` token (the token a reader holds and compares) and the sequence — NEVER the revision body. Absent when the item has no spec, or when the `spec` pseudo field was not requested."},"similar":{"$ref":"#/definitions/ISimilarLinks","description":"C9 — reviewed `similar_to` links touching this item, both directions (`ISimilarLinks`). This is the ADVISORY similarity relation, populated only when explicitly requested via `fields:['similar']`; it never includes the reserved `duplicate_of` same-judgement relation."}},"required":["uid"],"additionalProperties":false,"description":"The projected issue card (SPEC.md §6.5's `IIssueCard`). Every field is OPTIONAL here because the shape is fields-projected: a caller that asked for `['uid','title']` gets a card with only those two keys populated. `uid` is always present regardless of the requested `fields` — an issue card with no addressable identity is never a useful response."}},"clusters":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"candidate":{"type":"array","items":{"$ref":"#/definitions/ISimilarCluster"}},"linked":{"type":"array","items":{"$ref":"#/definitions/ISimilarCluster"}},"scanned":{"type":"number"},"computedAt":{"type":"string"}},"required":["candidate","linked","scanned","computedAt"],"additionalProperties":false,"description":"C9 — the additive cluster block `view:'similar'` gains when a scope filter (`project`/`component`) is present. `candidate` is the advisory, write-nothing scan output; `linked` is built from existing live `similar_to` edges only. Without the embedding substrate `candidate` is `[]` (the documented degraded mode) while `linked` still returns."}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["overlap"]},"groups":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"axisValue":{"type":"string"},"uids":{"type":"array","items":{"type":"string"}}},"required":["axisValue","uids"],"additionalProperties":false,"description":"`view:'overlap'`'s output shape (§6.2) — one entry per distinct axis value shared by ≥1 of the input `uids`."}}},"required":["view","groups"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["projects"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"repoUrl":{"type":"string"},"monorepo":{"type":"boolean"},"description":{"type":"string"}},"required":["uid","name"],"additionalProperties":false}}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["components"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"projectUid":{"type":"string"},"path":{"type":"string"},"description":{"type":"string"}},"required":["uid","name","projectUid"],"additionalProperties":false}}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["locations"]},"items":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"locType":{"$ref":"#/definitions/ILocationType"},"value":{"type":"string"},"componentUid":{"type":"string"}},"required":["uid","locType","value","componentUid"],"additionalProperties":false}}},"required":["view","items"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["kinds"]},"catalogs":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"catalogs":{"type":"array","items":{"$ref":"#/definitions/CatalogKindName"}},"terms":{"type":"array","items":{"$ref":"#/definitions/ICatalogTerm"}},"hasCaseCollisions":{"type":"boolean","description":"True when any term is a case-fold collision of another within its catalog (the invariant the read layer depends on)."}},"required":["catalogs","terms","hasCaseCollisions"],"additionalProperties":false}},"required":["view","catalogs"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["catalogs"]},"terms":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"name":{"type":"string","description":"The term's canonical name."},"uid":{"type":"string","description":"Live row uid when a store row backs it; absent for in-code source terms."},"catalog":{"$ref":"#/definitions/CatalogKindName","description":"Which vocabulary this term belongs to."},"source":{"$ref":"#/definitions/CatalogSource","description":"The validating source this term was generated from at call time."},"lifecycle":{"$ref":"#/definitions/CatalogLifecycle"},"replacedBy":{"type":"string","description":"Present when deprecated: the term to use instead."},"usageCount":{"type":"number","description":"For `kind`/`status`/`priority`: the live callers count, read at call time."}},"required":["name","catalog","source","lifecycle"],"additionalProperties":false}}},"required":["view","terms"],"additionalProperties":false},{"type":"object","properties":{"view":{"type":"string","enum":["list","ready","stale","similar"]},"format":{"type":"string","enum":["markdown"]},"markdown":{"type":"string"}},"required":["view","format","markdown"],"additionalProperties":false}],"x-apigen-logical":"union"},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"IIssueCitation":{"$ref":"#/definitions/ICitationRecord","description":"A citation, projected for read — the ONE citation contract (`../citation.ts`'s `ICitationRecord`: `ICitation` plus the server-computed `uid`/`sha`/`at` and the persisted `target_type`) with no re-declaration here. `context` is the per-citation free-text prose (the contract's `context`, persisted on the node's `content` column); it is NOT the item's disclosure-contract git context, which is ITEM-level provenance on {@link IIssueCard.gitContext } and rendered once at the head of the block. `revision`, when present, names the git revision the target was resolved against (a revision-pinned citation)."},"ICitationRecord":{"type":"object","properties":{"file":{"type":"string","description":"The cited target — a repo-relative or absolute filesystem path (the persisted `meta.target`). REQUIRED and non-blank."},"lines":{"type":"string","description":"The line or line-range WITHIN `file` (the persisted `meta.line`). OPTIONAL — a whole-file citation omits it. Kept a free `string` (e.g. `\"120-140\"`) so a caller is not forced to narrow to a single integer.\n\n`lines` (pl.) is the CONTRACT name; `line` is the persisted one end. Both spellings intentionally diverge from the persisted key — see this interface's own doc comment."},"context":{"type":"string","description":"Free-text prose for THIS citation. Persisted as the citation node's `content` column (never its `meta`), which is what {@link citationFromNode } reads back into this field. NOT the item-level disclosure-contract git context — that lives on the issue (`gitContext`) and is rendered once at the head of its `Citations:` block, never per-citation."},"symbol":{"type":"string","description":"The named symbol (`function`/`class`/`method`) this citation points at, when narrower than a whole file."},"blastRadius":{"description":"Best-effort enrichment payload carried through verbatim. Not re-specified here (SPEC.md §6.3.2 declares it `CitationBlastRadius`, a type that exists nowhere in the package): the write layer has always stored whatever JSON-serializable value a caller passed and `similarity-scan.ts` reads it only when it is a string. Typed `unknown` to match that existing behavior exactly rather than introducing a third, narrower shape."},"revision":{"type":"string","description":"A git revision (branch/tag/sha) the `file` is resolved against, instead of the working tree. Present only for revision-pinned citations — see this module's header. Persisted as `meta.revision`."},"uid":{"type":"string","description":"The citation node's own uid — the identity `removeCitation` addresses (never a `(target,line)` composite)."},"sha":{"type":"string","description":"`sha256` of the cited content at filing time, or the fixed sentinel `\"unverified\"` (§8.5)."},"at":{"type":"string","description":"The filing instant (the node's own `meta.at`, falling back to `t_created` for a legacy row)."},"targetType":{"type":"string","description":"The persisted target discriminator (`'path'` today). Optional so a legacy row without one still projects."}},"required":["at","file","sha","uid"],"additionalProperties":false,"description":"A citation as PROJECTED FOR READ — the contract plus the server-computed identity (`uid`), content-address (`sha`), and filing instant (`at`), and the persisted `target_type` (today always `'path'`). `query/types.ts`'s `IIssueCitation` extends this, so the read surface and the write surface can never drift."},"IIssueNote":{"type":"object","properties":{"uid":{"type":"string"},"author":{"type":"string"},"text":{"type":"string"},"at":{"type":"string"}},"required":["uid","author","text","at"],"additionalProperties":false},"IIssueAuditEntry":{"type":"object","properties":{"uid":{"type":"string"},"actor":{"type":"string"},"action":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"note":{"type":"string"},"sha":{"type":"string"},"at":{"type":"string"}},"required":["uid","actor","action","sha","at"],"additionalProperties":false},"IIssueRef":{"type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"},"rel":{"type":"string","enum":["relates_to","part_of","blocks","blocked_by","similar_to","duplicate_of"],"description":"Which live relation produced this ref (C2 — structural legibility). ADDITIVE — existing consumers reading `uid`/`title`/`status` are unaffected. `related` now surfaces every live relation type: `relates_to` and `part_of` in both directions, and `blocks` (outbound, tagged `blocks`) / incoming (tagged `blocked_by`). `similar_to` (C9's reviewed similarity link) and the reserved `duplicate_of` are declared here for the same ref shape's future producers."}},"required":["uid","title","status"],"additionalProperties":false,"description":"A minimal cross-reference to another issue — used by the `blockers`/`related` pseudo-fields."},"IScoreKind":{"type":"string","enum":["rrf","bm25","cosine","rank","priority"],"description":"Provenance of an `IIssueCard._score` (DESIGN §2 Invariant 5: \"a `score_kind` provenance tag on every derived score\"). A rank-derived score (`rrf`) is ORDINAL — never to be labelled or read as a similarity/confidence; `bm25` is likewise corpus-relative. A consumer that sees a bare `_score` with no `_score_kind` cannot know which regime produced it, which is exactly the conflation this tag prevents."},"IObligationView":{"type":"object","properties":{"uid":{"type":"string"},"applies_to":{"$ref":"#/definitions/IObligationAppliesTo"},"requirement":{"$ref":"#/definitions/IPredicate"},"on_fail":{"$ref":"#/definitions/IObligationSeverity"},"override":{"$ref":"#/definitions/IObligationOverride"}},"required":["uid","applies_to","requirement","on_fail"],"additionalProperties":false,"description":"A declared obligation, projected for read (C4). This is the STORED shape, never an evaluation: `requirement` is the predicate as written, and nothing on the read path resolves it (that is C5's gate / C6's verdict). `on_fail` is returned verbatim so a caller can see the declared severity.\n\nThe predicate/applies-to/override types are imported `import type`-only from `write/obligation.ts` — the grammar is declared in exactly one place, and a type-only import introduces no runtime dependency from `query/**` onto `write/**` (the two are already coupled on `write/errors.js`)."},"IObligationAppliesTo":{"type":"object","properties":{"from":{"type":"string","description":"Absent ⇒ applies to any from-status."},"to":{"type":"string","description":"REQUIRED. Scopes a TRANSITION into that status: a concrete status name, or `'*'` for \"any terminal transition\". Evaluated by the C5 gate at the transition, and surfaced by the C6 verdict as a *prediction* of that gate."}},"required":["to"],"additionalProperties":false},"IPredicate":{"anyOf":[{"type":"object","properties":{"op":{"type":"string","const":"evidence"},"kind":{"type":"string"},"min":{"type":"number"}},"required":["op","kind"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"blockers_terminal"}},"required":["op"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"relation"},"type":{"type":"string"},"direction":{"$ref":"#/definitions/IRelationDirection"}},"required":["op","type","direction"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"all_of"},"of":{"type":"array","items":{"$ref":"#/definitions/IPredicate"}}},"required":["op","of"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"any_of"},"of":{"type":"array","items":{"$ref":"#/definitions/IPredicate"}}},"required":["op","of"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"not"},"of":{"$ref":"#/definitions/IPredicate"}},"required":["op","of"],"additionalProperties":false}],"description":"The CLOSED predicate core (DESIGN §2 Primitive 3). No CEL, no dynamic leaf, no timeout — the grammar is exactly these six productions. Validated recursively by {@link assertValidPredicate } .\n\n- `evidence{kind,min?}` → distinct verified attestations of `kind` ≥ `min ?? 1`.\n- `blockers_terminal()` → every incoming live `blocks` source is terminal.\n- `relation{type,direction}` → a live edge of `type` touches the subject.\n- `all_of` / `any_of` / `not` → boolean composition. Empty `all_of` ⇒ `true`, empty `any_of` ⇒ `false` (documented, asserted)."},"IRelationDirection":{"type":"string","enum":["in","out"],"description":"Which side of an edge the subject sits on: `in` = subject is `dst`, `out` = subject is `src`."},"IObligationSeverity":{"type":"string","enum":["block","warn"],"description":"`block` refuses the transition; `warn` records the shortfall but allows it (the C5 gate reads this)."},"IObligationOverride":{"type":"object","properties":{"actors":{"type":"array","items":{"type":"string"},"description":"Non-empty actor identities permitted to override this obligation — an override always requires a recorded reason at the C5 layer."}},"required":["actors"],"additionalProperties":false},"IVerdict":{"type":"object","properties":{"actionable":{"$ref":"#/definitions/IActionable"},"evaluated_at":{"type":"string"},"revision":{"type":"number"},"conditions":{"type":"array","items":{"$ref":"#/definitions/ICondition"},"description":"Ordered block-severity first, then warn."}},"required":["actionable","evaluated_at","revision","conditions"],"additionalProperties":false,"description":"The verdict — derived on read, never stored (`revision` is the node's own current content revision, so a caller can detect staleness; there is no materialized status field anywhere)."},"IActionable":{"anyOf":[{"type":"boolean"},{"type":"string","const":"unknown"}],"description":"TRI-STATE (DESIGN §2 Primitive 4) — NEVER a bare boolean. `'unknown'` is never a green light: a caller that handles only booleans must be told, and the list path must report `'unknown'` rather than `true` where it cannot afford the rung. `false` iff a `block`-severity condition is `True`; `'unknown'` iff a `block`-severity condition is `Unknown` (and none is `True`); otherwise `true`."},"ICondition":{"type":"object","properties":{"type":{"$ref":"#/definitions/IConditionType"},"status":{"$ref":"#/definitions/IConditionStatus","description":"Whether the NAMED condition HOLDS: `True` on a `Blocked` condition = IS blocked."},"severity":{"$ref":"#/definitions/IConditionSeverity"},"code":{"$ref":"#/definitions/IVerdictReasonCode"},"message":{"type":"string"},"subject":{"type":"string","description":"The thing to fix (blocker uid / attestation uid / obligation uid)."}},"required":["type","status","severity","code"],"additionalProperties":false,"description":"One named condition of a {@link IVerdict } ."},"IConditionType":{"type":"string","enum":["Blocked","Obligation","Evidence","Claim","Reference","Budget"],"description":"The closed CONDITION type vocabulary. A `Condition` names one thing that can make an item non-actionable (or warn about it); `status` says whether that named condition HOLDS (`{type:'Blocked',status:True}` ⇒ the item IS blocked)."},"IConditionStatus":{"type":"string","enum":["True","False","Unknown"],"description":"Whether the NAMED condition holds. `Unknown` is a first-class \"could not determine\", distinct from `False`."},"IConditionSeverity":{"type":"string","enum":["block","warn"],"description":"`block` flips actionability false; `warn` is reported but never blocks (systemd Condition-vs-Assert split)."},"IVerdictReasonCode":{"type":"string","description":"The governed reason-code core (DESIGN §2 Primitive 4) plus the `<domain>/<Code>` extension namespace. `Unknown` is the honest \"the check was not run / could not be decided\"."},"IIssueSpecProjection":{"type":"object","properties":{"spec_revision":{"type":"string","description":"The current revision uid (the pointer's target)."},"spec_revision_token":{"type":"string","description":"`'sha256:<hex>'` — the token a reader holds and compares."},"revision_seq":{"type":"number"},"freshness":{"$ref":"#/definitions/SpecFreshness","description":"Present only when the caller supplied a token to compare against."}},"required":["spec_revision","spec_revision_token","revision_seq"],"additionalProperties":false,"description":"C10 — the spec pointer projected onto an issue card (DESIGN §12). Additive: a consumer can hold `spec_revision_token` and later hand it to `spec-check` to learn whether it has gone stale."},"SpecFreshness":{"type":"string","enum":["fresh","stale","unknown"]},"ISimilarLinks":{"type":"object","properties":{"similarTo":{"type":"array","items":{"$ref":"#/definitions/ISimilarRef"},"description":"Items THIS one is linked `similar_to` (outgoing, n:m)."},"similarFrom":{"type":"array","items":{"$ref":"#/definitions/ISimilarRef"},"description":"Items linked `similar_to` THIS one (incoming, n:m)."}},"required":["similarTo","similarFrom"],"additionalProperties":false,"description":"C9 — a card's reviewed `similar_to` links, both directions (`n:m`, so both are sets)."},"ISimilarRef":{"type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"status":{"type":"string"},"projectUid":{"type":"string"},"repoUrl":{"type":"string"}},"required":["uid","title","status"],"additionalProperties":false,"description":"C9 — one reviewed `similar_to` neighbour of a card, in the compact cross-reference shape."},"ISimilarCluster":{"type":"object","properties":{"seedUid":{"type":"string"},"members":{"type":"array","items":{"$ref":"#/definitions/ISimilarMember"}},"linked":{"type":"boolean","description":"true iff live `similar_to` edges exist among members."}},"required":["seedUid","members","linked"],"additionalProperties":false,"description":"C9 — a single-linkage similarity cluster: `seedUid` is the top-scoring member that anchored it."},"ISimilarMember":{"type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"projectUid":{"type":"string"},"projectName":{"type":"string"},"componentUid":{"type":"string"},"repoUrl":{"type":"string"},"score":{"type":"number","description":"Cosine to the cluster seed (undefined for linked-only members)."},"signals":{"type":"array","items":{"type":"string"},"description":"Which independent signals fired, e.g. `['cosine','title-tokens']`."},"linkedTo":{"type":"string","description":"A `similar_to` target when linked."}},"required":["uid","title","projectUid","projectName"],"additionalProperties":false,"description":"C9 — one member of an advisory or linked similarity cluster."},"ILocationType":{"type":"string","enum":["path","url","tool"]},"CatalogKindName":{"type":"string","enum":["kind","status","priority","relation","field","error_code","location_type","verb"],"description":"The catalogs this view exposes. `kind`/`status`/`priority` are store-backed (open vocabularies minted by the write layer); the rest are fixed in-code vocabularies projected from their validating source."},"ICatalogTerm":{"type":"object","properties":{"name":{"type":"string","description":"The term's canonical name."},"uid":{"type":"string","description":"Live row uid when a store row backs it; absent for in-code source terms."},"catalog":{"$ref":"#/definitions/CatalogKindName","description":"Which vocabulary this term belongs to."},"source":{"$ref":"#/definitions/CatalogSource","description":"The validating source this term was generated from at call time."},"lifecycle":{"$ref":"#/definitions/CatalogLifecycle"},"replacedBy":{"type":"string","description":"Present when deprecated: the term to use instead."},"usageCount":{"type":"number","description":"For `kind`/`status`/`priority`: the live callers count, read at call time."}},"required":["name","catalog","source","lifecycle"],"additionalProperties":false},"CatalogSource":{"type":"string","enum":["store","edge_kind_table","reserved_terminal_status_names","issue_field_union","error_code_union","valid_location_types","mounted_verb_surface"],"description":"The in-code source a term was generated from. Named so the catalog is provably generated, not hand-maintained."},"CatalogLifecycle":{"type":"string","enum":["active","deprecated"]},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/types\").IIssueQueryInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/types\").IIssueQueryResult>"},"hasCtx":true},{"id":"backlog/priority-matrix","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"priorityMatrix","words":["priority","matrix"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"filter":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"project":{"type":"string","description":"uid or name (SPEC.md §6.1)."},"component":{"type":"string","description":"uid or name, scoped within `project`."},"kind":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"status":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"string","const":"open"},{"type":"string","const":"closed"},{"type":"string","const":"all"}]},"priority":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"assignee":{"type":"string"},"claimedBy":{"type":"string"},"author":{"type":"string","description":"Resolves via `authored_by` edge traversal — uid or name."},"grep":{"type":"string","description":"FTS keyword, title+body — keyword-only, never hybrid."},"semantic":{"type":"string","description":"Routes to `searchRanked` (§5a) — composes with `grep`, neither swallows the other."},"anchor":{"type":"string","description":"Item-anchored similarity/traversal seed (§6.1) — uid of the reference item."},"plan":{"type":"string","description":"uid or name of the parent `issue` this one is filed under via the `part_of` edge (SPEC.md §1052/§1471: a plan is itself an `issue` row, not a dedicated node kind — attaching an item to it is `relate(childUid, planUid, 'part_of', 'add')`). Resolves candidate issues by the incoming `part_of` edge into the resolved plan node, exactly like the `project`/`component` edge-scoped filters."},"projectPath":{"type":"string","description":"`component.meta.path` (repo-relative package path, SPEC.md §3) — exact match against every live `component` row, unioned across matches. Distinct from `component`, which takes a uid/name rather than a filesystem path."},"closedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"createdAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"updatedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"similarTo":{"type":"string","description":"C9 — uid of X: return items linked `similar_to` X (i.e. the SOURCE side of an outgoing `similar_to` edge whose target is X). Renamed from the removed `duplicateOf`; `similar_to` is the reviewed similarity relation."},"hasSimilar":{"type":"boolean","description":"C9 — true: return items with ≥1 incoming `similar_to` link (the DST side). Renamed from the removed `hasDuplicates`."}},"additionalProperties":false,"description":"SPEC.md §6.5's `IIssueFilter`."}},"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"rows":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"priority":{"type":"string"},"priorityUid":{"type":"string"},"rank":{"type":"number","description":"`priority.meta.metadata.rank` (`nextPriorityRankTx`, §2) — lower is more urgent. Absent only for a malformed pre-existing row with no numeric rank; the count itself is still real."},"count":{"type":"number"}},"required":["priority","priorityUid","count"],"additionalProperties":false}},"unassigned":{"type":"number"},"statusScope":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"x-apigen-logical":"union"}},"required":["rows","unassigned","statusScope"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IPriorityMatrixInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IPriorityMatrixResult>"},"hasCtx":true},{"id":"backlog/part-of-rollup","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"partOfRollup","words":["part","of","rollup"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"countOnly":{"type":"boolean"},"limit":{"type":"number"},"after":{"type":"string"}},"required":["uid"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"childrenTotal":{"type":"number"},"childrenOpen":{"type":"number"},"childrenClosed":{"type":"number"},"childrenOpenUids":{"type":"array","items":{"type":"string"}},"nextCursor":{"type":"string"},"hasMore":{"type":"boolean"}},"required":["uid","childrenTotal","childrenOpen","childrenClosed"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IPartOfRollupInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IPartOfRollupResult>"},"hasCtx":true},{"id":"backlog/open-curve","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"openCurve","words":["open","curve"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"filter":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"project":{"type":"string","description":"uid or name (SPEC.md §6.1)."},"component":{"type":"string","description":"uid or name, scoped within `project`."},"kind":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"status":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"string","const":"open"},{"type":"string","const":"closed"},{"type":"string","const":"all"}]},"priority":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"assignee":{"type":"string"},"claimedBy":{"type":"string"},"author":{"type":"string","description":"Resolves via `authored_by` edge traversal — uid or name."},"grep":{"type":"string","description":"FTS keyword, title+body — keyword-only, never hybrid."},"semantic":{"type":"string","description":"Routes to `searchRanked` (§5a) — composes with `grep`, neither swallows the other."},"anchor":{"type":"string","description":"Item-anchored similarity/traversal seed (§6.1) — uid of the reference item."},"plan":{"type":"string","description":"uid or name of the parent `issue` this one is filed under via the `part_of` edge (SPEC.md §1052/§1471: a plan is itself an `issue` row, not a dedicated node kind — attaching an item to it is `relate(childUid, planUid, 'part_of', 'add')`). Resolves candidate issues by the incoming `part_of` edge into the resolved plan node, exactly like the `project`/`component` edge-scoped filters."},"projectPath":{"type":"string","description":"`component.meta.path` (repo-relative package path, SPEC.md §3) — exact match against every live `component` row, unioned across matches. Distinct from `component`, which takes a uid/name rather than a filesystem path."},"closedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"createdAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"updatedAt":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"}},"additionalProperties":false},"similarTo":{"type":"string","description":"C9 — uid of X: return items linked `similar_to` X (i.e. the SOURCE side of an outgoing `similar_to` edge whose target is X). Renamed from the removed `duplicateOf`; `similar_to` is the reviewed similarity relation."},"hasSimilar":{"type":"boolean","description":"C9 — true: return items with ≥1 incoming `similar_to` link (the DST side). Renamed from the removed `hasDuplicates`."}},"additionalProperties":false,"description":"SPEC.md §6.5's `IIssueFilter`."},"at":{"type":"array","items":{"type":"string"}}},"required":["at"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"points":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"at":{"type":"string"},"existed":{"type":"number","description":"In-scope issues that EXISTED at this instant (`NodeFilter.validAt`: `t_created <= at` and `t_invalid` is null or after `at`) — exact, never reconstructed."},"open":{"type":"number","description":"Of `existed`, the count whose RECONSTRUCTED status was non-terminal at this instant (never the issue's CURRENT status) — see {@link reconstructStatusAt } ."},"closed":{"type":"number","description":"`existed - open`."}},"required":["at","existed","open","closed"],"additionalProperties":false}}},"required":["points"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IOpenCurveInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/stats\").IOpenCurveResult>"},"hasCtx":true},{"id":"backlog/report","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"report","words":["report"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"filter":{"type":"object","properties":{"project":{"type":"string"},"component":{"type":"string"},"kind":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"x-apigen-logical":"union"},"status":{"type":"string","enum":["open","closed","all"]}},"additionalProperties":false}},"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"byKind":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"count":{"type":"number"}},"required":["kind","count"],"additionalProperties":false}},"byPriority":{"type":"array","items":{"type":"object","properties":{"priority":{"type":"string"},"rank":{"type":"number"},"count":{"type":"number"}},"required":["priority","count"],"additionalProperties":false}},"byStatus":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string"},"terminal":{"type":"boolean"},"count":{"type":"number"}},"required":["status","terminal","count"],"additionalProperties":false}},"avgAgeDays":{"type":"number"},"statusScope":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"x-apigen-logical":"union"},"computedAt":{"type":"string"}},"required":["byKind","byPriority","byStatus","avgAgeDays","statusScope","computedAt"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/report\").IReportInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/views/report\").IReportResult>"},"hasCtx":true},{"id":"backlog/embedding-status","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"embeddingStatus","words":["embedding","status"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{},"required":[]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"configuredEnabled":{"type":"boolean"},"effectiveEnabled":{"type":"boolean"},"provider":{"type":"string"},"model":{"type":"string"},"membersPresent":{"type":"object","properties":{"embedding":{"type":"boolean"},"search":{"type":"boolean"}},"required":["embedding","search"],"additionalProperties":false},"divergent":{"type":"boolean"},"startupHash":{"type":"string"},"currentHash":{"type":"string"}},"required":["configuredEnabled","effectiveEnabled","provider","model","membersPresent","divergent","startupHash","currentHash"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"()","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/api\").IEmbeddingStatusResult>"},"hasCtx":true},{"id":"backlog/lookup","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"lookup","words":["lookup"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"q":{"type":"string"},"kind":{"type":"string"}},"required":["q"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"project":{"type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"repoUrl":{"type":"string"}},"required":["uid","name"],"additionalProperties":false},"component":{"type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"}},"required":["uid","name"],"additionalProperties":false},"location":{"type":"object","properties":{"uid":{"type":"string"},"locType":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["path","url","tool"]},"value":{"type":"string"}},"required":["uid","locType","value"],"additionalProperties":false},"hint":{"type":"string"},"redirect":{"type":"object","properties":{"verb":{"type":"string","enum":["get","query"]},"uid":{"type":"string"},"query":{"type":"string"}},"required":["verb"],"additionalProperties":false},"candidates":{"type":"array","items":{"type":"object","properties":{"uid":{"type":"string"},"kind":{"type":"string"},"name":{"type":"string"}},"required":["uid","kind","name"],"additionalProperties":false}}},"required":["project"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: { q: string; kind?: string; })","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/types\").ILookupResult>"},"hasCtx":true},{"id":"backlog/create","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"create","words":["create"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"title":{"type":"string"},"body":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"citations":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"file":{"type":"string","description":"The cited target — a repo-relative or absolute filesystem path (the persisted `meta.target`). REQUIRED and non-blank."},"lines":{"type":"string","description":"The line or line-range WITHIN `file` (the persisted `meta.line`). OPTIONAL — a whole-file citation omits it. Kept a free `string` (e.g. `\"120-140\"`) so a caller is not forced to narrow to a single integer.\n\n`lines` (pl.) is the CONTRACT name; `line` is the persisted one end. Both spellings intentionally diverge from the persisted key — see this interface's own doc comment."},"context":{"type":"string","description":"Free-text prose for THIS citation. Persisted as the citation node's `content` column (never its `meta`), which is what {@link citationFromNode } reads back into this field. NOT the item-level disclosure-contract git context — that lives on the issue (`gitContext`) and is rendered once at the head of its `Citations:` block, never per-citation."},"symbol":{"type":"string","description":"The named symbol (`function`/`class`/`method`) this citation points at, when narrower than a whole file."},"blastRadius":{"description":"Best-effort enrichment payload carried through verbatim. Not re-specified here (SPEC.md §6.3.2 declares it `CitationBlastRadius`, a type that exists nowhere in the package): the write layer has always stored whatever JSON-serializable value a caller passed and `similarity-scan.ts` reads it only when it is a string. Typed `unknown` to match that existing behavior exactly rather than introducing a third, narrower shape."},"revision":{"type":"string","description":"A git revision (branch/tag/sha) the `file` is resolved against, instead of the working tree. Present only for revision-pinned citations — see this module's header. Persisted as `meta.revision`."}},"required":["file"],"additionalProperties":false,"description":"The ONE citation contract — a caller-facing citation, and the shape every read projection extends. This is what `SPEC.md` §6.3.2's `Citation` and `DATA_MODEL.md` §4's `citation` node both mean.\n\nField vocabulary (the reconciliation): the persisted node stores `file` as `meta.target` and `lines` as `meta.line` (the graph-native names `DATA_MODEL.md` §4 fixes), but the CONTRACT a consumer passes and receives is always `file`/`lines` — never `target`/`line`. The two are bridged ONLY by {@link citationNodeMetadata } / {@link citationFromNode } , never at a call site."}},"author":{"type":"string"},"assignee":{"type":"string"},"gitContext":{"type":"string"},"dedupeExcludeUid":{"type":"string"},"by":{"type":"string"},"duplicateAction":{"type":"string","enum":["abort","force","comment"]},"awaitEmbed":{"type":"boolean"}},"required":["title","body","project","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"created":{"type":"boolean"},"uid":{"type":"string"},"item":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"priority":{"type":"string"},"project":{"type":"string"},"component":{"type":"string"},"createdAt":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"closedAt":{"type":"string"},"gitContext":{"type":"string","description":"The item-level disclosure-contract git context, echoed back from {@link ICreateIssueInput.gitContext } — present iff one was supplied."}},"required":["uid","title","kind","status","project","component","createdAt"],"additionalProperties":false,"description":"The \"plain\" card fields (§6.5) this verb already has in hand after a create — never field-projected, unlike a `query` response.\n\nBUG-APIGEN-CORE-CLIENT-BARE-NAME-COLLISION-001: named `ICreateIssueCard`, not `IIssueCard`, deliberately. `query/types.ts` also exports an `IIssueCard` (the fields-projected card `query`/`get` return, every field but `uid` optional) — both interfaces were reachable from `api.d.ts`'s type graph, and apigen's extraction (`ts-json-schema-generator`, invoked per-operation but apparently resolving/caching declarations by bare name across the whole extracted program) non-deterministically resolved the `IIssueCard` bare name to EITHER declaration depending on extraction order — confirmed empirically: `dist/index.js` (CJS) resolved `query`'s own `items: IIssueCard[]` to THIS file's stricter shape (wrongly requiring `project`/`component`/`createdAt`), while `dist/index.mjs` (ESM) failed to resolve it at all (`items: {}`, unconstrained) — from the exact same source, built in the same pass. This is what broke `backlog_query`'s MCP `oneOf` output-schema validation the moment `get()`'s return type union (AC-11) made the extractor visit both `IIssueCard` declarations. The correct, permanent fix is what's below: give the two interfaces distinct bare names so extraction can never conflate them, not a workaround in the `get()`/`query()` call sites. Filed as BUG-APIGEN-CORE-CLIENT-BARE-NAME-COLLISION-001 (apigen-core-client, out of this package's ownership) — this rename is the local mitigation; the extractor itself should also stop keying declarations by bare name.\n\nThis rename fixes the CJS path (`dist/index.js`, the only bundle any real transport here — CLI, MCP-stdio, HTTP serve — ever spawns/requires; confirmed empirically, `dist/index.mjs` is loaded by none of them). It does NOT fix a second, DISTINCT defect also present in `dist/index.mjs`: every `$ref` to a NAMED exported interface (`ICreateIssueCard` here, `IDuplicateCandidate`, `IIssueCard`, …) dereferences to `{}` (empty/ unconstrained) in the ESM build specifically, while inline/anonymous object types on the SAME operation (e.g. `ICreateIssueResult.commentedOn`) resolve correctly in both builds — ruling out a general extraction failure and pointing at `dereferenceSchema`'s named-`$ref` resolution specifically misbehaving under ESM. Reproduced on `create`'s `item`/ `duplicateCandidates` fields, which this file's own diff never touched, so it predates and is independent of the collision above. Filed separately as BUG-APIGEN-CORE-CLIENT-ESM-DEREF-EMPTY-001 — not fixed here (out of this package's ownership, and no real consumer loads `dist/index.mjs` today), but must not be silently dropped."},"duplicateCandidates":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"score":{"type":"number","description":"Cosine similarity in `[0,1]`, straight off the vector channel — directly comparable to `project_policy.dedupe_threshold`."}},"required":["uid","title","score"],"additionalProperties":false,"description":"A dedupe candidate surfaced at filing time (§6.4), carrying the cosine similarity that produced it — see {@link scanForDuplicates } 's own doc comment for where that number comes from and why it is the only score this gate will accept."}},"similarCandidates":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"title":{"type":"string"},"score":{"type":"number","description":"Cosine similarity in `[0,1]`, straight off the vector channel."},"scope":{"type":"string","enum":["same-project","cross-project"]},"provenance":{"type":"object","properties":{"projectUid":{"type":"string"},"projectName":{"type":"string"},"componentUid":{"type":"string"},"repoUrl":{"type":"string"}},"required":["projectUid","projectName"],"additionalProperties":false},"signals":{"type":"array","items":{"type":"string"},"description":"Which independent signals fired, e.g. `['cosine','title-tokens']`."}},"required":["uid","title","score","scope"],"additionalProperties":false,"description":"One advisory similarity candidate, with the provenance a reviewer needs to judge it across projects."}},"reason":{"type":"string","enum":["duplicate-suppressed","duplicate-scan-degraded"]},"duplicateScanDegraded":{"type":"boolean"},"duplicateScanDegradedReason":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["no-search-backend","no-embed-query","no-vector-scores"],"description":"Why the scan could not produce a calibrated comparison — never a generic \"unavailable\"."},"supersededUid":{"type":"string"},"commentedOn":{"type":"object","properties":{"uid":{"type":"string"},"noteId":{"type":"string"}},"required":["uid","noteId"],"additionalProperties":false},"placementResolved":{"type":"string","enum":["explicit","default-root"]}},"required":["created"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/create-issue\").ICreateIssueInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/create-issue\").ICreateIssueResult>"},"hasCtx":true},{"id":"backlog/update","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"update","words":["update"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"by":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"kind":{"type":"string"},"priority":{"type":"string"},"assignee":{"type":"string"},"author":{"type":"string"},"citations":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"file":{"type":"string","description":"The cited target — a repo-relative or absolute filesystem path (the persisted `meta.target`). REQUIRED and non-blank."},"lines":{"type":"string","description":"The line or line-range WITHIN `file` (the persisted `meta.line`). OPTIONAL — a whole-file citation omits it. Kept a free `string` (e.g. `\"120-140\"`) so a caller is not forced to narrow to a single integer.\n\n`lines` (pl.) is the CONTRACT name; `line` is the persisted one end. Both spellings intentionally diverge from the persisted key — see this interface's own doc comment."},"context":{"type":"string","description":"Free-text prose for THIS citation. Persisted as the citation node's `content` column (never its `meta`), which is what {@link citationFromNode } reads back into this field. NOT the item-level disclosure-contract git context — that lives on the issue (`gitContext`) and is rendered once at the head of its `Citations:` block, never per-citation."},"symbol":{"type":"string","description":"The named symbol (`function`/`class`/`method`) this citation points at, when narrower than a whole file."},"blastRadius":{"description":"Best-effort enrichment payload carried through verbatim. Not re-specified here (SPEC.md §6.3.2 declares it `CitationBlastRadius`, a type that exists nowhere in the package): the write layer has always stored whatever JSON-serializable value a caller passed and `similarity-scan.ts` reads it only when it is a string. Typed `unknown` to match that existing behavior exactly rather than introducing a third, narrower shape."},"revision":{"type":"string","description":"A git revision (branch/tag/sha) the `file` is resolved against, instead of the working tree. Present only for revision-pinned citations — see this module's header. Persisted as `meta.revision`."}},"required":["file"],"additionalProperties":false,"description":"The ONE citation contract — a caller-facing citation, and the shape every read projection extends. This is what `SPEC.md` §6.3.2's `Citation` and `DATA_MODEL.md` §4's `citation` node both mean.\n\nField vocabulary (the reconciliation): the persisted node stores `file` as `meta.target` and `lines` as `meta.line` (the graph-native names `DATA_MODEL.md` §4 fixes), but the CONTRACT a consumer passes and receives is always `file`/`lines` — never `target`/`line`. The two are bridged ONLY by {@link citationNodeMetadata } / {@link citationFromNode } , never at a call site."}},"awaitEmbed":{"type":"boolean"}},"required":["uid","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"changed":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["title","body","kind","priority","assignee","author","citations"]}}},"required":["uid","changed"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/update\").IUpdateIssueInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/update\").IUpdateIssueOutcome>"},"hasCtx":true},{"id":"backlog/add-citation","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"addCitation","words":["add","citation"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"citation":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"file":{"type":"string","description":"The cited target — a repo-relative or absolute filesystem path (the persisted `meta.target`). REQUIRED and non-blank."},"lines":{"type":"string","description":"The line or line-range WITHIN `file` (the persisted `meta.line`). OPTIONAL — a whole-file citation omits it. Kept a free `string` (e.g. `\"120-140\"`) so a caller is not forced to narrow to a single integer.\n\n`lines` (pl.) is the CONTRACT name; `line` is the persisted one end. Both spellings intentionally diverge from the persisted key — see this interface's own doc comment."},"context":{"type":"string","description":"Free-text prose for THIS citation. Persisted as the citation node's `content` column (never its `meta`), which is what {@link citationFromNode } reads back into this field. NOT the item-level disclosure-contract git context — that lives on the issue (`gitContext`) and is rendered once at the head of its `Citations:` block, never per-citation."},"symbol":{"type":"string","description":"The named symbol (`function`/`class`/`method`) this citation points at, when narrower than a whole file."},"blastRadius":{"description":"Best-effort enrichment payload carried through verbatim. Not re-specified here (SPEC.md §6.3.2 declares it `CitationBlastRadius`, a type that exists nowhere in the package): the write layer has always stored whatever JSON-serializable value a caller passed and `similarity-scan.ts` reads it only when it is a string. Typed `unknown` to match that existing behavior exactly rather than introducing a third, narrower shape."},"revision":{"type":"string","description":"A git revision (branch/tag/sha) the `file` is resolved against, instead of the working tree. Present only for revision-pinned citations — see this module's header. Persisted as `meta.revision`."}},"required":["file"],"additionalProperties":false,"description":"The ONE citation contract — a caller-facing citation, and the shape every read projection extends. This is what `SPEC.md` §6.3.2's `Citation` and `DATA_MODEL.md` §4's `citation` node both mean.\n\nField vocabulary (the reconciliation): the persisted node stores `file` as `meta.target` and `lines` as `meta.line` (the graph-native names `DATA_MODEL.md` §4 fixes), but the CONTRACT a consumer passes and receives is always `file`/`lines` — never `target`/`line`. The two are bridged ONLY by {@link citationNodeMetadata } / {@link citationFromNode } , never at a call site."},"by":{"type":"string"}},"required":["uid","citation","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"issueUid":{"type":"string"},"citation":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"file":{"type":"string","description":"The cited target — a repo-relative or absolute filesystem path (the persisted `meta.target`). REQUIRED and non-blank."},"lines":{"type":"string","description":"The line or line-range WITHIN `file` (the persisted `meta.line`). OPTIONAL — a whole-file citation omits it. Kept a free `string` (e.g. `\"120-140\"`) so a caller is not forced to narrow to a single integer.\n\n`lines` (pl.) is the CONTRACT name; `line` is the persisted one end. Both spellings intentionally diverge from the persisted key — see this interface's own doc comment."},"context":{"type":"string","description":"Free-text prose for THIS citation. Persisted as the citation node's `content` column (never its `meta`), which is what {@link citationFromNode } reads back into this field. NOT the item-level disclosure-contract git context — that lives on the issue (`gitContext`) and is rendered once at the head of its `Citations:` block, never per-citation."},"symbol":{"type":"string","description":"The named symbol (`function`/`class`/`method`) this citation points at, when narrower than a whole file."},"blastRadius":{"description":"Best-effort enrichment payload carried through verbatim. Not re-specified here (SPEC.md §6.3.2 declares it `CitationBlastRadius`, a type that exists nowhere in the package): the write layer has always stored whatever JSON-serializable value a caller passed and `similarity-scan.ts` reads it only when it is a string. Typed `unknown` to match that existing behavior exactly rather than introducing a third, narrower shape."},"revision":{"type":"string","description":"A git revision (branch/tag/sha) the `file` is resolved against, instead of the working tree. Present only for revision-pinned citations — see this module's header. Persisted as `meta.revision`."},"uid":{"type":"string","description":"The citation node's own uid — the identity `removeCitation` addresses (never a `(target,line)` composite)."},"sha":{"type":"string","description":"`sha256` of the cited content at filing time, or the fixed sentinel `\"unverified\"` (§8.5)."},"at":{"type":"string","description":"The filing instant (the node's own `meta.at`, falling back to `t_created` for a legacy row)."},"targetType":{"type":"string","description":"The persisted target discriminator (`'path'` today). Optional so a legacy row without one still projects."}},"required":["at","file","sha","uid"],"additionalProperties":false,"description":"A citation as PROJECTED FOR READ — the contract plus the server-computed identity (`uid`), content-address (`sha`), and filing instant (`at`), and the persisted `target_type` (today always `'path'`). `query/types.ts`'s `IIssueCitation` extends this, so the read surface and the write surface can never drift."}},"required":["uid","issueUid","citation"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/citation\").IAddCitationInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/citation\").IAddCitationOutcome>"},"hasCtx":true},{"id":"backlog/remove-citation","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"removeCitation","words":["remove","citation"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"by":{"type":"string"},"reason":{"type":"string"}},"required":["uid","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"invalidated":{"type":"boolean","const":true}},"required":["uid","invalidated"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/citation\").IRemoveCitationInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/citation\").IRemoveCitationOutcome>"},"hasCtx":true},{"id":"backlog/transition","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"transition","words":["transition"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"by":{"type":"string"},"toStatus":{"type":"string"},"note":{"type":"string"},"citations":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"file":{"type":"string","description":"The cited target — a repo-relative or absolute filesystem path (the persisted `meta.target`). REQUIRED and non-blank."},"lines":{"type":"string","description":"The line or line-range WITHIN `file` (the persisted `meta.line`). OPTIONAL — a whole-file citation omits it. Kept a free `string` (e.g. `\"120-140\"`) so a caller is not forced to narrow to a single integer.\n\n`lines` (pl.) is the CONTRACT name; `line` is the persisted one end. Both spellings intentionally diverge from the persisted key — see this interface's own doc comment."},"context":{"type":"string","description":"Free-text prose for THIS citation. Persisted as the citation node's `content` column (never its `meta`), which is what {@link citationFromNode } reads back into this field. NOT the item-level disclosure-contract git context — that lives on the issue (`gitContext`) and is rendered once at the head of its `Citations:` block, never per-citation."},"symbol":{"type":"string","description":"The named symbol (`function`/`class`/`method`) this citation points at, when narrower than a whole file."},"blastRadius":{"description":"Best-effort enrichment payload carried through verbatim. Not re-specified here (SPEC.md §6.3.2 declares it `CitationBlastRadius`, a type that exists nowhere in the package): the write layer has always stored whatever JSON-serializable value a caller passed and `similarity-scan.ts` reads it only when it is a string. Typed `unknown` to match that existing behavior exactly rather than introducing a third, narrower shape."},"revision":{"type":"string","description":"A git revision (branch/tag/sha) the `file` is resolved against, instead of the working tree. Present only for revision-pinned citations — see this module's header. Persisted as `meta.revision`."}},"required":["file"],"additionalProperties":false,"description":"The ONE citation contract — a caller-facing citation, and the shape every read projection extends. This is what `SPEC.md` §6.3.2's `Citation` and `DATA_MODEL.md` §4's `citation` node both mean.\n\nField vocabulary (the reconciliation): the persisted node stores `file` as `meta.target` and `lines` as `meta.line` (the graph-native names `DATA_MODEL.md` §4 fixes), but the CONTRACT a consumer passes and receives is always `file`/`lines` — never `target`/`line`. The two are bridged ONLY by {@link citationNodeMetadata } / {@link citationFromNode } , never at a call site."}},"gitContext":{"type":"string"},"override":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"],"additionalProperties":false}},"required":["uid","by","toStatus"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"fromStatus":{"type":"string"},"toStatus":{"type":"string"},"closedAt":{"type":"string"},"transitionUid":{"type":"string"}},"required":["uid","fromStatus","toStatus","transitionUid"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/transition\").ITransitionInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/transition\").ITransitionOutcome>"},"hasCtx":true},{"id":"backlog/attest","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"attest","words":["attest"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"subject":{"type":"object","properties":{"id":{"type":"string"},"revision":{"$schema":"http://json-schema.org/draft-07/schema#","type":["number","string"],"description":"An issue revision reference: the numeric monotonic counter, or — for C10's `SPEC`-node annotations — an opaque `sha256:<hex>` token. Additive only: an `issue` subject with a numeric revision is byte-for-byte unchanged."}},"required":["id","revision"],"additionalProperties":false},"claim":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"kind":{"type":"string"},"body":{"type":"string"}},"required":["kind"],"additionalProperties":false,"description":"The claim an attestation asserts. `kind` is open vocabulary (e.g. `'published-artifact'`, `'live-system'`); `body` is free text."},"anchor":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"locator":{"type":"string"},"digest":{"type":"string"}},"required":["locator","digest"],"additionalProperties":false,"description":"An anchor is `locator + digest`. The locator grammar is closed: `path:<file>[:<line>]` | `url:<url>` | `query:<cql>` | `registry:<ref>` | `commit:<sha>` (C5: ancestry of the default branch). A bare hand-maintained `path:line` is INSUFFICIENT without a `digest` — the digest is the whole point of content-addressing the claim."},"by":{"type":"string"}},"required":["subject","claim","anchor","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"attestationUid":{"type":"string"},"subject":{"type":"object","properties":{"id":{"type":"string"},"revision":{"$schema":"http://json-schema.org/draft-07/schema#","type":["number","string"],"description":"An issue revision reference: the numeric monotonic counter, or — for C10's `SPEC`-node annotations — an opaque `sha256:<hex>` token. Additive only: an `issue` subject with a numeric revision is byte-for-byte unchanged."}},"required":["id","revision"],"additionalProperties":false},"check":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"state":{"$ref":"#/definitions/AttestationCheckState"},"method":{"type":"string"},"checked_at":{"type":"string"},"checked_by":{"type":"string"},"reason":{"type":"string"}},"required":["state","method","checked_at","checked_by"],"additionalProperties":false,"description":"One rung-result of the anchor ladder. `method` names which rung actually ran (`'exists_at_head'` | `'changed_since'` | `'full_resolve'` | `'none'`), so a cheap pre-filter can be proven cheap (AC7) and a full re-resolve is visible."}},"required":["attestationUid","subject","check"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"AttestationCheckState":{"type":"string","enum":["unverified","verified","stale","unknown"],"description":"The closed set of mechanical-check states. `refuted` is deliberately absent (see module header)."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/attestation\").IAttestInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/attestation\").IAttestOutcome>"},"hasCtx":true},{"id":"backlog/recheck","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"recheck","words":["recheck"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"attestationUid":{"type":"string"},"by":{"type":"string"}},"required":["attestationUid","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"attestationUid":{"type":"string"},"checks":{"type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"state":{"$ref":"#/definitions/AttestationCheckState"},"method":{"type":"string"},"checked_at":{"type":"string"},"checked_by":{"type":"string"},"reason":{"type":"string"}},"required":["state","method","checked_at","checked_by"],"additionalProperties":false,"description":"One rung-result of the anchor ladder. `method` names which rung actually ran (`'exists_at_head'` | `'changed_since'` | `'full_resolve'` | `'none'`), so a cheap pre-filter can be proven cheap (AC7) and a full re-resolve is visible."}}},"required":["attestationUid","checks"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"AttestationCheckState":{"type":"string","enum":["unverified","verified","stale","unknown"],"description":"The closed set of mechanical-check states. `refuted` is deliberately absent (see module header)."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/attestation\").IRecheckInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/attestation\").IRecheckOutcome>"},"hasCtx":true},{"id":"backlog/obligate","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"obligate","words":["obligate"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"applies_to":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"from":{"type":"string","description":"Absent ⇒ applies to any from-status."},"to":{"type":"string","description":"REQUIRED. Scopes a TRANSITION into that status: a concrete status name, or `'*'` for \"any terminal transition\". Evaluated by the C5 gate at the transition, and surfaced by the C6 verdict as a *prediction* of that gate."}},"required":["to"],"additionalProperties":false},"requirement":{"$schema":"http://json-schema.org/draft-07/schema#","description":"The CLOSED predicate core (DESIGN §2 Primitive 3). No CEL, no dynamic leaf, no timeout — the grammar is exactly these six productions. Validated recursively by {@link assertValidPredicate } .\n\n- `evidence{kind,min?}` → distinct verified attestations of `kind` ≥ `min ?? 1`.\n- `blockers_terminal()` → every incoming live `blocks` source is terminal.\n- `relation{type,direction}` → a live edge of `type` touches the subject.\n- `all_of` / `any_of` / `not` → boolean composition. Empty `all_of` ⇒ `true`, empty `any_of` ⇒ `false` (documented, asserted).","oneOf":[{"type":"object","properties":{"op":{"type":"string","const":"evidence"},"kind":{"type":"string"},"min":{"type":"number"}},"required":["op","kind"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"blockers_terminal"}},"required":["op"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"relation"},"type":{"type":"string"},"direction":{"$ref":"#/definitions/IRelationDirection"}},"required":["op","type","direction"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"all_of"},"of":{"type":"array","items":{"$ref":"#/definitions/IPredicate"}}},"required":["op","of"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"any_of"},"of":{"type":"array","items":{"$ref":"#/definitions/IPredicate"}}},"required":["op","of"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"not"},"of":{"$ref":"#/definitions/IPredicate"}},"required":["op","of"],"additionalProperties":false}],"x-apigen-logical":"union"},"on_fail":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["block","warn"],"description":"`block` refuses the transition; `warn` records the shortfall but allows it (the C5 gate reads this)."},"override":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"actors":{"type":"array","items":{"type":"string"},"description":"Non-empty actor identities permitted to override this obligation — an override always requires a recorded reason at the C5 layer."}},"required":["actors"],"additionalProperties":false},"by":{"type":"string"}},"required":["uid","applies_to","requirement","on_fail","by"],"additionalProperties":false}},"required":["input"],"definitions":{"IRelationDirection":{"type":"string","enum":["in","out"],"description":"Which side of an edge the subject sits on: `in` = subject is `dst`, `out` = subject is `src`."},"IPredicate":{"anyOf":[{"type":"object","properties":{"op":{"type":"string","const":"evidence"},"kind":{"type":"string"},"min":{"type":"number"}},"required":["op","kind"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"blockers_terminal"}},"required":["op"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"relation"},"type":{"type":"string"},"direction":{"$ref":"#/definitions/IRelationDirection"}},"required":["op","type","direction"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"all_of"},"of":{"type":"array","items":{"$ref":"#/definitions/IPredicate"}}},"required":["op","of"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"any_of"},"of":{"type":"array","items":{"$ref":"#/definitions/IPredicate"}}},"required":["op","of"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"not"},"of":{"$ref":"#/definitions/IPredicate"}},"required":["op","of"],"additionalProperties":false}],"description":"The CLOSED predicate core (DESIGN §2 Primitive 3). No CEL, no dynamic leaf, no timeout — the grammar is exactly these six productions. Validated recursively by {@link assertValidPredicate } .\n\n- `evidence{kind,min?}` → distinct verified attestations of `kind` ≥ `min ?? 1`.\n- `blockers_terminal()` → every incoming live `blocks` source is terminal.\n- `relation{type,direction}` → a live edge of `type` touches the subject.\n- `all_of` / `any_of` / `not` → boolean composition. Empty `all_of` ⇒ `true`, empty `any_of` ⇒ `false` (documented, asserted)."}}},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"obligationUid":{"type":"string"}},"required":["uid","obligationUid"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/obligation\").IObligateInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/obligation\").IObligateOutcome>"},"hasCtx":true},{"id":"backlog/unobligate","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"unobligate","words":["unobligate"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"obligationUid":{"type":"string"},"by":{"type":"string"}},"required":["obligationUid","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"obligationUid":{"type":"string"},"invalidated":{"type":"boolean","const":true}},"required":["obligationUid","invalidated"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/obligation\").IUnobligateInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/obligation\").IUnobligateOutcome>"},"hasCtx":true},{"id":"backlog/spec-append","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"specAppend","words":["spec","append"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"fragment":{"type":"string"},"anchor":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"locator":{"type":"string"},"digest":{"type":"string"}},"required":["locator","digest"],"additionalProperties":false,"description":"The long-form file export an anchor points at: `locator + digest` (Primitive 2) — referenced, never embedded."},"base_revision":{"type":"string"},"by":{"type":"string"}},"required":["uid","fragment","base_revision","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"spec_revision":{"type":"string"},"spec_revision_token":{"type":"string"},"revision_seq":{"type":"number"}},"required":["uid","spec_revision","spec_revision_token","revision_seq"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/spec-revision\").ISpecAppendInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/spec-revision\").ISpecAppendOutcome>"},"hasCtx":true},{"id":"backlog/spec-check","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"specCheck","words":["spec","check"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"token":{"type":"string"}},"required":["uid"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"current_revision":{"type":"string"},"current_token":{"type":"string"},"state":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["fresh","stale","unknown"]},"method":{"type":"string","enum":["token","content_hash","ancestry","none"]},"reason":{"type":"string"}},"required":["current_revision","current_token","state","method"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/spec-staleness\").ISpecCheckInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/query/spec-staleness\").ISpecCheckOutcome>"},"hasCtx":true},{"id":"backlog/claim","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"claim","words":["claim"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"by":{"type":"string"},"action":{"type":"string","enum":["claim","release","renew"]},"force":{"type":"boolean"}},"required":["uid","by","action"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"status":{"type":"string","enum":["claimed","held","reclaimed-stale","renewed","released","release-noop"]},"claimedBy":{"type":"string"},"claimedAt":{"type":"string"},"heldBy":{"type":"string"},"heldSince":{"type":"string"},"previousClaimant":{"type":"string"},"wasClaimedBy":{"type":"string"}},"required":["uid","status"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/claim\").IClaimInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/claim\").IClaimOutcome>"},"hasCtx":true},{"id":"backlog/relate","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"relate","words":["relate"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"sourceUid":{"type":"string"},"targetUid":{"type":"string"},"rel":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["relates_to","supersedes","blocks","duplicate_of","part_of","similar_to"],"description":"The closed `rel` union `relate` accepts (§3/§6.3.6) — issue → issue in every case."},"action":{"type":"string","enum":["add","remove"]},"by":{"type":"string"}},"required":["sourceUid","targetUid","rel","action","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"sourceUid":{"type":"string"},"targetUid":{"type":"string"},"rel":{"type":"string"},"action":{"type":"string","enum":["add","remove"]},"noop":{"type":"boolean"}},"required":["sourceUid","targetUid","rel","action","noop"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/relate\").IRelateInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/relate\").IRelateOutcome>"},"hasCtx":true},{"id":"backlog/move","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"move","words":["move"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"toProject":{"type":"string"},"toComponent":{"type":"string"},"by":{"type":"string"}},"required":["uid","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"noop":{"type":"boolean"},"fromProject":{"type":"string"},"toProject":{"type":"string"},"fromComponent":{"type":"string"},"toComponent":{"type":"string"}},"required":["uid","noop","fromProject","toProject","fromComponent","toComponent"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/move\").IMoveIssueInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/move\").IMoveIssueOutcome>"},"hasCtx":true},{"id":"backlog/upsert-project","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"upsertProject","words":["upsert","project"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string"},"repoUrl":{"type":"string"},"monorepo":{"type":"boolean"},"description":{"type":"string"},"by":{"type":"string"}},"required":["name","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"created":{"type":"boolean"},"project":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"repoUrl":{"type":"string"},"monorepo":{"type":"boolean"},"description":{"type":"string"}},"required":["uid","name"],"additionalProperties":false}},"required":["uid","created","project"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertProjectInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertProjectOutcome>"},"hasCtx":true},{"id":"backlog/upsert-component","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"upsertComponent","words":["upsert","component"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"project":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"description":{"type":"string"},"by":{"type":"string"}},"required":["project","name","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"created":{"type":"boolean"},"component":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"projectUid":{"type":"string"},"path":{"type":"string"},"description":{"type":"string"}},"required":["uid","name","projectUid"],"additionalProperties":false}},"required":["uid","created","component"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertComponentInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertComponentOutcome>"},"hasCtx":true},{"id":"backlog/upsert-location","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"upsertLocation","words":["upsert","location"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"component":{"type":"string"},"project":{"type":"string"},"locType":{"$schema":"http://json-schema.org/draft-07/schema#","type":"string","enum":["path","url","tool"]},"value":{"type":"string"},"by":{"type":"string"}},"required":["component","locType","value","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"created":{"type":"boolean"},"location":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"uid":{"type":"string"},"locType":{"$ref":"#/definitions/ILocationType"},"value":{"type":"string"},"componentUid":{"type":"string"}},"required":["uid","locType","value","componentUid"],"additionalProperties":false}},"required":["uid","created","location"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"ILocationType":{"type":"string","enum":["path","url","tool"]},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertLocationInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IUpsertLocationOutcome>"},"hasCtx":true},{"id":"backlog/rm-location","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"rmLocation","words":["rm","location"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"by":{"type":"string"},"reason":{"type":"string"}},"required":["uid","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"invalidated":{"type":"boolean","const":true}},"required":["uid","invalidated"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IRmLocationInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/catalog\").IRmLocationOutcome>"},"hasCtx":true},{"id":"backlog/merge-project","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"mergeProject","words":["merge","project"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"fromUid":{"type":"string"},"toUid":{"type":"string"},"by":{"type":"string"}},"required":["fromUid","toUid","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"survivorUid":{"type":"string"},"retiredUid":{"type":"string"},"movedIssues":{"type":"number"},"retired":{"type":"boolean","const":true}},"required":["survivorUid","retiredUid","movedIssues","retired"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/merge-project\").IMergeProjectInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/merge-project\").IMergeProjectOutcome>"},"hasCtx":true},{"id":"backlog/rm-project","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"rmProject","words":["rm","project"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"reason":{"type":"string"},"by":{"type":"string"}},"required":["uid","reason","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"retired":{"type":"boolean","const":true}},"required":["uid","retired"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/merge-project\").IRmProjectInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<{ uid: string; retired: true; }>"},"hasCtx":true},{"id":"backlog/delete","host":"ts","namespace":{"raw":"backlog","words":["backlog"]},"path":[{"raw":"delete","words":["delete"]}],"kind":"action","async":false,"streaming":false,"safe":false,"input":{"type":"object","properties":{"input":{"type":"object","properties":{"uid":{"type":"string"},"reason":{"type":"string"},"by":{"type":"string"},"awaitEmbed":{"type":"boolean"}},"required":["uid","reason","by"],"additionalProperties":false}},"required":["input"]},"output":{"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"code":{"$ref":"#/definitions/BacklogErrorCode"},"message":{"type":"string"},"details":{"$ref":"#/definitions/IOutcomeErrorDetails"}},"required":["code","message"],"additionalProperties":false,"description":"The error arm's payload."},"warnings":{"type":"array","items":{"type":"string"}}},"required":["ok","error"],"additionalProperties":false},{"type":"object","properties":{"ok":{"type":"boolean","const":true},"data":{"type":"object","properties":{"uid":{"type":"string"},"invalidated":{"type":"boolean","const":true}},"required":["uid","invalidated"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"meta":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"total":{"type":"number","description":"Matching rows before limit/offset. Exact unless `total_relation` says otherwise (`gte` ⇒ a lower bound)."},"returned":{"type":"number","description":"Rows actually in `data`."},"limit":{"type":"number"},"offset":{"type":"number"},"truncated":{"type":"boolean","description":"Set when the result set was cut short by anything other than the caller's own `limit`. A silent cap is forbidden — if it happens, it is stated here."},"total_relation":{"$ref":"#/definitions/CountRelation","description":"Exactness of `total`: `eq` (or absent) — exact; `gte` — a lower bound (a capped scan, or a page whose true total is unknowable at list cost)."},"has_more":{"type":"boolean","description":"True iff more rows exist beyond this page. The preferred spelling for the item-list views (`ready`/`stale`/`similar`) where a true pre-limit `total` is unknowable at bounded cost — derived by fetching `limit + 1`, never fabricated."},"next_cursor":{"type":"string","description":"Opaque continuation token for cursor-paged views that are not keyset-paged today."}},"required":["total","returned"],"additionalProperties":false,"description":"Pagination truth carried beside the data. `total` is the count BEFORE `limit`/`offset`; `returned` is `data.length`. A silently-truncated list is indistinguishable from a complete one unless the envelope says how many there really were."}},"required":["ok","data"],"additionalProperties":false}],"x-apigen-logical":"union","definitions":{"BacklogErrorCode":{"type":"string","enum":["not_found","item_not_found","ambiguous_reference","invalid_argument","validation","store_busy","rag_not_configured","conflict","precondition_failed","internal"],"description":"The closed union of envelope error codes. See {@link BACKLOG_ERROR_CODES } ."},"IOutcomeErrorDetails":{"type":"object","properties":{"retryable":{"type":"boolean","description":"True only for transient codes (today: `store_busy`)."},"retryAfterMs":{"type":"number","description":"Suggested backoff in milliseconds; only meaningful when `retryable`."},"internalRef":{"type":"string","description":"Internal doc/plan reference for an `invalid_argument` whose underlying reason cites internal terminology (a plan id, a spec section) that does not belong in the user-facing `message`."}},"additionalProperties":{},"description":"`error.details`. `retryable`/`retryAfterMs` exist so an agent knows whether to retry a `store_busy` and with what backoff instead of hot-looping. Open-ended beyond those: individual codes attach their own evidence."},"CountRelation":{"type":"string","enum":["eq","gte"],"description":"How exact a labelled count is. `eq` — the value is the true count; `gte` — the value is a LOWER BOUND (the Elasticsearch `hits.total.relation` pattern): more rows exist than could be counted at the cost the caller's request allowed. A count whose exactness is unstated is the defect this names (DESIGN §2 Invariant 5)."}}},"envelope":{},"typeText":{"lang":"ts","input":"(input: import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/delete\").IDeleteIssueInput)","output":"import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/envelope\").IOutcomeEnvelope<import(\"/Users/nix/dev/node/adhd/entrypoint/backlog/dist/write/delete\").IDeleteIssueOutcome>"},"hasCtx":true}],"extractorVersion":"0.3.3","artifactSource":{"path":"api.d.ts","sha256":"4a5dfc06d9cfb5cf1092f1dd379f6f07cf42f702e6ec6b95500d1a901b5242ff","bytes":15787,"deps":{"api.d.ts":"4a5dfc06d9cfb5cf1092f1dd379f6f07cf42f702e6ec6b95500d1a901b5242ff","citation.d.ts":"d7b8e6a28c7ac848aa57c27cda077dd76297e1736d21b2d76a70ac2864440755","cli-input-envelope.d.ts":"9254390c27f31ab6598e623731007de3d143e50e8cd9e4824cae944e389851b3","cli.d.ts":"51a94638d3c71e0769022a71ae271a286e5f34cb3b43e60926bf7c0a635317fa","env.d.ts":"b8dbe8fb14a7dda4745fdac154dacdf8bacec49657830c88bf9344fed84a69d2","envelope.d.ts":"e60d7b127fe4289348cc0c999d241530cea912f267ad2652202ce6c823cb4d01","extract-live.d.ts":"11a6c52c95a703deeae932b5813922bd7773a544904ce0e4c06c6466d3049934","index.d.ts":"8d68048d816eb7691202d6b740b904b78d790cddba9aef619184d6df55510702","install-skill.d.ts":"ac52fbea0674a76508a1b38ce2791191e1d6fa8ced8099dd5da81a18b68d1aa2","install.d.ts":"cc9944d6ec2d12af9963deecf2a2f288e433d1f59cfdba8a9ca9b3b4613b4f31","ir-artifact.d.ts":"c5faa25781ad8dd53ae8a19782acaac548598eab66d03f19ebca4b152e47d200","lifecycle.d.ts":"1270ce130ec5cb0edb47ae9d2408c28fe3df2e63356e4996055eb613140a6700","query/canonical.d.ts":"37f9b9f8353c331316ea2e47db369d7a434906b638ade2307d46fc78b0682242","query/card.d.ts":"0dba74fd45d8c498a27f26793789b0b234d2e9229239fbcd3f3c89f115261d38","query/get.d.ts":"4ffa0d58b43279c6286d805ed0a40a809fba2ca3d6616558cccc2a97920a71fc","query/index.d.ts":"6098b33c270e08fc57862c764414e15cfecad3fc8b6a5218f19ff345a4caaabf","query/markdown.d.ts":"0aefdc5c216491ec2d98986c834fd66da5969c36da55e1c5c92030f2f79a8e87","query/query.d.ts":"0e1c038e9bc565623d64f1576f8d98716b6ee9b1d660027bbb3a46e5d713069b","query/redirect.d.ts":"60077d530d78bb43e3180eae9dcfbd43a346d10e7dbace01e75a09abf9c38e51","query/resolve.d.ts":"b34f8e4ac87492646b4b6328905eb260ca39bdc6e389280fc0a8ec87d426eb8d","query/similar-clusters.d.ts":"6b538a6efb212be519ffc8d2385d25279fbf3e75a09d6ff66cf7863352da66cd","query/similarity-signals.d.ts":"e5e367b134284140312c3d878706d74ffd4e16880a412bc1a41c127d2ab3e154","query/spec-staleness.d.ts":"e2e916ecd88cb836672df5f5343b86a24134de623a1e622e60b4b030ae2ff7d6","query/types.d.ts":"6bb56db952374495cb563e110f248076bae7d3c68694ee0ada8b9850821fb63c","query/verdict-core.d.ts":"989d84120494e28a73cd41b80940a7092ceb01746b96c2630a89e34de861ec39","query/verdict.d.ts":"a0f03017a63dd5ca02f250485c3e920a9d1807f03a43453941c05a8c6a5a6424","query/views/catalog.d.ts":"a662825075730518b8747b9cc4c7078e8d03143d4120521a3a8cb28f4b693625","query/views/registry.d.ts":"b67c84095bd40dceb231425bf3168145ec9183616d0eb534d692a89073eb7990","query/views/report.d.ts":"dea76b3f5c107e18e35fbb7070b14a0a262f4fb02d1b27a2e23ebe0c90286bd0","query/views/semantic.d.ts":"c04d43587dc58c9a99e843b318b027ac77c61d2a7be76ee323884368e57363aa","query/views/stats.d.ts":"6e57c56b07fb71cc8e028492633d6f1c4fe714d197874fd5478e4b12efb28b68","readiness.d.ts":"94a0df07956efa6223f7e8472a3d6a041ee948a14507c3d89febd30136d616fb","retry-policy.d.ts":"c5b7a0d5f71ec97a168a67ec8ba1c4e9ddc90b536116cb28461de526316d3055","search-shortcut.d.ts":"a9575c3cc4496566859900935031a0e2607f134b557cd3a4462382255dbc0126","serve.d.ts":"1516c7b774805b87053ef12d69601e86812bb371a1f27de0c75cd2c5e281db9e","server.d.ts":"a1a42b812610c651120d050ccdefd99120e76c9a174f6ab90f953065b5c55c82","service-config.d.ts":"e4177dc0c2b80f8ade8fb00f1803ba9f241f44970bf1747544c107672f81c412","service-errors.d.ts":"fa80e13a7346f5ff6ae9fcd48ff459bb0c8287cd47d5c58a7f7cd91ef848fdcd","store/catalog-invariant-guard.d.ts":"9ceecfa2c1084b47a57db83588989fdbfb698db33c2b4ba5cd0489770958f6dd","store/graph-backlog-store.d.ts":"1fe364b91a951677f756e0d44f00baab412be040aaed9938e89dc2c8996b9bee","store/immediate-retry.d.ts":"db564719cb7e75e13275a90872de72ff8f7fd4798c73351677ed32329eb52173","store/signal-cleanup.d.ts":"f2b7fa6071337f862891653d02df99db06feff18bf090e048b1f382a6b21e0d1","store/type-policy.d.ts":"8c46b0611170294765383b9f00791e4fd855185a62c69943219f2d40fa3e9415","store/vocabulary-guard.d.ts":"84c88bc4c825977f48f46efec5667b70cbd50195f0c8bafdbe4eb36154b041b0","version-info.d.ts":"9d2a66fb1dc9a9fa227cdb224c53ff5695ad21b23de66c4be1e02e67c9c08eb3","vocabulary.d.ts":"5165eabd5616f1a668a22942fb5a1c0cb208e0aace3233ccbebe869b5554a972","write/anchor-check.d.ts":"146760f70f8b5c6b53ae5bb77d38151d4745bca041ffab23b7a425675fa34b8f","write/attestation.d.ts":"0cb5aeb118ad06c13a305b87c02cc4112eb6f0dcfb9dfd33c5c6c668716bb843","write/audit.d.ts":"b4871edceb1d2c4fbadf0b1801afdd84138e26a7351011b17e81b5dff0e3bf26","write/bootstrap.d.ts":"652fdfcb1d81e5b0569e64e1f588eb2fbe70411e16553a3043ac5e80e9d68276","write/catalog-merge.d.ts":"4d412b18ade0ff35707757bd8a4d6dacc8bcb72ac6f4631b570fadb02a5e609f","write/catalog-repair.d.ts":"d91805b046d77e3b6c33146634b8ffccf86f0c1d3ae6727180647cce8c255282","write/catalog.d.ts":"1d042655f349680a39a37e030b1a5e46b969906b361fd0597ccf381a62fc4c69","write/citation-path.d.ts":"ea9556ebc8b7304e23646d7af6ad054e244fa4070eea3a2923696d24e94cabc3","write/citation.d.ts":"c2fcb47f83f0ee037891e590c57cf74f05753a500e42e46de74816d4788792e0","write/claim-lease.d.ts":"a742912d7d74e5c0221792effdd15452a23e195a88c299e3f7cd60ed26fdc4ff","write/claim.d.ts":"0897712218653b4d71fd5031b65b73e13fe9a56c64f6c348ef1b2d8aed7de2c2","write/create-issue.d.ts":"a082cc753fbd672e13780fd665cecadb042df9f5c8d89ee64a0bee501513d9c6","write/delete.d.ts":"73577bd1340a8cb8d078d97d0a7417cf3c1031d3e95ed16d9d087801da6b80df","write/embed-drain.d.ts":"a6295da99822d289187e506281545ca09da490bcda56c497d5571ab674872209","write/embedding-config.d.ts":"b3245db358bf7bbd7db94f412be613b8bb4ac9b3d7b778f07ca019b062c785f1","write/embedding-observer.d.ts":"2ccac6173aba3830bf60652cbf916250d7765f5d704364205a5e08c3f0f4969f","write/errors.d.ts":"96f308f1ffb1c1c1d5e66434f2b3003cc934e55e567ba8bb016a00d57646b2e2","write/gate.d.ts":"cd1e7445210ba4072d6b7cd3a8bc3e16f300fe0f4a78a295fb3ebb0f2f364354","write/issue-status.d.ts":"0df49e4e88d69122d545037c36e97b67da9bec1e882877833bb33077dc10d753","write/merge-project.d.ts":"e943f43556055f8cc43cf32d78c67299ad1638455b2e55c84dfcc40fb6141775","write/move.d.ts":"3dbe164e938a9cb4459231b3c61b9fae89e9c21d8aa7de3fed719732da9fc62e","write/obligation.d.ts":"9637299104d8a46d5acbefa4f53ec57f8533b7c42a12e35476c3da2594ec5ec9","write/relate.d.ts":"689e157ec60b9ad99c7e43fc45ad062ed2546c2aa2c2bc61adb87f8689afa1b7","write/revision.d.ts":"73b236d7293ae61a9419e288cf0c9168437897bdd5e8b4fd9956c8f303a4c857","write/similarity-scan.d.ts":"ae96ab2a23c2d7e3b9578d63a4267c71579739ee65356596675ec1fadb0117a5","write/spec-revision.d.ts":"8519def299ed9627a02c58aa61cf60b88b1108af06a1f583f80226b9bdb2d9de","write/spec-revision.reconcile.d.ts":"e6fd118459c0fcce868dfe02f828e419c9511089906f9d050515c01762131b79","write/transition.d.ts":"08e805bd8cdd990c160f0fc24a33255ba9f04bdb2dfb84d9beee2ffc6bb7eb38","write/tx.d.ts":"2e22ee140aa2f3fa2ba5b7f9df8b7985f016b0acc1f90624d9351fc4e6895136","write/uid-prefix.d.ts":"19c46bffd134092cae77deee38dfdfb584cd431abf86e1825476bf95af6163cb","write/update.d.ts":"b56d307617f303871a34013205ea81dade6f83aca628d925ed55b69ebee2ab24"}}}
|