instar 0.28.75 → 0.28.76

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 (316) hide show
  1. package/dist/cli.js +4 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/discovery.d.ts.map +1 -1
  4. package/dist/commands/discovery.js +1 -0
  5. package/dist/commands/discovery.js.map +1 -1
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +2 -0
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/job.d.ts.map +1 -1
  10. package/dist/commands/job.js +1 -0
  11. package/dist/commands/job.js.map +1 -1
  12. package/dist/commands/ledgerCleanup.d.ts.map +1 -1
  13. package/dist/commands/ledgerCleanup.js +1 -0
  14. package/dist/commands/ledgerCleanup.js.map +1 -1
  15. package/dist/commands/listener.d.ts.map +1 -1
  16. package/dist/commands/listener.js +6 -0
  17. package/dist/commands/listener.js.map +1 -1
  18. package/dist/commands/nuke.d.ts.map +1 -1
  19. package/dist/commands/nuke.js +6 -0
  20. package/dist/commands/nuke.js.map +1 -1
  21. package/dist/commands/server.d.ts.map +1 -1
  22. package/dist/commands/server.js +2 -0
  23. package/dist/commands/server.js.map +1 -1
  24. package/dist/commands/setup.d.ts.map +1 -1
  25. package/dist/commands/setup.js +6 -0
  26. package/dist/commands/setup.js.map +1 -1
  27. package/dist/commands/slack-cli.d.ts.map +1 -1
  28. package/dist/commands/slack-cli.js +4 -0
  29. package/dist/commands/slack-cli.js.map +1 -1
  30. package/dist/commands/whatsapp.d.ts.map +1 -1
  31. package/dist/commands/whatsapp.js +1 -0
  32. package/dist/commands/whatsapp.js.map +1 -1
  33. package/dist/commands/worktree.d.ts.map +1 -1
  34. package/dist/commands/worktree.js +1 -0
  35. package/dist/commands/worktree.js.map +1 -1
  36. package/dist/core/AgentConnector.d.ts.map +1 -1
  37. package/dist/core/AgentConnector.js +3 -0
  38. package/dist/core/AgentConnector.js.map +1 -1
  39. package/dist/core/AgentRegistry.d.ts.map +1 -1
  40. package/dist/core/AgentRegistry.js +2 -0
  41. package/dist/core/AgentRegistry.js.map +1 -1
  42. package/dist/core/AutoDispatcher.d.ts.map +1 -1
  43. package/dist/core/AutoDispatcher.js +1 -0
  44. package/dist/core/AutoDispatcher.js.map +1 -1
  45. package/dist/core/AutoUpdater.d.ts.map +1 -1
  46. package/dist/core/AutoUpdater.js +1 -0
  47. package/dist/core/AutoUpdater.js.map +1 -1
  48. package/dist/core/AutonomousEvolution.d.ts.map +1 -1
  49. package/dist/core/AutonomousEvolution.js +1 -0
  50. package/dist/core/AutonomousEvolution.js.map +1 -1
  51. package/dist/core/BackupManager.d.ts.map +1 -1
  52. package/dist/core/BackupManager.js +1 -0
  53. package/dist/core/BackupManager.js.map +1 -1
  54. package/dist/core/BranchManager.d.ts.map +1 -1
  55. package/dist/core/BranchManager.js +1 -0
  56. package/dist/core/BranchManager.js.map +1 -1
  57. package/dist/core/CaffeinateManager.d.ts.map +1 -1
  58. package/dist/core/CaffeinateManager.js +1 -0
  59. package/dist/core/CaffeinateManager.js.map +1 -1
  60. package/dist/core/DeferredDispatchTracker.d.ts.map +1 -1
  61. package/dist/core/DeferredDispatchTracker.js +1 -0
  62. package/dist/core/DeferredDispatchTracker.js.map +1 -1
  63. package/dist/core/DispatchManager.d.ts.map +1 -1
  64. package/dist/core/DispatchManager.js +2 -0
  65. package/dist/core/DispatchManager.js.map +1 -1
  66. package/dist/core/EvolutionManager.d.ts.map +1 -1
  67. package/dist/core/EvolutionManager.js +1 -0
  68. package/dist/core/EvolutionManager.js.map +1 -1
  69. package/dist/core/ExecutionJournal.d.ts.map +1 -1
  70. package/dist/core/ExecutionJournal.js +1 -0
  71. package/dist/core/ExecutionJournal.js.map +1 -1
  72. package/dist/core/FeedbackManager.d.ts.map +1 -1
  73. package/dist/core/FeedbackManager.js +1 -0
  74. package/dist/core/FeedbackManager.js.map +1 -1
  75. package/dist/core/FileClassifier.d.ts.map +1 -1
  76. package/dist/core/FileClassifier.js +4 -0
  77. package/dist/core/FileClassifier.js.map +1 -1
  78. package/dist/core/ForegroundRestartWatcher.d.ts.map +1 -1
  79. package/dist/core/ForegroundRestartWatcher.js +2 -0
  80. package/dist/core/ForegroundRestartWatcher.js.map +1 -1
  81. package/dist/core/GitStateManager.d.ts.map +1 -1
  82. package/dist/core/GitStateManager.js +1 -0
  83. package/dist/core/GitStateManager.js.map +1 -1
  84. package/dist/core/GitSync.d.ts.map +1 -1
  85. package/dist/core/GitSync.js +3 -0
  86. package/dist/core/GitSync.js.map +1 -1
  87. package/dist/core/GlobalInstallCleanup.d.ts.map +1 -1
  88. package/dist/core/GlobalInstallCleanup.js +2 -0
  89. package/dist/core/GlobalInstallCleanup.js.map +1 -1
  90. package/dist/core/GlobalSecretStore.d.ts.map +1 -1
  91. package/dist/core/GlobalSecretStore.js +2 -0
  92. package/dist/core/GlobalSecretStore.js.map +1 -1
  93. package/dist/core/HandoffManager.d.ts.map +1 -1
  94. package/dist/core/HandoffManager.js +2 -0
  95. package/dist/core/HandoffManager.js.map +1 -1
  96. package/dist/core/LedgerSessionRegistry.d.ts.map +1 -1
  97. package/dist/core/LedgerSessionRegistry.js +1 -0
  98. package/dist/core/LedgerSessionRegistry.js.map +1 -1
  99. package/dist/core/MachineIdentity.d.ts.map +1 -1
  100. package/dist/core/MachineIdentity.js +1 -0
  101. package/dist/core/MachineIdentity.js.map +1 -1
  102. package/dist/core/ParallelDevWiring.d.ts.map +1 -1
  103. package/dist/core/ParallelDevWiring.js +1 -0
  104. package/dist/core/ParallelDevWiring.js.map +1 -1
  105. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  106. package/dist/core/PostUpdateMigrator.js +2 -0
  107. package/dist/core/PostUpdateMigrator.js.map +1 -1
  108. package/dist/core/ProjectMapper.d.ts.map +1 -1
  109. package/dist/core/ProjectMapper.js +2 -0
  110. package/dist/core/ProjectMapper.js.map +1 -1
  111. package/dist/core/RelationshipManager.d.ts.map +1 -1
  112. package/dist/core/RelationshipManager.js +2 -0
  113. package/dist/core/RelationshipManager.js.map +1 -1
  114. package/dist/core/SafeFsExecutor.d.ts +41 -0
  115. package/dist/core/SafeFsExecutor.d.ts.map +1 -0
  116. package/dist/core/SafeFsExecutor.js +146 -0
  117. package/dist/core/SafeFsExecutor.js.map +1 -0
  118. package/dist/core/SafeGitExecutor.d.ts +139 -0
  119. package/dist/core/SafeGitExecutor.d.ts.map +1 -0
  120. package/dist/core/SafeGitExecutor.js +631 -0
  121. package/dist/core/SafeGitExecutor.js.map +1 -0
  122. package/dist/core/ScopeVerifier.d.ts.map +1 -1
  123. package/dist/core/ScopeVerifier.js +1 -0
  124. package/dist/core/ScopeVerifier.js.map +1 -1
  125. package/dist/core/SecretStore.d.ts.map +1 -1
  126. package/dist/core/SecretStore.js +1 -0
  127. package/dist/core/SecretStore.js.map +1 -1
  128. package/dist/core/SharedStateLedger.d.ts.map +1 -1
  129. package/dist/core/SharedStateLedger.js +1 -0
  130. package/dist/core/SharedStateLedger.js.map +1 -1
  131. package/dist/core/SoulManager.d.ts.map +1 -1
  132. package/dist/core/SoulManager.js +2 -0
  133. package/dist/core/SoulManager.js.map +1 -1
  134. package/dist/core/StateManager.d.ts.map +1 -1
  135. package/dist/core/StateManager.js +3 -0
  136. package/dist/core/StateManager.js.map +1 -1
  137. package/dist/core/SyncOrchestrator.d.ts.map +1 -1
  138. package/dist/core/SyncOrchestrator.js +3 -0
  139. package/dist/core/SyncOrchestrator.js.map +1 -1
  140. package/dist/core/UpdateChecker.d.ts.map +1 -1
  141. package/dist/core/UpdateChecker.js +2 -0
  142. package/dist/core/UpdateChecker.js.map +1 -1
  143. package/dist/core/UpgradeGuideProcessor.d.ts.map +1 -1
  144. package/dist/core/UpgradeGuideProcessor.js +2 -0
  145. package/dist/core/UpgradeGuideProcessor.js.map +1 -1
  146. package/dist/core/WorktreeManager.d.ts.map +1 -1
  147. package/dist/core/WorktreeManager.js +7 -0
  148. package/dist/core/WorktreeManager.js.map +1 -1
  149. package/dist/knowledge/KnowledgeManager.d.ts.map +1 -1
  150. package/dist/knowledge/KnowledgeManager.js +1 -0
  151. package/dist/knowledge/KnowledgeManager.js.map +1 -1
  152. package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
  153. package/dist/lifeline/ServerSupervisor.js +14 -0
  154. package/dist/lifeline/ServerSupervisor.js.map +1 -1
  155. package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
  156. package/dist/lifeline/TelegramLifeline.js +1 -0
  157. package/dist/lifeline/TelegramLifeline.js.map +1 -1
  158. package/dist/lifeline/droppedMessages.d.ts.map +1 -1
  159. package/dist/lifeline/droppedMessages.js +1 -0
  160. package/dist/lifeline/droppedMessages.js.map +1 -1
  161. package/dist/memory/EpisodicMemory.d.ts.map +1 -1
  162. package/dist/memory/EpisodicMemory.js +1 -0
  163. package/dist/memory/EpisodicMemory.js.map +1 -1
  164. package/dist/memory/TopicMemory.d.ts.map +1 -1
  165. package/dist/memory/TopicMemory.js +4 -0
  166. package/dist/memory/TopicMemory.js.map +1 -1
  167. package/dist/messaging/AgentTokenManager.d.ts.map +1 -1
  168. package/dist/messaging/AgentTokenManager.js +1 -0
  169. package/dist/messaging/AgentTokenManager.js.map +1 -1
  170. package/dist/messaging/DropPickup.js +1 -0
  171. package/dist/messaging/DropPickup.js.map +1 -1
  172. package/dist/messaging/GitSyncTransport.d.ts.map +1 -1
  173. package/dist/messaging/GitSyncTransport.js +3 -0
  174. package/dist/messaging/GitSyncTransport.js.map +1 -1
  175. package/dist/messaging/MessageStore.d.ts.map +1 -1
  176. package/dist/messaging/MessageStore.js +2 -0
  177. package/dist/messaging/MessageStore.js.map +1 -1
  178. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  179. package/dist/messaging/TelegramAdapter.js +4 -0
  180. package/dist/messaging/TelegramAdapter.js.map +1 -1
  181. package/dist/messaging/backends/BaileysBackend.d.ts.map +1 -1
  182. package/dist/messaging/backends/BaileysBackend.js +2 -0
  183. package/dist/messaging/backends/BaileysBackend.js.map +1 -1
  184. package/dist/messaging/shared/EncryptedAuthStore.d.ts.map +1 -1
  185. package/dist/messaging/shared/EncryptedAuthStore.js +2 -0
  186. package/dist/messaging/shared/EncryptedAuthStore.js.map +1 -1
  187. package/dist/messaging/shared/MessageLogger.d.ts.map +1 -1
  188. package/dist/messaging/shared/MessageLogger.js +1 -0
  189. package/dist/messaging/shared/MessageLogger.js.map +1 -1
  190. package/dist/messaging/shared/PrivacyConsent.d.ts.map +1 -1
  191. package/dist/messaging/shared/PrivacyConsent.js +1 -0
  192. package/dist/messaging/shared/PrivacyConsent.js.map +1 -1
  193. package/dist/messaging/shared/SessionChannelRegistry.d.ts.map +1 -1
  194. package/dist/messaging/shared/SessionChannelRegistry.js +1 -0
  195. package/dist/messaging/shared/SessionChannelRegistry.js.map +1 -1
  196. package/dist/moltbridge/ProfileCompiler.d.ts.map +1 -1
  197. package/dist/moltbridge/ProfileCompiler.js +3 -0
  198. package/dist/moltbridge/ProfileCompiler.js.map +1 -1
  199. package/dist/monitoring/CommitmentTracker.d.ts.map +1 -1
  200. package/dist/monitoring/CommitmentTracker.js +1 -0
  201. package/dist/monitoring/CommitmentTracker.js.map +1 -1
  202. package/dist/monitoring/CredentialProvider.d.ts.map +1 -1
  203. package/dist/monitoring/CredentialProvider.js +1 -0
  204. package/dist/monitoring/CredentialProvider.js.map +1 -1
  205. package/dist/monitoring/HealthChecker.d.ts.map +1 -1
  206. package/dist/monitoring/HealthChecker.js +1 -0
  207. package/dist/monitoring/HealthChecker.js.map +1 -1
  208. package/dist/monitoring/HookEventReceiver.d.ts.map +1 -1
  209. package/dist/monitoring/HookEventReceiver.js +1 -0
  210. package/dist/monitoring/HookEventReceiver.js.map +1 -1
  211. package/dist/monitoring/InstructionsVerifier.d.ts.map +1 -1
  212. package/dist/monitoring/InstructionsVerifier.js +1 -0
  213. package/dist/monitoring/InstructionsVerifier.js.map +1 -1
  214. package/dist/monitoring/PresenceProxy.d.ts.map +1 -1
  215. package/dist/monitoring/PresenceProxy.js +4 -0
  216. package/dist/monitoring/PresenceProxy.js.map +1 -1
  217. package/dist/monitoring/QuotaTracker.d.ts.map +1 -1
  218. package/dist/monitoring/QuotaTracker.js +1 -0
  219. package/dist/monitoring/QuotaTracker.js.map +1 -1
  220. package/dist/monitoring/SessionMigrator.d.ts.map +1 -1
  221. package/dist/monitoring/SessionMigrator.js +1 -0
  222. package/dist/monitoring/SessionMigrator.js.map +1 -1
  223. package/dist/monitoring/SessionRecovery.d.ts.map +1 -1
  224. package/dist/monitoring/SessionRecovery.js +1 -0
  225. package/dist/monitoring/SessionRecovery.js.map +1 -1
  226. package/dist/monitoring/TelemetryAuth.d.ts.map +1 -1
  227. package/dist/monitoring/TelemetryAuth.js +2 -0
  228. package/dist/monitoring/TelemetryAuth.js.map +1 -1
  229. package/dist/monitoring/TriageOrchestrator.d.ts.map +1 -1
  230. package/dist/monitoring/TriageOrchestrator.js +2 -0
  231. package/dist/monitoring/TriageOrchestrator.js.map +1 -1
  232. package/dist/monitoring/WorktreeReaper.d.ts.map +1 -1
  233. package/dist/monitoring/WorktreeReaper.js +3 -0
  234. package/dist/monitoring/WorktreeReaper.js.map +1 -1
  235. package/dist/monitoring/probes/PlatformProbe.d.ts.map +1 -1
  236. package/dist/monitoring/probes/PlatformProbe.js +2 -0
  237. package/dist/monitoring/probes/PlatformProbe.js.map +1 -1
  238. package/dist/paste/PasteManager.d.ts.map +1 -1
  239. package/dist/paste/PasteManager.js +4 -0
  240. package/dist/paste/PasteManager.js.map +1 -1
  241. package/dist/publishing/PrivateViewer.d.ts.map +1 -1
  242. package/dist/publishing/PrivateViewer.js +1 -0
  243. package/dist/publishing/PrivateViewer.js.map +1 -1
  244. package/dist/scheduler/JobScheduler.d.ts.map +1 -1
  245. package/dist/scheduler/JobScheduler.js +1 -0
  246. package/dist/scheduler/JobScheduler.js.map +1 -1
  247. package/dist/server/routes.d.ts.map +1 -1
  248. package/dist/server/routes.js +21 -9
  249. package/dist/server/routes.js.map +1 -1
  250. package/dist/threadline/AgentDiscovery.d.ts.map +1 -1
  251. package/dist/threadline/AgentDiscovery.js +1 -0
  252. package/dist/threadline/AgentDiscovery.js.map +1 -1
  253. package/dist/threadline/AgentTrustManager.d.ts.map +1 -1
  254. package/dist/threadline/AgentTrustManager.js +1 -0
  255. package/dist/threadline/AgentTrustManager.js.map +1 -1
  256. package/dist/threadline/CircuitBreaker.d.ts.map +1 -1
  257. package/dist/threadline/CircuitBreaker.js +1 -0
  258. package/dist/threadline/CircuitBreaker.js.map +1 -1
  259. package/dist/threadline/ComputeMeter.d.ts.map +1 -1
  260. package/dist/threadline/ComputeMeter.js +1 -0
  261. package/dist/threadline/ComputeMeter.js.map +1 -1
  262. package/dist/threadline/ContextThreadMap.d.ts.map +1 -1
  263. package/dist/threadline/ContextThreadMap.js +1 -0
  264. package/dist/threadline/ContextThreadMap.js.map +1 -1
  265. package/dist/threadline/InvitationManager.d.ts.map +1 -1
  266. package/dist/threadline/InvitationManager.js +1 -0
  267. package/dist/threadline/InvitationManager.js.map +1 -1
  268. package/dist/threadline/MCPAuth.d.ts.map +1 -1
  269. package/dist/threadline/MCPAuth.js +1 -0
  270. package/dist/threadline/MCPAuth.js.map +1 -1
  271. package/dist/threadline/PipeSessionSpawner.d.ts.map +1 -1
  272. package/dist/threadline/PipeSessionSpawner.js +2 -0
  273. package/dist/threadline/PipeSessionSpawner.js.map +1 -1
  274. package/dist/threadline/RateLimiter.d.ts.map +1 -1
  275. package/dist/threadline/RateLimiter.js +1 -0
  276. package/dist/threadline/RateLimiter.js.map +1 -1
  277. package/dist/threadline/SessionLifecycle.d.ts.map +1 -1
  278. package/dist/threadline/SessionLifecycle.js +1 -0
  279. package/dist/threadline/SessionLifecycle.js.map +1 -1
  280. package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -1
  281. package/dist/threadline/ThreadlineBootstrap.js +1 -0
  282. package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
  283. package/dist/threadline/WakeSocketServer.d.ts.map +1 -1
  284. package/dist/threadline/WakeSocketServer.js +2 -0
  285. package/dist/threadline/WakeSocketServer.js.map +1 -1
  286. package/dist/threadline/listener-daemon.d.ts.map +1 -1
  287. package/dist/threadline/listener-daemon.js +2 -0
  288. package/dist/threadline/listener-daemon.js.map +1 -1
  289. package/dist/users/UserManager.d.ts.map +1 -1
  290. package/dist/users/UserManager.js +1 -0
  291. package/dist/users/UserManager.js.map +1 -1
  292. package/dist/users/UserOnboarding.d.ts.map +1 -1
  293. package/dist/users/UserOnboarding.js +1 -0
  294. package/dist/users/UserOnboarding.js.map +1 -1
  295. package/dist/utils/jsonl-rotation.d.ts.map +1 -1
  296. package/dist/utils/jsonl-rotation.js +1 -0
  297. package/dist/utils/jsonl-rotation.js.map +1 -1
  298. package/package.json +4 -2
  299. package/scripts/add-migration-marker.js +121 -0
  300. package/scripts/analyze-release.js +6 -0
  301. package/scripts/check-contract-evidence.js +2 -0
  302. package/scripts/destructive-command-shim.js +1 -0
  303. package/scripts/fix-better-sqlite3.cjs +2 -0
  304. package/scripts/generate-builtin-manifest.cjs +1 -0
  305. package/scripts/instar-dev-precommit.js +2 -0
  306. package/scripts/lint-no-direct-destructive.js +597 -0
  307. package/scripts/migrate-incident-2026-04-17.mjs +1 -0
  308. package/scripts/pre-push-gate.js +24 -0
  309. package/scripts/test-bootstrap-relay.mjs +1 -0
  310. package/scripts/worktree-commit-msg-hook.js +4 -0
  311. package/scripts/worktree-precommit-gate.js +1 -0
  312. package/src/data/builtin-manifest.json +98 -98
  313. package/src/templates/scripts/git-sync-gate.sh +4 -0
  314. package/upgrades/0.28.76.md +67 -0
  315. package/upgrades/side-effects/comprehensive-destructive-tool-containment-foundation.md +74 -0
  316. package/upgrades/side-effects/telegram-lifeline-version-missing-info.md +76 -0
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * add-migration-marker.js — stamp every pre-existing direct destructive
4
+ * git/fs callsite with `// safe-git-allow: incremental-migration` so the
5
+ * lint rule (`scripts/lint-no-direct-destructive.js`) accepts the existing
6
+ * codebase during the transitional period.
7
+ *
8
+ * Idempotent. Running it multiple times is safe — already-marked callsites
9
+ * are skipped. After PR #2 migrates every callsite through SafeGitExecutor /
10
+ * SafeFsExecutor, this script can be deleted along with the marker support
11
+ * in the lint rule.
12
+ *
13
+ * Mechanism:
14
+ * 1. Run the lint rule with markers temporarily disabled to collect every
15
+ * pre-existing violation as (file, line) pairs.
16
+ * 2. For each unique line in each file, prepend a `// safe-git-allow:
17
+ * incremental-migration` comment matching the indentation of the
18
+ * flagged line. Skip if the marker already exists immediately above
19
+ * or on the same line.
20
+ * 3. Write the file back.
21
+ *
22
+ * Usage:
23
+ * node scripts/add-migration-marker.js
24
+ */
25
+
26
+ import fs from 'node:fs';
27
+ import path from 'node:path';
28
+ import { fileURLToPath } from 'node:url';
29
+ import { spawnSync } from 'node:child_process';
30
+
31
+ const __filename = fileURLToPath(import.meta.url);
32
+ const __dirname = path.dirname(__filename);
33
+ const ROOT = path.resolve(__dirname, '..');
34
+
35
+ const MARKER = '// safe-git-allow: incremental-migration';
36
+ const MARKER_RE = /\/\/\s*safe-git-allow:\s*incremental-migration\b/;
37
+
38
+ function collectViolations() {
39
+ // Run lint with the marker disabled by setting an env override the lint
40
+ // rule respects. Easier: pass --no-marker-suppression. The lint rule
41
+ // doesn't support that flag, so instead we set INSTAR_DISABLE_MIGRATION_MARKER=1
42
+ // and have the lint rule honor it.
43
+ const env = { ...process.env, INSTAR_DISABLE_MIGRATION_MARKER: '1' };
44
+ const result = spawnSync(process.execPath, [path.join(ROOT, 'scripts/lint-no-direct-destructive.js')], {
45
+ cwd: ROOT,
46
+ env,
47
+ encoding: 'utf8',
48
+ });
49
+ // Lint exits 1 on violations. We parse stderr regardless.
50
+ const stderr = result.stderr || '';
51
+
52
+ // Output format from lint:
53
+ // <relpath>:<line>:<col>
54
+ // <message>
55
+ const violations = [];
56
+ const lines = stderr.split('\n');
57
+ for (let i = 0; i < lines.length; i++) {
58
+ const m = lines[i].match(/^\s+([^:\s][^:]*):(\d+):(\d+)\s*$/);
59
+ if (m) {
60
+ violations.push({ file: m[1], line: parseInt(m[2], 10) });
61
+ }
62
+ }
63
+ return violations;
64
+ }
65
+
66
+ function applyMarkers(violations) {
67
+ // Group by file.
68
+ const byFile = new Map();
69
+ for (const v of violations) {
70
+ if (!byFile.has(v.file)) byFile.set(v.file, new Set());
71
+ byFile.get(v.file).add(v.line);
72
+ }
73
+
74
+ let marked = 0;
75
+ let skipped = 0;
76
+ for (const [relFile, lineSet] of byFile) {
77
+ const full = path.resolve(ROOT, relFile);
78
+ let text;
79
+ try {
80
+ text = fs.readFileSync(full, 'utf8');
81
+ } catch {
82
+ continue;
83
+ }
84
+ const orig = text.split('\n');
85
+
86
+ // Sort target lines DESCENDING so insertions don't shift later targets.
87
+ const targets = Array.from(lineSet).sort((a, b) => b - a);
88
+ const out = orig.slice();
89
+
90
+ for (const lineNum of targets) {
91
+ const idx = lineNum - 1; // 0-based
92
+ if (idx < 0 || idx >= out.length) continue;
93
+ const targetLine = out[idx];
94
+ // Skip if marker already on the target line or on the line above.
95
+ if (MARKER_RE.test(targetLine)) { skipped++; continue; }
96
+ if (idx - 1 >= 0 && MARKER_RE.test(out[idx - 1])) { skipped++; continue; }
97
+
98
+ // Match the indentation of the target line.
99
+ const indentMatch = targetLine.match(/^(\s*)/);
100
+ const indent = indentMatch ? indentMatch[1] : '';
101
+ out.splice(idx, 0, `${indent}${MARKER}`);
102
+ marked++;
103
+ }
104
+ fs.writeFileSync(full, out.join('\n'));
105
+ }
106
+ return { marked, skipped };
107
+ }
108
+
109
+ function main() {
110
+ const violations = collectViolations();
111
+ if (violations.length === 0) {
112
+ console.log('No violations detected — nothing to mark.');
113
+ return 0;
114
+ }
115
+ console.log(`Found ${violations.length} flagged callsites.`);
116
+ const { marked, skipped } = applyMarkers(violations);
117
+ console.log(`Stamped ${marked} new marker(s); ${skipped} already had a marker.`);
118
+ return 0;
119
+ }
120
+
121
+ process.exit(main());
@@ -44,15 +44,18 @@ function log(msg) {
44
44
 
45
45
  function getLastReleaseTag() {
46
46
  try {
47
+ // safe-git-allow: incremental-migration
47
48
  return execSync('git describe --tags --abbrev=0', { cwd: ROOT, encoding: 'utf-8' }).trim();
48
49
  } catch {
49
50
  // No tags at all — diff against the initial commit
51
+ // safe-git-allow: incremental-migration
50
52
  return execSync('git rev-list --max-parents=0 HEAD', { cwd: ROOT, encoding: 'utf-8' }).trim();
51
53
  }
52
54
  }
53
55
 
54
56
  function getCommitsSinceTag(tag) {
55
57
  try {
58
+ // safe-git-allow: incremental-migration
56
59
  const raw = execSync(`git log ${tag}..HEAD --oneline --no-merges`, { cwd: ROOT, encoding: 'utf-8' });
57
60
  return raw.trim().split('\n').filter(Boolean).map(line => {
58
61
  const [hash, ...rest] = line.split(' ');
@@ -65,6 +68,7 @@ function getCommitsSinceTag(tag) {
65
68
 
66
69
  function getDiffStat(tag) {
67
70
  try {
71
+ // safe-git-allow: incremental-migration
68
72
  return execSync(`git diff ${tag}..HEAD --stat`, { cwd: ROOT, encoding: 'utf-8' }).trim();
69
73
  } catch {
70
74
  return '';
@@ -73,6 +77,7 @@ function getDiffStat(tag) {
73
77
 
74
78
  function getChangedFiles(tag) {
75
79
  try {
80
+ // safe-git-allow: incremental-migration
76
81
  const raw = execSync(`git diff ${tag}..HEAD --name-status`, { cwd: ROOT, encoding: 'utf-8' });
77
82
  return raw.trim().split('\n').filter(Boolean).map(line => {
78
83
  const [status, ...pathParts] = line.split('\t');
@@ -85,6 +90,7 @@ function getChangedFiles(tag) {
85
90
 
86
91
  function getFileDiff(tag, file) {
87
92
  try {
93
+ // safe-git-allow: incremental-migration
88
94
  return execSync(`git diff ${tag}..HEAD -- "${file}"`, { cwd: ROOT, encoding: 'utf-8' });
89
95
  } catch {
90
96
  return '';
@@ -36,12 +36,14 @@ const ADAPTER_PATHS = [
36
36
  let adapterChanges = [];
37
37
  try {
38
38
  // Find files changed since the last npm version tag
39
+ // safe-git-allow: incremental-migration
39
40
  const lastTag = execSync('git describe --tags --abbrev=0 2>/dev/null || echo ""', {
40
41
  encoding: 'utf-8',
41
42
  cwd: ROOT,
42
43
  }).trim();
43
44
 
44
45
  const diffBase = lastTag || 'HEAD~10';
46
+ // safe-git-allow: incremental-migration
45
47
  const changedFiles = execSync(`git diff --name-only ${diffBase}...HEAD 2>/dev/null || echo ""`, {
46
48
  encoding: 'utf-8',
47
49
  cwd: ROOT,
@@ -102,6 +102,7 @@ function dryRunGitClean(cwd, args) {
102
102
  // Use -n to count what would be removed
103
103
  const dryArgs = ['-C', cwd, 'clean', '-n', ...args.filter(a => a !== '-f')];
104
104
  try {
105
+ // safe-git-allow: incremental-migration
105
106
  const out = execFileSync('git', dryArgs, { encoding: 'utf-8', timeout: 5000 });
106
107
  return out.split('\n').filter(Boolean).length;
107
108
  } catch { return Number.POSITIVE_INFINITY; }
@@ -167,6 +167,7 @@ function tryPrebuild(pkgDir, betterSqliteVersion) {
167
167
  console.log(`[fix-better-sqlite3] Downloading ${url}`);
168
168
  execSync(`curl -L -f -o "${tmpFile}" "${url}"`, { stdio: 'pipe', timeout: 30000 });
169
169
 
170
+ // safe-git-allow: incremental-migration
170
171
  if (fs.existsSync(buildDir)) fs.rmSync(buildDir, { recursive: true });
171
172
  execSync(`tar xzf "${tmpFile}" -C "${pkgDir}"`, { stdio: 'pipe' });
172
173
  return true;
@@ -174,6 +175,7 @@ function tryPrebuild(pkgDir, betterSqliteVersion) {
174
175
  console.warn(`[fix-better-sqlite3] prebuild download/extract failed: ${err.message}`);
175
176
  return false;
176
177
  } finally {
178
+ // safe-git-allow: incremental-migration
177
179
  try { fs.unlinkSync(tmpFile); } catch {}
178
180
  }
179
181
  }
@@ -18,6 +18,7 @@ const ROOT = path.resolve(__dirname, '..');
18
18
 
19
19
  // Guard: warn if working tree is dirty (manifest won't match committed source in CI)
20
20
  try {
21
+ // safe-git-allow: incremental-migration
21
22
  const status = execSync('git status --porcelain -- src/', { cwd: ROOT, encoding: 'utf-8' }).trim();
22
23
  if (status) {
23
24
  console.warn('\n⚠️ WARNING: Working tree has uncommitted changes in src/.');
@@ -47,6 +47,7 @@ if (fs.existsSync(path.join(ROOT, '.git', 'MERGE_HEAD'))) {
47
47
 
48
48
  let stagedOutput;
49
49
  try {
50
+ // safe-git-allow: incremental-migration
50
51
  stagedOutput = execSync('git diff --cached --name-only --diff-filter=ACMR', {
51
52
  cwd: ROOT,
52
53
  encoding: 'utf8',
@@ -93,6 +94,7 @@ if (inScopeFiles.length === 0) {
93
94
 
94
95
  let addedOutput = '';
95
96
  try {
97
+ // safe-git-allow: incremental-migration
96
98
  addedOutput = execSync('git diff --cached --name-only --diff-filter=A', {
97
99
  cwd: ROOT,
98
100
  encoding: 'utf8',