@cleocode/core 2026.8.3 → 2026.8.5

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 (38) hide show
  1. package/dist/changesets/writer.js +4 -4
  2. package/dist/changesets/writer.js.map +1 -1
  3. package/dist/docs/slug-allocator.d.ts +3 -3
  4. package/dist/docs/slug-allocator.d.ts.map +1 -1
  5. package/dist/docs/slug-allocator.js +46 -8
  6. package/dist/docs/slug-allocator.js.map +1 -1
  7. package/dist/doctor/index.d.ts +2 -0
  8. package/dist/doctor/index.d.ts.map +1 -1
  9. package/dist/doctor/index.js +1 -0
  10. package/dist/doctor/index.js.map +1 -1
  11. package/dist/doctor/superseded-store.d.ts +101 -0
  12. package/dist/doctor/superseded-store.d.ts.map +1 -0
  13. package/dist/doctor/superseded-store.js +156 -0
  14. package/dist/doctor/superseded-store.js.map +1 -0
  15. package/dist/llm/conversation.d.ts.map +1 -1
  16. package/dist/llm/conversation.js +12 -1
  17. package/dist/llm/conversation.js.map +1 -1
  18. package/dist/resources/memory-guard.d.ts +130 -0
  19. package/dist/resources/memory-guard.d.ts.map +1 -0
  20. package/dist/resources/memory-guard.js +231 -0
  21. package/dist/resources/memory-guard.js.map +1 -0
  22. package/dist/store/attachment-store.d.ts.map +1 -1
  23. package/dist/store/attachment-store.js +6 -2
  24. package/dist/store/attachment-store.js.map +1 -1
  25. package/dist/tasks/heavy-tool-env.d.ts +112 -0
  26. package/dist/tasks/heavy-tool-env.d.ts.map +1 -0
  27. package/dist/tasks/heavy-tool-env.js +133 -0
  28. package/dist/tasks/heavy-tool-env.js.map +1 -0
  29. package/dist/tasks/index.d.ts +2 -0
  30. package/dist/tasks/index.d.ts.map +1 -1
  31. package/dist/tasks/index.js +1 -0
  32. package/dist/tasks/index.js.map +1 -1
  33. package/dist/tasks/tool-cache.d.ts.map +1 -1
  34. package/dist/tasks/tool-cache.js +9 -3
  35. package/dist/tasks/tool-cache.js.map +1 -1
  36. package/package.json +13 -13
  37. package/templates/CLEO-INJECTION.md +18 -0
  38. package/templates/workflows/release-prepare.yml.tmpl +23 -0
@@ -142,7 +142,7 @@ export async function writeChangesetEntry(entry, opts) {
142
142
  //
143
143
  // The reservation is consumed by `attachmentStore.put` on success (writer
144
144
  // contract). On any subsequent failure path we explicitly release with
145
- // `releaseReservedSlug(validated.id)` so retries do not see a stale claim.
145
+ // `releaseReservedSlug(validated.id, opts.projectRoot)` so retries do not see a stale claim.
146
146
  //
147
147
  // This ELIMINATES the rollback path that previously deleted
148
148
  // `.changeset/<slug>.md` after a late-bound `SlugCollisionError`. The
@@ -184,7 +184,7 @@ export async function writeChangesetEntry(entry, opts) {
184
184
  /* Already gone or unwritable — ignore. */
185
185
  }
186
186
  // Release the slug reservation so retries do not see a stale claim.
187
- releaseReservedSlug(validated.id);
187
+ releaseReservedSlug(validated.id, opts.projectRoot);
188
188
  return {
189
189
  ok: false,
190
190
  error: {
@@ -201,7 +201,7 @@ export async function writeChangesetEntry(entry, opts) {
201
201
  if (ownerId === undefined) {
202
202
  // Schema guarantees `tasks.length >= 1` so this is unreachable; included
203
203
  // for type narrowing.
204
- releaseReservedSlug(validated.id);
204
+ releaseReservedSlug(validated.id, opts.projectRoot);
205
205
  try {
206
206
  rmSync(filePath, { force: true });
207
207
  }
@@ -251,7 +251,7 @@ export async function writeChangesetEntry(entry, opts) {
251
251
  // Safe regardless of whether the chokepoint reserved it or
252
252
  // attachmentStore.put already consumed it (releaseReservedSlug is a
253
253
  // no-op on an unreserved slug).
254
- releaseReservedSlug(validated.id);
254
+ releaseReservedSlug(validated.id, opts.projectRoot);
255
255
  // T10388 — defence-in-depth: if the SSoT write throws SlugCollisionError
256
256
  // it means another process took the slug between our reserveSlug() and
257
257
  // attachmentStore.put() (cross-process race). Surface the SAME
@@ -1 +1 @@
1
- {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/changesets/writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/changesets/writer.ts"],"names":[],"mappings":"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"}
@@ -158,14 +158,14 @@ export interface ReserveSlugOptions {
158
158
  *
159
159
  * @internal
160
160
  */
161
- export declare function isSlugReserved(slug: string): boolean;
161
+ export declare function isSlugReserved(slug: string, cwd?: string): boolean;
162
162
  /**
163
163
  * Mark a slug as consumed — typically called by `attachmentStore.put` after
164
164
  * a successful write so the reserved set does not grow unbounded.
165
165
  *
166
166
  * @internal
167
167
  */
168
- export declare function consumeReservedSlug(slug: string): void;
168
+ export declare function consumeReservedSlug(slug: string, cwd?: string): void;
169
169
  /**
170
170
  * Test-only escape hatch — clears the in-process reserved set + lock map.
171
171
  *
@@ -221,7 +221,7 @@ export declare function reserveSlug(kind: BuiltinDocKind | string, slug: string,
221
221
  *
222
222
  * @param slug - The slug as passed to `reserveSlug` (will be re-normalised).
223
223
  */
224
- export declare function releaseReservedSlug(slug: string): void;
224
+ export declare function releaseReservedSlug(slug: string, cwd?: string): void;
225
225
  /**
226
226
  * Params for {@link reserveSlugForDispatch} — ADR-057 uniform signature.
227
227
  *
@@ -1 +1 @@
1
- {"version":3,"file":"slug-allocator.d.ts","sourceRoot":"","sources":["../../src/docs/slug-allocator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqHG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAO1D;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,cAAc,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AA4DD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED;;;;;;;GAOG;AACH,wBAAgB,qCAAqC,IAAI,IAAI,CAG5D;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,cAAc,GAAG,MAAM,EAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAsC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEtD;AAID;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC;IACvC,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,4BAA4B,GAAG,iBAAiB,CAAC;AAE7D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC,4BAA4B,CAAC,CAEvC"}
1
+ {"version":3,"file":"slug-allocator.d.ts","sourceRoot":"","sources":["../../src/docs/slug-allocator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqHG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQ1D;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,cAAc,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAiGD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,qCAAqC,IAAI,IAAI,CAG5D;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,cAAc,GAAG,MAAM,EAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAsC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAEpE;AAID;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC;IACvC,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,4BAA4B,GAAG,iBAAiB,CAAC;AAE7D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC,4BAA4B,CAAC,CAEvC"}
@@ -116,6 +116,7 @@
116
116
  * @saga T10288
117
117
  * @adr ADR-076 §6 (slug namespace policy), ADR-083 (Cleo persona)
118
118
  */
119
+ import { getProjectRoot } from '../paths.js';
119
120
  import { deriveSlugSuggestionsForAllocator } from '../store/attachment-store.js';
120
121
  import { getDb } from '../store/sqlite.js';
121
122
  import { normalizeSlug } from './slug-normalize.js';
@@ -173,6 +174,43 @@ async function acquireSlugLock(normalizedSlug) {
173
174
  * @internal
174
175
  */
175
176
  const reservedSlugs = new Set();
177
+ /**
178
+ * Compose the reservation key for a slug within a project.
179
+ *
180
+ * T12090: the set used to be keyed by slug ALONE, which made it
181
+ * process-global. That is fine in production — one process serves one project —
182
+ * but it silently defeats test isolation: vitest reuses a worker across files,
183
+ * so a file that reserved `t123-foo` and never consumed it left that slug
184
+ * reserved for every later file in the same worker, no matter how carefully
185
+ * each set its own `CLEO_DIR`. The module even shipped a
186
+ * `_resetSlugAllocatorState_TESTING_ONLY` hook to paper over it, which only
187
+ * helps files that remember to call it.
188
+ *
189
+ * It surfaced as a macOS-ONLY failure because shard composition differs per
190
+ * platform: on `macos-latest` shard 1, `docs-memory-observation.test.ts` landed
191
+ * in a worker that had already run a file leaving a reservation behind, and it
192
+ * failed with `E_SLUG_RESERVED` against a slug it had never used. Nothing was
193
+ * wrong with the test or with macOS — the state was simply not partitioned.
194
+ *
195
+ * Keying by resolved project root makes `CLEO_DIR` isolation real, so the
196
+ * reset hook becomes a convenience rather than a correctness requirement.
197
+ *
198
+ * @param slug - already-normalised slug.
199
+ * @param cwd - caller cwd; resolved to a project root for the key.
200
+ * @task T12090
201
+ */
202
+ function reservationKey(slug, cwd) {
203
+ let root;
204
+ try {
205
+ root = getProjectRoot(cwd);
206
+ }
207
+ catch {
208
+ // An unresolvable root must not make two projects collide, and must not
209
+ // throw out of a bookkeeping helper. Fall back to the literal cwd.
210
+ root = cwd ?? '<unresolved>';
211
+ }
212
+ return `${root}\u0000${slug}`;
213
+ }
176
214
  /**
177
215
  * Check whether the allocator has reserved `slug` in this process.
178
216
  *
@@ -180,8 +218,8 @@ const reservedSlugs = new Set();
180
218
  *
181
219
  * @internal
182
220
  */
183
- export function isSlugReserved(slug) {
184
- return reservedSlugs.has(normalizeSlug(slug));
221
+ export function isSlugReserved(slug, cwd) {
222
+ return reservedSlugs.has(reservationKey(normalizeSlug(slug), cwd));
185
223
  }
186
224
  /**
187
225
  * Mark a slug as consumed — typically called by `attachmentStore.put` after
@@ -189,8 +227,8 @@ export function isSlugReserved(slug) {
189
227
  *
190
228
  * @internal
191
229
  */
192
- export function consumeReservedSlug(slug) {
193
- reservedSlugs.delete(normalizeSlug(slug));
230
+ export function consumeReservedSlug(slug, cwd) {
231
+ reservedSlugs.delete(reservationKey(normalizeSlug(slug), cwd));
194
232
  }
195
233
  /**
196
234
  * Test-only escape hatch — clears the in-process reserved set + lock map.
@@ -252,7 +290,7 @@ export async function reserveSlug(kind, slug, opts) {
252
290
  try {
253
291
  // Same-process check first — another in-flight reservation already
254
292
  // claimed this slug.
255
- if (reservedSlugs.has(normalizedSlug)) {
293
+ if (reservedSlugs.has(reservationKey(normalizedSlug, opts?.cwd))) {
256
294
  const db = await getDb(opts?.cwd);
257
295
  const suggestions = await deriveSlugSuggestionsForAllocator(db, normalizedSlug);
258
296
  return { ok: false, code: 'E_SLUG_RESERVED', suggestions };
@@ -271,7 +309,7 @@ export async function reserveSlug(kind, slug, opts) {
271
309
  return { ok: false, code: 'E_SLUG_RESERVED', suggestions };
272
310
  }
273
311
  // Free — reserve it for the imminent `put`.
274
- reservedSlugs.add(normalizedSlug);
312
+ reservedSlugs.add(reservationKey(normalizedSlug, opts?.cwd));
275
313
  return { ok: true, normalizedSlug };
276
314
  }
277
315
  finally {
@@ -286,8 +324,8 @@ export async function reserveSlug(kind, slug, opts) {
286
324
  *
287
325
  * @param slug - The slug as passed to `reserveSlug` (will be re-normalised).
288
326
  */
289
- export function releaseReservedSlug(slug) {
290
- reservedSlugs.delete(normalizeSlug(slug));
327
+ export function releaseReservedSlug(slug, cwd) {
328
+ reservedSlugs.delete(reservationKey(normalizeSlug(slug), cwd));
291
329
  }
292
330
  /**
293
331
  * Dispatch entry-point wrapper around {@link reserveSlug} conforming to the
@@ -1 +1 @@
1
- {"version":3,"file":"slug-allocator.js","sourceRoot":"","sources":["../../src/docs/slug-allocator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slug-allocator.js","sourceRoot":"","sources":["../../src/docs/slug-allocator.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,8 @@ export { classifyLegacyBackup, DEFAULT_HARD_RETENTION_DAYS, DEFAULT_SOFT_RETENTI
25
25
  export type { PragmaSsot, PragmaSsotEntry } from './pragma-ssot.js';
26
26
  export { loadPragmaSsot, normalisePragmaValue, PRAGMA_VALUE_NORMALISERS, } from './pragma-ssot.js';
27
27
  export { auditSagaHierarchy } from './saga-audit.js';
28
+ export type { SupersededStoreEntry, SupersededStoreScanResult } from './superseded-store.js';
29
+ export { LIVE_STORE_FILENAME, scanSupersededStores } from './superseded-store.js';
28
30
  export type { PruneOptions, ScanOptions } from './worktree-orphans.js';
29
31
  export { auditWorktreeOrphansComprehensive, pruneWorktreeOrphans, scanWorktreeOrphans, } from './worktree-orphans.js';
30
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,2BAA2B,EAC3B,8BAA8B,EAC9B,aAAa,EACb,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EACL,iCAAiC,EACjC,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,2BAA2B,EAC3B,8BAA8B,EAC9B,aAAa,EACb,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,YAAY,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClF,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EACL,iCAAiC,EACjC,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
@@ -28,5 +28,6 @@ export { renderInvariantAuditLines } from './invariant-audit-render.js';
28
28
  export { classifyLegacyBackup, DEFAULT_HARD_RETENTION_DAYS, DEFAULT_SOFT_RETENTION_DAYS, isLegacyBackupFilename, legacyBackupSearchRoots, pruneLegacyBackups, recommendForBackup, scanLegacyBackups, } from './legacy-backups.js';
29
29
  export { loadPragmaSsot, normalisePragmaValue, PRAGMA_VALUE_NORMALISERS, } from './pragma-ssot.js';
30
30
  export { auditSagaHierarchy } from './saga-audit.js';
31
+ export { LIVE_STORE_FILENAME, scanSupersededStores } from './superseded-store.js';
31
32
  export { auditWorktreeOrphansComprehensive, pruneWorktreeOrphans, scanWorktreeOrphans, } from './worktree-orphans.js';
32
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,kFAAkF;AAClF,kFAAkF;AAClF,kEAAkE;AAClE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,2BAA2B,EAC3B,8BAA8B,EAC9B,aAAa,EACb,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,+EAA+E;AAC/E,8CAA8C;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAGxE,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EACL,iCAAiC,EACjC,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doctor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,kFAAkF;AAClF,kFAAkF;AAClF,kEAAkE;AAClE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,2BAA2B,EAC3B,8BAA8B,EAC9B,aAAa,EACb,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,+EAA+E;AAC/E,8CAA8C;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAGxE,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElF,OAAO,EACL,iCAAiC,EACjC,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Detect pre-dual-scope store files left on disk under their old LIVE names.
3
+ *
4
+ * ## The failure this exists to stop (T12095)
5
+ *
6
+ * Before the E6 dual-scope migration (ADR-068), a project's task database was
7
+ * `.cleo/tasks.db`. Afterwards it is `.cleo/cleo.db`, and task rows live in
8
+ * PREFIXED tables (`tasks_tasks`, `tasks_sessions`, …) rather than bare `tasks`.
9
+ * The migration does not delete the old file, so a migrated project has
10
+ *
11
+ * .cleo/cleo.db 60 MB modified today ← the real store
12
+ * .cleo/tasks.db 408 KB modified in June ← superseded, still named
13
+ * as though it were live
14
+ *
15
+ * Three separate things then point an agent at the wrong file:
16
+ *
17
+ * 1. The old name is the one every doc, ADR-013 §9 note and `cleo restore
18
+ * backup --file tasks.db` invocation still says out loud.
19
+ * 2. Snapshots are written as `.cleo/backups/sqlite/tasks-<ts>.db` even though
20
+ * they are snapshots of `cleo.db`. So the superseded 408 KB file sits beside
21
+ * 58 MB files bearing its own name — which reads unmistakably as truncation.
22
+ * 3. `cleo.db` ALSO contains a bare, empty `tasks` table next to the populated
23
+ * `tasks_tasks`. Any direct SQL probe finds the empty decoy.
24
+ *
25
+ * Measured on 2026-08-09: an agent in a healthy project with 1,123 tasks looped
26
+ * on "the current tasks.db is 417KB which is much smaller than the backups
27
+ * (58MB) — maybe it was rotated/rebuilt", then began theorising that the real
28
+ * store might be `llmtxt.db`. Nothing was wrong with the data. The layout
29
+ * manufactured a corruption signal, and the agent believed it over the CLI.
30
+ *
31
+ * This check names the file, proves which store is authoritative by counting
32
+ * rows in both, and says what to do — so the question is answered in one call
33
+ * instead of becoming an investigation.
34
+ *
35
+ * @task T12095
36
+ * @see ADR-068 — dual-scope DB chokepoint
37
+ */
38
+ /**
39
+ * A store file that has been superseded by `cleo.db` but still exists under the
40
+ * name that used to mean "the live database".
41
+ */
42
+ export interface SupersededStoreEntry {
43
+ /** Absolute path of the superseded file. */
44
+ readonly path: string;
45
+ /** Bare filename, e.g. `tasks.db`. */
46
+ readonly name: string;
47
+ /** Size in bytes. */
48
+ readonly sizeBytes: number;
49
+ /** Last modification time, ISO 8601. */
50
+ readonly modifiedAt: string;
51
+ /**
52
+ * Rows found in the superseded file's own task table, if it has one.
53
+ * `null` when the file has no such table or could not be read.
54
+ */
55
+ readonly rowsInSuperseded: number | null;
56
+ /** Rows found in the LIVE store's prefixed table. */
57
+ readonly rowsInLive: number | null;
58
+ /**
59
+ * True when the live store demonstrably holds the data and this file does
60
+ * not — i.e. it is safe to archive. False keeps the entry but withholds the
61
+ * recommendation, because "delete the other database" must never be advised
62
+ * on a guess.
63
+ */
64
+ readonly safeToArchive: boolean;
65
+ /** Human-readable justification, suitable for printing verbatim. */
66
+ readonly reason: string;
67
+ }
68
+ /** Result of {@link scanSupersededStores}. */
69
+ export interface SupersededStoreScanResult {
70
+ /** Absolute project root that was scanned. */
71
+ readonly projectRoot: string;
72
+ /** Absolute path of the live dual-scope store. */
73
+ readonly liveStorePath: string;
74
+ /** Whether the live store exists — when false, nothing is superseded. */
75
+ readonly liveStoreExists: boolean;
76
+ /** Superseded files found, newest-modified first. */
77
+ readonly entries: readonly SupersededStoreEntry[];
78
+ }
79
+ /** The dual-scope store filename (ADR-068). */
80
+ export declare const LIVE_STORE_FILENAME = "cleo.db";
81
+ /**
82
+ * Scan a project for store files superseded by `cleo.db`.
83
+ *
84
+ * Read-only — deletes nothing and opens nothing for write. The caller decides
85
+ * what to do with the recommendation.
86
+ *
87
+ * @param projectRoot - absolute path to the project root.
88
+ * @returns the survey; `entries` is empty for a project that never migrated or
89
+ * that has already been tidied.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * const scan = scanSupersededStores('/mnt/projects/PepsVida');
94
+ * for (const e of scan.entries) console.log(e.name, e.reason);
95
+ * // tasks.db superseded by cleo.db: 0 rows here vs 1123 in cleo.db#tasks_tasks …
96
+ * ```
97
+ *
98
+ * @task T12095
99
+ */
100
+ export declare function scanSupersededStores(projectRoot: string): SupersededStoreScanResult;
101
+ //# sourceMappingURL=superseded-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superseded-store.d.ts","sourceRoot":"","sources":["../../src/doctor/superseded-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAMH;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,8CAA8C;AAC9C,MAAM,WAAW,yBAAyB;IACxC,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACnD;AAgBD,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAiC7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,yBAAyB,CAyDnF"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Detect pre-dual-scope store files left on disk under their old LIVE names.
3
+ *
4
+ * ## The failure this exists to stop (T12095)
5
+ *
6
+ * Before the E6 dual-scope migration (ADR-068), a project's task database was
7
+ * `.cleo/tasks.db`. Afterwards it is `.cleo/cleo.db`, and task rows live in
8
+ * PREFIXED tables (`tasks_tasks`, `tasks_sessions`, …) rather than bare `tasks`.
9
+ * The migration does not delete the old file, so a migrated project has
10
+ *
11
+ * .cleo/cleo.db 60 MB modified today ← the real store
12
+ * .cleo/tasks.db 408 KB modified in June ← superseded, still named
13
+ * as though it were live
14
+ *
15
+ * Three separate things then point an agent at the wrong file:
16
+ *
17
+ * 1. The old name is the one every doc, ADR-013 §9 note and `cleo restore
18
+ * backup --file tasks.db` invocation still says out loud.
19
+ * 2. Snapshots are written as `.cleo/backups/sqlite/tasks-<ts>.db` even though
20
+ * they are snapshots of `cleo.db`. So the superseded 408 KB file sits beside
21
+ * 58 MB files bearing its own name — which reads unmistakably as truncation.
22
+ * 3. `cleo.db` ALSO contains a bare, empty `tasks` table next to the populated
23
+ * `tasks_tasks`. Any direct SQL probe finds the empty decoy.
24
+ *
25
+ * Measured on 2026-08-09: an agent in a healthy project with 1,123 tasks looped
26
+ * on "the current tasks.db is 417KB which is much smaller than the backups
27
+ * (58MB) — maybe it was rotated/rebuilt", then began theorising that the real
28
+ * store might be `llmtxt.db`. Nothing was wrong with the data. The layout
29
+ * manufactured a corruption signal, and the agent believed it over the CLI.
30
+ *
31
+ * This check names the file, proves which store is authoritative by counting
32
+ * rows in both, and says what to do — so the question is answered in one call
33
+ * instead of becoming an investigation.
34
+ *
35
+ * @task T12095
36
+ * @see ADR-068 — dual-scope DB chokepoint
37
+ */
38
+ import { existsSync, statSync } from 'node:fs';
39
+ import { join } from 'node:path';
40
+ import { DatabaseSync } from 'node:sqlite';
41
+ /**
42
+ * Legacy store filenames paired with the live table that replaced their
43
+ * contents. The bare table name is the pre-migration one; the prefixed name is
44
+ * where the rows live now.
45
+ */
46
+ const SUPERSEDED_STORES = [
47
+ { file: 'tasks.db', bareTable: 'tasks', liveTable: 'tasks_tasks' },
48
+ { file: 'brain.db', bareTable: 'brain_observations', liveTable: 'brain_observations' },
49
+ ];
50
+ /** The dual-scope store filename (ADR-068). */
51
+ export const LIVE_STORE_FILENAME = 'cleo.db';
52
+ /**
53
+ * Count rows in a table, or `null` when the table or file is unreadable.
54
+ *
55
+ * Read-only and never throws: a superseded file may be truncated, locked, or
56
+ * not even SQLite, and none of that should break the survey.
57
+ */
58
+ function countRows(dbPath, table) {
59
+ if (!existsSync(dbPath))
60
+ return null;
61
+ let db = null;
62
+ try {
63
+ // db-open-allowed: read-only forensic probe of a SUPERSEDED file no accessor owns — routing it through the chokepoint would register a live handle for the very store we are proving is dead
64
+ db = new DatabaseSync(dbPath, { readOnly: true }); // db-open-allowed: read-only probe of a superseded, unowned file
65
+ const exists = db
66
+ .prepare("SELECT 1 AS ok FROM sqlite_master WHERE type='table' AND name = ?")
67
+ .get(table);
68
+ if (exists === undefined)
69
+ return null;
70
+ const row = db.prepare(`SELECT COUNT(*) AS c FROM "${table}"`).get();
71
+ return row?.c ?? null;
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ finally {
77
+ try {
78
+ db?.close();
79
+ }
80
+ catch {
81
+ /* already closed or never opened */
82
+ }
83
+ }
84
+ }
85
+ /**
86
+ * Scan a project for store files superseded by `cleo.db`.
87
+ *
88
+ * Read-only — deletes nothing and opens nothing for write. The caller decides
89
+ * what to do with the recommendation.
90
+ *
91
+ * @param projectRoot - absolute path to the project root.
92
+ * @returns the survey; `entries` is empty for a project that never migrated or
93
+ * that has already been tidied.
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * const scan = scanSupersededStores('/mnt/projects/PepsVida');
98
+ * for (const e of scan.entries) console.log(e.name, e.reason);
99
+ * // tasks.db superseded by cleo.db: 0 rows here vs 1123 in cleo.db#tasks_tasks …
100
+ * ```
101
+ *
102
+ * @task T12095
103
+ */
104
+ export function scanSupersededStores(projectRoot) {
105
+ const liveStorePath = join(projectRoot, '.cleo', LIVE_STORE_FILENAME);
106
+ const liveStoreExists = existsSync(liveStorePath);
107
+ if (!liveStoreExists) {
108
+ // No dual-scope store means nothing has been superseded — a pre-migration
109
+ // project's `tasks.db` IS its live database and must not be flagged.
110
+ return { projectRoot, liveStorePath, liveStoreExists: false, entries: [] };
111
+ }
112
+ const liveMtimeMs = statSync(liveStorePath).mtimeMs;
113
+ const entries = [];
114
+ for (const { file, bareTable, liveTable } of SUPERSEDED_STORES) {
115
+ const path = join(projectRoot, '.cleo', file);
116
+ if (!existsSync(path))
117
+ continue;
118
+ const stat = statSync(path);
119
+ // A file NEWER than cleo.db is not obviously dead — say nothing rather than
120
+ // risk advising removal of something still being written.
121
+ if (stat.mtimeMs >= liveMtimeMs)
122
+ continue;
123
+ const rowsInSuperseded = countRows(path, bareTable);
124
+ const rowsInLive = countRows(liveStorePath, liveTable);
125
+ // `rowsInSuperseded === 0` must be EXPLICIT, never `?? 0`. `null` means the
126
+ // file could not be read — corrupt, locked, truncated, or not SQLite — and
127
+ // "I could not read it" is not "it is empty". Coalescing the two would
128
+ // recommend archiving precisely the file whose contents are unknown, which
129
+ // is the one case where being wrong loses data.
130
+ const safeToArchive = (rowsInLive ?? 0) > 0 && rowsInSuperseded === 0;
131
+ const reason = safeToArchive
132
+ ? `superseded by ${LIVE_STORE_FILENAME}: ${rowsInSuperseded ?? 0} rows in ${file}#${bareTable} ` +
133
+ `vs ${rowsInLive} in ${LIVE_STORE_FILENAME}#${liveTable}. Last written ` +
134
+ `${stat.mtime.toISOString().slice(0, 10)}, while ${LIVE_STORE_FILENAME} was written ` +
135
+ `${new Date(liveMtimeMs).toISOString().slice(0, 10)}. Its name is the one the docs and ` +
136
+ `\`cleo restore backup --file tasks.db\` still say, and snapshots are named ` +
137
+ `\`tasks-<ts>.db\` even though they snapshot ${LIVE_STORE_FILENAME} — so this file reads ` +
138
+ `as a truncated live DB when it is simply the pre-migration one.`
139
+ : `predates ${LIVE_STORE_FILENAME} but still holds ${rowsInSuperseded ?? 'an unknown number of'} ` +
140
+ `rows in ${bareTable} (live ${liveTable}: ${rowsInLive ?? 'unreadable'}). NOT recommended for ` +
141
+ `removal — reconcile the contents first.`;
142
+ entries.push({
143
+ path,
144
+ name: file,
145
+ sizeBytes: stat.size,
146
+ modifiedAt: stat.mtime.toISOString(),
147
+ rowsInSuperseded,
148
+ rowsInLive,
149
+ safeToArchive,
150
+ reason,
151
+ });
152
+ }
153
+ entries.sort((a, b) => Date.parse(b.modifiedAt) - Date.parse(a.modifiedAt));
154
+ return { projectRoot, liveStorePath, liveStoreExists: true, entries };
155
+ }
156
+ //# sourceMappingURL=superseded-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superseded-store.js","sourceRoot":"","sources":["../../src/doctor/superseded-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/llm/conversation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAkBnF;AAiFD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,SAAS,EAAE,MAAM,EACjB,cAAc,UAAO,GACpB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkChC"}
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/llm/conversation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwBH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAkBnF;AAiFD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,SAAS,EAAE,MAAM,EACjB,cAAc,UAAO,GACpB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkChC"}
@@ -8,11 +8,22 @@
8
8
  * @epic T1386
9
9
  */
10
10
  import { getEncoding } from 'js-tiktoken';
11
- const _enc = getEncoding('cl100k_base');
11
+ /**
12
+ * Lazily-built cl100k_base encoder.
13
+ *
14
+ * T12076: this was `const _enc = getEncoding('cl100k_base')` at MODULE SCOPE.
15
+ * `getEncoding` parses the BPE vocabulary, measured at 156 ms, and this module is
16
+ * reachable from the `@cleocode/core` barrel — so every `cleo` invocation built a
17
+ * tokenizer table before doing anything, including commands that never count a
18
+ * token. Deferring to first use keeps the surrounding API synchronous (the static
19
+ * import stays; only the table build moves) while removing the cost from startup.
20
+ */
21
+ let _enc = null;
12
22
  /**
13
23
  * Estimate token count for a string using tiktoken cl100k_base.
14
24
  */
15
25
  function estimateTokens(text) {
26
+ _enc ??= getEncoding('cl100k_base');
16
27
  return _enc.encode(text).length;
17
28
  }
18
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/llm/conversation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/llm/conversation.ts"],"names":[],"mappings":"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"}