litmus-cli 1.5.0-beta.1 → 1.5.0-beta.2

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 (80) hide show
  1. package/README.md +19 -2
  2. package/dist/commands/connect.d.ts +2 -0
  3. package/dist/commands/connect.d.ts.map +1 -1
  4. package/dist/commands/connect.js +1 -1
  5. package/dist/commands/connect.js.map +1 -1
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +25 -6
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/index.js +10 -232
  10. package/dist/index.js.map +1 -1
  11. package/dist/lib/ai-tracking.d.ts +4 -0
  12. package/dist/lib/ai-tracking.d.ts.map +1 -1
  13. package/dist/lib/ai-tracking.js +68 -0
  14. package/dist/lib/ai-tracking.js.map +1 -1
  15. package/dist/lib/api.d.ts +1 -0
  16. package/dist/lib/api.d.ts.map +1 -1
  17. package/dist/lib/api.js +13 -4
  18. package/dist/lib/api.js.map +1 -1
  19. package/dist/lib/capture-notice-ping.d.ts +7 -27
  20. package/dist/lib/capture-notice-ping.d.ts.map +1 -1
  21. package/dist/lib/capture-notice-ping.js +10 -42
  22. package/dist/lib/capture-notice-ping.js.map +1 -1
  23. package/dist/lib/capture-nudge.d.ts +5 -7
  24. package/dist/lib/capture-nudge.d.ts.map +1 -1
  25. package/dist/lib/capture-nudge.js +19 -35
  26. package/dist/lib/capture-nudge.js.map +1 -1
  27. package/dist/lib/capture-selftest.d.ts +9 -0
  28. package/dist/lib/capture-selftest.d.ts.map +1 -1
  29. package/dist/lib/capture-selftest.js +27 -2
  30. package/dist/lib/capture-selftest.js.map +1 -1
  31. package/dist/lib/codex-capture-health.d.ts +21 -0
  32. package/dist/lib/codex-capture-health.d.ts.map +1 -0
  33. package/dist/lib/codex-capture-health.js +82 -0
  34. package/dist/lib/codex-capture-health.js.map +1 -0
  35. package/dist/lib/environment-checks.d.ts +1 -3
  36. package/dist/lib/environment-checks.d.ts.map +1 -1
  37. package/dist/lib/environment-checks.js +2 -16
  38. package/dist/lib/environment-checks.js.map +1 -1
  39. package/dist/lib/file-monitor.d.ts +18 -0
  40. package/dist/lib/file-monitor.d.ts.map +1 -0
  41. package/dist/lib/file-monitor.js +87 -0
  42. package/dist/lib/file-monitor.js.map +1 -0
  43. package/dist/lib/hook-logger.cjs +47 -10
  44. package/dist/lib/hosted-capture.d.ts +4 -2
  45. package/dist/lib/hosted-capture.d.ts.map +1 -1
  46. package/dist/lib/hosted-capture.js +74 -16
  47. package/dist/lib/hosted-capture.js.map +1 -1
  48. package/dist/lib/init-location.d.ts +4 -0
  49. package/dist/lib/init-location.d.ts.map +1 -0
  50. package/dist/lib/init-location.js +36 -0
  51. package/dist/lib/init-location.js.map +1 -0
  52. package/dist/lib/mac-notifier.d.ts +4 -0
  53. package/dist/lib/mac-notifier.d.ts.map +1 -0
  54. package/dist/lib/mac-notifier.js +72 -0
  55. package/dist/lib/mac-notifier.js.map +1 -0
  56. package/dist/lib/node-version.d.ts +8 -0
  57. package/dist/lib/node-version.d.ts.map +1 -0
  58. package/dist/lib/node-version.js +23 -0
  59. package/dist/lib/node-version.js.map +1 -0
  60. package/dist/lib/notify.d.ts +4 -5
  61. package/dist/lib/notify.d.ts.map +1 -1
  62. package/dist/lib/notify.js +24 -25
  63. package/dist/lib/notify.js.map +1 -1
  64. package/dist/lib/portal-launcher.d.ts.map +1 -1
  65. package/dist/lib/portal-launcher.js +6 -1
  66. package/dist/lib/portal-launcher.js.map +1 -1
  67. package/dist/lib/tracker.d.ts +1 -0
  68. package/dist/lib/tracker.d.ts.map +1 -1
  69. package/dist/lib/tracker.js +4 -2
  70. package/dist/lib/tracker.js.map +1 -1
  71. package/dist/lib/watcher.js +147 -101
  72. package/dist/lib/watcher.js.map +1 -1
  73. package/dist/notification-assets/litmus.icns +0 -0
  74. package/dist/notification-assets/litmus.png +0 -0
  75. package/dist/notification-assets/notifier.js +12 -0
  76. package/dist/program.d.ts +2 -0
  77. package/dist/program.d.ts.map +1 -0
  78. package/dist/program.js +236 -0
  79. package/dist/program.js.map +1 -0
  80. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/lib/tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/lib/tracker.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ import { execSync, execFile } from "child_process";
25
25
  import dns from "dns";
26
26
  import https from "https";
27
27
  import http from "http";
28
- import { watch as chokidarWatch } from "chokidar";
28
+ import { startFileMonitor, fileMonitorPolicy } from "./file-monitor.js";
29
29
  import { getEffectiveDeadline, writeConfig, validateRebuiltTimes, computeTimeSync } from "./config.js";
30
30
  import { CLI_VERSION } from "./version.js";
31
31
  import { armDeadlinePoll, createAutoSubmitController } from "./deadline.js";
@@ -34,17 +34,18 @@ import { buildGitBundle, currentHead } from "./git-bundle.js";
34
34
  import { fetchInitMetadata, ServerError } from "./api.js";
35
35
  import { resolveBackendBase } from "./api-base.js";
36
36
  import { ServerTimesSchema } from "./schemas.js";
37
- import { detectInstalledHooks, addActiveAssessment, removeActiveAssessment } from "./ai-tracking.js";
37
+ import { detectInstalledHooks, notificationSetupAction, addActiveAssessment, removeActiveAssessment } from "./ai-tracking.js";
38
38
  import { retireAiCaptureForEndedSession, sessionOverMarked } from "./session-over.js";
39
39
  import { readActivityLogTail } from "./activity-tail.js";
40
40
  import { setupAiTracking } from "../commands/init.js";
41
41
  import { writeShadowChainCursor, readShadowChainCursor, writeShadowTrackerFile, writeShadowReviveInfo, readShadowConfigById, findShadowConfigForDir, deleteShadowForAssessment, writeRepairFile, removeRepairFile, REPAIR_FILE_NAME, } from "./shadow.js";
42
42
  import { createKeepAliveGuard } from "./keepalive.js";
43
- import { WATCHER_READY_GRACE_MS } from "./tracker.js";
43
+ import { WATCHER_READY_GRACE_MS, WATCHER_BOOT_TIMEOUT_MS } from "./tracker.js";
44
44
  import { getProcessListAsync, probeUnfilteredTasklist, getConnections, extractConnection, resolvePidNames } from "./platform.js";
45
45
  import { detectTools, refineClaudeTool } from "./detection.js";
46
- import { decideNudge, loadNudgeState, saveNudgeState, scanAssessmentCapture, writeAiNoticeFile, removeAiNoticeFile, nudgeNotificationCopy, isCliNoticeArtifact, AI_NOTICE_FILE_NAME, } from "./capture-nudge.js";
46
+ import { decideNudge, loadNudgeState, saveNudgeState, scanAssessmentCapture, NUDGE_TRIGGER_TOOLS, removeAiNoticeFile, nudgeNotificationCopy, isCliNoticeArtifact, AI_NOTICE_FILE_NAME, } from "./capture-nudge.js";
47
47
  import { desktopNotify } from "./notify.js";
48
+ import { codexStoreInventory, readCodexDelivery } from "./codex-capture-health.js";
48
49
  // ENG-1491: an uncaught throw no longer always kills the watcher — on a
49
50
  // multi-day assessment one bad callback used to silently end tracking until
50
51
  // something respawned it. The guard keeps the two exits that are still
@@ -79,7 +80,7 @@ process.on("unhandledRejection", (reason) => {
79
80
  });
80
81
  let [, , projectDir, activityLogPath, cliBinPath, noncePath] = process.argv;
81
82
  process.stderr.write(`[watcher] starting: projectDir=${projectDir} log=${activityLogPath}\n`);
82
- process.stderr.write(`[watcher] node ${process.version}, platform=${process.platform}, arch=${process.arch}\n`);
83
+ process.stderr.write(`[watcher] node ${process.version}, platform=${process.platform}, arch=${process.arch}, kernel=${os.release()}\n`);
83
84
  // Touch the nonce file on startup so tracker.ts can distinguish "our watcher
84
85
  // is alive" from "a recycled PID happens to match an old tracker.pid".
85
86
  // Heartbeat updates the mtime; tracker.ts compares against NONCE_MAX_AGE_MS.
@@ -166,15 +167,28 @@ function claimantIsAlive(owner) {
166
167
  // reclaim from it just like a corpse. The env override exists for tests only.
167
168
  // The default is tracker.ts's, so it cannot fall below init's boot wait (ENG-3194).
168
169
  let readyFilePath = path.join(path.dirname(activityLogPath), "tracker.ready");
170
+ let fileCaptureVerified = false;
171
+ let chainStartTimer;
169
172
  const READY_GRACE_MS = Number(process.env.LITMUS_WATCHER_READY_GRACE_MS) || WATCHER_READY_GRACE_MS;
170
173
  function markReady() {
174
+ if (!fileCaptureVerified)
175
+ return false;
171
176
  try {
172
177
  fs.writeFileSync(readyFilePath, String(process.pid), "utf8");
178
+ // A successor may take time to verify files. Its incumbent keeps writing
179
+ // until this stamp appears, so the handoff delay starts NOW, not at spawn.
180
+ if (!chainStartTimer && preChainBuffer !== null && !chainAbandoned) {
181
+ chainStartTimer = setTimeout(startChain, CHAIN_START_DELAY_MS);
182
+ }
183
+ return true;
173
184
  }
174
185
  catch (err) {
175
- // Non-fatal: we keep watching either way. Worst case another watcher
176
- // eventually reclaims the pid file from us; the project stays tracked.
177
186
  process.stderr.write(`[watcher] could not write ready marker: ${err}\n`);
187
+ // Without the stamp an incumbent cannot yield and chain writes cannot
188
+ // start. Flush the unchained startup buffer and retire, rather than hold
189
+ // the rest of the session in memory forever.
190
+ shutdown({ preserveSentinel: true });
191
+ return false;
178
192
  }
179
193
  }
180
194
  function claimantIsReady(owner) {
@@ -519,6 +533,18 @@ const IGNORED = [
519
533
  const noticeOwnership = new Map();
520
534
  isCliNoticeArtifact(projectDir, AI_NOTICE_FILE_NAME, noticeOwnership);
521
535
  isCliNoticeArtifact(projectDir, REPAIR_FILE_NAME, noticeOwnership);
536
+ const AI_ARTIFACT_PATTERNS = [
537
+ { tool: "cursor", paths: [".cursorrules", ".cursorignore"] },
538
+ { tool: "windsurf", paths: [".windsurfrules"] },
539
+ { tool: "aider", paths: [".aider.chat.history.md", ".aider.input.history", ".aider.tags.cache"] },
540
+ { tool: "continue", paths: [".continue"] },
541
+ { tool: "codeium", paths: [".codeium"] },
542
+ { tool: "tabnine", paths: [".tabnine"] },
543
+ { tool: "codex", paths: ["codex.md", ".codex"] },
544
+ ];
545
+ function isAiArtifactPath(relative) {
546
+ return AI_ARTIFACT_PATTERNS.some(({ paths }) => paths.some(p => relative === p || relative.startsWith(p + "/") || relative.startsWith(p + "\\")));
547
+ }
522
548
  function shouldIgnore(relPath) {
523
549
  return isCliNoticeArtifact(projectDir, relPath, noticeOwnership) || IGNORED.some((re) => re.test(relPath));
524
550
  }
@@ -607,7 +633,6 @@ function startChain() {
607
633
  for (const event of queued)
608
634
  writeChained(event);
609
635
  }
610
- setTimeout(startChain, CHAIN_START_DELAY_MS);
611
636
  /**
612
637
  * Shutdown inside the chain-start window: the incumbent may still own the
613
638
  * chain tail, so snapshotting it here would recreate the fork the deferral
@@ -712,63 +737,54 @@ function handleFileEvent(eventType, filename) {
712
737
  }, 500));
713
738
  }
714
739
  let fileWatcher;
740
+ let fileWatchingReady;
715
741
  function startFileWatching() {
716
- if (process.platform === "win32") {
717
- // Node's fs.watch(dir, { recursive: true }) on Windows uses
718
- // ReadDirectoryChangesW. On windows-2025-vs2026 runners with Node 24 this
719
- // path calls __fastfail() from native code after watcher init completes,
720
- // aborting the process with exit code 0xC0000409 and bypassing every
721
- // JS-level exit hook (uncaughtException, beforeExit, exit). Confirmed by
722
- // an isolation test that gated fs.watch behind an env var and showed the
723
- // watcher healthy on the same runner. Until either Node or libuv fixes
724
- // the recursive watch on Windows 2025, use chokidar's polling mode here.
725
- try {
726
- const watcher = chokidarWatch(projectDir, {
727
- ignoreInitial: true,
728
- followSymlinks: false,
729
- usePolling: true,
730
- interval: 500,
731
- binaryInterval: 1000,
732
- ignored: (p) => {
733
- const rel = path.relative(projectDir, p);
734
- // Don't ignore the root dir itself, or chokidar reports nothing.
735
- if (!rel)
736
- return false;
737
- return shouldIgnore(rel);
742
+ fileCaptureVerified = false;
743
+ const startedAt = Date.now();
744
+ const { polling } = fileMonitorPolicy();
745
+ const modes = polling ? [true] : [false, true];
746
+ fileWatchingReady = (async () => {
747
+ for (let attempt = 0; attempt < modes.length; attempt++) {
748
+ let failure;
749
+ process.stderr.write(`[watcher] file watcher starting (${modes[attempt] ? "polling" : "native"}, filtered discovery)\n`);
750
+ const monitor = startFileMonitor({
751
+ directory: projectDir,
752
+ ignored: shouldIgnore,
753
+ observed: isAiArtifactPath,
754
+ onEvent: handleFileEvent,
755
+ polling: modes[attempt],
756
+ timeoutMs: Math.floor((WATCHER_BOOT_TIMEOUT_MS - 1000) / modes.length),
757
+ onError: (error) => {
758
+ failure = error;
759
+ fileCaptureVerified = false;
760
+ process.stderr.write(`[watcher] file capture unavailable: ${error.message}\n`);
761
+ try {
762
+ if (fs.readFileSync(readyFilePath, "utf8").trim() === String(process.pid))
763
+ fs.unlinkSync(readyFilePath);
764
+ }
765
+ catch { /* no ready marker */ }
738
766
  },
739
767
  });
740
- fileWatcher = watcher;
741
- watcher.on("add", (p) => handleFileEvent("rename", path.relative(projectDir, p)));
742
- watcher.on("change", (p) => handleFileEvent("change", path.relative(projectDir, p)));
743
- watcher.on("unlink", (p) => handleFileEvent("rename", path.relative(projectDir, p)));
744
- watcher.on("error", (err) => {
745
- process.stderr.write(`[watcher] chokidar error: ${err}\n`);
746
- });
747
- process.stderr.write("[watcher] file watcher started (chokidar polling)\n");
748
- }
749
- catch (err) {
750
- process.stderr.write(`[watcher] chokidar setup failed: ${err.message} (heartbeat + git tracking still active)\n`);
751
- }
752
- }
753
- else {
754
- try {
755
- const watcher = fs.watch(projectDir, { recursive: true }, (eventType, filename) => {
756
- if (!filename)
757
- return;
758
- handleFileEvent(eventType, filename);
759
- });
760
- fileWatcher = watcher;
761
- watcher.on("error", (err) => {
762
- process.stderr.write(`[watcher] fs.watch error: ${err}\n`);
763
- });
764
- process.stderr.write("[watcher] file watcher started\n");
765
- }
766
- catch (err) {
767
- // fs.watch with recursive: true is not supported on Linux < Node 22.
768
- // Continue without file watching — heartbeats and git commit polling still work.
769
- process.stderr.write(`[watcher] file watching unavailable: ${err.message} (heartbeat + git tracking still active)\n`);
768
+ fileWatcher = monitor;
769
+ try {
770
+ await monitor.ready;
771
+ if (failure)
772
+ throw failure;
773
+ if (fileWatcher !== monitor || shuttingDown)
774
+ throw new Error("File watcher replaced or stopped during verification");
775
+ fileCaptureVerified = true;
776
+ process.stderr.write(`[watcher] file capture verified in ${Date.now() - startedAt}ms\n`);
777
+ return;
778
+ }
779
+ catch (error) {
780
+ await monitor.close();
781
+ if (shuttingDown || fileWatcher !== monitor || attempt === modes.length - 1)
782
+ throw error;
783
+ process.stderr.write("[watcher] native file probe failed; retrying with polling\n");
784
+ }
770
785
  }
771
- }
786
+ })();
787
+ void fileWatchingReady.catch(() => { });
772
788
  }
773
789
  startFileWatching();
774
790
  // ── Config presence check ────────────────────────────────────────
@@ -1052,10 +1068,38 @@ function checkHooksPresence() {
1052
1068
  catch { /* leave broken; retried next heartbeat, reported already */ }
1053
1069
  }
1054
1070
  // ── Heartbeats ───────────────────────────────────────────────────
1071
+ const captureHealthStartedAt = Date.parse(litmusConfig?.startedAt ?? "") || Date.now();
1072
+ let captureHealthInFlight = false;
1073
+ let lastCaptureHealth = "";
1074
+ async function checkCodexCaptureHealth() {
1075
+ if (captureHealthInFlight || shuttingDown || sessionOverMarked(projectDir))
1076
+ return;
1077
+ captureHealthInFlight = true;
1078
+ try {
1079
+ const store = await codexStoreInventory();
1080
+ const latestHook = await readCodexDelivery(path.dirname(activityLogPath), captureHealthStartedAt);
1081
+ let hooksInstalled = null;
1082
+ try {
1083
+ hooksInstalled = detectInstalledHooks(projectDir).codex;
1084
+ }
1085
+ catch { /* unknown */ }
1086
+ const health = { hooksInstalled, store, latestHook };
1087
+ const fingerprint = JSON.stringify(health);
1088
+ if (!shuttingDown && fingerprint !== lastCaptureHealth) {
1089
+ emit({ ts: new Date().toISOString(), type: "codex_capture_health", ...health });
1090
+ lastCaptureHealth = fingerprint;
1091
+ }
1092
+ }
1093
+ finally {
1094
+ captureHealthInFlight = false;
1095
+ }
1096
+ }
1055
1097
  function emitHeartbeat() {
1056
1098
  if (!reportProjectRootProblem()) {
1057
1099
  checkConfigPresence(); // before the heartbeat so both ride the same upload
1058
1100
  checkHooksPresence();
1101
+ // Async metadata scan stays outside the startup readiness critical path.
1102
+ setTimeout(() => { void checkCodexCaptureHealth().catch(() => { }); }, 0);
1059
1103
  }
1060
1104
  emit({ ts: new Date().toISOString(), type: "heartbeat" });
1061
1105
  uploadEvents(); // Upload buffered events to server
@@ -1136,18 +1180,14 @@ function checkGitCommits() {
1136
1180
  }
1137
1181
  setInterval(checkGitCommits, 30 * 1000); // Every 30 seconds
1138
1182
  // ── Capture nudge (ENG-1857) ─────────────────────────────────────
1139
- // A hook-capturable AI tool running with ZERO captured prompts is the silent
1140
- // Codex/Copilot trust-gate signature: the candidate's AI work is invisibly
1141
- // not being recorded, and they'd only find out from their report. Warn THEM,
1142
- // live. Strictly candidate-facing: a desktop notification, a notice file at
1143
- // the assessment root, and stderr (-> .litmus/tracker.log, excluded from all
1144
- // grader signals via substrate.py's _is_capture_artifact). It must emit NO
1145
- // activity event — the grader renders every non-response activity event
1146
- // verbatim in the judge-visible timeline and merges the in-zip
1147
- // activity.jsonl, so an event here would leak straight to reviewers.
1183
+ // Ask for one action only when an active tool has a confirmed setup fault.
1184
+ // No conversations alone proves nothing. Candidate notifications emit no
1185
+ // activity event: the grader renders those in the judge-visible timeline.
1186
+ // Diagnostics stay on stderr (.litmus/tracker.log, excluded from grading).
1148
1187
  //
1149
1188
  // State persists in .litmus/nudge-state.json so the routine watcher respawns
1150
1189
  // (litmus status/doctor revive watchers) don't re-nag from scratch.
1190
+ removeOwnedAiNotice(); // retire guidance left by older CLI versions
1151
1191
  let nudgeState = loadNudgeState(projectDir);
1152
1192
  // Incremental ai_prompt/ai_response counters over the folder and same-token
1153
1193
  // supervisor logs; only appended bytes are read each cycle. A restart rescans
@@ -1174,24 +1214,24 @@ function runCaptureNudge(aiTools) {
1174
1214
  }
1175
1215
  const deadlineMs = litmusConfig ? getEffectiveDeadline(litmusConfig) : null;
1176
1216
  const msRemaining = deadlineMs === null ? null : deadlineMs - Date.now();
1177
- const decision = decideNudge(nudgeState, aiTools, capturedAiCount, Date.now(), msRemaining);
1217
+ const setupIssues = {};
1218
+ for (const tool of NUDGE_TRIGGER_TOOLS) {
1219
+ if (!aiTools.includes(tool))
1220
+ continue;
1221
+ const issue = notificationSetupAction(projectDir, tool);
1222
+ if (issue)
1223
+ setupIssues[tool] = issue;
1224
+ }
1225
+ const decision = decideNudge(nudgeState, aiTools, capturedAiCount, Date.now(), msRemaining, setupIssues);
1178
1226
  nudgeState = decision.state;
1179
1227
  saveNudgeState(projectDir, nudgeState);
1180
1228
  if (decision.action === "nudge") {
1181
- // Write first: when a candidate-owned file occupies the path we never
1182
- // clobber it, and the notification then drops its "Details:" pointer
1183
- // (which would name a file carrying THEIR content).
1184
- const noticeWritten = writeAiNoticeFile(projectDir);
1185
- if (noticeWritten) {
1186
- isCliNoticeArtifact(projectDir, AI_NOTICE_FILE_NAME, noticeOwnership); // refresh ownership
1187
- }
1188
- else {
1189
- process.stderr.write(`[watcher] ${AI_NOTICE_FILE_NAME} exists and is not ours; notification only\n`);
1190
- }
1191
- const copy = nudgeNotificationCopy(decision.tool, noticeWritten);
1229
+ // Retire old guidance without touching candidate edits.
1230
+ removeOwnedAiNotice();
1231
+ const copy = nudgeNotificationCopy(decision.setupAction);
1192
1232
  desktopNotify(copy.title, copy.message);
1193
1233
  // stderr only — this lands in tracker.log, never in activity.jsonl.
1194
- process.stderr.write(`[watcher] capture nudge fired (${decision.tool}, nudge ${nudgeState.nudgeCount}): AI tool present, zero prompts captured\n`);
1234
+ process.stderr.write(`[watcher] capture nudge fired (${decision.tool}, nudge ${nudgeState.nudgeCount}): confirmed setup issue ${decision.setupAction}\n`);
1195
1235
  }
1196
1236
  else if (decision.action === "remove_notice") {
1197
1237
  removeOwnedAiNotice();
@@ -1274,15 +1314,6 @@ async function detectEnvironment() {
1274
1314
  setTimeout(() => { void detectEnvironment(); }, 0);
1275
1315
  setInterval(() => { void detectEnvironment(); }, 10 * 60 * 1000); // Every 10 minutes
1276
1316
  // ── AI artifact file detection ──────────────────────────────────
1277
- const AI_ARTIFACT_PATTERNS = [
1278
- { tool: "cursor", paths: [".cursorrules", ".cursorignore"] },
1279
- { tool: "windsurf", paths: [".windsurfrules"] },
1280
- { tool: "aider", paths: [".aider.chat.history.md", ".aider.input.history", ".aider.tags.cache"] },
1281
- { tool: "continue", paths: [".continue"] },
1282
- { tool: "codeium", paths: [".codeium"] },
1283
- { tool: "tabnine", paths: [".tabnine"] },
1284
- { tool: "codex", paths: ["codex.md", ".codex"] },
1285
- ];
1286
1317
  const seenArtifacts = new Set();
1287
1318
  function checkArtifact(relPath) {
1288
1319
  if (seenArtifacts.has(relPath))
@@ -1538,8 +1569,13 @@ function reportProjectRootProblem() {
1538
1569
  readyFilePath = path.join(path.dirname(activityLogPath), "tracker.ready");
1539
1570
  watchedConfigPath = path.join(projectDir, ".litmus", "config.json");
1540
1571
  shutdownFile = path.join(projectDir, ".litmus", "shutdown");
1541
- void Promise.resolve(fileWatcher?.close()).then(() => { if (!shuttingDown)
1542
- startFileWatching(); }).catch(() => {
1572
+ void Promise.resolve(fileWatcher?.close()).then(() => {
1573
+ if (!shuttingDown) {
1574
+ startFileWatching();
1575
+ void fileWatchingReady.then(() => { if (!shuttingDown)
1576
+ markReady(); }, () => { });
1577
+ }
1578
+ }).catch(() => {
1543
1579
  process.stderr.write("[watcher] file watcher could not restart after folder move\n");
1544
1580
  });
1545
1581
  addActiveAssessment(projectDir);
@@ -1758,7 +1794,7 @@ if (cliBinPath && litmusConfig) {
1758
1794
  // ── Graceful shutdown ────────────────────────────────────────────
1759
1795
  let shuttingDown = false;
1760
1796
  let shutdownFile = path.join(projectDir, ".litmus", "shutdown");
1761
- function shutdown() {
1797
+ function shutdown(options = {}) {
1762
1798
  if (shuttingDown)
1763
1799
  return;
1764
1800
  shuttingDown = true;
@@ -1772,10 +1808,12 @@ function shutdown() {
1772
1808
  // them unchained instead; a fork is structurally impossible that way.
1773
1809
  abandonChainAndDrain();
1774
1810
  // Clean up sentinel file if it exists
1775
- try {
1776
- fs.unlinkSync(shutdownFile);
1811
+ if (!options.preserveSentinel) {
1812
+ try {
1813
+ fs.unlinkSync(shutdownFile);
1814
+ }
1815
+ catch { /* may not exist */ }
1777
1816
  }
1778
- catch { /* may not exist */ }
1779
1817
  // Drop our readiness stamp so it can't outlive us and vouch for whatever
1780
1818
  // process later recycles our pid (see claimantIsReady). Only ours — a
1781
1819
  // successor's stamp is not ours to remove.
@@ -1806,7 +1844,7 @@ process.on("SIGINT", shutdown);
1806
1844
  const sentinelPoll = setInterval(() => {
1807
1845
  if (fs.existsSync(shutdownFile)) {
1808
1846
  process.stderr.write("[watcher] shutdown sentinel detected\n");
1809
- shutdown();
1847
+ shutdown({ preserveSentinel: !fileCaptureVerified });
1810
1848
  return;
1811
1849
  }
1812
1850
  // Recurring half of the singleton claim — see the note beside
@@ -1819,6 +1857,14 @@ const sentinelPoll = setInterval(() => {
1819
1857
  sentinelPoll.unref(); // Don't keep process alive just for this
1820
1858
  // Everything is running — publish readiness so an incumbent knows this
1821
1859
  // process is a working watcher, not a wedged claimant (see markReady).
1822
- markReady();
1823
- process.stderr.write("[watcher] all monitors started\n");
1860
+ void fileWatchingReady.then(() => {
1861
+ if (shuttingDown)
1862
+ return;
1863
+ if (markReady())
1864
+ process.stderr.write("[watcher] all monitors started; file capture verified\n");
1865
+ }, (error) => {
1866
+ process.stderr.write(`[watcher] startup incomplete: ${error instanceof Error ? error.message : error} (retiring unverified watcher)\n`);
1867
+ // A failed replacement must not consume a stop requested for its incumbent.
1868
+ shutdown({ preserveSentinel: true });
1869
+ });
1824
1870
  //# sourceMappingURL=watcher.js.map