sneakoscope 2.0.14 → 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 (480) 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-plan.js +3 -2
  11. package/dist/core/agents/native-cli-session-swarm.js +118 -0
  12. package/dist/core/agents/native-cli-worker.js +85 -0
  13. package/dist/core/commands/basic-cli.js +1 -1
  14. package/dist/core/commands/command-suggestions.js +1 -1
  15. package/dist/core/commands/mad-db-command.js +106 -0
  16. package/dist/core/commands/mad-sks-command.js +50 -13
  17. package/dist/core/commands/naruto-command.js +81 -1
  18. package/dist/core/commands/research-command.js +13 -1
  19. package/dist/core/commands/team-command.js +25 -1
  20. package/dist/core/db-safety.js +26 -0
  21. package/dist/core/fsx.js +1 -1
  22. package/dist/core/mad-db/mad-db-capability.js +84 -0
  23. package/dist/core/mad-db/mad-db-ledger.js +17 -0
  24. package/dist/core/mad-db/mad-db-policy-resolver.js +46 -0
  25. package/dist/core/pipeline-internals/runtime-core.js +74 -8
  26. package/dist/core/pipeline-internals/runtime-gates.js +44 -0
  27. package/dist/core/proof/route-proof-gate.js +5 -3
  28. package/dist/core/proof/route-proof-policy.js +9 -1
  29. package/dist/core/release/release-gate-affected-selector.js +113 -0
  30. package/dist/core/release/release-gate-batch-runner.js +67 -0
  31. package/dist/core/release/release-gate-dag.js +22 -3
  32. package/dist/core/release/release-gate-resource-governor.js +23 -11
  33. package/dist/core/research/implementation-blueprint-densifier.js +1 -1
  34. package/dist/core/research/implementation-blueprint-markdown.js +1 -1
  35. package/dist/core/research/implementation-blueprint.js +68 -7
  36. package/dist/core/research/research-final-reviewer.js +27 -1
  37. package/dist/core/research/research-handoff.js +69 -5
  38. package/dist/core/research/research-realistic-report.js +162 -0
  39. package/dist/core/research/research-repetition-detector.js +75 -0
  40. package/dist/core/research/research-report-quality.js +27 -5
  41. package/dist/core/research/research-stage-runner.js +40 -13
  42. package/dist/core/research/research-synthesis-prompt.js +52 -0
  43. package/dist/core/research/research-synthesis-writer.js +208 -0
  44. package/dist/core/research.js +60 -48
  45. package/dist/core/routes.js +23 -19
  46. package/dist/core/update/update-notice.js +120 -0
  47. package/dist/core/version.js +1 -1
  48. package/dist/core/zellij/zellij-dashboard-renderer.js +2 -0
  49. package/dist/core/zellij/zellij-slot-column-anchor.js +35 -1
  50. package/dist/core/zellij/zellij-slot-pane-renderer.js +57 -0
  51. package/dist/core/zellij/zellij-slot-telemetry.js +182 -0
  52. package/dist/scripts/release-gate-dag-runner.js +5 -0
  53. package/dist/scripts/release-speed-summary.js +25 -0
  54. package/package.json +52 -5
  55. package/schemas/mad-db/mad-db-capability.schema.json +31 -0
  56. package/schemas/mad-db/mad-db-ledger.schema.json +14 -0
  57. package/schemas/research/implementation-blueprint.schema.json +6 -1
  58. package/schemas/research/research-final-review.schema.json +10 -0
  59. package/schemas/research/research-synthesis-output.schema.json +62 -0
  60. package/schemas/update/update-notice.schema.json +19 -0
  61. package/schemas/zellij/zellij-slot-telemetry.schema.json +89 -0
  62. package/dist/scripts/agent-ast-aware-work-graph-check.js +0 -25
  63. package/dist/scripts/agent-backfill-replenishment-check.js +0 -13
  64. package/dist/scripts/agent-backfill-route-blackbox.js +0 -5
  65. package/dist/scripts/agent-background-terminals-check.js +0 -16
  66. package/dist/scripts/agent-cleanup-command-ux-check.js +0 -12
  67. package/dist/scripts/agent-cleanup-executor-check.js +0 -53
  68. package/dist/scripts/agent-cleanup-executor-v2-check.js +0 -39
  69. package/dist/scripts/agent-cli-options-to-task-graph-check.js +0 -5
  70. package/dist/scripts/agent-codex-app-cockpit-check.js +0 -91
  71. package/dist/scripts/agent-codex-child-overlap-check.js +0 -21
  72. package/dist/scripts/agent-dynamic-cockpit-check.js +0 -10
  73. package/dist/scripts/agent-dynamic-pool-check.js +0 -13
  74. package/dist/scripts/agent-dynamic-pool-route-blackbox.js +0 -5
  75. package/dist/scripts/agent-fast-mode-default-check.js +0 -62
  76. package/dist/scripts/agent-fast-mode-worker-propagation-check.js +0 -7
  77. package/dist/scripts/agent-follow-up-work-schema-check.js +0 -80
  78. package/dist/scripts/agent-goal-mode-propagation-check.js +0 -9
  79. package/dist/scripts/agent-intelligent-work-graph-check.js +0 -25
  80. package/dist/scripts/agent-janitor-check.js +0 -76
  81. package/dist/scripts/agent-main-no-scout-check.js +0 -11
  82. package/dist/scripts/agent-model-authored-patch-envelope-check.js +0 -15
  83. package/dist/scripts/agent-multi-project-isolation-check.js +0 -86
  84. package/dist/scripts/agent-native-cli-session-proof-check.js +0 -7
  85. package/dist/scripts/agent-native-cli-session-swarm-10-check.js +0 -7
  86. package/dist/scripts/agent-native-cli-session-swarm-20-check.js +0 -7
  87. package/dist/scripts/agent-native-cli-session-swarm-check.js +0 -7
  88. package/dist/scripts/agent-no-subagent-scaling-check.js +0 -7
  89. package/dist/scripts/agent-parallel-write-blackbox.js +0 -56
  90. package/dist/scripts/agent-parallel-write-kernel-check.js +0 -103
  91. package/dist/scripts/agent-patch-conflict-rebase-check.js +0 -198
  92. package/dist/scripts/agent-patch-envelope-extraction-check.js +0 -17
  93. package/dist/scripts/agent-patch-proof-check.js +0 -41
  94. package/dist/scripts/agent-patch-proof-runtime-check.js +0 -63
  95. package/dist/scripts/agent-patch-queue-runtime-check.js +0 -36
  96. package/dist/scripts/agent-patch-rollback-check.js +0 -38
  97. package/dist/scripts/agent-patch-rollback-dag-check.js +0 -14
  98. package/dist/scripts/agent-patch-swarm-route-blackbox.js +0 -10
  99. package/dist/scripts/agent-patch-swarm-runtime-check.js +0 -10
  100. package/dist/scripts/agent-patch-swarm-runtime-truth-check.js +0 -76
  101. package/dist/scripts/agent-patch-transaction-journal-check.js +0 -57
  102. package/dist/scripts/agent-patch-verification-dag-check.js +0 -14
  103. package/dist/scripts/agent-proof-contract-reconciled-check.js +0 -5
  104. package/dist/scripts/agent-real-codex-dynamic-smoke-check.js +0 -166
  105. package/dist/scripts/agent-real-codex-dynamic-smoke-v2-check.js +0 -14
  106. package/dist/scripts/agent-real-codex-in-zellij-worker-pane-check.js +0 -229
  107. package/dist/scripts/agent-real-codex-parallel-workers-10-check.js +0 -5
  108. package/dist/scripts/agent-real-codex-parallel-workers-20-check.js +0 -5
  109. package/dist/scripts/agent-real-codex-parallel-workers-5-check.js +0 -5
  110. package/dist/scripts/agent-real-codex-parallel-workers-check.js +0 -5
  111. package/dist/scripts/agent-role-config-repair-check.js +0 -33
  112. package/dist/scripts/agent-rollback-command-check.js +0 -86
  113. package/dist/scripts/agent-route-truth-backfill-check.js +0 -5
  114. package/dist/scripts/agent-scheduler-proof-check.js +0 -13
  115. package/dist/scripts/agent-scheduler-proof-hardening-check.js +0 -22
  116. package/dist/scripts/agent-session-generation-check.js +0 -21
  117. package/dist/scripts/agent-slot-pane-binding-proof-check.js +0 -64
  118. package/dist/scripts/agent-source-intelligence-propagation-check.js +0 -9
  119. package/dist/scripts/agent-strategy-to-lease-wiring-check.js +0 -32
  120. package/dist/scripts/agent-strategy-to-patch-strict-check.js +0 -54
  121. package/dist/scripts/agent-task-graph-expansion-check.js +0 -14
  122. package/dist/scripts/agent-terminal-generations-check.js +0 -23
  123. package/dist/scripts/agent-visual-consistency-check.js +0 -9
  124. package/dist/scripts/agent-wiki-context-proof-check.js +0 -62
  125. package/dist/scripts/agent-worker-backend-router-check.js +0 -63
  126. package/dist/scripts/agent-worker-scout-limited-check.js +0 -17
  127. package/dist/scripts/agent-zellij-dynamic-backfill-panes-check.js +0 -34
  128. package/dist/scripts/agent-zellij-runtime-check.js +0 -84
  129. package/dist/scripts/all-feature-deep-completion-check.js +0 -31
  130. package/dist/scripts/appshots-capability-check.js +0 -18
  131. package/dist/scripts/appshots-evidence-check.js +0 -48
  132. package/dist/scripts/appshots-operator-policy-check.js +0 -25
  133. package/dist/scripts/appshots-privacy-safety-check.js +0 -48
  134. package/dist/scripts/appshots-source-intelligence-check.js +0 -53
  135. package/dist/scripts/appshots-thread-attachment-discovery-check.js +0 -87
  136. package/dist/scripts/appshots-triwiki-voxel-check.js +0 -46
  137. package/dist/scripts/architecture-guard-check.js +0 -55
  138. package/dist/scripts/changelog-check.js +0 -47
  139. package/dist/scripts/codex-0-133-official-compat-report.js +0 -53
  140. package/dist/scripts/codex-0-134-official-compat-report.js +0 -110
  141. package/dist/scripts/codex-0-134-runner-truth-check.js +0 -66
  142. package/dist/scripts/codex-0-135-compat-check.js +0 -57
  143. package/dist/scripts/codex-0-136-compat-check.js +0 -30
  144. package/dist/scripts/codex-0-137-compat-check.js +0 -27
  145. package/dist/scripts/codex-app-fast-ui-preservation-check.js +0 -32
  146. package/dist/scripts/codex-app-provider-badge-check.js +0 -37
  147. package/dist/scripts/codex-app-ui-clobber-guard-check.js +0 -22
  148. package/dist/scripts/codex-app-ui-preservation-check.js +0 -96
  149. package/dist/scripts/codex-control-all-pipelines-check.js +0 -36
  150. package/dist/scripts/codex-control-capability-check.js +0 -10
  151. package/dist/scripts/codex-control-empty-result-retry-check.js +0 -43
  152. package/dist/scripts/codex-control-event-stream-ledger-check.js +0 -10
  153. package/dist/scripts/codex-control-keepalive-no-cot-leak-check.js +0 -14
  154. package/dist/scripts/codex-control-no-legacy-fallback-check.js +0 -31
  155. package/dist/scripts/codex-control-side-effect-scope-check.js +0 -26
  156. package/dist/scripts/codex-control-stream-idle-watchdog-check.js +0 -18
  157. package/dist/scripts/codex-control-structured-output-check.js +0 -11
  158. package/dist/scripts/codex-control-thread-registry-check.js +0 -11
  159. package/dist/scripts/codex-control-tool-call-sequence-repair-check.js +0 -14
  160. package/dist/scripts/codex-environment-scoped-approvals-check.js +0 -10
  161. package/dist/scripts/codex-exec-output-schema-actual-syntax-check.js +0 -33
  162. package/dist/scripts/codex-fast-mode-profile-propagation-check.js +0 -12
  163. package/dist/scripts/codex-history-search-check.js +0 -19
  164. package/dist/scripts/codex-hook-semantic-check.js +0 -15
  165. package/dist/scripts/codex-hook-strict-subset-check.js +0 -61
  166. package/dist/scripts/codex-lb-config-toml-safety-check.js +0 -85
  167. package/dist/scripts/codex-lb-persistence-truth-check.js +0 -96
  168. package/dist/scripts/codex-lb-setup-fixture-check.js +0 -91
  169. package/dist/scripts/codex-lb-setup-truthfulness-check.js +0 -84
  170. package/dist/scripts/codex-legacy-profile-consumers-removed-check.js +0 -24
  171. package/dist/scripts/codex-managed-proxy-env-check.js +0 -17
  172. package/dist/scripts/codex-output-schema-fixture-check.js +0 -25
  173. package/dist/scripts/codex-permission-profiles-check.js +0 -36
  174. package/dist/scripts/codex-plugin-list-json-check.js +0 -8
  175. package/dist/scripts/codex-profile-primary-check.js +0 -13
  176. package/dist/scripts/codex-project-config-policy-splitter-check.js +0 -51
  177. package/dist/scripts/codex-resume-cwd-truth-check.js +0 -17
  178. package/dist/scripts/codex-sdk-all-pipelines-check.js +0 -32
  179. package/dist/scripts/codex-sdk-backend-router-check.js +0 -65
  180. package/dist/scripts/codex-sdk-capability-check.js +0 -11
  181. package/dist/scripts/codex-sdk-core-skill-pipeline-check.js +0 -9
  182. package/dist/scripts/codex-sdk-dfix-pipeline-check.js +0 -9
  183. package/dist/scripts/codex-sdk-event-stream-ledger-check.js +0 -9
  184. package/dist/scripts/codex-sdk-no-legacy-fallback-check.js +0 -33
  185. package/dist/scripts/codex-sdk-qa-pipeline-check.js +0 -8
  186. package/dist/scripts/codex-sdk-real-smoke-check.js +0 -39
  187. package/dist/scripts/codex-sdk-release-review-pipeline-check.js +0 -13
  188. package/dist/scripts/codex-sdk-research-pipeline-check.js +0 -47
  189. package/dist/scripts/codex-sdk-sandbox-policy-check.js +0 -21
  190. package/dist/scripts/codex-sdk-structured-output-check.js +0 -10
  191. package/dist/scripts/codex-sdk-team-naruto-agent-pipeline-check.js +0 -12
  192. package/dist/scripts/codex-sdk-thread-registry-check.js +0 -11
  193. package/dist/scripts/codex-sdk-ux-ppt-review-pipeline-check.js +0 -9
  194. package/dist/scripts/codex-sdk-zellij-pane-binding-check.js +0 -13
  195. package/dist/scripts/codex-thread-runtime-choice-check.js +0 -10
  196. package/dist/scripts/codex-web-adapter-check.js +0 -12
  197. package/dist/scripts/computer-use-live-evidence-check.js +0 -55
  198. package/dist/scripts/computer-use-live-optional-check.js +0 -32
  199. package/dist/scripts/computer-use-policy-check.js +0 -69
  200. package/dist/scripts/computer-use-visual-route-fixture-check.js +0 -37
  201. package/dist/scripts/core-skill-card-schema-check.js +0 -61
  202. package/dist/scripts/core-skill-deployment-snapshot-check.js +0 -54
  203. package/dist/scripts/core-skill-heldout-validation-check.js +0 -49
  204. package/dist/scripts/core-skill-no-inference-optimizer-check.js +0 -75
  205. package/dist/scripts/core-skill-patch-check.js +0 -79
  206. package/dist/scripts/core-skill-promotion-side-effect-ledger-check.js +0 -64
  207. package/dist/scripts/core-skill-rollout-scoring-check.js +0 -72
  208. package/dist/scripts/core-skill-route-runtime-integration-check.js +0 -49
  209. package/dist/scripts/dfix-fast-blackbox-check.js +0 -37
  210. package/dist/scripts/dfix-fast-kernel-check.js +0 -26
  211. package/dist/scripts/dfix-fixture-check.js +0 -6
  212. package/dist/scripts/dfix-parallel-write-blackbox.js +0 -48
  213. package/dist/scripts/dfix-patch-handoff-check.js +0 -13
  214. package/dist/scripts/dfix-patch-swarm-route-blackbox.js +0 -10
  215. package/dist/scripts/dfix-performance-check.js +0 -15
  216. package/dist/scripts/dfix-verification-check.js +0 -9
  217. package/dist/scripts/dfix-verification-recommendation-check.js +0 -15
  218. package/dist/scripts/docs-truthfulness-check.js +0 -61
  219. package/dist/scripts/doctor-codex-doctor-parity-check.js +0 -17
  220. package/dist/scripts/doctor-fix-proves-codex-read-check.js +0 -64
  221. package/dist/scripts/doctor-fix-recovers-corrupted-config-check.js +0 -122
  222. package/dist/scripts/doctor-fixes-codex-app-fast-ui-check.js +0 -39
  223. package/dist/scripts/evidence-fixture-check.js +0 -26
  224. package/dist/scripts/evidence-flagship-coverage-check.js +0 -55
  225. package/dist/scripts/fake-real-proof-policy-v2-check.js +0 -27
  226. package/dist/scripts/fake-vs-real-proof-policy-check.js +0 -14
  227. package/dist/scripts/fast-codex-service-tier-proof-check.js +0 -42
  228. package/dist/scripts/flagship-proof-graph-v2-check.js +0 -48
  229. package/dist/scripts/flagship-proof-graph-v3-check.js +0 -67
  230. package/dist/scripts/flagship-proof-graph-v4-check.js +0 -61
  231. package/dist/scripts/git-precommit-fixture-check.js +0 -41
  232. package/dist/scripts/git-worktree-cache-performance-check.js +0 -25
  233. package/dist/scripts/git-worktree-capability-check.js +0 -27
  234. package/dist/scripts/git-worktree-checkpoint-check.js +0 -20
  235. package/dist/scripts/git-worktree-cleanup-check.js +0 -27
  236. package/dist/scripts/git-worktree-cross-rebase-check.js +0 -39
  237. package/dist/scripts/git-worktree-diff-envelope-check.js +0 -17
  238. package/dist/scripts/git-worktree-diff-export-check.js +0 -43
  239. package/dist/scripts/git-worktree-dirty-lock-check.js +0 -17
  240. package/dist/scripts/git-worktree-dirty-main-detection-check.js +0 -14
  241. package/dist/scripts/git-worktree-integration-primary-check.js +0 -24
  242. package/dist/scripts/git-worktree-integration-primary-runtime-check.js +0 -20
  243. package/dist/scripts/git-worktree-manager-check.js +0 -37
  244. package/dist/scripts/git-worktree-manifest-append-check.js +0 -18
  245. package/dist/scripts/git-worktree-merge-queue-check.js +0 -31
  246. package/dist/scripts/git-worktree-pool-performance-check.js +0 -20
  247. package/dist/scripts/git-worktree-untracked-diff-check.js +0 -18
  248. package/dist/scripts/goal-mode-official-default-check.js +0 -12
  249. package/dist/scripts/gpt-final-arbiter-check.js +0 -63
  250. package/dist/scripts/gpt-final-arbiter-performance-check.js +0 -36
  251. package/dist/scripts/gpt-image-2-request-validator-check.js +0 -35
  252. package/dist/scripts/hooks-0.134-context-parity-check.js +0 -20
  253. package/dist/scripts/hooks-actual-parity-check.js +0 -17
  254. package/dist/scripts/hooks-actual-parity-v2-check.js +0 -21
  255. package/dist/scripts/hooks-latest-schema-check.js +0 -20
  256. package/dist/scripts/hooks-managed-install-fixture-check.js +0 -21
  257. package/dist/scripts/hooks-official-hash-oracle-check.js +0 -35
  258. package/dist/scripts/hooks-official-hash-parity-check.js +0 -17
  259. package/dist/scripts/hooks-subagent-events-check.js +0 -17
  260. package/dist/scripts/hooks-trust-state-check.js +0 -14
  261. package/dist/scripts/image-fidelity-fixture-check.js +0 -24
  262. package/dist/scripts/imagegen-capability-check.js +0 -30
  263. package/dist/scripts/imagegen-real-smoke-check.js +0 -155
  264. package/dist/scripts/install-update-preserves-config-check.js +0 -87
  265. package/dist/scripts/json-schema-recursive-check.js +0 -78
  266. package/dist/scripts/legacy-multiagent-removal-check.js +0 -85
  267. package/dist/scripts/legacy-upgrade-matrix-check.js +0 -300
  268. package/dist/scripts/local-collab-all-pipelines-final-gpt-check.js +0 -21
  269. package/dist/scripts/local-collab-gpt-final-availability-check.js +0 -58
  270. package/dist/scripts/local-collab-no-local-only-final-check.js +0 -27
  271. package/dist/scripts/local-collab-policy-check.js +0 -17
  272. package/dist/scripts/local-collab-worktree-gpt-final-apply-policy-check.js +0 -63
  273. package/dist/scripts/local-llm-all-pipelines-check.js +0 -11
  274. package/dist/scripts/local-llm-cache-performance-check.js +0 -10
  275. package/dist/scripts/local-llm-capability-check.js +0 -14
  276. package/dist/scripts/local-llm-smoke-check.js +0 -23
  277. package/dist/scripts/local-llm-structured-output-check.js +0 -11
  278. package/dist/scripts/local-llm-throughput-check.js +0 -10
  279. package/dist/scripts/local-llm-tool-call-repair-check.js +0 -10
  280. package/dist/scripts/local-llm-warmup-check.js +0 -11
  281. package/dist/scripts/loop-blocker-check.js +0 -15
  282. package/dist/scripts/mad-preflight-blocks-unreadable-config-check.js +0 -35
  283. package/dist/scripts/mad-sks-actual-executor-blackbox.js +0 -5
  284. package/dist/scripts/mad-sks-app-ui-no-mutation-check.js +0 -92
  285. package/dist/scripts/mad-sks-audit-proof-check.js +0 -34
  286. package/dist/scripts/mad-sks-db-executor-check.js +0 -5
  287. package/dist/scripts/mad-sks-executor-proof-graph-check.js +0 -5
  288. package/dist/scripts/mad-sks-fast-mode-propagation-check.js +0 -24
  289. package/dist/scripts/mad-sks-file-write-executor-check.js +0 -5
  290. package/dist/scripts/mad-sks-immutable-harness-check.js +0 -36
  291. package/dist/scripts/mad-sks-no-harness-modification-check.js +0 -25
  292. package/dist/scripts/mad-sks-package-executor-check.js +0 -5
  293. package/dist/scripts/mad-sks-permission-model-check.js +0 -22
  294. package/dist/scripts/mad-sks-rollback-apply-check.js +0 -5
  295. package/dist/scripts/mad-sks-service-executor-check.js +0 -5
  296. package/dist/scripts/mad-sks-shell-executor-check.js +0 -5
  297. package/dist/scripts/mad-sks-write-guard-check.js +0 -28
  298. package/dist/scripts/mad-sks-zellij-default-pane-worker-check.js +0 -37
  299. package/dist/scripts/mad-sks-zellij-launch-check.js +0 -102
  300. package/dist/scripts/mcp-0-134-modernization-check.js +0 -55
  301. package/dist/scripts/mcp-readonly-concurrency-check.js +0 -17
  302. package/dist/scripts/mcp-readonly-runtime-scheduler-check.js +0 -20
  303. package/dist/scripts/mcp-tool-naming-parity-check.js +0 -16
  304. package/dist/scripts/memory-summary-rebuild-check.js +0 -22
  305. package/dist/scripts/mutation-callsite-coverage-check.js +0 -180
  306. package/dist/scripts/naruto-active-pool-check.js +0 -39
  307. package/dist/scripts/naruto-actual-worker-control-plane-check.js +0 -56
  308. package/dist/scripts/naruto-allocation-policy-check.js +0 -33
  309. package/dist/scripts/naruto-allocation-runtime-wiring-check.js +0 -92
  310. package/dist/scripts/naruto-concurrency-governor-check.js +0 -53
  311. package/dist/scripts/naruto-extreme-parallelism-check.js +0 -22
  312. package/dist/scripts/naruto-extreme-parallelism-real-check.js +0 -43
  313. package/dist/scripts/naruto-gpt-final-pack-check.js +0 -34
  314. package/dist/scripts/naruto-orchestrator-runtime-source-check.js +0 -70
  315. package/dist/scripts/naruto-parallel-patch-apply-check.js +0 -41
  316. package/dist/scripts/naruto-readonly-routing-check.js +0 -116
  317. package/dist/scripts/naruto-real-active-pool-check.js +0 -39
  318. package/dist/scripts/naruto-real-active-pool-runtime-check.js +0 -55
  319. package/dist/scripts/naruto-rebalance-policy-check.js +0 -41
  320. package/dist/scripts/naruto-role-distribution-check.js +0 -23
  321. package/dist/scripts/naruto-shadow-clone-swarm-check.js +0 -153
  322. package/dist/scripts/naruto-verification-pool-check.js +0 -36
  323. package/dist/scripts/naruto-work-graph-check.js +0 -24
  324. package/dist/scripts/naruto-worktree-coding-blackbox.js +0 -29
  325. package/dist/scripts/naruto-worktree-coding-check.js +0 -44
  326. package/dist/scripts/naruto-worktree-gpt-final-check.js +0 -45
  327. package/dist/scripts/naruto-worktree-zellij-ui-check.js +0 -28
  328. package/dist/scripts/naruto-zellij-dynamic-right-column-check.js +0 -48
  329. package/dist/scripts/naruto-zellij-massive-ui-check.js +0 -23
  330. package/dist/scripts/non-recursive-pipeline-check.js +0 -68
  331. package/dist/scripts/npm-publish-performance-check.js +0 -65
  332. package/dist/scripts/official-docs-compat-report.js +0 -304
  333. package/dist/scripts/packlist-performance-check.js +0 -83
  334. package/dist/scripts/parallel-verification-engine-check.js +0 -85
  335. package/dist/scripts/postinstall-safe-side-effects-check.js +0 -65
  336. package/dist/scripts/ppt-full-e2e-artifact-graph-check.js +0 -40
  337. package/dist/scripts/ppt-full-e2e-blackbox-check.js +0 -109
  338. package/dist/scripts/ppt-image-voxel-relations-check.js +0 -9
  339. package/dist/scripts/ppt-imagegen-blackbox-check.js +0 -46
  340. package/dist/scripts/ppt-imagegen-review-fixture-check.js +0 -6
  341. package/dist/scripts/ppt-issue-extraction-fixture-check.js +0 -7
  342. package/dist/scripts/ppt-no-mock-as-real-check.js +0 -8
  343. package/dist/scripts/ppt-no-text-fallback-check.js +0 -7
  344. package/dist/scripts/ppt-proof-trust-fixture-check.js +0 -10
  345. package/dist/scripts/ppt-real-export-adapter-check.js +0 -13
  346. package/dist/scripts/ppt-real-imagegen-smoke-check.js +0 -42
  347. package/dist/scripts/ppt-real-imagegen-wiring-check.js +0 -16
  348. package/dist/scripts/ppt-reexport-rereview-check.js +0 -19
  349. package/dist/scripts/ppt-slide-export-fixture-check.js +0 -7
  350. package/dist/scripts/prepublish-fast-check.js +0 -128
  351. package/dist/scripts/priority-full-closure-check.js +0 -12
  352. package/dist/scripts/product-design-auto-install-check.js +0 -119
  353. package/dist/scripts/product-design-plugin-routing-check.js +0 -101
  354. package/dist/scripts/prompt-placeholder-guard-check.js +0 -33
  355. package/dist/scripts/provider-badge-context-check.js +0 -26
  356. package/dist/scripts/provider-context-config-toml-check.js +0 -63
  357. package/dist/scripts/python-codex-sdk-all-pipelines-check.js +0 -47
  358. package/dist/scripts/python-codex-sdk-capability-check.js +0 -75
  359. package/dist/scripts/python-codex-sdk-sandbox-policy-check.js +0 -10
  360. package/dist/scripts/python-codex-sdk-stream-bridge-check.js +0 -12
  361. package/dist/scripts/python-tools-smoke-check.js +0 -71
  362. package/dist/scripts/qa-actual-route-backfill-check.js +0 -5
  363. package/dist/scripts/qa-backfill-route-blackbox.js +0 -5
  364. package/dist/scripts/qa-patch-swarm-route-blackbox.js +0 -10
  365. package/dist/scripts/readme-architecture-imagegen-official-check.js +0 -448
  366. package/dist/scripts/release-cache-glob-hashing-check.js +0 -42
  367. package/dist/scripts/release-dag-full-coverage-check.js +0 -66
  368. package/dist/scripts/release-dist-freshness-check.js +0 -8
  369. package/dist/scripts/release-dynamic-performance-check.js +0 -103
  370. package/dist/scripts/release-gate-budget-check.js +0 -36
  371. package/dist/scripts/release-gate-dag-runner-check.js +0 -17
  372. package/dist/scripts/release-metadata-1-11-check.js +0 -37
  373. package/dist/scripts/release-metadata-1-12-check.js +0 -48
  374. package/dist/scripts/release-metadata-1-13-check.js +0 -53
  375. package/dist/scripts/release-metadata-1-14-check.js +0 -63
  376. package/dist/scripts/release-metadata-1-16-check.js +0 -81
  377. package/dist/scripts/release-metadata-1-17-check.js +0 -51
  378. package/dist/scripts/release-metadata-1-19-check.js +0 -371
  379. package/dist/scripts/release-metadata-check.js +0 -7
  380. package/dist/scripts/release-native-agent-fixture-check.js +0 -41
  381. package/dist/scripts/release-parallel-check.js +0 -374
  382. package/dist/scripts/release-parallel-full-coverage-check.js +0 -13
  383. package/dist/scripts/release-parallel-speed-budget-check.js +0 -84
  384. package/dist/scripts/release-provenance-check.js +0 -150
  385. package/dist/scripts/release-real-check.js +0 -330
  386. package/dist/scripts/release-registry-check.js +0 -344
  387. package/dist/scripts/release-runtime-truth-matrix-check.js +0 -47
  388. package/dist/scripts/release-stability-report-check.js +0 -99
  389. package/dist/scripts/release-version-truth-check.js +0 -134
  390. package/dist/scripts/research-actual-route-backfill-check.js +0 -5
  391. package/dist/scripts/research-backfill-route-blackbox.js +0 -5
  392. package/dist/scripts/research-blueprint-densifier-check.js +0 -21
  393. package/dist/scripts/research-claim-builder-check.js +0 -19
  394. package/dist/scripts/research-complete-package-fixture-check.js +0 -23
  395. package/dist/scripts/research-final-reviewer-blackbox.js +0 -22
  396. package/dist/scripts/research-parallel-source-shards-check.js +0 -22
  397. package/dist/scripts/research-quality-gate-check.js +0 -111
  398. package/dist/scripts/research-real-cycle-no-legacy-final-md-check.js +0 -14
  399. package/dist/scripts/research-short-report-rejection-check.js +0 -46
  400. package/dist/scripts/research-source-ledger-merge-check.js +0 -26
  401. package/dist/scripts/research-stage-cycle-runtime-blackbox.js +0 -24
  402. package/dist/scripts/responses-retry-policy-centralized-check.js +0 -19
  403. package/dist/scripts/retention-cleanup-safety-check.js +0 -155
  404. package/dist/scripts/route-blackbox-realism-check.js +0 -21
  405. package/dist/scripts/route-proof-artifact-structure-check.js +0 -145
  406. package/dist/scripts/runtime-dist-parity-check.js +0 -78
  407. package/dist/scripts/runtime-no-mjs-scripts-check.js +0 -45
  408. package/dist/scripts/runtime-no-src-mjs-check.js +0 -32
  409. package/dist/scripts/runtime-no-tmux-check.js +0 -113
  410. package/dist/scripts/runtime-ts-python-boundary-check.js +0 -59
  411. package/dist/scripts/runtime-ts-rust-boundary-check.js +0 -74
  412. package/dist/scripts/runtime-ts-source-of-truth-check.js +0 -55
  413. package/dist/scripts/safety-check.js +0 -23
  414. package/dist/scripts/shared-memory-fixture-check.js +0 -27
  415. package/dist/scripts/side-effect-runtime-report-check.js +0 -19
  416. package/dist/scripts/side-effect-zero-gate-check.js +0 -226
  417. package/dist/scripts/sks-1-11-fixture-check.js +0 -130
  418. package/dist/scripts/source-intelligence-all-modes-check.js +0 -32
  419. package/dist/scripts/source-intelligence-policy-check.js +0 -13
  420. package/dist/scripts/strategy-adhd-orchestrating-gate-check.js +0 -22
  421. package/dist/scripts/strategy-file-ownership-plan-check.js +0 -18
  422. package/dist/scripts/strategy-parallel-modification-plan-check.js +0 -19
  423. package/dist/scripts/strategy-verification-rollback-dag-check.js +0 -19
  424. package/dist/scripts/team-actual-route-backfill-check.js +0 -5
  425. package/dist/scripts/team-backfill-route-blackbox.js +0 -5
  426. package/dist/scripts/team-parallel-write-blackbox.js +0 -55
  427. package/dist/scripts/team-patch-swarm-route-blackbox.js +0 -10
  428. package/dist/scripts/terminal-keyboard-enhancement-safety-check.js +0 -12
  429. package/dist/scripts/terminal-tui-output-stability-check.js +0 -35
  430. package/dist/scripts/test-no-orphan-dist-imports-check.js +0 -73
  431. package/dist/scripts/trust-fixture-check.js +0 -33
  432. package/dist/scripts/typescript-migration-report.js +0 -78
  433. package/dist/scripts/ultra-router-auto-router-check.js +0 -33
  434. package/dist/scripts/ultra-router-classification-check.js +0 -28
  435. package/dist/scripts/ux-patch-swarm-route-blackbox.js +0 -10
  436. package/dist/scripts/ux-ppt-structured-extraction-check.js +0 -21
  437. package/dist/scripts/ux-review-extract-real-callouts-fixture-check.js +0 -8
  438. package/dist/scripts/ux-review-extract-wires-real-extractor-check.js +0 -15
  439. package/dist/scripts/ux-review-generate-callouts-fixture-check.js +0 -9
  440. package/dist/scripts/ux-review-image-voxel-relations-check.js +0 -31
  441. package/dist/scripts/ux-review-imagegen-blackbox-check.js +0 -67
  442. package/dist/scripts/ux-review-no-fake-callouts-check.js +0 -8
  443. package/dist/scripts/ux-review-no-text-fallback-check.js +0 -25
  444. package/dist/scripts/ux-review-patch-diff-recheck-check.js +0 -20
  445. package/dist/scripts/ux-review-patch-handoff-fixture-check.js +0 -8
  446. package/dist/scripts/ux-review-real-imagegen-smoke-check.js +0 -31
  447. package/dist/scripts/ux-review-real-loop-fixture-check.js +0 -24
  448. package/dist/scripts/ux-review-recapture-recheck-fixture-check.js +0 -8
  449. package/dist/scripts/ux-review-run-wires-imagegen-check.js +0 -11
  450. package/dist/scripts/worker-pane-communication-contract-check.js +0 -54
  451. package/dist/scripts/wrongness-fixture-check.js +0 -65
  452. package/dist/scripts/xai-mcp-capability-check.js +0 -14
  453. package/dist/scripts/zellij-capability-check.js +0 -15
  454. package/dist/scripts/zellij-dashboard-pane-check.js +0 -70
  455. package/dist/scripts/zellij-developer-controls-check.js +0 -20
  456. package/dist/scripts/zellij-doctor-readiness-check.js +0 -63
  457. package/dist/scripts/zellij-dynamic-pane-lifecycle-check.js +0 -21
  458. package/dist/scripts/zellij-first-slot-down-stack-check.js +0 -20
  459. package/dist/scripts/zellij-first-slot-down-stack-real-check.js +0 -356
  460. package/dist/scripts/zellij-initial-main-only-blackbox.js +0 -28
  461. package/dist/scripts/zellij-lane-renderer-check.js +0 -65
  462. package/dist/scripts/zellij-launch-command-truth-check.js +0 -75
  463. package/dist/scripts/zellij-layout-valid-check.js +0 -90
  464. package/dist/scripts/zellij-pane-proof-check.js +0 -59
  465. package/dist/scripts/zellij-real-session-cleanup-check.js +0 -21
  466. package/dist/scripts/zellij-real-session-heartbeat-check.js +0 -49
  467. package/dist/scripts/zellij-real-session-launch-check.js +0 -57
  468. package/dist/scripts/zellij-right-column-headless-overflow-check.js +0 -22
  469. package/dist/scripts/zellij-right-column-manager-check.js +0 -27
  470. package/dist/scripts/zellij-screen-proof-check.js +0 -45
  471. package/dist/scripts/zellij-slot-column-anchor-check.js +0 -66
  472. package/dist/scripts/zellij-slot-only-ui-check.js +0 -26
  473. package/dist/scripts/zellij-slot-pane-renderer-check.js +0 -106
  474. package/dist/scripts/zellij-slot-renderer-proof-semantics-check.js +0 -59
  475. package/dist/scripts/zellij-spawn-on-demand-layout-check.js +0 -40
  476. package/dist/scripts/zellij-ui-design-check.js +0 -105
  477. package/dist/scripts/zellij-worker-pane-manager-check.js +0 -109
  478. package/dist/scripts/zellij-worker-pane-manager-single-owner-check.js +0 -47
  479. package/dist/scripts/zellij-worker-pane-real-ui-blackbox.js +0 -202
  480. package/dist/scripts/zellij-worker-pane-spawn-order-check.js +0 -35
@@ -39,7 +39,7 @@ function ambientGoalContinuation() {
39
39
  mode: 'ambient_codex_native_goal_overlay',
40
40
  native_slash_command: '/goal',
41
41
  non_disruptive: true,
42
- rule: 'Use Codex native goal persistence when available to keep work resumable until completion; it never replaces the selected SKS route, Team, TriWiki, verification, reflection, or Honest Mode gates.'
42
+ rule: 'Use Codex native goal persistence when available to keep work resumable until completion; it never replaces the selected SKS route, Naruto, TriWiki, verification, reflection, or Honest Mode gates.'
43
43
  };
44
44
  }
45
45
  const REFLECTION_ARTIFACT = 'reflection.md';
@@ -279,7 +279,7 @@ function selectPipelineLane(route, task, proof) {
279
279
  if (LIGHTWEIGHT_ROUTES.has(route?.id))
280
280
  return { lane: `${String(route.id).toLowerCase()}_lightweight_lane`, source: 'route_policy', fast_lane_allowed: true, reason: 'Lightweight route bypasses full mission orchestration by design.', blockers: [], skip_when_fast: SPEED_LANE_POLICY.skip_when_fast, keep: ['focused_implementation', 'listed_verification', 'honest_mode'] };
281
281
  if (routeRequiresSubagents(route, task))
282
- return { lane: SPEED_LANE_POLICY.full_lane, source: 'route_policy', fast_lane_allowed: false, reason: 'No Proof Field attached and this route normally requires full Team evidence.', blockers: ['proof_field_not_attached'], skip_when_fast: [], keep: SPEED_LANE_POLICY.always_keep };
282
+ return { lane: SPEED_LANE_POLICY.full_lane, source: 'route_policy', fast_lane_allowed: false, reason: 'No Proof Field attached and this route normally requires full Naruto evidence.', blockers: ['proof_field_not_attached'], skip_when_fast: [], keep: SPEED_LANE_POLICY.always_keep };
283
283
  return { lane: SPEED_LANE_POLICY.balanced_lane, source: 'route_policy', fast_lane_allowed: false, reason: 'Balanced parent-owned route until Proof Field proves a narrower lane.', blockers: ['proof_field_not_attached'], skip_when_fast: [], keep: SPEED_LANE_POLICY.always_keep };
284
284
  }
285
285
  function buildPipelineStages(route, task, ambiguity, lane, context7Required, agentPolicy = normalizeAgentPolicy(route, task, {})) {
@@ -343,8 +343,11 @@ function planNextActions(route, task, ambiguity, lane, agentPolicy = normalizeAg
343
343
  const actions = ['read pipeline-plan.json before work', 'execute kept stages only', 'run listed verification'];
344
344
  if (agentPolicy.required)
345
345
  actions.splice(1, 0, 'run sks agents run latest --json before implementation');
346
- if (!lane.fast_lane_allowed && routeRequiresSubagents(route, task))
347
- actions.splice(1, 0, 'materialize full Team artifacts before implementation');
346
+ if (!lane.fast_lane_allowed && routeRequiresSubagents(route, task)) {
347
+ actions.splice(1, 0, route?.id === 'Naruto'
348
+ ? 'materialize Naruto clone roster, work graph, worker proof, and naruto-gate.json before implementation'
349
+ : 'materialize full Team artifacts before implementation');
350
+ }
348
351
  if (looksLikeProblemSolvingRequest(task))
349
352
  actions.splice(1, 0, 'run Solution Scout web search for similar fixes before editing');
350
353
  actions.push('refresh/validate TriWiki when required', 'finish with completion summary and Honest Mode');
@@ -372,10 +375,10 @@ export function promptPipelineContext(prompt, route = null) {
372
375
  'Ambient Goal continuation: even without an explicit $Goal keyword, use Codex native /goal persistence when it helps keep long work resumable and complete; do not let it replace or skip the selected SKS route gates.',
373
376
  'Route contract: execution routes infer contract answers from the prompt, TriWiki/current-code defaults, and conservative SKS policy. DFix and Answer bypass stateful execution because they do not start implementation.',
374
377
  'Plan-first interaction: when ambiguity questions are truly required, show the user only the missing human decision(s), then seal the decision contract internally and execute/verify.',
375
- 'Question-shaped directive policy: before using Answer, decide whether a question is a real information request or an implicit instruction/complaint about broken behavior. Rhetorical bug reports, mandatory-policy statements, and "why is this not happening?" execution complaints must route to Team, not Answer.',
378
+ 'Question-shaped directive policy: before using Answer, decide whether a question is a real information request or an implicit instruction/complaint about broken behavior. Rhetorical bug reports, mandatory-policy statements, and "why is this not happening?" execution complaints must route to Naruto, not Answer.',
376
379
  'Best-practice prompt shape: extract Goal, Context, Constraints, and Done-when before implementation; keep questions compact and only ask for answers that can change scope, safety, user-facing behavior, or acceptance criteria.',
377
380
  chatCaptureIntakeText(),
378
- 'Default execution routing: general implementation/code-changing prompts promote to Team so the normal path is parallel analysis, TriWiki refresh, debate/consensus, then fresh parallel executors. Answer, DFix, Help, Wiki maintenance, and safety-specific routes are intentional exceptions.',
381
+ 'Default execution routing: general implementation/code-changing prompts promote to Naruto so the normal path is shadow-clone fan-out, hardware-safe concurrency, patch envelopes, verification DAG, and GPT final arbitration. Answer, DFix, Help, Wiki maintenance, and safety-specific routes are intentional exceptions.',
379
382
  'Stance: infer the user intent aggressively from rough wording, local context, TriWiki, and conservative defaults; do not surface prequestion sheets before work.',
380
383
  subagentExecutionPolicyText(route, cleanPrompt),
381
384
  solutionScoutPolicyText(cleanPrompt),
@@ -397,8 +400,10 @@ export function promptPipelineContext(prompt, route = null) {
397
400
  ];
398
401
  if (reflectionRequiredForRoute(route))
399
402
  lines.push(reflectionInstructionText());
403
+ if (route?.id === 'Naruto')
404
+ lines.push(`Naruto route: build clone roster, massive work graph, hardware-safe governor, active pool, allocation/rebalance policy, parallel verification DAG, GPT final pack, per-clone proof, session cleanup, reflection, and Honest Mode. $Team is deprecated for new execution missions.`);
400
405
  if (route?.id === 'Team')
401
- lines.push(`Team route: agents, TriWiki refresh, debate, consensus, runtime graph compile with concrete task ids and worker inboxes, close planning agents, fresh executors, minimum ${MIN_TEAM_REVIEWER_LANES}-lane review/integration, ${TEAM_SESSION_CLEANUP_ARTIFACT}, reflection, and Honest Mode. ${MIN_TEAM_REVIEW_POLICY_TEXT}`);
406
+ lines.push(`Team route is a deprecated compatibility surface; use $Naruto for new execution missions. Existing Team mission observation commands remain available.`);
402
407
  if (route?.id === 'Goal')
403
408
  lines.push('Goal route: write SKS goal bridge artifacts, then use Codex native /goal persistence for create, pause, resume, and clear continuation controls.');
404
409
  if (route?.id === 'PPT')
@@ -473,8 +478,10 @@ export async function prepareRoute(root, prompt, state = {}) {
473
478
  const nativeSessionsRequired = routeRequiresSubagents(route, cleanPrompt);
474
479
  if (QUESTION_GATE_ROUTES.has(route.id) || route.id === 'MadSKS')
475
480
  return withSkillDreamContext(await prepareClarificationGate(root, route, task, required, { madSksAuthorization }), dreamContext);
481
+ if (route.id === 'Naruto')
482
+ return withSkillDreamContext(await prepareNaruto(root, route, task, required, { madSksAuthorization }), dreamContext);
476
483
  if (route.id === 'Team')
477
- return withSkillDreamContext(await prepareTeam(root, route, task, required, { madSksAuthorization }), dreamContext);
484
+ return withSkillDreamContext(await prepareNaruto(root, { ...route, id: 'Naruto', command: '$Naruto', mode: 'NARUTO', stopGate: 'naruto-gate.json', requiredSkills: ['naruto', 'pipeline-runner', 'prompt-pipeline', 'honest-mode'] }, task, required, { madSksAuthorization, teamAlias: true }), dreamContext);
478
485
  if (route.id === 'Research')
479
486
  return withSkillDreamContext(await prepareResearch(root, route, task, required), dreamContext);
480
487
  if (route.id === 'AutoResearch')
@@ -626,6 +633,10 @@ export async function activeRouteContext(root, state) {
626
633
  const roles = state.role_counts ? ` Role counts: ${formatRoleCounts(state.role_counts)}.` : '';
627
634
  return `Active Team mission ${state.mission_id || 'latest'} must keep the user-visible live transcript updated. Native session budget: ${state.agent_sessions || MIN_TEAM_REVIEWER_LANES}.${roles} Run native sessions, TriWiki refresh, debate, consensus, fresh development, minimum ${MIN_TEAM_REVIEWER_LANES}-lane review/integration, then close or account for every Team native session and write ${TEAM_SESSION_CLEANUP_ARTIFACT} before reflection/final. ${MIN_TEAM_REVIEW_POLICY_TEXT} After each native-session status/result/handoff, run: sks team event ${state.mission_id || 'latest'} --agent <name> --phase <phase> --message "...". Inspect with sks team log/watch ${state.mission_id || 'latest'}.${reasoningNote}${context7}${planNote}`;
628
635
  }
636
+ if (state.mode === 'NARUTO') {
637
+ const clones = state.clone_count ? ` Clone count: ${state.clone_count}.` : '';
638
+ return `Active Naruto mission ${state.mission_id || 'latest'} must keep clone/worker evidence current.${clones} Use sks naruto status ${state.mission_id || 'latest'} --json, inspect .sneakoscope/missions/${state.mission_id || 'latest'}/naruto-gate.json and agents/agent-proof-evidence.json, then continue until the Naruto gate passes or a hard blocker is recorded.${reasoningNote}${planNote}`;
639
+ }
629
640
  if (state.subagents_required && !(await hasSubagentEvidence(root, state))) {
630
641
  return `Active SKS route ${id} requires native multi-session evidence before code-changing work can be considered complete. Run worker/reviewer native sessions for disjoint write scopes, or record explicit unavailable/unsplittable native-session evidence before editing.${reasoningNote}${planNote}`;
631
642
  }
@@ -1069,6 +1080,61 @@ async function prepareLightRoute(root, route, task, required) {
1069
1080
  await setCurrent(root, routeState(id, route, 'ROUTE_CONTEXT_READY', required, { prompt: task, stop_gate: 'none', pipeline_plan_ready: validatePipelinePlan(pipelinePlan).ok, pipeline_plan_path: PIPELINE_PLAN_ARTIFACT }));
1070
1081
  return routeContext(route, id, task, required, 'Load the route skill context, execute the smallest matching action, and finish with Honest Mode.');
1071
1082
  }
1083
+ async function prepareNaruto(root, route, task, required, opts = {}) {
1084
+ const cleanTask = stripDollarCommand(task) || String(task || '').trim();
1085
+ const { id, dir } = await createMission(root, { mode: 'naruto', prompt: cleanTask });
1086
+ const routeContextPayload = {
1087
+ route: 'Naruto',
1088
+ command: '$Naruto',
1089
+ mode: 'NARUTO',
1090
+ task: cleanTask,
1091
+ required_skills: route.requiredSkills || ['naruto', 'pipeline-runner', 'prompt-pipeline', 'honest-mode'],
1092
+ context7_required: required,
1093
+ context_tracking: triwikiContextTracking(),
1094
+ stop_gate: 'naruto-gate.json',
1095
+ team_alias: opts.teamAlias === true,
1096
+ mad_sks_authorization: Boolean(opts.madSksAuthorization)
1097
+ };
1098
+ await writeJsonAtomic(path.join(dir, 'route-context.json'), routeContextPayload);
1099
+ await writeJsonAtomic(path.join(dir, 'naruto-gate.json'), {
1100
+ schema: 'sks.naruto-gate.v1',
1101
+ passed: false,
1102
+ mission_id: id,
1103
+ clone_roster_built: false,
1104
+ work_graph_ready: false,
1105
+ role_distribution_ready: false,
1106
+ allocation_ready: false,
1107
+ rebalance_ready: false,
1108
+ concurrency_governor_ready: false,
1109
+ active_pool_simulated: false,
1110
+ verification_dag_ready: false,
1111
+ gpt_final_pack_ready: false,
1112
+ zellij_dashboard_ready: false,
1113
+ native_agent_proof: false,
1114
+ final_arbiter_accepted: false,
1115
+ session_cleanup: false,
1116
+ blockers: ['naruto_run_not_started'],
1117
+ updated_at: nowIso()
1118
+ });
1119
+ const pipelinePlan = await writePipelinePlan(dir, { missionId: id, route, task: cleanTask, required, ambiguity: { required: false, status: opts.teamAlias ? 'team_alias_to_naruto' : 'direct_naruto' } });
1120
+ await setCurrent(root, routeState(id, route, 'NARUTO_READY', required, {
1121
+ prompt: cleanTask,
1122
+ route: 'Naruto',
1123
+ route_command: '$Naruto',
1124
+ mode: 'NARUTO',
1125
+ implementation_allowed: true,
1126
+ ambiguity_gate_required: false,
1127
+ ambiguity_gate_passed: true,
1128
+ stop_gate: 'naruto-gate.json',
1129
+ required_skills: routeContextPayload.required_skills,
1130
+ subagents_required: true,
1131
+ native_sessions_required: true,
1132
+ naruto_gate_file: 'naruto-gate.json',
1133
+ pipeline_plan_ready: validatePipelinePlan(pipelinePlan).ok,
1134
+ pipeline_plan_path: PIPELINE_PLAN_ARTIFACT
1135
+ }));
1136
+ return routeContext(route, id, cleanTask, required, `Run sks naruto run ${JSON.stringify(cleanTask)} --json (or continue with Codex native workers for the same mission), then update naruto-gate.json from the worker proof and verification DAG.`);
1137
+ }
1072
1138
  function routeState(id, route, phase, context7Required, extra = {}) {
1073
1139
  const reasoning = routeReasoning(route, extra.prompt || '');
1074
1140
  const nativeSessionsRequired = routeRequiresSubagents(route, extra.prompt || '');
@@ -371,6 +371,24 @@ function missingRequiredGateFields(file, state, gate = {}) {
371
371
  return required
372
372
  .filter((key) => gate[key] !== true);
373
373
  }
374
+ if (file === 'naruto-gate.json' || mode === 'NARUTO') {
375
+ const required = [
376
+ 'clone_roster_built',
377
+ 'work_graph_ready',
378
+ 'role_distribution_ready',
379
+ 'allocation_ready',
380
+ 'rebalance_ready',
381
+ 'concurrency_governor_ready',
382
+ 'active_pool_simulated',
383
+ 'verification_dag_ready',
384
+ 'gpt_final_pack_ready',
385
+ 'zellij_dashboard_ready',
386
+ 'native_agent_proof',
387
+ 'final_arbiter_accepted',
388
+ 'session_cleanup'
389
+ ];
390
+ return required.filter((key) => gate[key] !== true);
391
+ }
374
392
  if (file === 'qa-gate.json' || mode === 'QALOOP') {
375
393
  const required = ['clarification_contract_sealed', 'qa_report_written', 'qa_ledger_complete', 'checklist_completed', 'safety_reviewed', 'deployed_destructive_tests_blocked', 'credentials_not_persisted', 'honest_mode_complete'];
376
394
  if (gate.ui_e2e_required === true)
@@ -405,6 +423,8 @@ async function missingRequiredGateArtifacts(root, file, state, gate = {}) {
405
423
  }
406
424
  if (file === IMAGE_UX_REVIEW_GATE_ARTIFACT || mode === 'IMAGE_UX_REVIEW')
407
425
  return missingImageUxReviewArtifacts(root, state, gate);
426
+ if (file === 'naruto-gate.json' || mode === 'NARUTO')
427
+ return missingNarutoArtifacts(root, state, gate);
408
428
  if (file !== 'team-gate.json' && mode !== 'TEAM')
409
429
  return [];
410
430
  const missing = [];
@@ -611,6 +631,8 @@ function gateFilesForState(state) {
611
631
  return ['goal-workflow.json'];
612
632
  if (state.mode === 'RESEARCH')
613
633
  return ['research-gate.json', 'research-gate.evaluated.json'];
634
+ if (state.mode === 'NARUTO')
635
+ return ['naruto-gate.json'];
614
636
  if (state.mode === 'TEAM')
615
637
  return ['team-gate.json'];
616
638
  if (state.mode === 'AUTORESEARCH')
@@ -627,6 +649,28 @@ function gateFilesForState(state) {
627
649
  return [IMAGE_UX_REVIEW_GATE_ARTIFACT];
628
650
  return ['done-gate.json'];
629
651
  }
652
+ async function missingNarutoArtifacts(root, state = {}, gate = {}) {
653
+ const id = state?.mission_id;
654
+ if (!id)
655
+ return ['mission_id'];
656
+ const dir = missionDir(root, id);
657
+ const required = [
658
+ 'naruto-gate.json',
659
+ 'agents/naruto-work-graph.json',
660
+ 'agents/naruto-role-distribution.json',
661
+ 'agents/naruto-concurrency-governor.json',
662
+ 'agents/naruto-verification-dag.json',
663
+ 'agents/naruto-gpt-final-pack.json'
664
+ ];
665
+ const missing = [];
666
+ for (const file of required) {
667
+ if (!(await exists(path.join(dir, file))))
668
+ missing.push(file);
669
+ }
670
+ if (gate.native_agent_proof === true && !(await exists(path.join(dir, 'agents', 'agent-proof-evidence.json'))))
671
+ missing.push('agents/agent-proof-evidence.json');
672
+ return missing;
673
+ }
630
674
  function extractLastMessage(payload) {
631
675
  return payload.last_assistant_message || payload.assistant_message || payload.message || payload.response || payload.raw || '';
632
676
  }
@@ -1,7 +1,7 @@
1
1
  import { containsPlaintextSecret } from '../secret-redaction.js';
2
2
  import { readRouteProof } from './proof-reader.js';
3
3
  import { validateCompletionProof } from './validation.js';
4
- import { proofStatusBlocks, routeRequiresCompletionProof, routeRequiresImageVoxelAnchors } from './route-proof-policy.js';
4
+ import { normalizeProofRoute, proofStatusBlocks, routeRequiresCompletionProof, routeRequiresImageVoxelAnchors } from './route-proof-policy.js';
5
5
  import { routeRequiresAgentIntake } from '../agents/agent-plan.js';
6
6
  export async function validateRouteCompletionProof(root, { missionId = null, route = null, state = {}, visualClaim = undefined } = {}) {
7
7
  const proofRequired = state.proof_required === true || routeRequiresCompletionProof(route);
@@ -34,11 +34,13 @@ export async function validateRouteCompletionProof(root, { missionId = null, rou
34
34
  else {
35
35
  if (agents.status !== 'passed' || agents.ok !== true)
36
36
  issues.push('agent_gate_not_passed');
37
+ const normalizedRoute = normalizeProofRoute(route || proof.route);
38
+ const maxAgentCount = normalizedRoute === '$Naruto' ? 100 : 20;
37
39
  const agentCount = Number(agents.agent_count || 0);
38
40
  if (agentCount < 5)
39
41
  issues.push('agent_count_below_5');
40
- if (agentCount > 20)
41
- issues.push('agent_count_above_20');
42
+ if (agentCount > maxAgentCount)
43
+ issues.push(`agent_count_above_${maxAgentCount}`);
42
44
  if (agents.all_sessions_closed !== true)
43
45
  issues.push('agent_sessions_not_closed');
44
46
  if (agents.no_overlap_ok !== true)
@@ -1,5 +1,8 @@
1
1
  export const SERIOUS_ROUTE_ALIASES = Object.freeze([
2
2
  '$Team',
3
+ '$Naruto',
4
+ '$ShadowClone',
5
+ '$Kagebunshin',
3
6
  '$DFix',
4
7
  '$QA-LOOP',
5
8
  '$Research',
@@ -35,7 +38,12 @@ export const VISUAL_ROUTE_ALIASES = Object.freeze([
35
38
  '$GX'
36
39
  ]);
37
40
  const ROUTE_NORMALIZATION = Object.freeze({
38
- team: '$Team',
41
+ team: '$Naruto',
42
+ naruto: '$Naruto',
43
+ shadowclone: '$Naruto',
44
+ 'shadow-clone': '$Naruto',
45
+ kagebunshin: '$Naruto',
46
+ 'kage-bunshin': '$Naruto',
39
47
  dfix: '$DFix',
40
48
  qaloop: '$QA-LOOP',
41
49
  'qa-loop': '$QA-LOOP',
@@ -0,0 +1,113 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ const ALWAYS_KEEP = new Set([
3
+ 'release:version-truth',
4
+ 'release:dag-full-coverage',
5
+ 'runtime:ts-source-of-truth',
6
+ 'typecheck',
7
+ 'schema:check'
8
+ ]);
9
+ export function selectAffectedReleaseGates(root, manifest, gates, input = {}) {
10
+ if (input.full) {
11
+ return selectionResult(gates, gates, [], 'full', {}, []);
12
+ }
13
+ const changedFiles = resolveChangedFiles(root, input.changedSince || 'auto');
14
+ const selected = [];
15
+ const reasons = {};
16
+ for (const gate of gates) {
17
+ const reason = gateSelectionReason(gate, changedFiles, input.preset || 'affected');
18
+ if (reason) {
19
+ selected.push(gate);
20
+ reasons[gate.id] = reason;
21
+ }
22
+ }
23
+ const byId = new Map(gates.map((gate) => [gate.id, gate]));
24
+ for (const id of ALWAYS_KEEP) {
25
+ const gate = byId.get(id) || manifest.gates.find((candidate) => candidate.id === id);
26
+ if (gate && !selected.some((row) => row.id === gate.id)) {
27
+ selected.push(gate);
28
+ reasons[gate.id] = 'always_keep_core_release_safety';
29
+ }
30
+ }
31
+ const expanded = expandWithDependencies(selected, manifest);
32
+ const ordered = manifest.gates.filter((gate) => expanded.some((row) => row.id === gate.id));
33
+ return selectionResult(gates, ordered, changedFiles, 'affected', reasons, gates.filter((gate) => !ordered.some((row) => row.id === gate.id)).map((gate) => gate.id));
34
+ }
35
+ function expandWithDependencies(selected, manifest) {
36
+ const byId = new Map(manifest.gates.map((gate) => [gate.id, gate]));
37
+ const out = new Map(selected.map((gate) => [gate.id, gate]));
38
+ const visit = (gate) => {
39
+ for (const dep of gate.deps || []) {
40
+ const depGate = byId.get(dep);
41
+ if (depGate && !out.has(depGate.id)) {
42
+ out.set(depGate.id, depGate);
43
+ visit(depGate);
44
+ }
45
+ }
46
+ };
47
+ for (const gate of selected)
48
+ visit(gate);
49
+ return [...out.values()];
50
+ }
51
+ function gateSelectionReason(gate, changedFiles, preset) {
52
+ if (ALWAYS_KEEP.has(gate.id))
53
+ return 'always_keep_core_release_safety';
54
+ if (!changedFiles.length)
55
+ return preset === 'fast' ? 'fast_no_diff_core_only_skip' : 'no_changed_files';
56
+ if (changedFiles.some((file) => file === 'package.json' || file === 'package-lock.json')) {
57
+ if (/^(release:|publish:|prepublish|runtime:|typecheck|schema:check)/.test(gate.id))
58
+ return 'package_metadata_changed';
59
+ }
60
+ if (changedFiles.some((file) => file === 'release-gates.v2.json' || file.startsWith('src/core/release/') || file.startsWith('src/scripts/release-')))
61
+ return 'release_gate_system_changed';
62
+ if (changedFiles.some((file) => file.startsWith('src/core/research/')))
63
+ return gate.id.startsWith('research:') ? 'research_source_changed' : null;
64
+ if (changedFiles.some((file) => file.startsWith('src/core/zellij/') || file.startsWith('src/commands/zellij')))
65
+ return gate.id.startsWith('zellij:') || gate.id.startsWith('agent:zellij') || gate.id.startsWith('naruto:zellij') ? 'zellij_source_changed' : null;
66
+ if (changedFiles.some((file) => file.includes('/db') || file.includes('mad-db') || file.includes('mcp')))
67
+ return /db|mcp|mad-db|mad-sks/.test(gate.id) ? 'db_mcp_or_mad_db_changed' : null;
68
+ const inputs = gate.cache?.inputs || [];
69
+ if (inputs.some((pattern) => changedFiles.some((file) => matchesGlobish(file, pattern))))
70
+ return 'cache_input_changed';
71
+ return null;
72
+ }
73
+ function selectionResult(all, selected, changedFiles, mode, reasons, skipped) {
74
+ return {
75
+ gates: selected,
76
+ selection: {
77
+ schema: 'sks.release-gate-affected-selection.v1',
78
+ mode,
79
+ changed_files: changedFiles,
80
+ selected_gate_ids: selected.map((gate) => gate.id),
81
+ skipped_gate_ids: skipped.length ? skipped : all.filter((gate) => !selected.some((row) => row.id === gate.id)).map((gate) => gate.id),
82
+ reasons
83
+ }
84
+ };
85
+ }
86
+ function resolveChangedFiles(root, changedSince) {
87
+ const base = changedSince === 'auto' ? 'HEAD' : changedSince;
88
+ const args = base === 'HEAD'
89
+ ? ['diff', '--name-only', 'HEAD']
90
+ : ['diff', '--name-only', String(base)];
91
+ const diff = spawnSync('git', args, { cwd: root, encoding: 'utf8' });
92
+ const status = spawnSync('git', ['status', '--short'], { cwd: root, encoding: 'utf8' });
93
+ const files = [
94
+ ...String(diff.stdout || '').split(/\n/),
95
+ ...String(status.stdout || '').split(/\n/).map((line) => line.slice(3))
96
+ ].map((file) => file.trim()).filter(Boolean);
97
+ return [...new Set(files)].sort();
98
+ }
99
+ function matchesGlobish(file, pattern) {
100
+ const normalized = pattern.replace(/\\/g, '/');
101
+ if (normalized === file)
102
+ return true;
103
+ if (normalized.endsWith('/**'))
104
+ return file.startsWith(normalized.slice(0, -3));
105
+ if (normalized.endsWith('/**/*'))
106
+ return file.startsWith(normalized.slice(0, -5));
107
+ if (normalized.includes('**'))
108
+ return file.startsWith(normalized.split('**')[0] || '');
109
+ if (normalized.endsWith('*'))
110
+ return file.startsWith(normalized.slice(0, -1));
111
+ return false;
112
+ }
113
+ //# sourceMappingURL=release-gate-affected-selector.js.map
@@ -0,0 +1,67 @@
1
+ import { spawn } from 'node:child_process';
2
+ import path from 'node:path';
3
+ import { writeReleaseGateJson } from './release-gate-report.js';
4
+ const DISALLOWED_BATCH_RESOURCES = new Set(['zellij-real', 'git-worktree', 'local-llm-real', 'remote-model-real', 'publish', 'global-config']);
5
+ export function isReleaseGateBatchable(gate) {
6
+ if (gate.side_effect !== 'hermetic')
7
+ return false;
8
+ if (!gate.resource.includes('cpu-light') || !gate.resource.includes('fs-read'))
9
+ return false;
10
+ return gate.resource.every((resource) => resource === 'cpu-light' || resource === 'fs-read') && !gate.resource.some((resource) => DISALLOWED_BATCH_RESOURCES.has(resource));
11
+ }
12
+ export async function runReleaseGateBatch(root, gates, input = {}) {
13
+ const concurrency = Math.max(1, Math.floor(Number(input.concurrency || process.env.SKS_RELEASE_BATCH_CONCURRENCY || 4)));
14
+ const nonBatchable = gates.filter((gate) => !isReleaseGateBatchable(gate));
15
+ if (nonBatchable.length) {
16
+ return {
17
+ schema: 'sks.release-gate-batch-result.v1',
18
+ ok: false,
19
+ batch_size: gates.length,
20
+ completed: 0,
21
+ failed: nonBatchable.length,
22
+ results: nonBatchable.map((gate) => ({ id: gate.id, ok: false, exit_code: null, duration_ms: 0 }))
23
+ };
24
+ }
25
+ const queue = [...gates];
26
+ const results = [];
27
+ const workers = Array.from({ length: Math.min(concurrency, queue.length) }, async () => {
28
+ while (queue.length) {
29
+ const gate = queue.shift();
30
+ if (!gate)
31
+ continue;
32
+ const result = await runOne(root, gate);
33
+ results.push(result);
34
+ if (input.reportRoot)
35
+ writeChildResult(input.reportRoot, result);
36
+ }
37
+ });
38
+ await Promise.all(workers);
39
+ const failed = results.filter((row) => !row.ok).length;
40
+ return {
41
+ schema: 'sks.release-gate-batch-result.v1',
42
+ ok: failed === 0,
43
+ batch_size: gates.length,
44
+ completed: results.length - failed,
45
+ failed,
46
+ results
47
+ };
48
+ }
49
+ function runOne(root, gate) {
50
+ const started = Date.now();
51
+ return new Promise((resolve) => {
52
+ const child = spawn(gate.command, { cwd: root, shell: true, stdio: ['ignore', 'ignore', 'ignore'] });
53
+ const timer = setTimeout(() => child.kill('SIGTERM'), gate.timeout_ms);
54
+ child.on('close', (code) => {
55
+ clearTimeout(timer);
56
+ resolve({ id: gate.id, ok: code === 0, exit_code: code, duration_ms: Date.now() - started });
57
+ });
58
+ });
59
+ }
60
+ function writeChildResult(reportRoot, result) {
61
+ const dir = path.join(reportRoot, result.id.replace(/[^A-Za-z0-9_.:-]/g, '_'));
62
+ writeReleaseGateJson(path.join(dir, 'result.json'), {
63
+ schema: 'sks.release-gate-batch-child-result.v1',
64
+ ...result
65
+ });
66
+ }
67
+ //# sourceMappingURL=release-gate-batch-runner.js.map
@@ -7,6 +7,7 @@ import { findReadyReleaseGateNodes, findReleaseGatesBlockedByFailedDeps, pickRea
7
7
  import { readReleaseGateCacheHit, writeReleaseGateCacheHit } from './release-gate-cache-v2.js';
8
8
  import { RELEASE_GATE_NODE_SCHEMA, validateReleaseGateManifest } from './release-gate-node.js';
9
9
  import { countReleaseGateResources, defaultReleaseGateBudget, summarizeReleaseGateBudget } from './release-gate-resource-governor.js';
10
+ import { selectAffectedReleaseGates } from './release-gate-affected-selector.js';
10
11
  export function loadReleaseGateManifest(root, file = 'release-gates.v2.json') {
11
12
  const manifestPath = path.join(root, file);
12
13
  const parsed = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
@@ -20,7 +21,11 @@ export async function runReleaseGateDag(input) {
20
21
  const root = path.resolve(input.root);
21
22
  const preset = input.preset || 'release';
22
23
  const manifest = loadReleaseGateManifest(root);
23
- const selected = selectPreset(manifest, preset);
24
+ const presetGates = selectReleaseGatePreset(manifest, preset);
25
+ const affected = (preset === 'affected' || preset === 'fast') && input.full !== true
26
+ ? selectAffectedReleaseGates(root, manifest, presetGates, { changedSince: input.changedSince || 'auto', preset })
27
+ : selectAffectedReleaseGates(root, manifest, presetGates, { full: true, preset });
28
+ const selected = affected.gates;
24
29
  const runId = `rg-${new Date().toISOString().replace(/[:.]/g, '-')}-${process.pid}`;
25
30
  const reportDir = path.join(root, '.sneakoscope', 'reports', 'release-gates', runId);
26
31
  fs.mkdirSync(reportDir, { recursive: true });
@@ -33,6 +38,8 @@ export async function runReleaseGateDag(input) {
33
38
  const budget = defaultReleaseGateBudget();
34
39
  const peakResources = {};
35
40
  let cached = 0;
41
+ const cachedGates = [];
42
+ const executedGates = [];
36
43
  let sumGateMs = 0;
37
44
  let peakRunning = 0;
38
45
  const writeSummarySnapshot = (finished = false) => {
@@ -45,6 +52,9 @@ export async function runReleaseGateDag(input) {
45
52
  selected_preset: preset,
46
53
  total_gates: manifest.gates.length,
47
54
  selected_gates: selected.length,
55
+ selected_gate_ids: selected.map((gate) => gate.id),
56
+ skipped_by_affected: affected.selection.mode === 'affected' ? affected.selection.skipped_gate_ids : [],
57
+ affected_selection: affected.selection,
48
58
  completed: completed.size,
49
59
  failed: failed.size,
50
60
  cached,
@@ -55,6 +65,12 @@ export async function runReleaseGateDag(input) {
55
65
  critical_path_ms: estimateCriticalPath(selected, completed),
56
66
  peak_running: peakRunning,
57
67
  peak_resources: peakResources,
68
+ cached_gates: cachedGates,
69
+ executed_gates: executedGates,
70
+ slowest_gates: [...completed.values(), ...failed.values()]
71
+ .sort((a, b) => b.duration_ms - a.duration_ms)
72
+ .slice(0, 10)
73
+ .map((row) => ({ id: row.id, duration_ms: row.duration_ms, cached: row.cached })),
58
74
  budget_snapshot: budget,
59
75
  budget_summary: summarizeReleaseGateBudget(budget),
60
76
  report_dir: reportDir,
@@ -82,12 +98,14 @@ export async function runReleaseGateDag(input) {
82
98
  const result = { id: gate.id, ok: true, exit_code: 0, duration_ms: 0, cached: true, stderr_tail: '' };
83
99
  completed.set(gate.id, result);
84
100
  cached += 1;
101
+ cachedGates.push(gate.id);
85
102
  progressed = true;
86
103
  appendReleaseGateJsonl(timeline, { event: 'cache_hit', gate_id: gate.id, at: new Date().toISOString() });
87
104
  writeSummarySnapshot(false);
88
105
  continue;
89
106
  }
90
107
  appendReleaseGateJsonl(timeline, { event: 'start', gate_id: gate.id, resource: gate.resource, at: new Date().toISOString() });
108
+ executedGates.push(gate.id);
91
109
  running.set(gate.id, { gate, promise: runGate(root, runId, reportDir, gate) });
92
110
  peakRunning = Math.max(peakRunning, running.size);
93
111
  const used = countReleaseGateResources([...running.values()].map((row) => row.gate));
@@ -141,8 +159,9 @@ export async function runReleaseGateDag(input) {
141
159
  const result = writeSummarySnapshot(true);
142
160
  return result;
143
161
  }
144
- function selectPreset(manifest, preset) {
145
- return manifest.gates.filter((gate) => gate.preset.includes(preset));
162
+ export function selectReleaseGatePreset(manifest, preset) {
163
+ const effectivePreset = preset === 'affected' || preset === 'fast' ? 'release' : preset;
164
+ return manifest.gates.filter((gate) => gate.preset.includes(effectivePreset));
146
165
  }
147
166
  function runGate(root, runId, reportRoot, gate) {
148
167
  const started = Date.now();
@@ -1,22 +1,27 @@
1
1
  import os from 'node:os';
2
2
  export function defaultReleaseGateBudget() {
3
3
  const cores = Math.max(1, os.cpus().length || 1);
4
- return {
5
- 'cpu-light': Math.min(32, cores * 4),
6
- 'cpu-heavy': Math.max(1, cores - 1),
7
- 'io-light': Math.min(64, cores * 8),
8
- 'io-heavy': Math.min(8, cores),
9
- git: Math.min(8, cores),
10
- 'git-worktree': Math.min(6, cores),
11
- python: Math.min(8, cores),
12
- network: 8,
4
+ const base = {
5
+ 'cpu-light': Math.min(48, cores * 6),
6
+ 'cpu-heavy': Math.max(1, cores),
7
+ 'io-light': Math.min(96, cores * 10),
8
+ 'io-heavy': Math.min(12, Math.max(1, cores)),
9
+ git: Math.min(12, Math.max(1, cores)),
10
+ 'git-worktree': Math.min(8, Math.max(1, cores)),
11
+ python: Math.min(12, Math.max(1, cores)),
12
+ network: 12,
13
13
  'zellij-real': 1,
14
14
  'local-llm-real': Math.max(1, Number(process.env.SKS_LOCAL_LLM_MAX_PARALLEL || 1)),
15
- 'remote-model-real': 4,
15
+ 'remote-model-real': 6,
16
16
  'global-config': 1,
17
17
  publish: 1,
18
- 'fs-read': Math.min(64, cores * 8)
18
+ 'fs-read': Math.min(96, cores * 10)
19
19
  };
20
+ for (const key of Object.keys(base)) {
21
+ const envName = `SKS_RELEASE_MAX_${key.toUpperCase().replace(/[^A-Z0-9]+/g, '_')}`;
22
+ base[key] = envInt(envName, base[key]);
23
+ }
24
+ return base;
20
25
  }
21
26
  export function summarizeReleaseGateBudget(budget = defaultReleaseGateBudget()) {
22
27
  return Object.entries(budget)
@@ -31,7 +36,10 @@ export function pickLaunchableReleaseGates(input) {
31
36
  const budget = input.budget || defaultReleaseGateBudget();
32
37
  const used = usedResources(input.running);
33
38
  const launchable = [];
39
+ const maxTotal = envInt('SKS_RELEASE_MAX_TOTAL', Number.POSITIVE_INFINITY);
34
40
  for (const gate of input.ready) {
41
+ if (input.running.length + launchable.length >= maxTotal)
42
+ break;
35
43
  if (fits(gate, used, budget)) {
36
44
  launchable.push(gate);
37
45
  for (const resource of gate.resource)
@@ -40,6 +48,10 @@ export function pickLaunchableReleaseGates(input) {
40
48
  }
41
49
  return launchable;
42
50
  }
51
+ function envInt(name, fallback) {
52
+ const parsed = Number(process.env[name]);
53
+ return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : fallback;
54
+ }
43
55
  function usedResources(running) {
44
56
  const used = {};
45
57
  for (const gate of running) {
@@ -25,7 +25,7 @@ export async function densifyImplementationBlueprint(input) {
25
25
  generated_at: nowIso(),
26
26
  prompt: input.plan?.prompt || base.prompt || '',
27
27
  implementation_allowed_in_research: false,
28
- handoff_route: '$Team',
28
+ handoff_route: '$Naruto',
29
29
  repository_aware: true,
30
30
  existing_files: likelyFiles,
31
31
  possible_new_files: possibleNewFiles,
@@ -4,7 +4,7 @@ export function renderImplementationBlueprintMarkdown(blueprint = null) {
4
4
  lines.push('# Research Implementation Blueprint');
5
5
  lines.push('');
6
6
  lines.push(`Prompt: ${blueprint?.prompt || ''}`);
7
- lines.push(`Handoff route: ${blueprint?.handoff_route || '$Team'}`);
7
+ lines.push(`Handoff route: ${blueprint?.handoff_route || '$Naruto'}`);
8
8
  lines.push(`Implementation allowed in Research: ${blueprint?.implementation_allowed_in_research === true ? 'yes' : 'no'}`);
9
9
  lines.push('');
10
10
  lines.push('## Sections');