instar 0.28.74 → 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 (323) 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 +3 -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 +5 -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 +4 -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/SourceTreeGuard.d.ts +69 -0
  135. package/dist/core/SourceTreeGuard.d.ts.map +1 -0
  136. package/dist/core/SourceTreeGuard.js +378 -0
  137. package/dist/core/SourceTreeGuard.js.map +1 -0
  138. package/dist/core/StateManager.d.ts.map +1 -1
  139. package/dist/core/StateManager.js +49 -9
  140. package/dist/core/StateManager.js.map +1 -1
  141. package/dist/core/SyncOrchestrator.d.ts.map +1 -1
  142. package/dist/core/SyncOrchestrator.js +3 -0
  143. package/dist/core/SyncOrchestrator.js.map +1 -1
  144. package/dist/core/UpdateChecker.d.ts.map +1 -1
  145. package/dist/core/UpdateChecker.js +2 -0
  146. package/dist/core/UpdateChecker.js.map +1 -1
  147. package/dist/core/UpgradeGuideProcessor.d.ts.map +1 -1
  148. package/dist/core/UpgradeGuideProcessor.js +2 -0
  149. package/dist/core/UpgradeGuideProcessor.js.map +1 -1
  150. package/dist/core/WorktreeManager.d.ts.map +1 -1
  151. package/dist/core/WorktreeManager.js +7 -0
  152. package/dist/core/WorktreeManager.js.map +1 -1
  153. package/dist/knowledge/KnowledgeManager.d.ts.map +1 -1
  154. package/dist/knowledge/KnowledgeManager.js +1 -0
  155. package/dist/knowledge/KnowledgeManager.js.map +1 -1
  156. package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
  157. package/dist/lifeline/ServerSupervisor.js +14 -0
  158. package/dist/lifeline/ServerSupervisor.js.map +1 -1
  159. package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
  160. package/dist/lifeline/TelegramLifeline.js +1 -0
  161. package/dist/lifeline/TelegramLifeline.js.map +1 -1
  162. package/dist/lifeline/droppedMessages.d.ts.map +1 -1
  163. package/dist/lifeline/droppedMessages.js +1 -0
  164. package/dist/lifeline/droppedMessages.js.map +1 -1
  165. package/dist/memory/EpisodicMemory.d.ts.map +1 -1
  166. package/dist/memory/EpisodicMemory.js +1 -0
  167. package/dist/memory/EpisodicMemory.js.map +1 -1
  168. package/dist/memory/TopicMemory.d.ts.map +1 -1
  169. package/dist/memory/TopicMemory.js +4 -0
  170. package/dist/memory/TopicMemory.js.map +1 -1
  171. package/dist/messaging/AgentTokenManager.d.ts.map +1 -1
  172. package/dist/messaging/AgentTokenManager.js +1 -0
  173. package/dist/messaging/AgentTokenManager.js.map +1 -1
  174. package/dist/messaging/DropPickup.js +1 -0
  175. package/dist/messaging/DropPickup.js.map +1 -1
  176. package/dist/messaging/GitSyncTransport.d.ts.map +1 -1
  177. package/dist/messaging/GitSyncTransport.js +3 -0
  178. package/dist/messaging/GitSyncTransport.js.map +1 -1
  179. package/dist/messaging/MessageStore.d.ts.map +1 -1
  180. package/dist/messaging/MessageStore.js +2 -0
  181. package/dist/messaging/MessageStore.js.map +1 -1
  182. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  183. package/dist/messaging/TelegramAdapter.js +4 -0
  184. package/dist/messaging/TelegramAdapter.js.map +1 -1
  185. package/dist/messaging/backends/BaileysBackend.d.ts.map +1 -1
  186. package/dist/messaging/backends/BaileysBackend.js +2 -0
  187. package/dist/messaging/backends/BaileysBackend.js.map +1 -1
  188. package/dist/messaging/shared/EncryptedAuthStore.d.ts.map +1 -1
  189. package/dist/messaging/shared/EncryptedAuthStore.js +2 -0
  190. package/dist/messaging/shared/EncryptedAuthStore.js.map +1 -1
  191. package/dist/messaging/shared/MessageLogger.d.ts.map +1 -1
  192. package/dist/messaging/shared/MessageLogger.js +1 -0
  193. package/dist/messaging/shared/MessageLogger.js.map +1 -1
  194. package/dist/messaging/shared/PrivacyConsent.d.ts.map +1 -1
  195. package/dist/messaging/shared/PrivacyConsent.js +1 -0
  196. package/dist/messaging/shared/PrivacyConsent.js.map +1 -1
  197. package/dist/messaging/shared/SessionChannelRegistry.d.ts.map +1 -1
  198. package/dist/messaging/shared/SessionChannelRegistry.js +1 -0
  199. package/dist/messaging/shared/SessionChannelRegistry.js.map +1 -1
  200. package/dist/moltbridge/ProfileCompiler.d.ts.map +1 -1
  201. package/dist/moltbridge/ProfileCompiler.js +3 -0
  202. package/dist/moltbridge/ProfileCompiler.js.map +1 -1
  203. package/dist/monitoring/CommitmentTracker.d.ts.map +1 -1
  204. package/dist/monitoring/CommitmentTracker.js +1 -0
  205. package/dist/monitoring/CommitmentTracker.js.map +1 -1
  206. package/dist/monitoring/CredentialProvider.d.ts.map +1 -1
  207. package/dist/monitoring/CredentialProvider.js +1 -0
  208. package/dist/monitoring/CredentialProvider.js.map +1 -1
  209. package/dist/monitoring/HealthChecker.d.ts.map +1 -1
  210. package/dist/monitoring/HealthChecker.js +1 -0
  211. package/dist/monitoring/HealthChecker.js.map +1 -1
  212. package/dist/monitoring/HookEventReceiver.d.ts.map +1 -1
  213. package/dist/monitoring/HookEventReceiver.js +1 -0
  214. package/dist/monitoring/HookEventReceiver.js.map +1 -1
  215. package/dist/monitoring/InstructionsVerifier.d.ts.map +1 -1
  216. package/dist/monitoring/InstructionsVerifier.js +1 -0
  217. package/dist/monitoring/InstructionsVerifier.js.map +1 -1
  218. package/dist/monitoring/PresenceProxy.d.ts.map +1 -1
  219. package/dist/monitoring/PresenceProxy.js +4 -0
  220. package/dist/monitoring/PresenceProxy.js.map +1 -1
  221. package/dist/monitoring/QuotaTracker.d.ts.map +1 -1
  222. package/dist/monitoring/QuotaTracker.js +1 -0
  223. package/dist/monitoring/QuotaTracker.js.map +1 -1
  224. package/dist/monitoring/SessionMigrator.d.ts.map +1 -1
  225. package/dist/monitoring/SessionMigrator.js +1 -0
  226. package/dist/monitoring/SessionMigrator.js.map +1 -1
  227. package/dist/monitoring/SessionRecovery.d.ts.map +1 -1
  228. package/dist/monitoring/SessionRecovery.js +1 -0
  229. package/dist/monitoring/SessionRecovery.js.map +1 -1
  230. package/dist/monitoring/TelemetryAuth.d.ts.map +1 -1
  231. package/dist/monitoring/TelemetryAuth.js +2 -0
  232. package/dist/monitoring/TelemetryAuth.js.map +1 -1
  233. package/dist/monitoring/TriageOrchestrator.d.ts.map +1 -1
  234. package/dist/monitoring/TriageOrchestrator.js +2 -0
  235. package/dist/monitoring/TriageOrchestrator.js.map +1 -1
  236. package/dist/monitoring/WorktreeReaper.d.ts.map +1 -1
  237. package/dist/monitoring/WorktreeReaper.js +3 -0
  238. package/dist/monitoring/WorktreeReaper.js.map +1 -1
  239. package/dist/monitoring/probes/PlatformProbe.d.ts.map +1 -1
  240. package/dist/monitoring/probes/PlatformProbe.js +2 -0
  241. package/dist/monitoring/probes/PlatformProbe.js.map +1 -1
  242. package/dist/paste/PasteManager.d.ts.map +1 -1
  243. package/dist/paste/PasteManager.js +4 -0
  244. package/dist/paste/PasteManager.js.map +1 -1
  245. package/dist/publishing/PrivateViewer.d.ts.map +1 -1
  246. package/dist/publishing/PrivateViewer.js +1 -0
  247. package/dist/publishing/PrivateViewer.js.map +1 -1
  248. package/dist/scheduler/JobScheduler.d.ts.map +1 -1
  249. package/dist/scheduler/JobScheduler.js +1 -0
  250. package/dist/scheduler/JobScheduler.js.map +1 -1
  251. package/dist/server/routes.d.ts.map +1 -1
  252. package/dist/server/routes.js +21 -9
  253. package/dist/server/routes.js.map +1 -1
  254. package/dist/threadline/AgentDiscovery.d.ts.map +1 -1
  255. package/dist/threadline/AgentDiscovery.js +1 -0
  256. package/dist/threadline/AgentDiscovery.js.map +1 -1
  257. package/dist/threadline/AgentTrustManager.d.ts.map +1 -1
  258. package/dist/threadline/AgentTrustManager.js +1 -0
  259. package/dist/threadline/AgentTrustManager.js.map +1 -1
  260. package/dist/threadline/CircuitBreaker.d.ts.map +1 -1
  261. package/dist/threadline/CircuitBreaker.js +1 -0
  262. package/dist/threadline/CircuitBreaker.js.map +1 -1
  263. package/dist/threadline/ComputeMeter.d.ts.map +1 -1
  264. package/dist/threadline/ComputeMeter.js +1 -0
  265. package/dist/threadline/ComputeMeter.js.map +1 -1
  266. package/dist/threadline/ContextThreadMap.d.ts.map +1 -1
  267. package/dist/threadline/ContextThreadMap.js +1 -0
  268. package/dist/threadline/ContextThreadMap.js.map +1 -1
  269. package/dist/threadline/InvitationManager.d.ts.map +1 -1
  270. package/dist/threadline/InvitationManager.js +1 -0
  271. package/dist/threadline/InvitationManager.js.map +1 -1
  272. package/dist/threadline/MCPAuth.d.ts.map +1 -1
  273. package/dist/threadline/MCPAuth.js +1 -0
  274. package/dist/threadline/MCPAuth.js.map +1 -1
  275. package/dist/threadline/PipeSessionSpawner.d.ts.map +1 -1
  276. package/dist/threadline/PipeSessionSpawner.js +2 -0
  277. package/dist/threadline/PipeSessionSpawner.js.map +1 -1
  278. package/dist/threadline/RateLimiter.d.ts.map +1 -1
  279. package/dist/threadline/RateLimiter.js +1 -0
  280. package/dist/threadline/RateLimiter.js.map +1 -1
  281. package/dist/threadline/SessionLifecycle.d.ts.map +1 -1
  282. package/dist/threadline/SessionLifecycle.js +1 -0
  283. package/dist/threadline/SessionLifecycle.js.map +1 -1
  284. package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -1
  285. package/dist/threadline/ThreadlineBootstrap.js +1 -0
  286. package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
  287. package/dist/threadline/WakeSocketServer.d.ts.map +1 -1
  288. package/dist/threadline/WakeSocketServer.js +2 -0
  289. package/dist/threadline/WakeSocketServer.js.map +1 -1
  290. package/dist/threadline/listener-daemon.d.ts.map +1 -1
  291. package/dist/threadline/listener-daemon.js +2 -0
  292. package/dist/threadline/listener-daemon.js.map +1 -1
  293. package/dist/users/UserManager.d.ts.map +1 -1
  294. package/dist/users/UserManager.js +1 -0
  295. package/dist/users/UserManager.js.map +1 -1
  296. package/dist/users/UserOnboarding.d.ts.map +1 -1
  297. package/dist/users/UserOnboarding.js +1 -0
  298. package/dist/users/UserOnboarding.js.map +1 -1
  299. package/dist/utils/jsonl-rotation.d.ts.map +1 -1
  300. package/dist/utils/jsonl-rotation.js +1 -0
  301. package/dist/utils/jsonl-rotation.js.map +1 -1
  302. package/package.json +4 -2
  303. package/scripts/add-migration-marker.js +121 -0
  304. package/scripts/analyze-release.js +6 -0
  305. package/scripts/check-contract-evidence.js +2 -0
  306. package/scripts/destructive-command-shim.js +1 -0
  307. package/scripts/fix-better-sqlite3.cjs +2 -0
  308. package/scripts/generate-builtin-manifest.cjs +1 -0
  309. package/scripts/instar-dev-precommit.js +2 -0
  310. package/scripts/lint-no-direct-destructive.js +597 -0
  311. package/scripts/migrate-incident-2026-04-17.mjs +1 -0
  312. package/scripts/pre-push-gate.js +24 -0
  313. package/scripts/test-bootstrap-relay.mjs +1 -0
  314. package/scripts/worktree-commit-msg-hook.js +4 -0
  315. package/scripts/worktree-precommit-gate.js +1 -0
  316. package/src/data/builtin-manifest.json +98 -98
  317. package/src/templates/scripts/git-sync-gate.sh +4 -0
  318. package/upgrades/0.28.75.md +29 -0
  319. package/upgrades/0.28.76.md +67 -0
  320. package/upgrades/side-effects/0.28.75.md +53 -0
  321. package/upgrades/side-effects/comprehensive-destructive-tool-containment-foundation.md +74 -0
  322. package/upgrades/side-effects/source-tree-guard.md +340 -0
  323. package/upgrades/side-effects/telegram-lifeline-version-missing-info.md +76 -0
@@ -0,0 +1,76 @@
1
+ # Side-Effects Review — TelegramLifeline.versionMissing → info-only log
2
+
3
+ **Slug:** `telegram-lifeline-version-missing-info`
4
+ **Date:** `2026-04-27`
5
+ **Author:** Dawn (instar-bug-fix autonomous job)
6
+ **Cluster:** `cmo7wswhj0000mgmdbw4j7dyd` (severity: critical → resolved by reclassification)
7
+
8
+ ## Summary of the change
9
+
10
+ In `src/server/routes.ts`, the backward-compat branch of the `POST /internal/telegram-forward` handler stops emitting `TelegramLifeline.versionMissing` as a `[DEGRADATION]` feedback event. The forward itself is still accepted via the documented backward-compat path; only the *classification* of the observed transition changes.
11
+
12
+ Concretely:
13
+
14
+ - The call to `DegradationReporter.getInstance().report({ feature: 'TelegramLifeline.versionMissing', … })` is removed from `routes.ts:6367-6376`.
15
+ - A one-shot `console.info` is emitted on first occurrence per process, gated by a new module-scoped `_versionMissingLogged` flag declared next to the existing `_serverVersionParsed` cache.
16
+ - No other lines of code change. No new files. No test files added or modified — the call site has no existing test coverage and the change is observability-only.
17
+
18
+ Files touched:
19
+ - `src/server/routes.ts` — two small edits described above.
20
+ - `docs/specs/telegram-lifeline-version-missing-info.md` — new spec (LOW-risk autonomous-approved).
21
+ - `upgrades/side-effects/telegram-lifeline-version-missing-info.md` — this file.
22
+ - `upgrades/NEXT.md` — release notes appended.
23
+
24
+ ## 1. Over-block
25
+
26
+ **What legitimate inputs does this change reject that it shouldn't?**
27
+
28
+ None. The handler still accepts the forward; nothing is rejected. Pre-Stage-B lifelines continue to work exactly as they did, including the response body and logged inbound message. The only thing that changes is whether the acceptance is also reported as a `[DEGRADATION]` event into the feedback pipeline.
29
+
30
+ ## 2. Under-block
31
+
32
+ **What failure modes does this still miss?**
33
+
34
+ A genuine class of "lifeline running with wrong assumptions about server" issues that *also* manifest as a missing version field would no longer raise a degradation event. In practice, `lifelineVersion === undefined` only happens in the pre-Stage-B compatibility scenario — newer lifelines always send the field. Any *new* incompatibility class would also need to hit a different branch of this handler to surface, which is the correct layer.
35
+
36
+ The console.info preserves the signal in server logs (the operator-side observability surface). What we lose is the per-incident feedback-pipeline submission — which was the entire point of this change, since those submissions were being mis-classified as critical.
37
+
38
+ ## 3. Level-of-abstraction fit
39
+
40
+ **Is this at the right layer?**
41
+
42
+ Yes. The right long-term fix — adding a typed severity / category field to `DegradationReporter` so callers can distinguish ERROR from COMPAT_SIGNAL — is a broader API change tracked under PROP-543. This spec deliberately stays at the call site. The call site already has the contextual knowledge that *this particular* condition is observability-only (per the existing comment "emit informational signal once per cooldown" and the original commit's "Missing field accepted for backward compat."). Encoding "this is observability, not a degradation" at the call site is correct until the typed-severity refactor lands.
43
+
44
+ The chosen mechanism (module-scoped boolean + console.info) matches existing patterns in `routes.ts` (e.g. `console.log('[telegram-forward] …')` at lines 6452, 6515, 6604).
45
+
46
+ ## 4. Signal vs authority compliance
47
+
48
+ **Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
49
+
50
+ **Does this change hold blocking authority with brittle logic?**
51
+
52
+ No. This change has no block/allow surface. It is purely a presentation/classification change about how an *already-accepted* request is reported back into the feedback pipeline. The handler still makes the same admission decision (accept the forward) it did before.
53
+
54
+ ## 5. Interactions
55
+
56
+ - **Shadowing:** No — there is no alternative reporting path that this could shadow. The DegradationReporter call was the only emission site for `TelegramLifeline.versionMissing`. Removing it removes the signal from the feedback pipeline and only from there.
57
+ - **Cooldown coupling:** The previous code relied implicitly on `DegradationReporter`'s per-feature alert cooldown to avoid Telegram spam. Replacing the call with a one-shot `console.info` on the same condition removes that coupling: even without cooldown, the new path emits at most once per process. Per-process log noise is bounded; restart frequency dominates.
58
+ - **Build manifest:** `routes.ts` is a route-group source, so `scripts/generate-builtin-manifest.cjs` re-emits its inventory. No symbol added or removed (the new boolean is local), so the manifest delta is zero entries.
59
+
60
+ ## 6. Test coverage
61
+
62
+ **What tests changed and why.**
63
+
64
+ No test file is added or modified.
65
+
66
+ - The pre-fix call site had no direct test referencing `TelegramLifeline.versionMissing` (`grep` confirms). The only test surface for `/internal/telegram-forward` exercises the version-handshake decision tree, not the feedback emission side-effect.
67
+ - A "no degradation feedback emitted" assertion on this branch would require reaching into `DegradationReporter` internals, which is brittle and out of step with the existing test harness.
68
+ - The signal-preserving `console.info` is a logging-only side-effect; in line with existing `console.log` patterns in `routes.ts`, it is intentionally untested.
69
+
70
+ If a future test ever wants to assert "backward-compat path is informational only," the natural seam is the `DegradationReporter` mock in `tests/integration/server-route-degradation.test.ts` (if/when written) — verifying the reporter is *not* called for this branch.
71
+
72
+ ## 7. Reviewer notes
73
+
74
+ The cluster research notes cite this exact fix and acknowledge the broader systemic work as PROP-543. This change is the minimal, lowest-risk realisation of the cited fix and explicitly does not anticipate the systemic refactor.
75
+
76
+ A second-pass review is not required: no signal/authority change, no contract surface, no API change, single-file edit at a documented call site with no existing tests.