@rasensio/aidlc 1.11.0 → 1.13.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 (69) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +3 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/cost.d.ts.map +1 -1
  5. package/dist/commands/cost.js +57 -9
  6. package/dist/commands/cost.js.map +1 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +14 -0
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/update.d.ts.map +1 -1
  11. package/dist/commands/update.js +23 -37
  12. package/dist/commands/update.js.map +1 -1
  13. package/dist/compile/roadmap-skill.d.ts +76 -0
  14. package/dist/compile/roadmap-skill.d.ts.map +1 -0
  15. package/dist/compile/roadmap-skill.js +132 -0
  16. package/dist/compile/roadmap-skill.js.map +1 -0
  17. package/dist/core/version.d.ts +39 -0
  18. package/dist/core/version.d.ts.map +1 -0
  19. package/dist/core/version.js +69 -0
  20. package/dist/core/version.js.map +1 -0
  21. package/dist/cost/hooks/claude-code.d.ts +12 -0
  22. package/dist/cost/hooks/claude-code.d.ts.map +1 -1
  23. package/dist/cost/hooks/claude-code.js +8 -4
  24. package/dist/cost/hooks/claude-code.js.map +1 -1
  25. package/dist/cost/hooks/kiro.d.ts.map +1 -1
  26. package/dist/cost/hooks/kiro.js +6 -4
  27. package/dist/cost/hooks/kiro.js.map +1 -1
  28. package/dist/cost/hooks/shim.d.ts +21 -0
  29. package/dist/cost/hooks/shim.d.ts.map +1 -1
  30. package/dist/cost/hooks/shim.js +48 -1
  31. package/dist/cost/hooks/shim.js.map +1 -1
  32. package/dist/cost/ledger.d.ts +14 -0
  33. package/dist/cost/ledger.d.ts.map +1 -1
  34. package/dist/cost/ledger.js +26 -1
  35. package/dist/cost/ledger.js.map +1 -1
  36. package/dist/cost/sync.d.ts +8 -0
  37. package/dist/cost/sync.d.ts.map +1 -1
  38. package/dist/cost/sync.js +377 -9
  39. package/dist/cost/sync.js.map +1 -1
  40. package/dist/doctor/migrations/index.d.ts.map +1 -1
  41. package/dist/doctor/migrations/index.js +12 -0
  42. package/dist/doctor/migrations/index.js.map +1 -1
  43. package/dist/doctor/migrations/missing-cost-shim.d.ts +40 -0
  44. package/dist/doctor/migrations/missing-cost-shim.d.ts.map +1 -0
  45. package/dist/doctor/migrations/missing-cost-shim.js +92 -0
  46. package/dist/doctor/migrations/missing-cost-shim.js.map +1 -0
  47. package/dist/doctor/migrations/roadmap-layout.d.ts +73 -0
  48. package/dist/doctor/migrations/roadmap-layout.d.ts.map +1 -0
  49. package/dist/doctor/migrations/roadmap-layout.js +281 -0
  50. package/dist/doctor/migrations/roadmap-layout.js.map +1 -0
  51. package/dist/doctor/migrations/stale-idea-skill.d.ts +28 -0
  52. package/dist/doctor/migrations/stale-idea-skill.d.ts.map +1 -0
  53. package/dist/doctor/migrations/stale-idea-skill.js +111 -0
  54. package/dist/doctor/migrations/stale-idea-skill.js.map +1 -0
  55. package/dist/events/event-bus.d.ts.map +1 -1
  56. package/dist/events/event-bus.js +33 -0
  57. package/dist/events/event-bus.js.map +1 -1
  58. package/dist/events/shipped-actions.d.ts.map +1 -1
  59. package/dist/events/shipped-actions.js +10 -0
  60. package/dist/events/shipped-actions.js.map +1 -1
  61. package/dist/metrics/report.d.ts +30 -2
  62. package/dist/metrics/report.d.ts.map +1 -1
  63. package/dist/metrics/report.js +18 -2
  64. package/dist/metrics/report.js.map +1 -1
  65. package/dist/roadmap/paths.d.ts +96 -0
  66. package/dist/roadmap/paths.d.ts.map +1 -0
  67. package/dist/roadmap/paths.js +194 -0
  68. package/dist/roadmap/paths.js.map +1 -0
  69. package/package.json +2 -2
@@ -15,6 +15,14 @@ export interface SyncReport {
15
15
  attributed: number;
16
16
  skipped: string[];
17
17
  unattributed: number;
18
+ /** Records captured for the first time from local provider records (FR4.5). */
19
+ backfilled: number;
20
+ /** Records moved out of unattributed.ndjson into an instance ledger (FR4.6). */
21
+ recovered: number;
22
+ /** Records left unattributed because several instances could claim them. */
23
+ stillAmbiguous: number;
24
+ /** Records left unattributed because no claim window covers them. */
25
+ stillOrphaned: number;
18
26
  }
19
27
  /**
20
28
  * Reconcile one or all instances. Streams platform records session by
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/cost/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAAgD,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAOzG,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAkBD;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,mBAAmB,EAAE,MAAM,EAC3B,GAAG,GAAE,WAA6B,GACjC,OAAO,CAAC,UAAU,CAAC,CAyJrB"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/cost/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,EAAgD,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAOzG,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;CACvB;AAgED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,mBAAmB,EAAE,MAAM,EAC3B,GAAG,GAAE,WAA6B,GACjC,OAAO,CAAC,UAAU,CAAC,CA2LrB"}
package/dist/cost/sync.js CHANGED
@@ -10,9 +10,11 @@
10
10
  *
11
11
  * Design: design.md §4.4
12
12
  */
13
- import { existsSync, readdirSync, statSync } from 'node:fs';
14
- import { join } from 'node:path';
15
- import { readEntries, appendEntry, ledgerPath, unattributedPath } from './ledger.js';
13
+ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
14
+ import { execFileSync } from 'node:child_process';
15
+ import { join, resolve } from 'node:path';
16
+ import { readEntries, appendEntry, ledgerPath, unattributedPath, rewriteLedger } from './ledger.js';
17
+ import { SESSION_ID_RE } from './types.js';
16
18
  import { sessionsPath, readSessionEvents, resolveIntervals } from './sessions.js';
17
19
  import { getProvider, allProviders } from './providers/provider.js';
18
20
  import { registerBuiltinProviders } from './providers/index.js';
@@ -20,6 +22,44 @@ import { UNKNOWN_AGENT } from './agent.js';
20
22
  import { transcriptRoot } from './providers/claude-code.js';
21
23
  import { phaseWindows } from './recorder.js';
22
24
  import { logCapture } from './recorder.js';
25
+ /**
26
+ * Attribute an instant to at most one instance.
27
+ *
28
+ * Two rules, in order, and the order is the whole point:
29
+ *
30
+ * 1. **By session id**, when any claim interval carries this record's session id.
31
+ * Precise, and what capture itself does.
32
+ * 2. **By time alone**, when no interval names that session. This is the case that
33
+ * stranded $1,605.60 in this repo: `SessionStart` writes the active-session
34
+ * stash, the shim was missing so it never ran, `resolveCurrentSession()` found
35
+ * nothing, and `aidlc claim` fell back to a synthetic `agent-<uuid>`. Cost
36
+ * records carry the *real* platform id, so an id-equality join can never match
37
+ * them — while the claim windows and the coverage windows line up exactly.
38
+ *
39
+ * Strict single-candidate in both modes: several instances means the record cannot
40
+ * be assigned without guessing which one was really doing the work, and guessing
41
+ * is how a cost report becomes fiction.
42
+ */
43
+ function instanceForInstant(at, sessionId, perInstance) {
44
+ const contains = (iv) => at >= Date.parse(iv.from) && at <= Date.parse(iv.to);
45
+ if (sessionId !== null) {
46
+ const byId = perInstance.filter(({ intervals }) => intervals.some((iv) => iv.session_id === sessionId && contains(iv)));
47
+ if (byId.length === 1)
48
+ return { instance: byId[0].instance, ambiguous: false };
49
+ if (byId.length > 1)
50
+ return { instance: null, ambiguous: true };
51
+ }
52
+ const byTime = perInstance.filter(({ intervals }) => intervals.some(contains));
53
+ if (byTime.length === 1)
54
+ return { instance: byTime[0].instance, ambiguous: false };
55
+ return { instance: null, ambiguous: byTime.length > 1 };
56
+ }
57
+ /** Midpoint of a coverage window — a single instant, which is what attribution takes. */
58
+ function coverageInstant(entry) {
59
+ const from = Date.parse(entry.coverage.from);
60
+ const to = Date.parse(entry.coverage.to);
61
+ return Math.floor((from + to) / 2);
62
+ }
23
63
  function coveredWindows(entries, sessionId, minRank) {
24
64
  const rank = { metered: 3, reconciled: 2, estimated: 1, unknown: 0 };
25
65
  return entries
@@ -34,18 +74,36 @@ function overlapsAny(at, windows) {
34
74
  * session; reports everything it skipped and why (FR4.3).
35
75
  */
36
76
  export async function syncCosts(projectRoot, instanceFilter, claimTimeoutMinutes, env = { projectRoot }) {
37
- const report = { attributed: 0, skipped: [], unattributed: 0 };
77
+ const report = {
78
+ attributed: 0,
79
+ skipped: [],
80
+ unattributed: 0,
81
+ backfilled: 0,
82
+ recovered: 0,
83
+ stillAmbiguous: 0,
84
+ stillOrphaned: 0,
85
+ };
38
86
  const stateDir = join(projectRoot, '.aidlc', 'state');
39
87
  if (!existsSync(stateDir))
40
88
  return report;
41
- const instances = readdirSync(stateDir, { withFileTypes: true })
89
+ const now = new Date();
90
+ const allInstances = readdirSync(stateDir, { withFileTypes: true })
42
91
  .filter((d) => d.isDirectory())
43
- .map((d) => d.name)
44
- .filter((n) => instanceFilter === null || n === instanceFilter);
45
- const perInstance = instances.map((instance) => ({
92
+ .map((d) => d.name);
93
+ const instances = allInstances.filter((n) => instanceFilter === null || n === instanceFilter);
94
+ const intervalsFor = (instance) => ({
46
95
  instance,
47
96
  intervals: resolveIntervals(readSessionEvents(sessionsPath(projectRoot, instance)), claimTimeoutMinutes),
48
- }));
97
+ });
98
+ const perInstance = instances.map(intervalsFor);
99
+ /*
100
+ * Candidacy is always evaluated against EVERY instance, even under
101
+ * `--instance`. The single-candidate rule is only a safety property if the
102
+ * candidate set is complete: narrowed to one instance, a record that two
103
+ * instances could claim would look unambiguous and be attributed to the one
104
+ * that happens to be in scope. The filter gates the write, not the decision.
105
+ */
106
+ const allPerInstance = instanceFilter === null ? perInstance : allInstances.map(intervalsFor);
49
107
  // Gather every session id seen anywhere.
50
108
  const sessions = new Map();
51
109
  for (const { intervals } of perInstance) {
@@ -163,8 +221,318 @@ export async function syncCosts(projectRoot, instanceFilter, claimTimeoutMinutes
163
221
  }
164
222
  }
165
223
  }
224
+ // Capture what was never recorded, then attribute what was recorded but never
225
+ // assigned. Backfill first: it appends to unattributed.ndjson, and recovery is
226
+ // what drains it, so running them in this order recovers the new records in the
227
+ // same pass instead of needing a second one.
228
+ await backfillFromRecords(projectRoot, allPerInstance, alreadyRecorded(projectRoot, allInstances), env, now, report);
229
+ recoverUnattributed(projectRoot, allPerInstance, instanceFilter, now, report);
166
230
  return report;
167
231
  }
232
+ function alreadyRecorded(projectRoot, instances) {
233
+ const cursors = new Set();
234
+ const windows = [];
235
+ const paths = [...instances.map((i) => ledgerPath(projectRoot, i)), unattributedPath(projectRoot)];
236
+ const RANK = { metered: 3, reconciled: 2, estimated: 1, unknown: 0 };
237
+ for (const p of paths) {
238
+ for (const e of readEntries(p)) {
239
+ if (e.cursor !== null)
240
+ cursors.add(e.cursor);
241
+ if (e.units === null)
242
+ continue;
243
+ if ((RANK[e.fidelity] ?? 0) < 2)
244
+ continue;
245
+ windows.push({ from: Date.parse(e.coverage.from), to: Date.parse(e.coverage.to) });
246
+ }
247
+ }
248
+ windows.sort((a, b) => a.from - b.from);
249
+ const covered = [];
250
+ for (const w of windows) {
251
+ const last = covered[covered.length - 1];
252
+ if (last && w.from <= last.to)
253
+ last.to = Math.max(last.to, w.to);
254
+ else
255
+ covered.push({ ...w });
256
+ }
257
+ return { cursors, covered };
258
+ }
259
+ /**
260
+ * The `cwd` a transcript was recorded in, read from its own contents.
261
+ *
262
+ * The directory name under `~/.claude/projects` is the cwd with separators
263
+ * flattened to dashes, which is lossy — a real directory containing a dash is
264
+ * indistinguishable from a separator, so the name cannot be reversed safely. The
265
+ * transcript records its cwd verbatim, so ask it.
266
+ */
267
+ function transcriptCwd(path) {
268
+ let raw;
269
+ try {
270
+ raw = readFileSync(path, 'utf8');
271
+ }
272
+ catch {
273
+ return null;
274
+ }
275
+ let scanned = 0;
276
+ for (const line of raw.split('\n')) {
277
+ if (line.trim() === '')
278
+ continue;
279
+ if (++scanned > 50)
280
+ break;
281
+ try {
282
+ const parsed = JSON.parse(line);
283
+ if (typeof parsed.cwd === 'string' && parsed.cwd !== '')
284
+ return parsed.cwd;
285
+ }
286
+ catch {
287
+ continue;
288
+ }
289
+ }
290
+ return null;
291
+ }
292
+ /**
293
+ * A directory's git common dir, as an absolute path — the identity every worktree
294
+ * of one repository shares.
295
+ *
296
+ * Deliberately NOT `sessions.ts:repoIdentity`, which builds its answer with
297
+ * `join(cwd, out)`. `git rev-parse --git-common-dir` answers relatively (`.git`)
298
+ * from a primary checkout and absolutely from a linked worktree, and `join` on an
299
+ * absolute second argument concatenates instead of replacing — so the same
300
+ * repository gets two different identities depending on which checkout asked.
301
+ *
302
+ * `repoIdentity` is left alone on purpose. It backs `resolveCurrentSession`, whose
303
+ * single-live-candidate rule *wants* a worktree session and a primary-checkout
304
+ * session to look like different workspaces; making them equal there would turn
305
+ * two concurrent sessions into an ambiguous pair and push both back onto synthetic
306
+ * `agent-<uuid>` ids. Same expression, opposite requirement — so it gets its own
307
+ * function rather than a shared "fix".
308
+ */
309
+ function repoCommonDir(cwd) {
310
+ try {
311
+ const out = execFileSync('git', ['rev-parse', '--git-common-dir'], {
312
+ cwd,
313
+ encoding: 'utf8',
314
+ stdio: ['ignore', 'pipe', 'ignore'],
315
+ }).trim();
316
+ return resolve(cwd, out);
317
+ }
318
+ catch {
319
+ return null;
320
+ }
321
+ }
322
+ /**
323
+ * Local claude-code transcripts **belonging to this repository**.
324
+ *
325
+ * The scoping is load-bearing, not defensive. `transcriptRoot` is a single
326
+ * directory holding every project this machine has ever worked on — 12 of them
327
+ * here, including unrelated repositories. Walking all of them and attributing by
328
+ * time would charge this project for work done elsewhere whenever an unrelated
329
+ * session happened to overlap a claim window. That is a worse failure than the one
330
+ * being fixed: a wrong number is harder to notice than a missing one.
331
+ *
332
+ * Identity is the git common dir, so every worktree of this repo counts as this
333
+ * repo and nothing else does. A transcript whose cwd no longer exists is skipped —
334
+ * under-recovering is the safe direction.
335
+ */
336
+ function projectClaudeCodeRecords(projectRoot, env) {
337
+ const root = transcriptRoot(env);
338
+ if (!existsSync(root))
339
+ return [];
340
+ const here = repoCommonDir(projectRoot);
341
+ const identityCache = new Map();
342
+ const identityOf = (cwd) => {
343
+ if (!identityCache.has(cwd))
344
+ identityCache.set(cwd, repoCommonDir(cwd));
345
+ return identityCache.get(cwd) ?? null;
346
+ };
347
+ const out = [];
348
+ for (const dir of readdirSync(root, { withFileTypes: true })) {
349
+ if (!dir.isDirectory())
350
+ continue;
351
+ for (const f of readdirSync(join(root, dir.name))) {
352
+ if (!f.endsWith('.jsonl'))
353
+ continue;
354
+ const sessionId = f.slice(0, -'.jsonl'.length);
355
+ if (!SESSION_ID_RE.test(sessionId))
356
+ continue;
357
+ const path = join(root, dir.name, f);
358
+ const cwd = transcriptCwd(path);
359
+ if (cwd === null)
360
+ continue;
361
+ const theirs = identityOf(cwd);
362
+ const mine = here !== null && theirs !== null ? theirs === here : cwd === projectRoot;
363
+ if (!mine)
364
+ continue;
365
+ out.push({ sessionId, path });
366
+ }
367
+ }
368
+ return out;
369
+ }
370
+ /**
371
+ * Capture usage that was never recorded at all, straight from local provider
372
+ * records (FR4.5).
373
+ *
374
+ * The pass above can only reach a transcript it can *locate from a session id in
375
+ * sessions.ndjson*. Usage from a session that never claimed — or that claimed
376
+ * under a synthetic `agent-<uuid>` while the transcript is named by the real
377
+ * platform id — is invisible to it. That is not an edge case: it is how $535.54
378
+ * went unrecorded during the 41-hour blackout while every one of the 42 known
379
+ * sessions was reported as "skipped".
380
+ *
381
+ * So this walks the records themselves and lets each usage segment find its own
382
+ * instance. `known` is keyed on provider cursor, which is a transcript message
383
+ * uuid, so re-running is a no-op rather than a double count.
384
+ */
385
+ async function backfillFromRecords(projectRoot, perInstance, known, env, now, report) {
386
+ registerBuiltinProviders();
387
+ const provider = getProvider('claude-code');
388
+ if (!provider)
389
+ return;
390
+ for (const { sessionId, path } of projectClaudeCodeRecords(projectRoot, env)) {
391
+ let segments;
392
+ try {
393
+ segments = await provider.extract({ provider: provider.name, path }, null, env);
394
+ }
395
+ catch {
396
+ logCapture(projectRoot, 'sync-backfill', 'extract-failed');
397
+ continue;
398
+ }
399
+ for (const seg of segments) {
400
+ if (seg.cursor !== null && known.cursors.has(seg.cursor))
401
+ continue;
402
+ const at = Date.parse(seg.at);
403
+ // Already inside a reconciled-or-better coverage window: the usage is
404
+ // recorded, just as part of a merged bucket naming a different cursor.
405
+ if (overlapsAny(at, known.covered))
406
+ continue;
407
+ const { instance } = instanceForInstant(at, sessionId, perInstance);
408
+ const phase = instance !== null
409
+ ? (phaseWindows(projectRoot, instance, 'implementation').find((w) => at >= w.from && at < w.to)?.phase ?? null)
410
+ : null;
411
+ const entry = {
412
+ timestamp: now.toISOString(),
413
+ session_id: sessionId,
414
+ phase,
415
+ provider: provider.name,
416
+ fidelity: 'reconciled',
417
+ coverage: { from: seg.at, to: seg.at },
418
+ cursor: seg.cursor,
419
+ units: seg.units,
420
+ };
421
+ const targetPath = instance !== null ? ledgerPath(projectRoot, instance) : unattributedPath(projectRoot);
422
+ try {
423
+ appendEntry(targetPath, entry);
424
+ if (seg.cursor !== null)
425
+ known.cursors.add(seg.cursor);
426
+ report.backfilled++;
427
+ if (instance !== null)
428
+ report.attributed++;
429
+ else
430
+ report.unattributed++;
431
+ }
432
+ catch {
433
+ logCapture(projectRoot, 'sync-backfill', 'validation-rejected');
434
+ }
435
+ }
436
+ }
437
+ }
438
+ /**
439
+ * Move already-captured records out of unattributed.ndjson into the instance that
440
+ * was claimed while they were measured (FR4.6).
441
+ *
442
+ * These records are the easy case that nothing was doing: they carry real session
443
+ * ids, exact coverage windows, and `metered` fidelity. All that was ever missing
444
+ * was the join, because the only join anyone had matched session ids — and the
445
+ * claims recorded synthetic ones. See `instanceForInstant`.
446
+ *
447
+ * Append to the destination first, then rewrite the source: interrupted halfway
448
+ * this duplicates a record, and `readEntries` de-duplicates byte-identical lines,
449
+ * so the failure mode is self-correcting rather than lossy.
450
+ */
451
+ function recoverUnattributed(projectRoot, perInstance, instanceFilter, now, report) {
452
+ const path = unattributedPath(projectRoot);
453
+ const entries = readEntries(path);
454
+ if (entries.length === 0)
455
+ return;
456
+ const cursorsByInstance = new Map();
457
+ const cursorsFor = (instance) => {
458
+ let set = cursorsByInstance.get(instance);
459
+ if (!set) {
460
+ set = new Set(readEntries(ledgerPath(projectRoot, instance))
461
+ .map((e) => e.cursor)
462
+ .filter((c) => c !== null));
463
+ cursorsByInstance.set(instance, set);
464
+ }
465
+ return set;
466
+ };
467
+ const kept = [];
468
+ let moved = 0;
469
+ for (const entry of entries) {
470
+ // Attribution markers carry no units and no meaning outside their own file.
471
+ if (entry.units === null) {
472
+ kept.push(entry);
473
+ continue;
474
+ }
475
+ const at = coverageInstant(entry);
476
+ /*
477
+ * Time only — `entry.session_id` is deliberately NOT consulted here, and that
478
+ * is a correctness requirement rather than a simplification.
479
+ *
480
+ * An unattributed record's session id is one of two things, and nothing on the
481
+ * line distinguishes them. Either it is a real platform id that no claim
482
+ * names, which is the case this pass exists to recover and for which an
483
+ * id-equality lookup finds nothing anyway; or it is the *provenance stamp* the
484
+ * pass above applies when a segment was contested — "it stays unattributed
485
+ * under the first claimant's id purely for provenance". That stamp names one
486
+ * arbitrary claimant of several. Trusting it as identity turns "two instances
487
+ * could own this" into "this one does", silently attributing contested dollars
488
+ * and undoing cost-claim-attribution/AC-12.
489
+ *
490
+ * Time with the full candidate set decides both correctly: a real id whose
491
+ * window belongs to one instance attributes, and a contested instant stays
492
+ * contested.
493
+ */
494
+ const { instance, ambiguous } = instanceForInstant(at, null, perInstance);
495
+ if (instance === null) {
496
+ kept.push(entry);
497
+ if (ambiguous)
498
+ report.stillAmbiguous++;
499
+ else
500
+ report.stillOrphaned++;
501
+ continue;
502
+ }
503
+ if (instanceFilter !== null && instance !== instanceFilter) {
504
+ kept.push(entry);
505
+ continue;
506
+ }
507
+ const cursors = cursorsFor(instance);
508
+ if (entry.cursor !== null && cursors.has(entry.cursor)) {
509
+ // Already attributed by an earlier run; dropping the stale copy is the
510
+ // second half of a move that was interrupted, not a new decision.
511
+ moved++;
512
+ continue;
513
+ }
514
+ const phase = phaseWindows(projectRoot, instance, 'implementation').find((w) => at >= w.from && at < w.to)
515
+ ?.phase ?? null;
516
+ // Fidelity is preserved, not downgraded to `reconciled`: these are the same
517
+ // measurements the provider reported, and calling metered data reconciled
518
+ // would let a later pass overwrite exact numbers with re-derived ones.
519
+ const moved_entry = { ...entry, timestamp: now.toISOString(), phase };
520
+ try {
521
+ appendEntry(ledgerPath(projectRoot, instance), moved_entry);
522
+ if (entry.cursor !== null)
523
+ cursors.add(entry.cursor);
524
+ moved++;
525
+ report.recovered++;
526
+ report.attributed++;
527
+ }
528
+ catch {
529
+ logCapture(projectRoot, 'sync-recover', 'validation-rejected');
530
+ kept.push(entry);
531
+ }
532
+ }
533
+ if (moved > 0)
534
+ rewriteLedger(path, kept);
535
+ }
168
536
  function compact(xs) {
169
537
  return xs.filter((x) => x !== undefined);
170
538
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cost/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cost/sync.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAc7C,eAAO,MAAM,UAAU,EAAE,SAAS,EAajC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAiB7C,eAAO,MAAM,UAAU,EAAE,SAAS,EAsBjC,CAAC"}
@@ -16,19 +16,31 @@ import { pruneCaptureLogMigration } from './prune-capture-log.js';
16
16
  import { pruneRegistry } from './prune-registry.js';
17
17
  import { unknownAgentClaims } from './unknown-agent-claims.js';
18
18
  import { legacyCostHooks } from './legacy-cost-hooks.js';
19
+ import { missingCostShim } from './missing-cost-shim.js';
19
20
  import { installGuidance } from './install-guidance.js';
21
+ import { staleIdeaSkill } from './stale-idea-skill.js';
22
+ import { roadmapLayout } from './roadmap-layout.js';
20
23
  export const MIGRATIONS = [
21
24
  costGitignore,
22
25
  knowledgeGitignore,
23
26
  gitattributes,
24
27
  shippedActions,
25
28
  installGuidance,
29
+ // Ordered before roadmap-layout: the orphaned skill still describes the old
30
+ // ideas directory, so clearing it first means a single run never leaves an
31
+ // instruction on disk that contradicts the layout the next migration creates.
32
+ staleIdeaSkill,
33
+ roadmapLayout,
26
34
  untrackCostEphemera,
27
35
  pruneSessionStash,
28
36
  pruneCostLocks,
29
37
  pruneCaptureLogMigration,
30
38
  pruneRegistry,
31
39
  unknownAgentClaims,
40
+ // Ordered before legacy-cost-hooks: that migration re-installs, which writes
41
+ // the shim as a side effect, so a legacy hook needs no separate shim repair.
42
+ // Running this first keeps each migration's report about its own condition.
43
+ missingCostShim,
32
44
  legacyCostHooks,
33
45
  ];
34
46
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,aAAa;IACb,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,eAAe;IACf,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,wBAAwB;IACxB,aAAa;IACb,kBAAkB;IAClB,eAAe;CAChB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,aAAa;IACb,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,eAAe;IACf,4EAA4E;IAC5E,2EAA2E;IAC3E,8EAA8E;IAC9E,cAAc;IACd,aAAa;IACb,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,wBAAwB;IACxB,aAAa;IACb,kBAAkB;IAClB,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,eAAe;IACf,eAAe;CAChB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * missing-cost-shim migration: regenerate `.aidlc/cost/capture.sh` when a hook
3
+ * is armed against it and it cannot run.
4
+ *
5
+ * WHY THIS EXISTS. `cost-capture-goes-dark` replaced absolute hook paths with a
6
+ * generated shim and deleted `commandResolvable`, recording that "the failure
7
+ * class is retired, not merely detected". The shim removed the *stale path*
8
+ * failure and introduced a *missing file* one: the shim is generated per install,
9
+ * is gitignored on purpose (it embeds machine-specific resolution hints), and no
10
+ * tracked file can supply it — while `.claude/settings.json`, which arms the
11
+ * hooks, IS tracked. So every fresh clone and every second machine starts with
12
+ * hooks pointing at nothing.
13
+ *
14
+ * That is not hypothetical: capture was dead from 2026-08-26 21:12 to 2026-08-28
15
+ * 13:44 local, $535.54 of usage was never recorded, and `aidlc cost hooks status`
16
+ * read `installed` throughout.
17
+ *
18
+ * WHY SAFE TIER, AND WHY IT REPAIRS RATHER THAN REPORTS. The shim is generated
19
+ * output with no user content, already gitignored, and `writeShim` is idempotent —
20
+ * rewriting it destroys nothing a user authored. Report-only was tried for this
21
+ * exact failure class (`stale-cost-hooks`) and the data was lost anyway, because
22
+ * the last link in the chain was a human reading a line. `aidlc cost` already
23
+ * prints "run `aidlc doctor` to repair"; this is the migration that makes that
24
+ * sentence true.
25
+ *
26
+ * Self-clearing: once the shim exists and is executable, `shimProblem` returns
27
+ * null and this stops reporting without anyone editing state.
28
+ */
29
+ import type { Migration } from '../types.js';
30
+ /**
31
+ * Platforms whose hook is armed against an unusable shim. Read-only half,
32
+ * exported for reuse and direct testing.
33
+ *
34
+ * Legacy hooks are excluded: they do not invoke the shim, so its state is not
35
+ * their problem — `legacy-cost-hooks` re-installs those, which writes the shim as
36
+ * a side effect anyway.
37
+ */
38
+ export declare function platformsWithUnusableShim(projectRoot: string): string[];
39
+ export declare const missingCostShim: Migration;
40
+ //# sourceMappingURL=missing-cost-shim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-cost-shim.d.ts","sourceRoot":"","sources":["../../../src/doctor/migrations/missing-cost-shim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAkB7C;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAMvE;AAED,eAAO,MAAM,eAAe,EAAE,SAiC7B,CAAC"}