@adhd/backlog 0.1.8 → 1.0.0

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.
Files changed (61) hide show
  1. package/CHANGELOG.md +93 -44
  2. package/README.md +332 -81
  3. package/api.d.ts +146 -0
  4. package/cli.d.ts +45 -18
  5. package/env.d.ts +23 -3
  6. package/envelope.d.ts +163 -0
  7. package/index.d.ts +11 -10
  8. package/index.js +531 -173
  9. package/index.mjs +29814 -15647
  10. package/install-skill.d.ts +23 -0
  11. package/package.json +50 -15
  12. package/query/card.d.ts +31 -0
  13. package/query/get.d.ts +11 -0
  14. package/query/index.d.ts +67 -0
  15. package/query/markdown.d.ts +11 -0
  16. package/query/query.d.ts +131 -0
  17. package/query/resolve.d.ts +123 -0
  18. package/query/types.d.ts +450 -0
  19. package/query/views/registry.d.ts +43 -0
  20. package/query/views/semantic.d.ts +101 -0
  21. package/query/views/stats.d.ts +109 -0
  22. package/search-shortcut.d.ts +79 -0
  23. package/serve.d.ts +18 -0
  24. package/server.d.ts +139 -4
  25. package/skill/SKILL.md +619 -138
  26. package/store/graph-backlog-store.d.ts +80 -17
  27. package/store/immediate-retry.d.ts +24 -13
  28. package/store/type-policy.d.ts +4 -0
  29. package/store/vocabulary-guard.d.ts +52 -0
  30. package/version-info.d.ts +15 -0
  31. package/write/audit.d.ts +36 -0
  32. package/write/bootstrap.d.ts +123 -0
  33. package/write/catalog.d.ts +351 -0
  34. package/write/claim-lease.d.ts +21 -0
  35. package/write/claim.d.ts +80 -0
  36. package/write/create-issue.d.ts +250 -0
  37. package/write/delete.d.ts +39 -0
  38. package/write/embed-drain.d.ts +68 -0
  39. package/write/embedding-observer.d.ts +80 -0
  40. package/write/errors.d.ts +303 -0
  41. package/write/issue-status.d.ts +10 -0
  42. package/write/move.d.ts +70 -0
  43. package/write/relate.d.ts +52 -0
  44. package/write/transition.d.ts +60 -0
  45. package/write/tx.d.ts +344 -0
  46. package/write/update.d.ts +81 -0
  47. package/client.d.ts +0 -169
  48. package/markdown.d.ts +0 -75
  49. package/migration-admin.d.ts +0 -26
  50. package/model.d.ts +0 -437
  51. package/store/audit-log.d.ts +0 -16
  52. package/store/claim.d.ts +0 -24
  53. package/store/crud.d.ts +0 -62
  54. package/store/ids.d.ts +0 -24
  55. package/store/lifecycle.d.ts +0 -36
  56. package/store/mapping.d.ts +0 -101
  57. package/store/mutate-metadata.d.ts +0 -8
  58. package/store/query.d.ts +0 -68
  59. package/store/repo-migration.d.ts +0 -51
  60. package/store/serve-lock.d.ts +0 -42
  61. package/store/structure.d.ts +0 -66
package/CHANGELOG.md CHANGED
@@ -1,151 +1,203 @@
1
- ## 0.1.8 (2026-08-19)
1
+ ## 1.0.0 (Unreleased)
2
+
3
+ The first stable release. `@adhd/backlog` is a self-contained backlog system: one store, mounted live to a CLI, an MCP server, and an HTTP surface with zero duplicated logic across hosts. Every operation returns an outcome envelope — `{ok:true, data}` or `{ok:false, error:{code,message,details}}` — so a caller never has to guess whether a call succeeded from a thrown exception.
4
+
5
+ ### 🚀 Features
2
6
 
7
+ - **backlog:** the application layer settles on 14 verbs — `get`, `query`, `lookup`, `create`, `update`, `transition`, `claim`, `relate`, `move`, `upsertProject`, `upsertComponent`, `upsertLocation`, `rmLocation`, `delete` — each mounted identically to CLI, MCP, and HTTP.
8
+ - **backlog:** `create` takes a flat `{ title, body, project, by }` input plus optional `component`, `kind`, `status`, `priority`, `citations`, `author`, `assignee`, and `duplicateAction` (`'abort' | 'force' | 'comment'`, default `'abort'`); a resolved `project` is required — `create` never mints one.
9
+ - **backlog:** `query` accepts a natural-language `text` that routes to semantic or keyword search, and pages results by `limit`/`after` with `hasMore`/`nextCursor`.
10
+ - **backlog:** on-write embeddings, with an audit row per write, back semantic search.
11
+ - **backlog:** citations are persisted on every item, and repo moves apply their rename plan in two passes so a rename can't cascade mid-write.
12
+ - **backlog:** `buildBacklogEnv` now accepts an explicit `namespace` option (`BuildBacklogEnvOptions.namespace`, defaulting to `'production'`), threaded through the CLI (`RunBacklogCliOpts`), `serve` (`RunServeCommandOpts`), and the server library (`StartOpts`) down to `EnvironmentOptions.namespace` — mirroring how `scope` already resolves via an explicit-parameter-first cascade. `backlogEnvironmentSpec.namespaces` declares three values, `['production', 'test', 'sandbox']` (added, `'production'` stays first — every existing caller that omits `namespace` is unaffected). Deliberately no `ADHD_BACKLOG_NAMESPACE` env var: namespace selection is explicit-parameter-only, so it can never be silently overridden by an ambient shell variable.
13
+ - **backlog:** a new CLI flag, `--namespace <value>` (SPEC.md §5c), recognized anywhere in argv (like `--help`), selects which declared namespace an invocation resolves under — `production` (default), `test` (a persisted, non-ephemeral store), or `sandbox`. `--namespace sandbox` layers ephemeral-root-minting on top of namespace selection: it mints a fresh throwaway `adhdRoot`, and writes a REAL `config.yaml` there with `embedding.enabled: false` on every invocation, before any config file layer is ever read (D8) — an isolated invocation's embeddings are now off DELIBERATELY, never as an accident of an empty directory (a stray pre-existing `config.yaml` at that path is overwritten, not silently honored). An unrecognized `--namespace` value is rejected before dispatch with the same `invalid_argument` envelope every other CLI failure uses, naming all three valid values and suggesting the nearest match on a near-miss typo. `sandbox-path`'s JSON payload reports `{adhdRoot, namespace, dbPath, embeddingEnabled}`.
3
14
 
4
15
  ### 🩹 Fixes
5
16
 
6
- - **backlog:** singleton writer lock for `serve` — two concurrent servers against one store corrupted the db (BUG-020). O_EXCL PID-file lock keyed on the canonical realpath'd db path, held from before the store opens until after it is fully closed, so a second `serve` during shutdown drain is refused rather than admitted. Dead holders reclaimed; refusal names the holder pid and lock path.
7
- - **backlog:** consume `@adhd/sox-store-adapter` 0.7.0. The dependency was pinned `^0.5.8`, and a caret on a 0.x pins the MINOR — so it could never resolve past 0.6.0 and none of the WAL/durability work reached this store. Brings the adaptive idle-flush debounce (BL-590), baseline-relative WAL cap (BL-587), and verified busy-error classification in the wal-cap backstop (BUG-019).
17
+ - **backlog:** the cutover ETL's component mint (`tools/etl/catalog-upsert.ts`'s `upsertComponentTx`) now writes the `owns_project` edge back to its project in the same transaction, matching real `upsertComponent`. Previously a minted component had no incoming `owns_project` edge, leaving it (and every issue under it) unreachable from a project→component→issue two-hop walk — found and root-caused during the cutover tooling's own proving run (SPEC.md §7a): 108 of 145 target components affected, 502 issues unreachable, 0 issues incorrectly written (status/kind/priority/citations/notes all matched).
18
+ - **backlog:** the ETL's hand-rolled `upsertProjectTx`/`upsertComponentTx` (`tools/etl/catalog-upsert.ts`) — a duplicate reimplementation of the real registry verbs' find-then-create logic, predating those verbs' existence — are gone. `src/write/catalog.ts`'s `upsertProject`/`upsertComponent` are now split into a transaction-PARTICIPANT core (`upsertProjectTx`/`upsertComponentTx`, taking the caller's own open `tx`) and a thin `executeWriteTransaction`-opening public wrapper, the same shape `claim.ts`/`transition.ts` already use; the ETL's `catalog-upsert.ts` is now a thin adapter that calls the real `*Tx` cores (re-fetching `rowid` via `getNodeByUidTx`, since neither outcome type carries it) instead of hand-rolling the SQL. This closes the exact duplication class that caused the `owns_project`-edge bug above — a future divergence between the two registry verbs and the ETL's own copy is no longer possible, because there is only one copy. Re-proven: an 1788-item re-run against the current corpus into a fresh target reproduces all four parity comparisons clean, including the `owns_project` reachability walk.
19
+ - **backlog:** editing an issue's body no longer discards the rest of its graph. The supersede path carried exactly five edges onto the successor — the set the issue CARD reads — so a single body edit silently detached the issue's blockers, dependencies, notes, citations, transitions and entire audit trail. Every remaining edge is now carried forward in both directions, since an issue is the source of some relations and the target of others.
20
+ - **backlog:** a burndown no longer inflates after an edit. The open-curve view counted every row alive at a sampled instant, so one logical issue appeared twice after one edit and three times after two; it now resolves each identity chain to its head per instant.
21
+ - **backlog:** a ranked or semantic result no longer returns an issue alongside its own stale copy. The relevance path hands its filter to a search backend whose contract cannot express the current-row predicate, so superseded rows stayed rankable — and outranked the live row, since their text is what the query resembled. Those rows are now dropped from the ranked page, with over-fetch so the page stays full.
22
+ - **backlog:** the outcome envelope and its error codes now live in one module, mapped by error class rather than by retry bucket.
23
+ - **backlog:** id collisions on concurrent `create` are hardened, alongside repo-lookup UX and install/skill packaging.
24
+ - **backlog:** superseded ids are rejected on `claim`/`relate`/`move`/`delete` instead of silently operating on a stale record.
25
+ - **backlog:** avoid opening the graph store for status-only CLI paths (`--help`, no-args) (DEBT-BACKLOG-CLI-EAGER-STORE-OPEN-001, DEBT-BACKLOG-CLI-STORE-OPEN-001).
26
+ - **backlog:** `--namespace sandbox` routes through an explicit `namespace: 'sandbox'` parameter, on top of (never instead of) its throwaway `adhdRoot` swap, closing `BUG-BACKLOG-SANDBOX-SILENT-BYPASS-001`'s bug class structurally — an explicit function parameter cannot be silently overridden by an ambient `ADHD_ROOT` the way a `process.env` read previously could. Also fixes `BUG-BACKLOG-SANDBOX-SERVE-TELEMETRY-001`, found while proving the sandbox flag against `serve`: `runServeCommand`'s own telemetry re-init (BUG-014, re-stamping the process `role:'live-service'` before request handling starts) carried no `logDir` override at all, silently undoing the bin-entry guard's own sandbox-telemetry redirect the moment a long-lived `--namespace sandbox serve` session re-stamped its role — a sandboxed `serve` invocation's telemetry ended up written to the real, HOME-anchored `~/.adhd/sox-ecosystem/backlog/logs` after all. `runServeCommand` now mints its own sandbox log dir the same way `index.ts`'s bin-entry guard does, keyed off `opts.namespace === 'sandbox'`.
27
+ - **backlog:** a failed audit write must not fail an already-committed claim.
28
+ - **backlog:** a live claim now actually protects an issue. `transition` previously ignored `claimedBy` entirely, so any agent could change an issue's status out from under a claim someone else was actively holding — `claim` was advisory-only. `transition` now blocks with the same `ClaimHeldError`/`conflict` a competing `claim` call would get, unless the claim is stale or held by the same agent, matching `claim`'s own staleness rule (the shared staleness logic moved into `claim-lease.ts` so both verbs stay in sync).
29
+ - **backlog:** `claim` no longer accepts a claim on an already-closed issue. There was nothing to lease on a terminal issue, so this now rejects with a new `IssueTerminalError` (`precondition_failed`) — release/renew are unaffected, since cleaning up a claim on an issue that closed out from under you must still succeed.
30
+ - **backlog:** a per-verb `--help` (e.g. `backlog create --help`) now points at `batch action` when it exists as a bulk alternative — real usage testing showed agents doing many one-at-a-time calls in a row without ever discovering the batch primitive, because per-verb help had no cross-reference to it.
31
+ - **backlog:** `query --input '{"filter":{"kind":"typo"}}'` (or `status`/`priority`) now rejects with a `BacklogValidationError` naming the unresolved value and suggesting the nearest existing catalog name, instead of silently returning `{total:0, items:[]}` indistinguishable from filtering by a real, sparse (currently zero-issue) value. `kind`/`status`/`priority` are validated against the catalog's own live rows — the real, dynamic value space those open vocabularies have (DATA_MODEL.md §0.2/§2) — never a fixed enum, so a legitimate sparse filter still returns cleanly empty.
32
+ - **backlog:** `query`'s `format:'markdown'` is now implemented (`src/query/markdown.ts`) instead of unconditionally rejecting as "not implemented in this slice." Every item-list view (`list`/`ready`/`stale`/`similar`) supports it; `graph`/`order`/`overlap`/`projects`/`components`/`locations` reject it with a clear `InvalidArgumentError` naming why (no item-list shape to render).
33
+ - **backlog:** `query --help` and SPEC.md now document that `view:"similar"` requires `filter.anchor` OR `filter.semantic` — previously a caller had to hit the runtime error to discover this.
34
+ - **backlog:** `backlog get --help` no longer collapses its mounted `uid`-vs-`registry` union input to the useless `{ input: union }`. The shared apigen `--help`/tool-description generator (`describeParams` in `@adhd/apigen-engine-runtime`) now expands a top-level union's member shapes (`{ uid: string, fields?: ... } | { registry: ..., name: ..., filter?: ... }`) and renders an enum's actual allowed values (`view?: 'list'|'similar'|'projects'|'components'|'locations'|...`) instead of the bare, contentless words `union`/`enum` — this fixes every apigen-mounted CLI/MCP tool's `--help`/description across the monorepo, not just `backlog`.
35
+ - **backlog:** `query --help` and `skill/SKILL.md` now surface `view:"projects"`/`"components"`/`"locations"` (the project/component/location registry LIST views) — previously undiscoverable short of reading source, since `view?`'s allowed values rendered as the bare word `enum`.
36
+ - **backlog (BUG-BACKLOG-QUERY-REGISTRY-VIEW-STRIPPED-001, root-caused while verifying the above against the real built binary — the prior claim that these three views "already work correctly" was wrong):** `query --input '{"view":"projects"}'` (and `"components"`/`"locations"`) silently stripped every field but `uid` over EVERY transport (CLI/MCP/HTTP) — `{"items":[{"uid":"..."}]}`, with `name`/`path`/`projectUid`/`locType`/`value`/`componentUid` all gone. Root cause was one level up the stack, in `@adhd/apigen-base-logical`'s shared response encoder: `IIssueQueryResult`'s `view`-tagged members declare no `discriminator`, and several branches (`ready`/`stale`/`similar`/`projects`/`components`/`locations`) share identical top-level property names (`view`, `items`), so the encoder's structural tie-break silently re-encoded every one of them through whichever branch was declared earliest (an `items: IIssueCard[]` shape) — correct by coincidence for `ready`/`stale`/`similar` (their items genuinely are `IIssueCard`s) and silently wrong for the three registry views. Fixed at the root in `apigen-base-logical`'s `pickUnionBranch` (an implicit literal-discriminator fallback, before structural scoring) — this fixes every apigen-mounted verb across the monorepo whose response union has this shape, not just `backlog query`.
37
+ - **backlog:** the `[inv:singleton]` PID-file writer lock added for `serve` in 0.1.8 (BUG-020) is REMOVED. A deeper read of the currently-pinned `@adhd/sox-store-adapter@0.9.1` found the lock guards a path real `backlog` code cannot reach (the adapter's WAL-checkpoint strategy is hardcoded `'gated'` in production; the adapter's own 1,180-trial internal safety experiment found zero crashes through that gated path) and that the original incident traced to a separate, since-fixed adapter bug (`BUG-STOREADAPTER-COORDINATION-PATH-ASYMMETRY` — a non-canonicalized quiescence check, not a concurrency hazard requiring application-level mutual exclusion). Re-verified empirically: three real two-process sustained-concurrent-write trials via the actual built MCP server, zero failures, exact persisted counts every trial (see STATE.md A17). `backlog serve` now supports any number of concurrent instances against the same store with no coordination between them, matching every other write path in this package (SPEC.md §3/§4's parallel-process-enabled design) — a hard requirement for this rewrite. Durable proof: `src/serve.singleton.spec.ts`.
38
+
39
+ ### 📖 Documentation & tests
40
+
41
+ - **backlog:** `SPEC.md` describes one surface and nothing else. The data-load section and every reference to it are gone, along with the superseded interface and graph-model documents the package's own source still cited.
42
+ - **backlog:** two acceptance criteria were corrected against the shipped design rather than left contradicting it — uniqueness now states the edge-scoped resolve-then-create the write layer performs (it never rejected a duplicate name), and the concurrency gate now names a negative control that is deterministically reachable.
43
+ - **backlog:** the audit contract is proven end to end: `actor`, `action` and a **recomputed** `sha` are read off the raw audit node for all six write verbs.
44
+ - **backlog:** the banned-terms gate now scans the package's own documents, not just `src/`. Scoping it to source is how a whole stale spec section survived an earlier sweep.
45
+
46
+ ### ❤️ Thank You
8
47
 
48
+ - pseudosky
9
49
 
10
- ### ❤️ Thank You
50
+ ## 0.1.10 (2026-08-20)
51
+
52
+ ### 🩹 Fixes
53
+
54
+ - **backlog:** don't open the graph store for status-only CLI paths (DEBT-BACKLOG-CLI-STORE-OPEN-001)
55
+
56
+ - **backlog:** a failed audit write must not fail an already-committed claim
57
+
58
+ ### ❤️ Thank You
11
59
 
12
60
  - pseudosky
13
61
 
14
- ## 0.1.7 (2026-08-14)
62
+ ## 0.1.9 (2026-08-20)
15
63
 
64
+ ### 🩹 Fixes
65
+
66
+ - **release:** global-CLI currency gate (BUG-027) + assets/build output-scope cache bug (BUG-026)
67
+
68
+ - **backlog:** converge @adhd/sox-telemetry to a single instance (BUG-BACKLOG-TELEMETRY-001)
69
+
70
+ - **backlog:** don't open the graph store for --help/version (DEBT-BACKLOG-CLI-EAGER-STORE-OPEN-001)
71
+
72
+ ### ❤️ Thank You
73
+
74
+ - pseudosky
75
+
76
+ ## 0.1.8 (2026-08-19)
16
77
 
17
78
  ### 🩹 Fixes
18
79
 
19
- - **backlog:** persist citations, atomic repo migration, signal cleanup
80
+ - **backlog:** singleton writer lock for `serve` — two concurrent servers against one store corrupted the db (BUG-020). O_EXCL PID-file lock keyed on the canonical realpath'd db path, held from before the store opens until after it is fully closed, so a second `serve` during shutdown drain is refused rather than admitted. Dead holders reclaimed; refusal names the holder pid and lock path.
81
+ - **backlog:** consume `@adhd/sox-store-adapter` 0.7.0. The dependency was pinned `^0.5.8`, and a caret on a 0.x pins the MINOR — so it could never resolve past 0.6.0 and none of the WAL/durability work reached this store. Brings the adaptive idle-flush debounce (BL-590), baseline-relative WAL cap (BL-587), and verified busy-error classification in the wal-cap backstop (BUG-019).
20
82
 
83
+ ### ❤️ Thank You
21
84
 
22
- ### ❤️ Thank You
85
+ - pseudosky
86
+
87
+ ## 0.1.7 (2026-08-14)
88
+
89
+ ### 🩹 Fixes
90
+
91
+ - **backlog:** persist citations, atomic repo moves, signal cleanup
92
+
93
+ ### ❤️ Thank You
23
94
 
24
95
  - pseudosky
25
96
 
26
97
  ## 0.1.6 (2026-08-12)
27
98
 
28
-
29
99
  ### 🩹 Fixes
30
100
 
31
101
  - **backlog:** honor ADHD_BACKLOG_DATABASE_PATH env override (BUG-002)
32
102
 
33
-
34
- ### ❤️ Thank You
103
+ ### ❤️ Thank You
35
104
 
36
105
  - pseudosky
37
106
 
38
107
  ## 0.1.5 (2026-08-12)
39
108
 
40
-
41
109
  ### 🚀 Features
42
110
 
43
- - **backlog:** swap raw better-sqlite3 handle for sox store adapter (F-01)
111
+ - **backlog:** swap the raw embedded-database handle for the sox store adapter (F-01)
44
112
 
45
- - **backlog:** F-01 turso adapter migration (resolves blockers)
113
+ - **backlog:** F-01 adopt the turso store adapter (resolves blockers)
46
114
 
47
115
  - **backlog:** convert store to turso store-adapter (F-01+F-02)
48
116
 
49
-
50
117
  ### 🩹 Fixes
51
118
 
52
119
  - **backlog:** dedupe-scan weak FTS match + required-field completeness
53
120
 
54
121
  - **apigen-cli:** restore 2768 files mass-deleted by 0117eb22 (BUG-APIGEN-052)
55
122
 
56
- - **backlog:** remove better-sqlite3 — turso-native concurrency fixtures (substrate invariant)
123
+ - **backlog:** drop the embedded-database dependency — turso-native concurrency fixtures (substrate invariant)
57
124
 
58
125
  - **backlog:** best-effort store close in finally paths (close error must not mask command outcome)
59
126
 
60
127
  - **backlog:** init telemetry at CLI composition root (stop silent record drop, role:'cli')
61
128
 
62
-
63
- ### ❤️ Thank You
129
+ ### ❤️ Thank You
64
130
 
65
131
  - parity-harness-self-test
66
132
  - pseudosky
67
133
 
68
134
  ## 0.1.3 (2026-07-30)
69
135
 
70
-
71
136
  ### 🚀 Features
72
137
 
73
138
  - **apigen:** generic batch/bulk fan-out operations (FEAT-APIGEN-BULK-OPS-001)
74
139
 
75
-
76
140
  ### 🩹 Fixes
77
141
 
78
- - **backlog:** humanId collision hardening + repo-lookup UX + install/skill packaging
79
-
142
+ - **backlog:** id collision hardening + repo-lookup UX + install/skill packaging
80
143
 
81
- ### ❤️ Thank You
144
+ ### ❤️ Thank You
82
145
 
83
146
  - pseudosky
84
147
 
85
148
  ## 0.1.2 (2026-07-27)
86
149
 
87
-
88
150
  ### 🚀 Features
89
151
 
90
152
  - **backlog:** add `backlog install` command — installs the skill AND registers the MCP server into host configs (Claude Code `~/.claude.json` + project `.mcp.json`; opencode `~/.config/opencode/opencode.json` + project) idempotently, at user/project scopes; `install-skill` retained as an alias.
91
153
 
92
-
93
154
  ### 🩹 Fixes
94
155
 
95
156
  - **backlog:** ship `skill/SKILL.md` into `dist/` via a vite `writeBundle` copy plugin (project.json `build.options.assets` is a no-op under `@nx/vite:build`); fix `install-skill` packaged-skill path escaping to `@adhd/skill` in the published rebased layout (BUG-013, BUG-012 class). Harden the inferred `assets` nx target with explicit `outputs` so a `build` cache-hit can't wipe copied assets.
96
157
 
97
-
98
158
  ## 0.1.1 (2026-07-27)
99
159
 
100
-
101
160
  ### 🩹 Fixes
102
161
 
103
162
  - **backlog:** fix published tarball crashing at mount — `backlogDistDir()` resolved `client.d.ts` via `import.meta.url + '../dist'`, which escaped to the nonexistent `node_modules/@adhd/dist` once `dist-manifest` rebased the package to its root; now probes for the sibling `client.d.ts` (BUG-012). Adds `server.published-layout.spec.ts` reproducing the published rebased-to-root layout.
104
163
 
105
-
106
- ### ❤️ Thank You
164
+ ### ❤️ Thank You
107
165
 
108
166
  - pseudosky
109
167
 
110
168
  ## 0.0.3 (2026-07-25)
111
169
 
112
-
113
170
  ### 🩹 Fixes
114
171
 
115
172
  - **apigen,backlog:** killable serve, configurable namespace, flaky test + log spam
116
173
 
117
174
  - **backlog:** match archived-item exclusion between render and its verify
118
175
 
119
-
120
- ### ❤️ Thank You
176
+ ### ❤️ Thank You
121
177
 
122
178
  - pseudosky
123
179
 
124
180
  ## 0.0.2 (2026-07-24)
125
181
 
126
-
127
182
  ### 🚀 Features
128
183
 
129
184
  - **backlog:** add CLI entrypoint + bin (live apigen cli-output mount)
130
185
 
131
- - **backlog:** add migration.phase signal + migrationStatus op (MIGRATION.md §4.4)
132
-
133
- - **backlog:** Phase 1/2 apigen import + CI parity gate + durable migration.phase admin write
186
+ - **backlog:** Phase 1/2 apigen import + CI parity gate
134
187
 
135
- - **backlog:** author backlog-usage skill + install-skill CLI (MIGRATION.md sec 4.2/4.3)
188
+ - **backlog:** author backlog-usage skill + install-skill CLI
136
189
 
137
- - **backlog:** add `serve` CLI command so .mcp.json has a real entry to spawn (MIGRATION.md sec 4.5)
190
+ - **backlog:** add `serve` CLI command so .mcp.json has a real entry to spawn
138
191
 
139
192
  - **backlog:** rootLevel projection filter so new tool items reach root
140
193
 
141
-
142
194
  ### 🩹 Fixes
143
195
 
144
- - **backlog:** close Phase-3 migration gate — CI Node floor, content-hash collision verified, FTS content immutability, bounded busy-retry; plus import provenance/silent-drop fixes
196
+ - **backlog:** close out CI Node floor, content-hash collision verification, FTS content immutability, and bounded busy-retry; plus import provenance/silent-drop fixes
145
197
 
146
198
  - **backlog:** runBacklogCli no longer eagerly opens the store for --help/no-args (DEBT-BACKLOG-CLI-EAGER-STORE-OPEN-001)
147
199
 
148
- - **backlog:** concurrent createItem id-collision + FTS sanitizer gap (MIGRATION.md sec 3.3 scale test)
200
+ - **backlog:** concurrent createItem id-collision + FTS sanitizer gap
149
201
 
150
202
  - **backlog:** implement real transition/claim audit-log (DEBT-BACKLOG-AUDIT-TRAIL-PARTIAL-001)
151
203
 
@@ -155,9 +207,6 @@
155
207
 
156
208
  - **backlog:** re-import backfills ownership + resurrects superseded ids
157
209
 
158
-
159
- ### ❤️ Thank You
210
+ ### ❤️ Thank You
160
211
 
161
212
  - pseudosky
162
-
163
- ## Unreleased