sneakoscope 2.0.13 → 2.0.15

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 (504) hide show
  1. package/README.md +6 -3
  2. package/crates/sks-core/Cargo.lock +1 -1
  3. package/crates/sks-core/Cargo.toml +1 -1
  4. package/crates/sks-core/src/main.rs +1 -1
  5. package/dist/.sks-build-stamp.json +4 -4
  6. package/dist/bin/sks.js +1 -1
  7. package/dist/cli/command-registry.js +1 -0
  8. package/dist/commands/mad-db.js +5 -0
  9. package/dist/commands/zellij-slot-pane.js +3 -1
  10. package/dist/core/agents/agent-orchestrator.js +11 -4
  11. package/dist/core/agents/agent-output-validator.js +1 -1
  12. package/dist/core/agents/agent-plan.js +3 -2
  13. package/dist/core/agents/native-cli-session-swarm.js +118 -0
  14. package/dist/core/agents/native-cli-worker.js +85 -0
  15. package/dist/core/codex-control/codex-fake-sdk-adapter.js +3 -3
  16. package/dist/core/codex-control/gpt-final-review-schema.js +61 -14
  17. package/dist/core/commands/basic-cli.js +1 -1
  18. package/dist/core/commands/command-suggestions.js +1 -1
  19. package/dist/core/commands/mad-db-command.js +106 -0
  20. package/dist/core/commands/mad-sks-command.js +50 -13
  21. package/dist/core/commands/naruto-command.js +82 -1
  22. package/dist/core/commands/research-command.js +83 -17
  23. package/dist/core/commands/team-command.js +25 -1
  24. package/dist/core/db-safety.js +26 -0
  25. package/dist/core/fsx.js +1 -1
  26. package/dist/core/mad-db/mad-db-capability.js +84 -0
  27. package/dist/core/mad-db/mad-db-ledger.js +17 -0
  28. package/dist/core/mad-db/mad-db-policy-resolver.js +46 -0
  29. package/dist/core/naruto/naruto-real-worker-child.js +11 -3
  30. package/dist/core/naruto/naruto-real-worker-runtime.js +4 -0
  31. package/dist/core/pipeline/final-gpt-patch-stage.js +20 -3
  32. package/dist/core/pipeline-internals/runtime-core.js +74 -8
  33. package/dist/core/pipeline-internals/runtime-gates.js +44 -0
  34. package/dist/core/proof/route-proof-gate.js +5 -3
  35. package/dist/core/proof/route-proof-policy.js +9 -1
  36. package/dist/core/release/release-gate-affected-selector.js +113 -0
  37. package/dist/core/release/release-gate-batch-runner.js +67 -0
  38. package/dist/core/release/release-gate-dag.js +22 -3
  39. package/dist/core/release/release-gate-resource-governor.js +23 -11
  40. package/dist/core/research/implementation-blueprint-densifier.js +124 -0
  41. package/dist/core/research/implementation-blueprint-markdown.js +1 -1
  42. package/dist/core/research/implementation-blueprint.js +68 -7
  43. package/dist/core/research/research-claim-builder.js +114 -0
  44. package/dist/core/research/research-cycle-runner.js +115 -11
  45. package/dist/core/research/research-final-reviewer.js +181 -1
  46. package/dist/core/research/research-handoff.js +69 -5
  47. package/dist/core/research/research-realistic-report.js +162 -0
  48. package/dist/core/research/research-repetition-detector.js +75 -0
  49. package/dist/core/research/research-report-quality.js +27 -5
  50. package/dist/core/research/research-source-ledger-merge.js +186 -0
  51. package/dist/core/research/research-source-shards.js +176 -0
  52. package/dist/core/research/research-stage-runner.js +537 -11
  53. package/dist/core/research/research-synthesis-prompt.js +52 -0
  54. package/dist/core/research/research-synthesis-writer.js +208 -0
  55. package/dist/core/research/research-work-graph.js +114 -23
  56. package/dist/core/research.js +72 -48
  57. package/dist/core/routes.js +23 -19
  58. package/dist/core/update/update-notice.js +120 -0
  59. package/dist/core/version.js +1 -1
  60. package/dist/core/zellij/zellij-dashboard-renderer.js +2 -0
  61. package/dist/core/zellij/zellij-slot-column-anchor.js +35 -1
  62. package/dist/core/zellij/zellij-slot-pane-renderer.js +57 -0
  63. package/dist/core/zellij/zellij-slot-telemetry.js +182 -0
  64. package/dist/scripts/release-gate-dag-runner.js +5 -0
  65. package/dist/scripts/release-speed-summary.js +25 -0
  66. package/package.json +67 -5
  67. package/schemas/codex/agent-result.schema.json +1 -1
  68. package/schemas/mad-db/mad-db-capability.schema.json +31 -0
  69. package/schemas/mad-db/mad-db-ledger.schema.json +14 -0
  70. package/schemas/research/implementation-blueprint.schema.json +6 -1
  71. package/schemas/research/research-final-review.schema.json +10 -0
  72. package/schemas/research/research-source-shard.schema.json +46 -0
  73. package/schemas/research/research-synthesis-output.schema.json +62 -0
  74. package/schemas/update/update-notice.schema.json +19 -0
  75. package/schemas/zellij/zellij-slot-telemetry.schema.json +89 -0
  76. package/dist/build-manifest.json +0 -1184
  77. package/dist/scripts/agent-ast-aware-work-graph-check.js +0 -25
  78. package/dist/scripts/agent-backfill-replenishment-check.js +0 -13
  79. package/dist/scripts/agent-backfill-route-blackbox.js +0 -5
  80. package/dist/scripts/agent-background-terminals-check.js +0 -16
  81. package/dist/scripts/agent-cleanup-command-ux-check.js +0 -12
  82. package/dist/scripts/agent-cleanup-executor-check.js +0 -53
  83. package/dist/scripts/agent-cleanup-executor-v2-check.js +0 -39
  84. package/dist/scripts/agent-cli-options-to-task-graph-check.js +0 -5
  85. package/dist/scripts/agent-codex-app-cockpit-check.js +0 -91
  86. package/dist/scripts/agent-codex-child-overlap-check.js +0 -21
  87. package/dist/scripts/agent-dynamic-cockpit-check.js +0 -10
  88. package/dist/scripts/agent-dynamic-pool-check.js +0 -13
  89. package/dist/scripts/agent-dynamic-pool-route-blackbox.js +0 -5
  90. package/dist/scripts/agent-fast-mode-default-check.js +0 -62
  91. package/dist/scripts/agent-fast-mode-worker-propagation-check.js +0 -7
  92. package/dist/scripts/agent-follow-up-work-schema-check.js +0 -80
  93. package/dist/scripts/agent-goal-mode-propagation-check.js +0 -9
  94. package/dist/scripts/agent-intelligent-work-graph-check.js +0 -25
  95. package/dist/scripts/agent-janitor-check.js +0 -76
  96. package/dist/scripts/agent-main-no-scout-check.js +0 -11
  97. package/dist/scripts/agent-model-authored-patch-envelope-check.js +0 -15
  98. package/dist/scripts/agent-multi-project-isolation-check.js +0 -86
  99. package/dist/scripts/agent-native-cli-session-proof-check.js +0 -7
  100. package/dist/scripts/agent-native-cli-session-swarm-10-check.js +0 -7
  101. package/dist/scripts/agent-native-cli-session-swarm-20-check.js +0 -7
  102. package/dist/scripts/agent-native-cli-session-swarm-check.js +0 -7
  103. package/dist/scripts/agent-no-subagent-scaling-check.js +0 -7
  104. package/dist/scripts/agent-parallel-write-blackbox.js +0 -56
  105. package/dist/scripts/agent-parallel-write-kernel-check.js +0 -103
  106. package/dist/scripts/agent-patch-conflict-rebase-check.js +0 -198
  107. package/dist/scripts/agent-patch-envelope-extraction-check.js +0 -17
  108. package/dist/scripts/agent-patch-proof-check.js +0 -41
  109. package/dist/scripts/agent-patch-proof-runtime-check.js +0 -63
  110. package/dist/scripts/agent-patch-queue-runtime-check.js +0 -36
  111. package/dist/scripts/agent-patch-rollback-check.js +0 -38
  112. package/dist/scripts/agent-patch-rollback-dag-check.js +0 -14
  113. package/dist/scripts/agent-patch-swarm-route-blackbox.js +0 -10
  114. package/dist/scripts/agent-patch-swarm-runtime-check.js +0 -10
  115. package/dist/scripts/agent-patch-swarm-runtime-truth-check.js +0 -76
  116. package/dist/scripts/agent-patch-transaction-journal-check.js +0 -57
  117. package/dist/scripts/agent-patch-verification-dag-check.js +0 -14
  118. package/dist/scripts/agent-proof-contract-reconciled-check.js +0 -5
  119. package/dist/scripts/agent-real-codex-dynamic-smoke-check.js +0 -166
  120. package/dist/scripts/agent-real-codex-dynamic-smoke-v2-check.js +0 -14
  121. package/dist/scripts/agent-real-codex-in-zellij-worker-pane-check.js +0 -229
  122. package/dist/scripts/agent-real-codex-parallel-workers-10-check.js +0 -5
  123. package/dist/scripts/agent-real-codex-parallel-workers-20-check.js +0 -5
  124. package/dist/scripts/agent-real-codex-parallel-workers-5-check.js +0 -5
  125. package/dist/scripts/agent-real-codex-parallel-workers-check.js +0 -5
  126. package/dist/scripts/agent-role-config-repair-check.js +0 -33
  127. package/dist/scripts/agent-rollback-command-check.js +0 -86
  128. package/dist/scripts/agent-route-truth-backfill-check.js +0 -5
  129. package/dist/scripts/agent-scheduler-proof-check.js +0 -13
  130. package/dist/scripts/agent-scheduler-proof-hardening-check.js +0 -22
  131. package/dist/scripts/agent-session-generation-check.js +0 -21
  132. package/dist/scripts/agent-slot-pane-binding-proof-check.js +0 -64
  133. package/dist/scripts/agent-source-intelligence-propagation-check.js +0 -9
  134. package/dist/scripts/agent-strategy-to-lease-wiring-check.js +0 -32
  135. package/dist/scripts/agent-strategy-to-patch-strict-check.js +0 -54
  136. package/dist/scripts/agent-task-graph-expansion-check.js +0 -14
  137. package/dist/scripts/agent-terminal-generations-check.js +0 -23
  138. package/dist/scripts/agent-visual-consistency-check.js +0 -9
  139. package/dist/scripts/agent-wiki-context-proof-check.js +0 -62
  140. package/dist/scripts/agent-worker-backend-router-check.js +0 -63
  141. package/dist/scripts/agent-worker-scout-limited-check.js +0 -17
  142. package/dist/scripts/agent-zellij-dynamic-backfill-panes-check.js +0 -34
  143. package/dist/scripts/agent-zellij-runtime-check.js +0 -84
  144. package/dist/scripts/all-feature-deep-completion-check.js +0 -31
  145. package/dist/scripts/appshots-capability-check.js +0 -18
  146. package/dist/scripts/appshots-evidence-check.js +0 -48
  147. package/dist/scripts/appshots-operator-policy-check.js +0 -25
  148. package/dist/scripts/appshots-privacy-safety-check.js +0 -48
  149. package/dist/scripts/appshots-source-intelligence-check.js +0 -53
  150. package/dist/scripts/appshots-thread-attachment-discovery-check.js +0 -87
  151. package/dist/scripts/appshots-triwiki-voxel-check.js +0 -46
  152. package/dist/scripts/architecture-guard-check.js +0 -55
  153. package/dist/scripts/changelog-check.js +0 -47
  154. package/dist/scripts/codex-0-133-official-compat-report.js +0 -53
  155. package/dist/scripts/codex-0-134-official-compat-report.js +0 -110
  156. package/dist/scripts/codex-0-134-runner-truth-check.js +0 -66
  157. package/dist/scripts/codex-0-135-compat-check.js +0 -57
  158. package/dist/scripts/codex-0-136-compat-check.js +0 -30
  159. package/dist/scripts/codex-0-137-compat-check.js +0 -27
  160. package/dist/scripts/codex-app-fast-ui-preservation-check.js +0 -32
  161. package/dist/scripts/codex-app-provider-badge-check.js +0 -37
  162. package/dist/scripts/codex-app-ui-clobber-guard-check.js +0 -22
  163. package/dist/scripts/codex-app-ui-preservation-check.js +0 -96
  164. package/dist/scripts/codex-control-all-pipelines-check.js +0 -36
  165. package/dist/scripts/codex-control-capability-check.js +0 -10
  166. package/dist/scripts/codex-control-empty-result-retry-check.js +0 -43
  167. package/dist/scripts/codex-control-event-stream-ledger-check.js +0 -10
  168. package/dist/scripts/codex-control-keepalive-no-cot-leak-check.js +0 -14
  169. package/dist/scripts/codex-control-no-legacy-fallback-check.js +0 -31
  170. package/dist/scripts/codex-control-side-effect-scope-check.js +0 -26
  171. package/dist/scripts/codex-control-stream-idle-watchdog-check.js +0 -18
  172. package/dist/scripts/codex-control-structured-output-check.js +0 -11
  173. package/dist/scripts/codex-control-thread-registry-check.js +0 -11
  174. package/dist/scripts/codex-control-tool-call-sequence-repair-check.js +0 -14
  175. package/dist/scripts/codex-environment-scoped-approvals-check.js +0 -10
  176. package/dist/scripts/codex-exec-output-schema-actual-syntax-check.js +0 -33
  177. package/dist/scripts/codex-fast-mode-profile-propagation-check.js +0 -12
  178. package/dist/scripts/codex-history-search-check.js +0 -19
  179. package/dist/scripts/codex-hook-semantic-check.js +0 -15
  180. package/dist/scripts/codex-hook-strict-subset-check.js +0 -61
  181. package/dist/scripts/codex-lb-config-toml-safety-check.js +0 -85
  182. package/dist/scripts/codex-lb-persistence-truth-check.js +0 -96
  183. package/dist/scripts/codex-lb-setup-fixture-check.js +0 -91
  184. package/dist/scripts/codex-lb-setup-truthfulness-check.js +0 -84
  185. package/dist/scripts/codex-legacy-profile-consumers-removed-check.js +0 -24
  186. package/dist/scripts/codex-managed-proxy-env-check.js +0 -17
  187. package/dist/scripts/codex-output-schema-fixture-check.js +0 -25
  188. package/dist/scripts/codex-permission-profiles-check.js +0 -36
  189. package/dist/scripts/codex-plugin-list-json-check.js +0 -8
  190. package/dist/scripts/codex-profile-primary-check.js +0 -13
  191. package/dist/scripts/codex-project-config-policy-splitter-check.js +0 -51
  192. package/dist/scripts/codex-resume-cwd-truth-check.js +0 -17
  193. package/dist/scripts/codex-sdk-all-pipelines-check.js +0 -32
  194. package/dist/scripts/codex-sdk-backend-router-check.js +0 -65
  195. package/dist/scripts/codex-sdk-capability-check.js +0 -11
  196. package/dist/scripts/codex-sdk-core-skill-pipeline-check.js +0 -9
  197. package/dist/scripts/codex-sdk-dfix-pipeline-check.js +0 -9
  198. package/dist/scripts/codex-sdk-event-stream-ledger-check.js +0 -9
  199. package/dist/scripts/codex-sdk-no-legacy-fallback-check.js +0 -33
  200. package/dist/scripts/codex-sdk-qa-pipeline-check.js +0 -8
  201. package/dist/scripts/codex-sdk-real-smoke-check.js +0 -39
  202. package/dist/scripts/codex-sdk-release-review-pipeline-check.js +0 -13
  203. package/dist/scripts/codex-sdk-research-pipeline-check.js +0 -15
  204. package/dist/scripts/codex-sdk-sandbox-policy-check.js +0 -21
  205. package/dist/scripts/codex-sdk-structured-output-check.js +0 -10
  206. package/dist/scripts/codex-sdk-team-naruto-agent-pipeline-check.js +0 -12
  207. package/dist/scripts/codex-sdk-thread-registry-check.js +0 -11
  208. package/dist/scripts/codex-sdk-ux-ppt-review-pipeline-check.js +0 -9
  209. package/dist/scripts/codex-sdk-zellij-pane-binding-check.js +0 -13
  210. package/dist/scripts/codex-thread-runtime-choice-check.js +0 -10
  211. package/dist/scripts/codex-web-adapter-check.js +0 -12
  212. package/dist/scripts/computer-use-live-evidence-check.js +0 -55
  213. package/dist/scripts/computer-use-live-optional-check.js +0 -32
  214. package/dist/scripts/computer-use-policy-check.js +0 -69
  215. package/dist/scripts/computer-use-visual-route-fixture-check.js +0 -37
  216. package/dist/scripts/core-skill-card-schema-check.js +0 -61
  217. package/dist/scripts/core-skill-deployment-snapshot-check.js +0 -54
  218. package/dist/scripts/core-skill-heldout-validation-check.js +0 -49
  219. package/dist/scripts/core-skill-no-inference-optimizer-check.js +0 -75
  220. package/dist/scripts/core-skill-patch-check.js +0 -79
  221. package/dist/scripts/core-skill-promotion-side-effect-ledger-check.js +0 -64
  222. package/dist/scripts/core-skill-rollout-scoring-check.js +0 -72
  223. package/dist/scripts/core-skill-route-runtime-integration-check.js +0 -49
  224. package/dist/scripts/dfix-fast-blackbox-check.js +0 -37
  225. package/dist/scripts/dfix-fast-kernel-check.js +0 -26
  226. package/dist/scripts/dfix-fixture-check.js +0 -6
  227. package/dist/scripts/dfix-parallel-write-blackbox.js +0 -48
  228. package/dist/scripts/dfix-patch-handoff-check.js +0 -13
  229. package/dist/scripts/dfix-patch-swarm-route-blackbox.js +0 -10
  230. package/dist/scripts/dfix-performance-check.js +0 -15
  231. package/dist/scripts/dfix-verification-check.js +0 -9
  232. package/dist/scripts/dfix-verification-recommendation-check.js +0 -15
  233. package/dist/scripts/docs-truthfulness-check.js +0 -61
  234. package/dist/scripts/doctor-codex-doctor-parity-check.js +0 -17
  235. package/dist/scripts/doctor-fix-proves-codex-read-check.js +0 -64
  236. package/dist/scripts/doctor-fix-recovers-corrupted-config-check.js +0 -122
  237. package/dist/scripts/doctor-fixes-codex-app-fast-ui-check.js +0 -39
  238. package/dist/scripts/evidence-fixture-check.js +0 -26
  239. package/dist/scripts/evidence-flagship-coverage-check.js +0 -55
  240. package/dist/scripts/fake-real-proof-policy-v2-check.js +0 -27
  241. package/dist/scripts/fake-vs-real-proof-policy-check.js +0 -14
  242. package/dist/scripts/fast-codex-service-tier-proof-check.js +0 -42
  243. package/dist/scripts/flagship-proof-graph-v2-check.js +0 -48
  244. package/dist/scripts/flagship-proof-graph-v3-check.js +0 -67
  245. package/dist/scripts/flagship-proof-graph-v4-check.js +0 -61
  246. package/dist/scripts/git-precommit-fixture-check.js +0 -41
  247. package/dist/scripts/git-worktree-cache-performance-check.js +0 -25
  248. package/dist/scripts/git-worktree-capability-check.js +0 -27
  249. package/dist/scripts/git-worktree-checkpoint-check.js +0 -20
  250. package/dist/scripts/git-worktree-cleanup-check.js +0 -27
  251. package/dist/scripts/git-worktree-cross-rebase-check.js +0 -39
  252. package/dist/scripts/git-worktree-diff-envelope-check.js +0 -17
  253. package/dist/scripts/git-worktree-diff-export-check.js +0 -43
  254. package/dist/scripts/git-worktree-dirty-lock-check.js +0 -17
  255. package/dist/scripts/git-worktree-dirty-main-detection-check.js +0 -14
  256. package/dist/scripts/git-worktree-integration-primary-check.js +0 -24
  257. package/dist/scripts/git-worktree-integration-primary-runtime-check.js +0 -20
  258. package/dist/scripts/git-worktree-manager-check.js +0 -37
  259. package/dist/scripts/git-worktree-manifest-append-check.js +0 -18
  260. package/dist/scripts/git-worktree-merge-queue-check.js +0 -31
  261. package/dist/scripts/git-worktree-pool-performance-check.js +0 -20
  262. package/dist/scripts/git-worktree-untracked-diff-check.js +0 -18
  263. package/dist/scripts/goal-mode-official-default-check.js +0 -12
  264. package/dist/scripts/gpt-final-arbiter-check.js +0 -63
  265. package/dist/scripts/gpt-final-arbiter-performance-check.js +0 -36
  266. package/dist/scripts/gpt-image-2-request-validator-check.js +0 -35
  267. package/dist/scripts/hooks-0.134-context-parity-check.js +0 -20
  268. package/dist/scripts/hooks-actual-parity-check.js +0 -17
  269. package/dist/scripts/hooks-actual-parity-v2-check.js +0 -21
  270. package/dist/scripts/hooks-latest-schema-check.js +0 -20
  271. package/dist/scripts/hooks-managed-install-fixture-check.js +0 -21
  272. package/dist/scripts/hooks-official-hash-oracle-check.js +0 -35
  273. package/dist/scripts/hooks-official-hash-parity-check.js +0 -17
  274. package/dist/scripts/hooks-subagent-events-check.js +0 -17
  275. package/dist/scripts/hooks-trust-state-check.js +0 -14
  276. package/dist/scripts/image-fidelity-fixture-check.js +0 -24
  277. package/dist/scripts/imagegen-capability-check.js +0 -30
  278. package/dist/scripts/imagegen-real-smoke-check.js +0 -155
  279. package/dist/scripts/install-update-preserves-config-check.js +0 -87
  280. package/dist/scripts/json-schema-recursive-check.js +0 -78
  281. package/dist/scripts/legacy-multiagent-removal-check.js +0 -85
  282. package/dist/scripts/legacy-upgrade-matrix-check.js +0 -300
  283. package/dist/scripts/local-collab-all-pipelines-final-gpt-check.js +0 -21
  284. package/dist/scripts/local-collab-gpt-final-availability-check.js +0 -58
  285. package/dist/scripts/local-collab-no-local-only-final-check.js +0 -27
  286. package/dist/scripts/local-collab-policy-check.js +0 -17
  287. package/dist/scripts/local-collab-worktree-gpt-final-apply-policy-check.js +0 -63
  288. package/dist/scripts/local-llm-all-pipelines-check.js +0 -11
  289. package/dist/scripts/local-llm-cache-performance-check.js +0 -10
  290. package/dist/scripts/local-llm-capability-check.js +0 -14
  291. package/dist/scripts/local-llm-smoke-check.js +0 -23
  292. package/dist/scripts/local-llm-structured-output-check.js +0 -11
  293. package/dist/scripts/local-llm-throughput-check.js +0 -10
  294. package/dist/scripts/local-llm-tool-call-repair-check.js +0 -10
  295. package/dist/scripts/local-llm-warmup-check.js +0 -11
  296. package/dist/scripts/loop-blocker-check.js +0 -15
  297. package/dist/scripts/mad-preflight-blocks-unreadable-config-check.js +0 -35
  298. package/dist/scripts/mad-sks-actual-executor-blackbox.js +0 -5
  299. package/dist/scripts/mad-sks-app-ui-no-mutation-check.js +0 -92
  300. package/dist/scripts/mad-sks-audit-proof-check.js +0 -34
  301. package/dist/scripts/mad-sks-db-executor-check.js +0 -5
  302. package/dist/scripts/mad-sks-executor-proof-graph-check.js +0 -5
  303. package/dist/scripts/mad-sks-fast-mode-propagation-check.js +0 -24
  304. package/dist/scripts/mad-sks-file-write-executor-check.js +0 -5
  305. package/dist/scripts/mad-sks-immutable-harness-check.js +0 -36
  306. package/dist/scripts/mad-sks-no-harness-modification-check.js +0 -25
  307. package/dist/scripts/mad-sks-package-executor-check.js +0 -5
  308. package/dist/scripts/mad-sks-permission-model-check.js +0 -22
  309. package/dist/scripts/mad-sks-rollback-apply-check.js +0 -5
  310. package/dist/scripts/mad-sks-service-executor-check.js +0 -5
  311. package/dist/scripts/mad-sks-shell-executor-check.js +0 -5
  312. package/dist/scripts/mad-sks-write-guard-check.js +0 -28
  313. package/dist/scripts/mad-sks-zellij-default-pane-worker-check.js +0 -37
  314. package/dist/scripts/mad-sks-zellij-launch-check.js +0 -102
  315. package/dist/scripts/mcp-0-134-modernization-check.js +0 -55
  316. package/dist/scripts/mcp-readonly-concurrency-check.js +0 -17
  317. package/dist/scripts/mcp-readonly-runtime-scheduler-check.js +0 -20
  318. package/dist/scripts/mcp-tool-naming-parity-check.js +0 -16
  319. package/dist/scripts/memory-summary-rebuild-check.js +0 -22
  320. package/dist/scripts/mutation-callsite-coverage-check.js +0 -180
  321. package/dist/scripts/naruto-active-pool-check.js +0 -39
  322. package/dist/scripts/naruto-actual-worker-control-plane-check.js +0 -56
  323. package/dist/scripts/naruto-allocation-policy-check.js +0 -33
  324. package/dist/scripts/naruto-allocation-runtime-wiring-check.js +0 -92
  325. package/dist/scripts/naruto-concurrency-governor-check.js +0 -53
  326. package/dist/scripts/naruto-extreme-parallelism-check.js +0 -22
  327. package/dist/scripts/naruto-extreme-parallelism-real-check.js +0 -43
  328. package/dist/scripts/naruto-gpt-final-pack-check.js +0 -34
  329. package/dist/scripts/naruto-orchestrator-runtime-source-check.js +0 -70
  330. package/dist/scripts/naruto-parallel-patch-apply-check.js +0 -41
  331. package/dist/scripts/naruto-readonly-routing-check.js +0 -116
  332. package/dist/scripts/naruto-real-active-pool-check.js +0 -39
  333. package/dist/scripts/naruto-real-active-pool-runtime-check.js +0 -55
  334. package/dist/scripts/naruto-rebalance-policy-check.js +0 -41
  335. package/dist/scripts/naruto-role-distribution-check.js +0 -23
  336. package/dist/scripts/naruto-shadow-clone-swarm-check.js +0 -153
  337. package/dist/scripts/naruto-verification-pool-check.js +0 -36
  338. package/dist/scripts/naruto-work-graph-check.js +0 -24
  339. package/dist/scripts/naruto-worktree-coding-blackbox.js +0 -29
  340. package/dist/scripts/naruto-worktree-coding-check.js +0 -44
  341. package/dist/scripts/naruto-worktree-gpt-final-check.js +0 -45
  342. package/dist/scripts/naruto-worktree-zellij-ui-check.js +0 -28
  343. package/dist/scripts/naruto-zellij-dynamic-right-column-check.js +0 -48
  344. package/dist/scripts/naruto-zellij-massive-ui-check.js +0 -23
  345. package/dist/scripts/non-recursive-pipeline-check.js +0 -68
  346. package/dist/scripts/npm-publish-performance-check.js +0 -65
  347. package/dist/scripts/official-docs-compat-report.js +0 -304
  348. package/dist/scripts/packlist-performance-check.js +0 -83
  349. package/dist/scripts/parallel-verification-engine-check.js +0 -85
  350. package/dist/scripts/postinstall-safe-side-effects-check.js +0 -65
  351. package/dist/scripts/ppt-full-e2e-artifact-graph-check.js +0 -40
  352. package/dist/scripts/ppt-full-e2e-blackbox-check.js +0 -109
  353. package/dist/scripts/ppt-image-voxel-relations-check.js +0 -9
  354. package/dist/scripts/ppt-imagegen-blackbox-check.js +0 -46
  355. package/dist/scripts/ppt-imagegen-review-fixture-check.js +0 -6
  356. package/dist/scripts/ppt-issue-extraction-fixture-check.js +0 -7
  357. package/dist/scripts/ppt-no-mock-as-real-check.js +0 -8
  358. package/dist/scripts/ppt-no-text-fallback-check.js +0 -7
  359. package/dist/scripts/ppt-proof-trust-fixture-check.js +0 -10
  360. package/dist/scripts/ppt-real-export-adapter-check.js +0 -13
  361. package/dist/scripts/ppt-real-imagegen-smoke-check.js +0 -42
  362. package/dist/scripts/ppt-real-imagegen-wiring-check.js +0 -16
  363. package/dist/scripts/ppt-reexport-rereview-check.js +0 -19
  364. package/dist/scripts/ppt-slide-export-fixture-check.js +0 -7
  365. package/dist/scripts/prepublish-fast-check.js +0 -128
  366. package/dist/scripts/priority-full-closure-check.js +0 -12
  367. package/dist/scripts/product-design-auto-install-check.js +0 -119
  368. package/dist/scripts/product-design-plugin-routing-check.js +0 -101
  369. package/dist/scripts/prompt-placeholder-guard-check.js +0 -33
  370. package/dist/scripts/provider-badge-context-check.js +0 -26
  371. package/dist/scripts/provider-context-config-toml-check.js +0 -63
  372. package/dist/scripts/python-codex-sdk-all-pipelines-check.js +0 -47
  373. package/dist/scripts/python-codex-sdk-capability-check.js +0 -75
  374. package/dist/scripts/python-codex-sdk-sandbox-policy-check.js +0 -10
  375. package/dist/scripts/python-codex-sdk-stream-bridge-check.js +0 -12
  376. package/dist/scripts/python-tools-smoke-check.js +0 -71
  377. package/dist/scripts/qa-actual-route-backfill-check.js +0 -5
  378. package/dist/scripts/qa-backfill-route-blackbox.js +0 -5
  379. package/dist/scripts/qa-patch-swarm-route-blackbox.js +0 -10
  380. package/dist/scripts/readme-architecture-imagegen-official-check.js +0 -448
  381. package/dist/scripts/release-cache-glob-hashing-check.js +0 -42
  382. package/dist/scripts/release-dag-full-coverage-check.js +0 -53
  383. package/dist/scripts/release-dist-freshness-check.js +0 -8
  384. package/dist/scripts/release-dynamic-performance-check.js +0 -103
  385. package/dist/scripts/release-gate-budget-check.js +0 -36
  386. package/dist/scripts/release-gate-dag-runner-check.js +0 -17
  387. package/dist/scripts/release-metadata-1-11-check.js +0 -37
  388. package/dist/scripts/release-metadata-1-12-check.js +0 -48
  389. package/dist/scripts/release-metadata-1-13-check.js +0 -53
  390. package/dist/scripts/release-metadata-1-14-check.js +0 -63
  391. package/dist/scripts/release-metadata-1-16-check.js +0 -81
  392. package/dist/scripts/release-metadata-1-17-check.js +0 -51
  393. package/dist/scripts/release-metadata-1-19-check.js +0 -371
  394. package/dist/scripts/release-metadata-check.js +0 -7
  395. package/dist/scripts/release-native-agent-fixture-check.js +0 -41
  396. package/dist/scripts/release-parallel-check.js +0 -374
  397. package/dist/scripts/release-parallel-full-coverage-check.js +0 -13
  398. package/dist/scripts/release-parallel-speed-budget-check.js +0 -79
  399. package/dist/scripts/release-provenance-check.js +0 -150
  400. package/dist/scripts/release-readiness-report.js +0 -1146
  401. package/dist/scripts/release-real-check.js +0 -330
  402. package/dist/scripts/release-registry-check.js +0 -344
  403. package/dist/scripts/release-runtime-truth-matrix-check.js +0 -47
  404. package/dist/scripts/release-stability-report-check.js +0 -99
  405. package/dist/scripts/release-version-truth-check.js +0 -134
  406. package/dist/scripts/research-actual-route-backfill-check.js +0 -5
  407. package/dist/scripts/research-backfill-route-blackbox.js +0 -5
  408. package/dist/scripts/research-quality-gate-check.js +0 -86
  409. package/dist/scripts/responses-retry-policy-centralized-check.js +0 -19
  410. package/dist/scripts/retention-cleanup-safety-check.js +0 -155
  411. package/dist/scripts/route-blackbox-realism-check.js +0 -21
  412. package/dist/scripts/route-proof-artifact-structure-check.js +0 -145
  413. package/dist/scripts/runtime-dist-parity-check.js +0 -78
  414. package/dist/scripts/runtime-no-mjs-scripts-check.js +0 -45
  415. package/dist/scripts/runtime-no-src-mjs-check.js +0 -32
  416. package/dist/scripts/runtime-no-tmux-check.js +0 -113
  417. package/dist/scripts/runtime-ts-python-boundary-check.js +0 -59
  418. package/dist/scripts/runtime-ts-rust-boundary-check.js +0 -74
  419. package/dist/scripts/runtime-ts-source-of-truth-check.js +0 -55
  420. package/dist/scripts/safety-check.js +0 -23
  421. package/dist/scripts/shared-memory-fixture-check.js +0 -27
  422. package/dist/scripts/side-effect-runtime-report-check.js +0 -19
  423. package/dist/scripts/side-effect-zero-gate-check.js +0 -226
  424. package/dist/scripts/sks-1-11-fixture-check.js +0 -130
  425. package/dist/scripts/source-intelligence-all-modes-check.js +0 -32
  426. package/dist/scripts/source-intelligence-policy-check.js +0 -13
  427. package/dist/scripts/strategy-adhd-orchestrating-gate-check.js +0 -22
  428. package/dist/scripts/strategy-file-ownership-plan-check.js +0 -18
  429. package/dist/scripts/strategy-parallel-modification-plan-check.js +0 -19
  430. package/dist/scripts/strategy-verification-rollback-dag-check.js +0 -19
  431. package/dist/scripts/team-actual-route-backfill-check.js +0 -5
  432. package/dist/scripts/team-backfill-route-blackbox.js +0 -5
  433. package/dist/scripts/team-parallel-write-blackbox.js +0 -55
  434. package/dist/scripts/team-patch-swarm-route-blackbox.js +0 -10
  435. package/dist/scripts/terminal-keyboard-enhancement-safety-check.js +0 -12
  436. package/dist/scripts/terminal-tui-output-stability-check.js +0 -35
  437. package/dist/scripts/test-no-orphan-dist-imports-check.js +0 -73
  438. package/dist/scripts/trust-fixture-check.js +0 -33
  439. package/dist/scripts/typescript-migration-report.js +0 -78
  440. package/dist/scripts/ultra-router-auto-router-check.js +0 -33
  441. package/dist/scripts/ultra-router-classification-check.js +0 -28
  442. package/dist/scripts/ux-patch-swarm-route-blackbox.js +0 -10
  443. package/dist/scripts/ux-ppt-structured-extraction-check.js +0 -21
  444. package/dist/scripts/ux-review-extract-real-callouts-fixture-check.js +0 -8
  445. package/dist/scripts/ux-review-extract-wires-real-extractor-check.js +0 -15
  446. package/dist/scripts/ux-review-generate-callouts-fixture-check.js +0 -9
  447. package/dist/scripts/ux-review-image-voxel-relations-check.js +0 -31
  448. package/dist/scripts/ux-review-imagegen-blackbox-check.js +0 -67
  449. package/dist/scripts/ux-review-no-fake-callouts-check.js +0 -8
  450. package/dist/scripts/ux-review-no-text-fallback-check.js +0 -25
  451. package/dist/scripts/ux-review-patch-diff-recheck-check.js +0 -20
  452. package/dist/scripts/ux-review-patch-handoff-fixture-check.js +0 -8
  453. package/dist/scripts/ux-review-real-imagegen-smoke-check.js +0 -31
  454. package/dist/scripts/ux-review-real-loop-fixture-check.js +0 -24
  455. package/dist/scripts/ux-review-recapture-recheck-fixture-check.js +0 -8
  456. package/dist/scripts/ux-review-run-wires-imagegen-check.js +0 -11
  457. package/dist/scripts/worker-pane-communication-contract-check.js +0 -54
  458. package/dist/scripts/wrongness-fixture-check.js +0 -65
  459. package/dist/scripts/xai-mcp-capability-check.js +0 -14
  460. package/dist/scripts/zellij-capability-check.js +0 -15
  461. package/dist/scripts/zellij-dashboard-pane-check.js +0 -70
  462. package/dist/scripts/zellij-developer-controls-check.js +0 -20
  463. package/dist/scripts/zellij-doctor-readiness-check.js +0 -63
  464. package/dist/scripts/zellij-dynamic-pane-lifecycle-check.js +0 -21
  465. package/dist/scripts/zellij-first-slot-down-stack-check.js +0 -20
  466. package/dist/scripts/zellij-first-slot-down-stack-real-check.js +0 -356
  467. package/dist/scripts/zellij-initial-main-only-blackbox.js +0 -28
  468. package/dist/scripts/zellij-lane-renderer-check.js +0 -65
  469. package/dist/scripts/zellij-launch-command-truth-check.js +0 -75
  470. package/dist/scripts/zellij-layout-valid-check.js +0 -90
  471. package/dist/scripts/zellij-pane-proof-check.js +0 -59
  472. package/dist/scripts/zellij-real-session-cleanup-check.js +0 -21
  473. package/dist/scripts/zellij-real-session-heartbeat-check.js +0 -49
  474. package/dist/scripts/zellij-real-session-launch-check.js +0 -57
  475. package/dist/scripts/zellij-right-column-headless-overflow-check.js +0 -22
  476. package/dist/scripts/zellij-right-column-manager-check.js +0 -27
  477. package/dist/scripts/zellij-screen-proof-check.js +0 -45
  478. package/dist/scripts/zellij-slot-column-anchor-check.js +0 -66
  479. package/dist/scripts/zellij-slot-only-ui-check.js +0 -26
  480. package/dist/scripts/zellij-slot-pane-renderer-check.js +0 -106
  481. package/dist/scripts/zellij-slot-renderer-proof-semantics-check.js +0 -59
  482. package/dist/scripts/zellij-spawn-on-demand-layout-check.js +0 -40
  483. package/dist/scripts/zellij-ui-design-check.js +0 -105
  484. package/dist/scripts/zellij-worker-pane-manager-check.js +0 -109
  485. package/dist/scripts/zellij-worker-pane-manager-single-owner-check.js +0 -47
  486. package/dist/scripts/zellij-worker-pane-real-ui-blackbox.js +0 -202
  487. package/dist/scripts/zellij-worker-pane-spawn-order-check.js +0 -35
  488. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/permission-request.command.input.schema.json +0 -61
  489. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/permission-request.command.output.schema.json +0 -103
  490. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/post-compact.command.input.schema.json +0 -52
  491. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/post-compact.command.output.schema.json +0 -24
  492. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/post-tool-use.command.input.schema.json +0 -67
  493. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/post-tool-use.command.output.schema.json +0 -84
  494. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/pre-compact.command.input.schema.json +0 -52
  495. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/pre-compact.command.output.schema.json +0 -24
  496. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/pre-tool-use.command.input.schema.json +0 -65
  497. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/pre-tool-use.command.output.schema.json +0 -105
  498. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/session-start.command.input.schema.json +0 -59
  499. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/session-start.command.output.schema.json +0 -63
  500. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/snapshot-metadata.json +0 -31
  501. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/stop.command.input.schema.json +0 -63
  502. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/stop.command.output.schema.json +0 -45
  503. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/user-prompt-submit.command.input.schema.json +0 -59
  504. package/dist/vendor/openai-codex/rust-v0.131.0/hooks/user-prompt-submit.command.output.schema.json +0 -81
@@ -1,5 +1,25 @@
1
1
  export const GPT_FINAL_ARBITER_RESULT_SCHEMA_ID = 'sks.gpt-final-arbiter-result.v1';
2
2
  export const GPT_FINAL_ARBITER_INPUT_SCHEMA = 'sks.gpt-final-arbiter-input.v1';
3
+ const reviewItemSchema = {
4
+ type: 'object',
5
+ required: ['id', 'severity', 'summary'],
6
+ properties: {
7
+ id: { type: 'string' },
8
+ severity: { type: 'string', enum: ['low', 'medium', 'high'] },
9
+ summary: { type: 'string' }
10
+ },
11
+ additionalProperties: false
12
+ };
13
+ const patchDecisionSchema = {
14
+ type: 'object',
15
+ required: ['id', 'summary', 'patch_envelope_json'],
16
+ properties: {
17
+ id: { type: 'string' },
18
+ summary: { type: 'string' },
19
+ patch_envelope_json: { type: 'string' }
20
+ },
21
+ additionalProperties: false
22
+ };
3
23
  export const gptFinalArbiterResultSchema = {
4
24
  type: 'object',
5
25
  required: [
@@ -17,20 +37,20 @@ export const gptFinalArbiterResultSchema = {
17
37
  'confidence'
18
38
  ],
19
39
  properties: {
20
- schema: { const: GPT_FINAL_ARBITER_RESULT_SCHEMA_ID },
40
+ schema: { type: 'string', enum: [GPT_FINAL_ARBITER_RESULT_SCHEMA_ID] },
21
41
  status: { enum: ['approved', 'modified', 'rejected', 'needs_more_work'] },
22
42
  summary: { type: 'string' },
23
- gpt_review_findings: { type: 'array', items: { type: 'object' } },
24
- accepted_patch_envelopes: { type: 'array', items: { type: 'object' } },
25
- modified_patch_envelopes: { type: 'array', items: { type: 'object' } },
26
- rejected_patch_envelopes: { type: 'array', items: { type: 'object' } },
27
- required_followup_work: { type: 'array', items: { type: 'object' } },
43
+ gpt_review_findings: { type: 'array', items: reviewItemSchema },
44
+ accepted_patch_envelopes: { type: 'array', items: patchDecisionSchema },
45
+ modified_patch_envelopes: { type: 'array', items: patchDecisionSchema },
46
+ rejected_patch_envelopes: { type: 'array', items: patchDecisionSchema },
47
+ required_followup_work: { type: 'array', items: reviewItemSchema },
28
48
  verification_plan: { type: 'array', items: { type: 'string' } },
29
49
  rollback_notes: { type: 'array', items: { type: 'string' } },
30
50
  blockers: { type: 'array', items: { type: 'string' } },
31
51
  confidence: { enum: ['low', 'medium', 'high'] }
32
52
  },
33
- additionalProperties: true
53
+ additionalProperties: false
34
54
  };
35
55
  export function normalizeGptFinalArbiterResult(value) {
36
56
  const status = normalizeStatus(value?.status);
@@ -38,11 +58,11 @@ export function normalizeGptFinalArbiterResult(value) {
38
58
  schema: GPT_FINAL_ARBITER_RESULT_SCHEMA_ID,
39
59
  status,
40
60
  summary: String(value?.summary || defaultSummary(status)),
41
- gpt_review_findings: array(value?.gpt_review_findings),
42
- accepted_patch_envelopes: array(value?.accepted_patch_envelopes),
43
- modified_patch_envelopes: array(value?.modified_patch_envelopes),
44
- rejected_patch_envelopes: array(value?.rejected_patch_envelopes),
45
- required_followup_work: array(value?.required_followup_work),
61
+ gpt_review_findings: reviewItems(value?.gpt_review_findings),
62
+ accepted_patch_envelopes: patchDecisionItems(value?.accepted_patch_envelopes),
63
+ modified_patch_envelopes: patchDecisionItems(value?.modified_patch_envelopes),
64
+ rejected_patch_envelopes: patchDecisionItems(value?.rejected_patch_envelopes),
65
+ required_followup_work: reviewItems(value?.required_followup_work),
46
66
  verification_plan: stringArray(value?.verification_plan),
47
67
  rollback_notes: stringArray(value?.rollback_notes),
48
68
  blockers: stringArray(value?.blockers),
@@ -57,12 +77,39 @@ function normalizeStatus(value) {
57
77
  function normalizeConfidence(value) {
58
78
  return value === 'low' || value === 'medium' || value === 'high' ? value : 'medium';
59
79
  }
60
- function array(value) {
61
- return Array.isArray(value) ? value : [];
80
+ function reviewItems(value) {
81
+ if (!Array.isArray(value))
82
+ return [];
83
+ return value.map((entry, index) => {
84
+ const raw = typeof entry === 'object' && entry !== null ? entry : { summary: entry };
85
+ return {
86
+ id: String(raw.id || raw.blocker || raw.reason || `item-${index + 1}`),
87
+ severity: normalizeSeverity(raw.severity),
88
+ summary: String(raw.summary || raw.message || raw.blocker || raw.reason || entry || '').trim()
89
+ };
90
+ }).filter((entry) => entry.summary);
91
+ }
92
+ function patchDecisionItems(value) {
93
+ if (!Array.isArray(value))
94
+ return [];
95
+ return value.map((entry, index) => {
96
+ const raw = typeof entry === 'object' && entry !== null ? entry : { summary: entry };
97
+ const patch = typeof raw.patch_envelope_json === 'string'
98
+ ? raw.patch_envelope_json
99
+ : JSON.stringify(entry ?? {});
100
+ return {
101
+ id: String(raw.id || raw.schema || raw.reason || `patch-${index + 1}`),
102
+ summary: String(raw.summary || raw.reason || raw.rationale || raw.schema || entry || '').trim() || `Patch decision ${index + 1}`,
103
+ patch_envelope_json: patch
104
+ };
105
+ });
62
106
  }
63
107
  function stringArray(value) {
64
108
  return Array.isArray(value) ? value.map((entry) => String(entry || '').trim()).filter(Boolean) : [];
65
109
  }
110
+ function normalizeSeverity(value) {
111
+ return value === 'low' || value === 'medium' || value === 'high' ? value : 'medium';
112
+ }
66
113
  function defaultSummary(status) {
67
114
  return status === 'approved' || status === 'modified'
68
115
  ? 'GPT final arbiter accepted the candidate result.'
@@ -101,7 +101,7 @@ export function quickstartCommand() {
101
101
  sks dollar-commands
102
102
  sks all-features selftest --mock --execute-fixtures --strict-artifacts --json
103
103
 
104
- For implementation work, use Codex App prompt routes such as $Team, $Goal, $QA-LOOP, $Image-UX-Review, and $Computer-Use.`);
104
+ For implementation work, use Codex App prompt routes such as $Naruto, $Goal, $QA-LOOP, $Image-UX-Review, and $Computer-Use.`);
105
105
  }
106
106
  export async function updateCheckCommand(args = []) {
107
107
  const result = await runSksUpdateCheck();
@@ -1,7 +1,7 @@
1
1
  export const COMMAND_SUGGESTIONS_SCHEMA = 'sks.command-suggestions.v1';
2
2
  export function suggestSksCommands(input) {
3
3
  const query = String(input || '').toLowerCase();
4
- const commands = ['$Team', '$Goal', '$DFix', '$QA-LOOP', '$Research', '$PPT', '$Image-UX-Review', '$Computer-Use'];
4
+ const commands = ['$Naruto', '$Goal', '$DFix', '$QA-LOOP', '$Research', '$PPT', '$Image-UX-Review', '$Computer-Use'];
5
5
  const suggestions = commands.filter((command) => command.toLowerCase().includes(query.replace(/^\$/, ''))).slice(0, 8);
6
6
  return {
7
7
  schema: COMMAND_SUGGESTIONS_SCHEMA,
@@ -0,0 +1,106 @@
1
+ import { initProject } from '../init.js';
2
+ import { createMission, findLatestMission, setCurrent } from '../mission.js';
3
+ import { exists, sksRoot } from '../fsx.js';
4
+ import path from 'node:path';
5
+ import { createMadDbCapability, isMadDbCapabilityActive, MAD_DB_ACK, readMadDbCapability, resolveMadDbMissionId, revokeMadDbCapability } from '../mad-db/mad-db-capability.js';
6
+ export async function madDbCommand(args = []) {
7
+ const action = String(args[0] && !String(args[0]).startsWith('--') ? args[0] : 'status');
8
+ const rest = action === args[0] ? args.slice(1) : args;
9
+ const root = await sksRoot();
10
+ if (!(await exists(path.join(root, '.sneakoscope'))))
11
+ await initProject(root, {});
12
+ if (action === 'enable')
13
+ return enableMadDb(root, rest);
14
+ if (action === 'revoke')
15
+ return revokeMadDb(root, rest);
16
+ if (action === 'status')
17
+ return statusMadDb(root, rest);
18
+ console.error('Usage: sks mad-db enable --ack "I AUTHORIZE ONE-CYCLE DB BREAK-GLASS" [--mission latest|new|M-...] | status | revoke');
19
+ process.exitCode = 1;
20
+ }
21
+ async function enableMadDb(root, args) {
22
+ const json = hasFlag(args, '--json');
23
+ const ack = readOption(args, '--ack', '');
24
+ if (ack !== MAD_DB_ACK) {
25
+ const result = { schema: 'sks.mad-db-command.v1', ok: false, action: 'enable', reason: 'ack_phrase_required', required_ack: MAD_DB_ACK };
26
+ if (json)
27
+ return console.log(JSON.stringify(result, null, 2));
28
+ console.error(`Mad-DB enable blocked. Required --ack ${JSON.stringify(MAD_DB_ACK)}`);
29
+ process.exitCode = 2;
30
+ return result;
31
+ }
32
+ const requestedMission = readOption(args, '--mission', 'latest');
33
+ let missionId = requestedMission === 'new' ? null : await resolveMadDbMissionId(root, {}, requestedMission);
34
+ if (!missionId) {
35
+ const created = await createMission(root, { mode: 'mad-db', prompt: 'sks mad-db enable one-cycle DB break-glass' });
36
+ missionId = created.id;
37
+ }
38
+ const capability = await createMadDbCapability(root, {
39
+ missionId,
40
+ ack,
41
+ cwd: process.cwd(),
42
+ ttlMs: Number(readOption(args, '--ttl-ms', String(2 * 60 * 60 * 1000)))
43
+ });
44
+ await setCurrent(root, {
45
+ mission_id: missionId,
46
+ route: 'MadDB',
47
+ route_command: '$MAD-DB',
48
+ mode: 'MADDB',
49
+ phase: 'MADDB_ONE_CYCLE_CAPABILITY_ACTIVE',
50
+ mad_db_active: true,
51
+ mad_db_cycle_id: capability.cycle_id,
52
+ mad_db_capability_file: 'mad-db-capability.json',
53
+ mad_db_ack_phrase: 'accepted',
54
+ stop_gate: 'mad-db-capability.json'
55
+ });
56
+ const result = { schema: 'sks.mad-db-command.v1', ok: true, action: 'enable', mission_id: missionId, capability };
57
+ if (json)
58
+ return console.log(JSON.stringify(result, null, 2));
59
+ console.log(`Mad-DB one-cycle capability active for ${missionId}; expires ${capability.expires_at}.`);
60
+ return result;
61
+ }
62
+ async function statusMadDb(root, args) {
63
+ const json = hasFlag(args, '--json');
64
+ const missionId = await resolveMadDbMissionId(root, {}, readOption(args, '--mission', 'latest'));
65
+ const capability = missionId ? await readMadDbCapability(root, missionId) : null;
66
+ const result = {
67
+ schema: 'sks.mad-db-command.v1',
68
+ ok: true,
69
+ action: 'status',
70
+ mission_id: missionId,
71
+ active: isMadDbCapabilityActive(capability),
72
+ capability
73
+ };
74
+ if (json)
75
+ return console.log(JSON.stringify(result, null, 2));
76
+ if (!missionId || !capability)
77
+ console.log('Mad-DB: no capability found.');
78
+ else
79
+ console.log(`Mad-DB: ${result.active ? 'active' : 'inactive'} for ${missionId}; consumed=${capability.consumed}; expires=${capability.expires_at}.`);
80
+ return result;
81
+ }
82
+ async function revokeMadDb(root, args) {
83
+ const json = hasFlag(args, '--json');
84
+ const missionId = await resolveMadDbMissionId(root, {}, readOption(args, '--mission', 'latest')) || await findLatestMission(root);
85
+ const revoked = missionId ? await revokeMadDbCapability(root, missionId, readOption(args, '--reason', 'operator_revoked')) : null;
86
+ await setCurrent(root, { mad_db_active: false, phase: 'MADDB_REVOKED' });
87
+ const result = { schema: 'sks.mad-db-command.v1', ok: Boolean(revoked), action: 'revoke', mission_id: missionId, capability: revoked };
88
+ if (json)
89
+ return console.log(JSON.stringify(result, null, 2));
90
+ if (!revoked)
91
+ console.log('Mad-DB: no capability to revoke.');
92
+ else
93
+ console.log(`Mad-DB capability revoked for ${missionId}.`);
94
+ return result;
95
+ }
96
+ function hasFlag(args, flag) {
97
+ return args.includes(flag);
98
+ }
99
+ function readOption(args, name, fallback) {
100
+ const index = args.indexOf(name);
101
+ if (index >= 0 && args[index + 1] && !String(args[index + 1]).startsWith('--'))
102
+ return String(args[index + 1]);
103
+ const prefixed = args.find((arg) => String(arg).startsWith(name + '='));
104
+ return prefixed ? prefixed.slice(name.length + 1) : fallback;
105
+ }
106
+ //# sourceMappingURL=mad-db-command.js.map
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path';
2
2
  import fs from 'node:fs';
3
3
  import { spawn } from 'node:child_process';
4
- import { appendJsonlBounded, exists, nowIso, packageRoot, readJson, sksRoot, writeJsonAtomic } from '../fsx.js';
4
+ import { PACKAGE_VERSION, appendJsonlBounded, exists, nowIso, packageRoot, readJson, sksRoot, writeJsonAtomic } from '../fsx.js';
5
5
  import { initProject } from '../init.js';
6
6
  import { createMission, setCurrent } from '../mission.js';
7
7
  import { buildMadHighLaunchProfileNoWrite, madHighProfileName } from '../auto-review.js';
@@ -18,6 +18,8 @@ import { applyMadSksRollbackPlan } from '../mad-sks/rollback-apply.js';
18
18
  import { repairCodexConfigEperm } from '../codex/codex-config-eperm-repair.js';
19
19
  import { runCodexLaunchPreflight } from '../preflight/parallel-preflight-engine.js';
20
20
  import { diffCodexAppUiSnapshots, writeCodexAppUiSnapshot } from '../codex-app/codex-app-ui-state-snapshot.js';
21
+ import { checkSksUpdateNotice } from '../update/update-notice.js';
22
+ import { createMadDbCapability, MAD_DB_ACK } from '../mad-db/mad-db-capability.js';
21
23
  export async function madHighCommand(args = [], deps = {}) {
22
24
  const subcommand = firstSubcommand(args);
23
25
  if (subcommand)
@@ -27,16 +29,7 @@ export async function madHighCommand(args = [], deps = {}) {
27
29
  const profile = buildMadHighLaunchProfileNoWrite();
28
30
  return console.log(JSON.stringify(profile, null, 2));
29
31
  }
30
- const update = deps.maybePromptSksUpdateForLaunch ? await deps.maybePromptSksUpdateForLaunch(args, { label: 'MAD launch' }) : { status: 'skipped' };
31
- if (update.status === 'updated') {
32
- console.log(`SKS updated from ${deps.packageVersion} to ${update.latest}. Rerun: sks --mad`);
33
- return;
34
- }
35
- if (update.status === 'failed') {
36
- console.error(`SKS update failed: ${update.error}`);
37
- process.exitCode = 1;
38
- return;
39
- }
32
+ const update = { status: 'notice_only', non_blocking: true };
40
33
  const codexUpdate = deps.maybePromptCodexUpdateForLaunch ? await deps.maybePromptCodexUpdateForLaunch(args, { label: 'MAD launch' }) : { status: 'skipped' };
41
34
  if (codexUpdate.status === 'failed' || codexUpdate.status === 'updated_not_reflected') {
42
35
  console.error(`Codex CLI update failed: ${codexUpdate.error || 'updated version was not visible on PATH'}`);
@@ -68,6 +61,13 @@ export async function madHighCommand(args = [], deps = {}) {
68
61
  // readability + repair checks still run. SKS_LAUNCH_FULL_CODEX_PROBE=1 restores the
69
62
  // old behavior.
70
63
  const rawArgs = (args || []).map((arg) => String(arg));
64
+ const madDbRequested = rawArgs.includes('--mad-db');
65
+ const madDbAck = readOption(rawArgs, '--ack', '');
66
+ if (madDbRequested && madDbAck !== MAD_DB_ACK) {
67
+ console.error(`SKS MAD-DB launch blocked. Required --ack ${JSON.stringify(MAD_DB_ACK)}`);
68
+ process.exitCode = 2;
69
+ return { ok: false, status: 'blocked', reason: 'mad_db_ack_phrase_required', required_ack: MAD_DB_ACK };
70
+ }
71
71
  const allowMadRepair = rawArgs.includes('--repair-config') || rawArgs.includes('--fix') || rawArgs.includes('--yes-repair');
72
72
  const launchPreflight = await runCodexLaunchPreflight(launchRoot, { fix: allowMadRepair, launchFast: process.env.SKS_LAUNCH_FULL_CODEX_PROBE !== '1', profile: profile.profile_name, sandbox: 'danger-full-access', serviceTier: 'fast' });
73
73
  const afterPreflightUi = beforeUi ? await writeCodexAppUiSnapshot(launchRoot, `mad-after-preflight-${uiSnapshotId}`).catch(() => null) : null;
@@ -88,7 +88,41 @@ export async function madHighCommand(args = [], deps = {}) {
88
88
  return launchPreflight;
89
89
  }
90
90
  const madLaunch = await activateMadZellijPermissionState(process.cwd(), args);
91
+ const madDbCapability = madDbRequested
92
+ ? await createMadDbCapability(madLaunch.root, { missionId: madLaunch.mission_id, ack: madDbAck, cwd: process.cwd() })
93
+ : null;
94
+ if (madDbCapability) {
95
+ await setCurrent(madLaunch.root, {
96
+ mission_id: madLaunch.mission_id,
97
+ mad_db_active: true,
98
+ mad_db_cycle_id: madDbCapability.cycle_id,
99
+ mad_db_capability_file: 'mad-db-capability.json',
100
+ mad_db_break_glass: true
101
+ });
102
+ await appendJsonlBounded(path.join(madLaunch.dir, 'events.jsonl'), { ts: nowIso(), type: 'mad_db.capability_created', cycle_id: madDbCapability.cycle_id, expires_at: madDbCapability.expires_at });
103
+ }
104
+ const updateNotice = await checkSksUpdateNotice({
105
+ packageName: deps.packageName || 'sneakoscope',
106
+ currentVersion: deps.packageVersion || PACKAGE_VERSION,
107
+ missionDir: madLaunch.dir
108
+ }).catch((err) => ({
109
+ schema: 'sks.update-notice.v1',
110
+ checked_at: nowIso(),
111
+ package_name: deps.packageName || 'sneakoscope',
112
+ current_version: deps.packageVersion || PACKAGE_VERSION,
113
+ latest_version: null,
114
+ update_available: false,
115
+ source: 'error',
116
+ cache_ttl_ms: 0,
117
+ message: 'SKS update notice check failed; MAD launch continues.',
118
+ error: err?.message || String(err)
119
+ }));
120
+ await appendJsonlBounded(path.join(madLaunch.dir, 'events.jsonl'), { ts: nowIso(), type: 'mad_sks.update_notice_checked', non_blocking: true, update_available: updateNotice.update_available === true, source: updateNotice.source });
91
121
  console.log(`SKS MAD ready: ${madHighProfileName()} | gate ${madLaunch.mission_id}`);
122
+ if (madDbCapability)
123
+ console.log(`MAD-DB one-cycle capability active; expires ${madDbCapability.expires_at}.`);
124
+ if (updateNotice.update_available === true)
125
+ console.log(`SKS update notice: ${updateNotice.latest_version} available (non-blocking).`);
92
126
  console.log('Scoped high-power maintenance authority active; add explicit --allow-* flags for packages, services, network, browser/Computer Use, generated assets, file permissions, DB writes, or system/admin scopes. Catastrophic guards remain.');
93
127
  const launchLb = lb.status === 'present' ? { ...lb, status: 'configured' } : lb;
94
128
  const madSksEnv = {
@@ -445,6 +479,7 @@ function madLaunchOnlyFlags() {
445
479
  '--allow-file-permissions',
446
480
  '--allow-chmod',
447
481
  '--allow-delete',
482
+ '--mad-db',
448
483
  '--confirm-delete',
449
484
  '--confirm-destructive-delete',
450
485
  '--no-swarm',
@@ -460,7 +495,8 @@ function madLaunchOnlyFlags() {
460
495
  '--yes',
461
496
  '-y',
462
497
  '--dry-run',
463
- '--plan-only'
498
+ '--plan-only',
499
+ '--ack'
464
500
  ]);
465
501
  }
466
502
  function madLaunchValueFlags() {
@@ -469,7 +505,8 @@ function madLaunchValueFlags() {
469
505
  '--mad-swarm-agents',
470
506
  '--mad-swarm-work-items',
471
507
  '--mad-swarm-backend',
472
- '--mad-swarm-prompt'
508
+ '--mad-swarm-prompt',
509
+ '--ack'
473
510
  ]);
474
511
  }
475
512
  export function defaultMadSwarmBackend(args = [], opts = {}) {
@@ -1,5 +1,5 @@
1
1
  import path from 'node:path';
2
- import { createMission, findLatestMission, loadMission } from '../mission.js';
2
+ import { createMission, findLatestMission, loadMission, setCurrent } from '../mission.js';
3
3
  import { nowIso, readJson, sksRoot, writeJsonAtomic } from '../fsx.js';
4
4
  import { runNativeAgentOrchestrator } from '../agents/agent-orchestrator.js';
5
5
  import { classifyOllamaWorkerSlice } from '../agents/agent-runner-ollama.js';
@@ -235,6 +235,51 @@ async function narutoRun(parsed) {
235
235
  placeholderGuard,
236
236
  gitWorktreeCapability
237
237
  });
238
+ await writeJsonAtomic(path.join(mission.dir, 'naruto-gate.json'), {
239
+ schema: 'sks.naruto-gate.v1',
240
+ passed: false,
241
+ mission_id: mission.id,
242
+ clone_roster_built: true,
243
+ clone_count: roster.agent_count,
244
+ work_graph_ready: workGraph.ok === true,
245
+ role_distribution_ready: roleDistribution.ok === true,
246
+ allocation_ready: allocationPolicy.ok === true,
247
+ rebalance_ready: rebalancePolicy.ok === true,
248
+ concurrency_governor_ready: true,
249
+ active_pool_simulated: activePool.ok === true,
250
+ verification_dag_ready: true,
251
+ gpt_final_pack_ready: true,
252
+ zellij_dashboard_ready: zellijDashboard.ok === true,
253
+ native_agent_proof: false,
254
+ final_arbiter_accepted: false,
255
+ session_cleanup: false,
256
+ blockers: [],
257
+ updated_at: nowIso()
258
+ });
259
+ await setCurrent(root, {
260
+ mission_id: mission.id,
261
+ route: 'Naruto',
262
+ route_command: '$Naruto',
263
+ mode: 'NARUTO',
264
+ phase: 'NARUTO_NATIVE_AGENT_INTAKE',
265
+ questions_allowed: false,
266
+ implementation_allowed: true,
267
+ context7_required: false,
268
+ context7_verified: parsed.mock,
269
+ subagents_required: true,
270
+ subagents_verified: false,
271
+ native_sessions_required: true,
272
+ native_sessions_verified: false,
273
+ reflection_required: true,
274
+ visible_progress_required: true,
275
+ required_skills: ['naruto', 'pipeline-runner', 'prompt-pipeline', 'honest-mode'],
276
+ stop_gate: 'naruto-gate.json',
277
+ clone_count: roster.agent_count,
278
+ target_active_slots: activeSlots,
279
+ work_graph_ready: workGraph.ok === true,
280
+ naruto_gate_file: 'naruto-gate.json',
281
+ prompt: parsed.prompt
282
+ });
238
283
  let liveZellij = null;
239
284
  if (!parsed.json && !parsed.mock && !parsed.noOpenZellij) {
240
285
  liveZellij = await launchZellijLayout({
@@ -311,6 +356,41 @@ async function narutoRun(parsed) {
311
356
  narutoRebalancePolicy: rebalancePolicy,
312
357
  json: parsed.json
313
358
  });
359
+ const nativeProofOk = result.proof?.ok === true || result.proof?.status === 'passed';
360
+ const finalAccepted = result.proof?.status === 'passed' || result.proof?.gpt_final_status === 'approved';
361
+ await writeJsonAtomic(path.join(mission.dir, 'naruto-gate.json'), {
362
+ schema: 'sks.naruto-gate.v1',
363
+ passed: result.ok === true && nativeProofOk && finalAccepted,
364
+ mission_id: mission.id,
365
+ clone_roster_built: true,
366
+ clone_count: roster.agent_count,
367
+ work_graph_ready: workGraph.ok === true,
368
+ role_distribution_ready: roleDistribution.ok === true,
369
+ allocation_ready: allocationPolicy.ok === true,
370
+ rebalance_ready: rebalancePolicy.ok === true,
371
+ concurrency_governor_ready: true,
372
+ active_pool_simulated: activePool.ok === true,
373
+ verification_dag_ready: true,
374
+ gpt_final_pack_ready: true,
375
+ zellij_dashboard_ready: zellijDashboard.ok === true,
376
+ native_agent_proof: nativeProofOk,
377
+ final_arbiter_accepted: finalAccepted,
378
+ session_cleanup: result.proof?.all_sessions_closed === true || nativeProofOk,
379
+ blockers: result.proof?.blockers || [],
380
+ updated_at: nowIso()
381
+ });
382
+ await setCurrent(root, {
383
+ mission_id: mission.id,
384
+ route: 'Naruto',
385
+ route_command: '$Naruto',
386
+ mode: 'NARUTO',
387
+ phase: result.ok === true ? 'NARUTO_COMPLETE_OR_REVIEW' : 'NARUTO_BLOCKED',
388
+ native_sessions_verified: nativeProofOk,
389
+ subagents_verified: nativeProofOk,
390
+ naruto_gate_file: 'naruto-gate.json',
391
+ stop_gate: 'naruto-gate.json',
392
+ prompt: parsed.prompt
393
+ });
314
394
  const clones = result.roster?.agent_count ?? roster.agent_count;
315
395
  const localWorkerSummary = summarizeNarutoLocalWorkerResult(localWorker, result);
316
396
  const summary = {
@@ -444,6 +524,7 @@ async function runNarutoControlPlaneSmoke(input) {
444
524
  item,
445
525
  placement,
446
526
  backend: 'fake',
527
+ parentPrompt: input.prompt,
447
528
  worktreePolicy: smokeWorktreePolicy,
448
529
  zellijSessionName: `sks-${input.missionId}`,
449
530
  visiblePaneCap: input.zellijVisiblePanes
@@ -145,25 +145,67 @@ async function researchRun(args) {
145
145
  const nativeAgentRun = await runNativeAgentOrchestrator({ root, missionId: id, route: flag(args, '--autoresearch') ? '$AutoResearch' : '$Research', prompt: mission.prompt || plan.prompt || 'Research run', backend: mock ? 'fake' : 'codex-sdk', mock, agents: requestedAgents, targetActiveSlots, desiredWorkItemCount: Math.max(desiredWorkItemCount, graphWorkItemCount), minimumWorkItems: Math.max(minimumWorkItems, Math.min(graphWorkItemCount, targetActiveSlots)), maxQueueExpansion, concurrency: Math.min(requestedAgents, 5), readonly: true, profile, writeMode: writeMode, applyPatches: false, dryRunPatches, maxWriteAgents, roster: plan.native_agent_plan, routeCommand: 'sks research run', routeBlackboxKind: 'actual_research_command', narutoWorkGraph: researchWorkGraph });
146
146
  await writeJsonAtomic(path.join(dir, 'research-native-agent-run.json'), nativeAgentRun);
147
147
  await appendJsonlBounded(path.join(dir, 'events.jsonl'), { ts: nowIso(), type: 'research.native_agents.completed', backend: nativeAgentRun.backend, ok: nativeAgentRun.ok, proof: nativeAgentRun.proof?.status });
148
- if (mock) {
149
- let gate = await writeMockResearchResult(dir, plan);
150
- const nativeGate = { ...(gate.gate || gate), native_agent_proof: nativeAgentRun.proof?.ok === true, agent_central_ledger: true };
151
- await writeJsonAtomic(path.join(dir, 'research-gate.json'), nativeGate);
152
- gate = { ...gate, gate: nativeGate, passed: nativeGate.passed };
153
- const proof = await maybeFinalizeRoute(root, { missionId: id, route: '$Research', gateFile: 'research-gate.json', gate: gate.gate || gate, artifacts: ['agents/agent-proof-evidence.json', 'research-native-agent-run.json', 'research-gate.json', 'research-report.md', researchPaperArtifactForPlan(plan), 'source-ledger.json', 'agent-ledger.json', 'debate-ledger.json', 'completion-proof.json'], mock, command: { cmd: `sks research run ${id} --mock`, status: 0 } });
154
- await setCurrent(root, { mission_id: id, mode: 'RESEARCH', phase: gate.passed ? 'RESEARCH_DONE' : 'RESEARCH_PAUSED', questions_allowed: true, implementation_allowed: false });
155
- if (flag(args, '--json'))
156
- return console.log(JSON.stringify({ schema: flag(args, '--autoresearch') ? 'sks.autoresearch-run.v1' : 'sks.research-run.v1', ok: proof.ok, mission_id: id, gate, quality_metrics: gate.metrics || null, proof: proof.validation, native_agent_run: nativeAgentRun, research_work_graph: researchWorkGraph, agent_batches: plan.agent_batches, autoresearch_cycle_policy: plan.autoresearch_cycle_policy }, null, 2));
157
- console.log(`Mock research done: ${id}`);
158
- console.log(`Gate: ${gate.passed ? 'passed' : 'blocked'}`);
159
- return;
160
- }
161
148
  if (!nativeAgentRun.ok) {
162
149
  await maybeFinalizeRoute(root, { missionId: id, route: '$Research', gateFile: 'research-gate.json', gate: await readJson(path.join(dir, 'research-gate.json'), null), artifacts: ['agents/agent-proof-evidence.json', 'research-native-agent-run.json', 'completion-proof.json'], statusHint: 'blocked', blockers: nativeAgentRun.proof?.blockers || ['native_agent_backend_blocked'], command: { cmd: `sks research run ${id}`, status: 2 } });
163
150
  await setCurrent(root, { mission_id: id, mode: 'RESEARCH', phase: 'RESEARCH_BLOCKED_NATIVE_AGENTS', questions_allowed: true, implementation_allowed: false, blocker: 'agents/agent-proof-evidence.json' });
164
151
  process.exitCode = 2;
165
152
  return;
166
153
  }
154
+ const legacyResearchCycle = flag(args, '--legacy-research-cycle') || process.env.SKS_RESEARCH_LEGACY_CYCLE === '1';
155
+ const sourceMutationBaseline = await researchCodeMutationSnapshot(root, id);
156
+ if (!legacyResearchCycle) {
157
+ const cycleResult = await runResearchCycle({
158
+ root,
159
+ dir,
160
+ plan,
161
+ graph: researchWorkGraph,
162
+ cycle: 1,
163
+ backend: mock ? 'mock' : 'codex-sdk',
164
+ timeoutMs: cycleTimeoutMs,
165
+ maxParallelStages: readBoundedIntegerFlag(args, '--research-stage-parallelism', 4, 1, 16),
166
+ mock
167
+ });
168
+ const mutation = await researchCodeMutationDelta(root, sourceMutationBaseline, id);
169
+ if (mutation.blocked) {
170
+ const blocker = {
171
+ schema_version: 1,
172
+ mission_id: id,
173
+ ts: nowIso(),
174
+ phase: 'RESEARCH_BLOCKED_CODE_MUTATION',
175
+ reason: 'Research mode must not modify repository source files. Only route-local mission artifacts are allowed.',
176
+ changed_paths: mutation.changed_paths,
177
+ allowed_prefixes: mutation.allowed_prefixes,
178
+ implementation_allowed: false
179
+ };
180
+ await writeJsonAtomic(path.join(dir, 'research-code-mutation-blocker.json'), blocker);
181
+ await maybeFinalizeRoute(root, { missionId: id, route: '$Research', gateFile: 'research-gate.json', gate: await readJson(path.join(dir, 'research-gate.json'), null), artifacts: ['research-code-mutation-blocker.json', 'completion-proof.json'], statusHint: 'blocked', blockers: ['research_code_mutation_detected'], command: { cmd: `sks research run ${id}`, status: 2 } });
182
+ await setCurrent(root, { mission_id: id, mode: 'RESEARCH', phase: 'RESEARCH_BLOCKED_CODE_MUTATION', questions_allowed: true, implementation_allowed: false, blocker: 'research-code-mutation-blocker.json' });
183
+ process.exitCode = 2;
184
+ return;
185
+ }
186
+ const gate = await evaluateResearchGate(dir);
187
+ const passed = cycleResult.status === 'passed' && gate.passed === true;
188
+ const proof = await maybeFinalizeRoute(root, {
189
+ missionId: id,
190
+ route: '$Research',
191
+ gateFile: 'research-gate.json',
192
+ gate: gate.gate || gate,
193
+ artifacts: ['agents/agent-proof-evidence.json', 'research-native-agent-run.json', 'research-cycle-runner.json', 'research-gate.json', 'research-report.md', researchPaperArtifactForPlan(plan), 'source-ledger.json', 'claim-evidence-matrix.json', 'implementation-blueprint.json', 'team-handoff-goal.md', 'completion-proof.json'],
194
+ statusHint: passed ? undefined : 'blocked',
195
+ blockers: passed ? [] : [...(cycleResult.blockers || []), ...(gate.reasons || [])],
196
+ mock,
197
+ command: { cmd: `sks research run ${id}${mock ? ' --mock' : ''}`, status: passed ? 0 : 2 }
198
+ });
199
+ await setCurrent(root, { mission_id: id, mode: 'RESEARCH', phase: passed ? 'RESEARCH_DONE' : 'RESEARCH_BLOCKED_STAGE_CYCLE', questions_allowed: true, implementation_allowed: false });
200
+ await appendJsonlBounded(path.join(dir, 'events.jsonl'), { ts: nowIso(), type: passed ? 'research.done' : 'research.stage_cycle.blocked', cycle: 1, cycle_status: cycleResult.status });
201
+ await enforceRetention(root).catch(() => { });
202
+ if (flag(args, '--json'))
203
+ return console.log(JSON.stringify({ schema: flag(args, '--autoresearch') ? 'sks.autoresearch-run.v1' : 'sks.research-run.v1', ok: proof.ok && passed, mission_id: id, gate, quality_metrics: gate.metrics || null, proof: proof.validation, native_agent_run: nativeAgentRun, research_work_graph: researchWorkGraph, research_cycle: cycleResult, agent_batches: plan.agent_batches, autoresearch_cycle_policy: plan.autoresearch_cycle_policy }, null, 2));
204
+ printResearchCompletion(id, root, dir, plan, gate);
205
+ if (!passed)
206
+ process.exitCode = 2;
207
+ return;
208
+ }
167
209
  const codex = await getCodexInfo();
168
210
  if (!codex.bin) {
169
211
  const blocker = {
@@ -185,12 +227,10 @@ async function researchRun(args) {
185
227
  }
186
228
  let last = '';
187
229
  const researchCodexArgs = ['-c', 'service_tier="fast"', '-c', 'model_reasoning_effort="xhigh"'];
188
- const sourceMutationBaseline = await researchCodeMutationSnapshot(root, id);
189
230
  for (let cycle = 1; cycle <= maxCycles; cycle += 1) {
190
231
  const cycleDir = path.join(dir, 'research', `cycle-${cycle}`);
191
232
  const outputFile = path.join(cycleDir, 'final.md');
192
- await appendJsonlBounded(path.join(dir, 'events.jsonl'), { ts: nowIso(), type: 'research.cycle.start', cycle, timeoutMinutes: cycleTimeoutMinutes, profile, enforced_reasoning_effort: 'xhigh' });
193
- await runResearchCycle(dir, researchWorkGraph, { cycle, status: 'codex_research_cycle_started' });
233
+ await appendJsonlBounded(path.join(dir, 'events.jsonl'), { ts: nowIso(), type: 'research.legacy_cycle.start', cycle, timeoutMinutes: cycleTimeoutMinutes, profile, enforced_reasoning_effort: 'xhigh', legacy_final_md_loop: true });
194
234
  const prompt = buildResearchPrompt({ id, mission, plan, cycle, previous: last });
195
235
  const result = await runCodexExec({ root, prompt, outputFile, json: true, profile, extraArgs: researchCodexArgs, logDir: cycleDir, timeoutMs: cycleTimeoutMs });
196
236
  await writeJsonAtomic(path.join(cycleDir, 'process.json'), { code: result.code, stdout_tail: result.stdout, stderr_tail: result.stderr, stdout_bytes: result.stdoutBytes, stderr_bytes: result.stderrBytes, truncated: result.truncated, timed_out: result.timedOut });
@@ -226,7 +266,7 @@ async function researchRun(args) {
226
266
  await enforceRetention(root).catch(() => { });
227
267
  if (flag(args, '--json'))
228
268
  return console.log(JSON.stringify({ schema: flag(args, '--autoresearch') ? 'sks.autoresearch-run.v1' : 'sks.research-run.v1', ok: proof.ok, mission_id: id, gate, quality_metrics: gate.metrics || null, proof: proof.validation, research_work_graph: researchWorkGraph, agent_batches: plan.agent_batches, autoresearch_cycle_policy: plan.autoresearch_cycle_policy }, null, 2));
229
- console.log(`Research done: ${id}`);
269
+ printResearchCompletion(id, root, dir, plan, gate);
230
270
  return;
231
271
  }
232
272
  }
@@ -235,6 +275,23 @@ async function researchRun(args) {
235
275
  await setCurrent(root, { mission_id: id, mode: 'RESEARCH', phase: 'RESEARCH_PAUSED_MAX_CYCLES', questions_allowed: true, implementation_allowed: false });
236
276
  console.log(`Research paused after max cycles without unanimous agent consensus: ${id}`);
237
277
  }
278
+ function printResearchCompletion(id, root, dir, plan, gate) {
279
+ const metrics = gate?.metrics || {};
280
+ const synthesis = metrics.synthesis || {};
281
+ const rel = (artifact) => path.relative(root, path.join(dir, artifact));
282
+ console.log(`Research done: ${id}`);
283
+ console.log(`Synthesis: ${synthesis.writer || 'missing'}`);
284
+ console.log(`Report: ${rel('research-report.md')}`);
285
+ console.log(`Paper: ${rel(researchPaperArtifactForPlan(plan))}`);
286
+ console.log(`Implementation blueprint: ${rel('implementation-blueprint.json')}`);
287
+ console.log(`Claim-evidence matrix: ${rel('claim-evidence-matrix.json')}`);
288
+ console.log(`Experiment plan: ${rel('experiment-plan.json')}`);
289
+ console.log(`Replication pack: ${rel('replication-pack.json')}`);
290
+ console.log(`Gate: ${gate?.passed ? 'passed' : 'blocked'}`);
291
+ console.log(`Quality: ${metrics.report_word_count ?? 0} words / ${metrics.source_entries_total_with_counterevidence ?? metrics.source_entries ?? 0} sources / ${metrics.key_claims ?? 0} key claims / repetition ${synthesis.repetition_ratio ?? metrics.report_repetition?.repeated_paragraph_ratio ?? 'n/a'}`);
292
+ console.log(`Final review: static ${metrics.final_review_blockers?.length ? 'block' : 'pass'} / codex ${synthesis.codex_final_review_verdict || 'missing'}`);
293
+ console.log(`Handoff: ${rel('team-handoff-goal.md')}`);
294
+ }
238
295
  async function researchStatus(args) {
239
296
  const root = await sksRoot();
240
297
  const id = await resolveMissionId(root, args[0]);
@@ -266,6 +323,7 @@ async function researchStatus(args) {
266
323
  const experimentPlan = await readExperimentPlan(dir);
267
324
  const replicationPack = await readReplicationPack(dir);
268
325
  const finalReview = await readResearchFinalReview(dir);
326
+ const synthesisOutput = await readJson(path.join(dir, 'research-synthesis-output.json'), null);
269
327
  const blueprintValidation = validateImplementationBlueprint(implementationBlueprint, qualityContract);
270
328
  const experimentValidation = validateExperimentPlan(experimentPlan, qualityContract);
271
329
  const replicationValidation = validateReplicationPack(replicationPack);
@@ -302,6 +360,14 @@ async function researchStatus(args) {
302
360
  research_quality: {
303
361
  contract: qualityContract,
304
362
  report_word_count: gate?.metrics?.report_word_count ?? null,
363
+ synthesis: {
364
+ writer: gate?.metrics?.synthesis?.writer ?? (synthesisOutput ? 'evidence-bound writer artifact present' : null),
365
+ repetition_ratio: gate?.metrics?.synthesis?.repetition_ratio ?? gate?.metrics?.report_repetition?.repeated_paragraph_ratio ?? null,
366
+ source_density_per_1000_words: gate?.metrics?.synthesis?.source_density_per_1000_words ?? gate?.metrics?.source_density_per_1000_words ?? null,
367
+ claim_density_per_1000_words: gate?.metrics?.synthesis?.claim_density_per_1000_words ?? gate?.metrics?.claim_density_per_1000_words ?? null,
368
+ template_phrase_hits: gate?.metrics?.synthesis?.template_phrase_hits ?? gate?.metrics?.template_phrase_hits ?? [],
369
+ codex_final_review_verdict: finalReview?.codex_review?.verdict || null
370
+ },
305
371
  claim_evidence_matrix_present: claimMatrix.present,
306
372
  key_claims: claimMatrix.key_claim_ids.length,
307
373
  triangulated_claims: claimMatrix.triangulated_claim_count,