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
@@ -0,0 +1,208 @@
1
+ import path from 'node:path';
2
+ import { readJson, writeJsonAtomic, writeTextAtomic, nowIso } from '../fsx.js';
3
+ import { runCodexTask } from '../codex-control/codex-task-runner.js';
4
+ import { researchPaperArtifactForPlan } from '../research.js';
5
+ import { analyzeResearchReportQuality, countWords } from './research-report-quality.js';
6
+ import { analyzeResearchRepetition } from './research-repetition-detector.js';
7
+ import { buildRealisticResearchPaper, buildRealisticResearchReport } from './research-realistic-report.js';
8
+ import { buildResearchSynthesisPrompt } from './research-synthesis-prompt.js';
9
+ export const researchSynthesisOutputSchema = {
10
+ type: 'object',
11
+ required: ['schema', 'mission_id', 'generated_at', 'report_markdown', 'paper_markdown', 'synthesis_summary', 'quality_signals', 'blockers'],
12
+ properties: {
13
+ schema: { const: 'sks.research-synthesis-output.v1' },
14
+ mission_id: { type: 'string' },
15
+ generated_at: { type: 'string' },
16
+ report_markdown: { type: 'string' },
17
+ paper_markdown: { type: 'string' },
18
+ synthesis_summary: {
19
+ type: 'object',
20
+ required: ['key_claim_ids', 'source_ids_used', 'counterevidence_ids_used', 'blueprint_sections_used', 'experiment_steps_used'],
21
+ properties: {
22
+ key_claim_ids: { type: 'array', items: { type: 'string' } },
23
+ source_ids_used: { type: 'array', items: { type: 'string' } },
24
+ counterevidence_ids_used: { type: 'array', items: { type: 'string' } },
25
+ blueprint_sections_used: { type: 'array', items: { type: 'string' } },
26
+ experiment_steps_used: { type: 'array', items: { type: 'string' } }
27
+ }
28
+ },
29
+ quality_signals: {
30
+ type: 'object',
31
+ required: ['report_word_count', 'source_citation_count', 'unique_source_ids_cited', 'key_claims_covered', 'repeated_paragraph_ratio', 'template_phrase_hits'],
32
+ properties: {
33
+ report_word_count: { type: 'number' },
34
+ source_citation_count: { type: 'number' },
35
+ unique_source_ids_cited: { type: 'number' },
36
+ key_claims_covered: { type: 'number' },
37
+ repeated_paragraph_ratio: { type: 'number' },
38
+ template_phrase_hits: { type: 'array', items: { type: 'string' } }
39
+ }
40
+ },
41
+ blockers: { type: 'array', items: { type: 'string' } }
42
+ }
43
+ };
44
+ export async function runResearchCodexSynthesisWriter(input) {
45
+ const artifacts = await readSynthesisInputs(input.dir);
46
+ if (input.mock === true || input.plan?.backend === 'mock' || input.plan?.backend === 'deterministic') {
47
+ const output = normalizeResearchSynthesisOutput(mockResearchSynthesisOutput(input.plan, artifacts));
48
+ const validation = validateResearchSynthesisOutput(output, artifacts.contract, artifacts.claimMatrix, artifacts.sourceLedger);
49
+ const merged = { ...output, blockers: [...new Set([...output.blockers, ...validation.blockers])] };
50
+ await writeSynthesisArtifacts(input.dir, input.plan, merged);
51
+ return merged;
52
+ }
53
+ const result = await runCodexTask({
54
+ route: '$Research',
55
+ tier: 'worker',
56
+ missionId: String(input.plan?.mission_id || 'research-synthesis'),
57
+ workItemId: 'research_synthesis',
58
+ cwd: input.root,
59
+ prompt: buildResearchSynthesisPrompt({ ...artifacts, plan: input.plan, cycle: input.cycle }),
60
+ outputSchema: researchSynthesisOutputSchema,
61
+ outputSchemaId: 'sks.research-synthesis-output.v1',
62
+ sandboxPolicy: 'read-only',
63
+ requestedScopeContract: {
64
+ id: 'research-synthesis',
65
+ route: '$Research',
66
+ read_only: true,
67
+ allowed_paths: [`.sneakoscope/missions/${input.plan?.mission_id || ''}/`],
68
+ write_paths: [],
69
+ allowed_write_prefixes: [`.sneakoscope/missions/${input.plan?.mission_id || ''}/`],
70
+ source_mutation_allowed: false
71
+ },
72
+ backendPreference: input.backendPreference || ['codex-sdk', 'python-codex-sdk'],
73
+ allowLocalLlm: false,
74
+ localLlmPolicy: { mode: 'disabled', requiresGptFinal: true },
75
+ mutationLedgerRoot: path.join(input.dir, 'research', 'synthesis-codex-control'),
76
+ reliabilityPolicy: { timeoutClass: 'standard', idleTimeoutMs: input.timeoutMs || 120000 }
77
+ });
78
+ const worker = await readJson(result.workerResultPath, null);
79
+ const output = normalizeResearchSynthesisOutput(worker);
80
+ const validation = validateResearchSynthesisOutput(output, artifacts.contract, artifacts.claimMatrix, artifacts.sourceLedger);
81
+ const patchEnvelopeBlocker = Array.isArray(worker?.patch_envelopes) && worker.patch_envelopes.length ? ['research_synthesis_patch_envelope_forbidden'] : [];
82
+ const blockers = [...new Set([
83
+ ...output.blockers,
84
+ ...(Array.isArray(result.blockers) ? result.blockers.map(String) : []),
85
+ ...validation.blockers,
86
+ ...patchEnvelopeBlocker
87
+ ])];
88
+ const merged = { ...output, blockers };
89
+ await writeSynthesisArtifacts(input.dir, input.plan, merged);
90
+ return merged;
91
+ }
92
+ export function normalizeResearchSynthesisOutput(value) {
93
+ const reportMarkdown = String(value?.report_markdown || '');
94
+ const paperMarkdown = String(value?.paper_markdown || '');
95
+ const repetition = analyzeResearchRepetition(reportMarkdown);
96
+ const sourceIdsUsed = normalizeStringList(value?.synthesis_summary?.source_ids_used || value?.source_ids_used);
97
+ const keyClaimIds = normalizeStringList(value?.synthesis_summary?.key_claim_ids || value?.key_claim_ids);
98
+ return {
99
+ schema: 'sks.research-synthesis-output.v1',
100
+ mission_id: String(value?.mission_id || ''),
101
+ generated_at: String(value?.generated_at || nowIso()),
102
+ report_markdown: reportMarkdown,
103
+ paper_markdown: paperMarkdown,
104
+ synthesis_summary: {
105
+ key_claim_ids: keyClaimIds,
106
+ source_ids_used: sourceIdsUsed,
107
+ counterevidence_ids_used: normalizeStringList(value?.synthesis_summary?.counterevidence_ids_used || value?.counterevidence_ids_used),
108
+ blueprint_sections_used: normalizeStringList(value?.synthesis_summary?.blueprint_sections_used || value?.blueprint_sections_used),
109
+ experiment_steps_used: normalizeStringList(value?.synthesis_summary?.experiment_steps_used || value?.experiment_steps_used)
110
+ },
111
+ quality_signals: {
112
+ report_word_count: Number(value?.quality_signals?.report_word_count || countWords(reportMarkdown)),
113
+ source_citation_count: Number(value?.quality_signals?.source_citation_count || sourceCitationCount(reportMarkdown)),
114
+ unique_source_ids_cited: Number(value?.quality_signals?.unique_source_ids_cited || sourceIdsUsed.filter((id) => reportMarkdown.includes(id)).length),
115
+ key_claims_covered: Number(value?.quality_signals?.key_claims_covered || keyClaimIds.filter((id) => reportMarkdown.includes(id)).length),
116
+ repeated_paragraph_ratio: Number(value?.quality_signals?.repeated_paragraph_ratio ?? repetition.repeated_paragraph_ratio),
117
+ template_phrase_hits: normalizeStringList(value?.quality_signals?.template_phrase_hits || repetition.template_phrase_hits)
118
+ },
119
+ blockers: normalizeStringList(value?.blockers)
120
+ };
121
+ }
122
+ export function validateResearchSynthesisOutput(output, contract = null, claimMatrix = null, sourceLedger = null) {
123
+ const reportQuality = analyzeResearchReportQuality(output.report_markdown);
124
+ const repetition = analyzeResearchRepetition(output.report_markdown);
125
+ const sourceIds = sourceIdsFromLedger(sourceLedger);
126
+ const keyClaims = Array.isArray(claimMatrix?.key_claim_ids) ? claimMatrix.key_claim_ids.map(String) : [];
127
+ const report = output.report_markdown;
128
+ const paper = output.paper_markdown;
129
+ const sourceIdsCited = sourceIds.filter((id) => report.includes(id));
130
+ const keyClaimsCovered = keyClaims.filter((id) => report.includes(id) || claimSourceIds(claimMatrix, id).some((sourceId) => report.includes(sourceId)));
131
+ const paperSections = ['Abstract', 'Introduction', 'Methodology', 'Findings', 'Discussion', 'Limitations', 'Conclusion', 'References'];
132
+ const blockers = [
133
+ ...(output.schema === 'sks.research-synthesis-output.v1' ? [] : ['research_synthesis_schema_invalid']),
134
+ ...(output.mission_id ? [] : ['research_synthesis_mission_missing']),
135
+ ...(output.report_markdown.trim() ? [] : ['research_synthesis_report_missing']),
136
+ ...(output.paper_markdown.trim() ? [] : ['research_synthesis_paper_missing']),
137
+ ...(countWords(report) >= Number(contract?.min_report_words || 2200) ? [] : ['research_synthesis_report_too_short']),
138
+ ...reportQuality.blockers,
139
+ ...repetition.blockers,
140
+ ...(sourceIdsCited.length >= Math.min(8, sourceIds.length) ? [] : ['research_synthesis_unique_sources_below_contract']),
141
+ ...(keyClaimsCovered.length >= Number(contract?.min_key_claims || 8) ? [] : ['research_synthesis_key_claims_below_contract']),
142
+ ...(repetition.repeated_paragraph_ratio <= 0.18 ? [] : ['research_synthesis_repeated_paragraph_ratio_high']),
143
+ ...(repetition.template_phrase_hits.length ? ['research_synthesis_template_phrase_hits'] : []),
144
+ ...(paperSections.every((heading) => paper.toLowerCase().includes(heading.toLowerCase())) ? [] : ['research_synthesis_paper_sections_missing']),
145
+ ...output.blockers
146
+ ];
147
+ return { ok: blockers.length === 0, blockers: [...new Set(blockers)] };
148
+ }
149
+ async function readSynthesisInputs(dir) {
150
+ return {
151
+ sourceLedger: await readJson(path.join(dir, 'source-ledger.json'), null),
152
+ claimMatrix: await readJson(path.join(dir, 'claim-evidence-matrix.json'), null),
153
+ falsificationLedger: await readJson(path.join(dir, 'falsification-ledger.json'), null),
154
+ implementationBlueprint: await readJson(path.join(dir, 'implementation-blueprint.json'), null),
155
+ experimentPlan: await readJson(path.join(dir, 'experiment-plan.json'), null),
156
+ replicationPack: await readJson(path.join(dir, 'replication-pack.json'), null),
157
+ contract: await readJson(path.join(dir, 'research-quality-contract.json'), null)
158
+ };
159
+ }
160
+ function mockResearchSynthesisOutput(plan, artifacts) {
161
+ const claims = Array.isArray(artifacts.claimMatrix?.claims) ? artifacts.claimMatrix.claims : [];
162
+ const sourceIds = sourceIdsFromLedger(artifacts.sourceLedger);
163
+ const counterIds = counterevidenceIdsFromLedger(artifacts.sourceLedger);
164
+ const report = buildRealisticResearchReport({ plan, claims, sourceIds, counterevidenceIds: counterIds, blueprint: artifacts.implementationBlueprint, falsificationLedger: artifacts.falsificationLedger, experimentPlan: artifacts.experimentPlan, replicationPack: artifacts.replicationPack });
165
+ const paper = buildRealisticResearchPaper({ plan, claims, sourceIds, counterevidenceIds: counterIds });
166
+ return normalizeResearchSynthesisOutput({
167
+ schema: 'sks.research-synthesis-output.v1',
168
+ mission_id: String(plan?.mission_id || ''),
169
+ generated_at: nowIso(),
170
+ report_markdown: report,
171
+ paper_markdown: paper,
172
+ synthesis_summary: {
173
+ key_claim_ids: (Array.isArray(artifacts.claimMatrix?.key_claim_ids) ? artifacts.claimMatrix.key_claim_ids : claims.slice(0, 8).map((claim) => claim.id)).map(String),
174
+ source_ids_used: sourceIds,
175
+ counterevidence_ids_used: counterIds,
176
+ blueprint_sections_used: (Array.isArray(artifacts.implementationBlueprint?.sections) ? artifacts.implementationBlueprint.sections : []).map((section) => String(section.id || section.title || '')).filter(Boolean),
177
+ experiment_steps_used: (Array.isArray(artifacts.experimentPlan?.steps) ? artifacts.experimentPlan.steps : []).map((step) => String(step.id || '')).filter(Boolean)
178
+ },
179
+ blockers: []
180
+ });
181
+ }
182
+ async function writeSynthesisArtifacts(dir, plan, output) {
183
+ await writeJsonAtomic(path.join(dir, 'research-synthesis-output.json'), output);
184
+ if (output.report_markdown.trim())
185
+ await writeTextAtomic(path.join(dir, 'research-report.md'), `${output.report_markdown.trim()}\n`);
186
+ if (output.paper_markdown.trim())
187
+ await writeTextAtomic(path.join(dir, researchPaperArtifactForPlan(plan)), `${output.paper_markdown.trim()}\n`);
188
+ }
189
+ function sourceIdsFromLedger(sourceLedger) {
190
+ return normalizeStringList([
191
+ ...(Array.isArray(sourceLedger?.sources) ? sourceLedger.sources : []),
192
+ ...(Array.isArray(sourceLedger?.counterevidence_sources) ? sourceLedger.counterevidence_sources : [])
193
+ ].map((row) => row?.id));
194
+ }
195
+ function counterevidenceIdsFromLedger(sourceLedger) {
196
+ return normalizeStringList((Array.isArray(sourceLedger?.counterevidence_sources) ? sourceLedger.counterevidence_sources : []).map((row) => row?.id));
197
+ }
198
+ function claimSourceIds(claimMatrix, claimId) {
199
+ const claim = (Array.isArray(claimMatrix?.claims) ? claimMatrix.claims : []).find((row) => String(row?.id || '') === claimId);
200
+ return normalizeStringList([...(Array.isArray(claim?.source_ids) ? claim.source_ids : []), ...(Array.isArray(claim?.counterevidence_ids) ? claim.counterevidence_ids : [])]);
201
+ }
202
+ function sourceCitationCount(text) {
203
+ return [...String(text || '').matchAll(/\b(?:source|src|mock-source|shard-[A-Za-z0-9_-]+|counter|mock-counter)-[A-Za-z0-9_.:-]+\b/g)].length;
204
+ }
205
+ function normalizeStringList(value) {
206
+ return [...new Set((Array.isArray(value) ? value : value == null ? [] : [value]).flat().map((item) => String(item || '').trim()).filter(Boolean))];
207
+ }
208
+ //# sourceMappingURL=research-synthesis-writer.js.map
@@ -1,19 +1,99 @@
1
1
  import path from 'node:path';
2
2
  import { nowIso, writeJsonAtomic } from '../fsx.js';
3
+ import { RESEARCH_SOURCE_LAYERS } from './research-source-shards.js';
3
4
  export const RESEARCH_WORK_GRAPH_ARTIFACT = 'research-work-graph.json';
4
- const STAGES = [
5
- { id: 'research_source_quality', title: 'Source quality and layered retrieval audit', kind: 'research', outputs: ['source-ledger.json', 'source-quality-report.json'] },
6
- { id: 'research_claim_matrix', title: 'Claim-evidence matrix and citation coverage', kind: 'research', outputs: ['claim-evidence-matrix.json'] },
7
- { id: 'research_falsification', title: 'Counterevidence and falsification strengthening', kind: 'research', outputs: ['falsification-ledger.json'] },
8
- { id: 'research_synthesis_report', title: 'Research report and manuscript synthesis', kind: 'research', outputs: ['research-report.md'] },
9
- { id: 'research_blueprint', title: 'Implementation blueprint and handoff', kind: 'documentation', outputs: ['implementation-blueprint.json', 'implementation-blueprint.md', 'team-handoff-goal.md'] },
10
- { id: 'research_experiment', title: 'Experiment plan and replication pack', kind: 'verification', outputs: ['experiment-plan.json', 'replication-pack.json'] },
11
- { id: 'research_final_review', title: 'Final reviewer quality audit', kind: 'verification', outputs: ['research-final-review.json'] },
12
- { id: 'research_gate_close', title: 'Research gate evaluation and completion output', kind: 'final_review_input_pack', outputs: ['research-gate.evaluated.json', 'research-gate.json'] }
13
- ];
14
- function workItem(stage, index, plan = null) {
5
+ export const REQUIRED_SOURCE_SHARD_IDS = Object.freeze([
6
+ 'source_shard_academic_literature',
7
+ 'source_shard_official_government_data',
8
+ 'source_shard_standards_primary_docs',
9
+ 'source_shard_news_current_events',
10
+ 'source_shard_public_discourse',
11
+ 'source_shard_developer_practitioner',
12
+ 'source_shard_counterevidence_factcheck',
13
+ 'source_shard_local_project_evidence'
14
+ ]);
15
+ function researchStages() {
16
+ const sourceShards = RESEARCH_SOURCE_LAYERS.map((layer) => ({
17
+ id: `source_shard_${layer.id}`,
18
+ title: `Source shard: ${layer.label}`,
19
+ kind: 'research',
20
+ stage_kind: 'source_shard',
21
+ layer_id: layer.id,
22
+ dependencies: [],
23
+ outputs: [`research/cycle-\${cycle}/source-shards/${layer.id}.json`]
24
+ }));
25
+ const shardIds = sourceShards.map((stage) => stage.id);
26
+ return [
27
+ ...sourceShards,
28
+ {
29
+ id: 'source_ledger_merge',
30
+ title: 'Source-ledger partial merge',
31
+ kind: 'research',
32
+ stage_kind: 'source_merge',
33
+ dependencies: shardIds,
34
+ outputs: ['source-ledger.json', 'source-quality-report.json']
35
+ },
36
+ {
37
+ id: 'claim_matrix_build',
38
+ title: 'Claim-evidence matrix build from merged source shards',
39
+ kind: 'research',
40
+ stage_kind: 'claim_matrix_build',
41
+ dependencies: [...shardIds, 'source_ledger_merge'],
42
+ outputs: ['claim-evidence-matrix.json']
43
+ },
44
+ {
45
+ id: 'falsification',
46
+ title: 'Counterevidence and falsification stage',
47
+ kind: 'verification',
48
+ stage_kind: 'falsification',
49
+ dependencies: ['claim_matrix_build', 'source_shard_counterevidence_factcheck'],
50
+ outputs: ['falsification-ledger.json']
51
+ },
52
+ {
53
+ id: 'implementation_blueprint',
54
+ title: 'Concrete implementation blueprint and handoff',
55
+ kind: 'documentation',
56
+ stage_kind: 'implementation_blueprint',
57
+ dependencies: ['claim_matrix_build', 'source_shard_local_project_evidence'],
58
+ outputs: ['implementation-blueprint.json', 'implementation-blueprint.md', 'team-handoff-goal.md']
59
+ },
60
+ {
61
+ id: 'experiment_plan',
62
+ title: 'Experiment plan and replication pack',
63
+ kind: 'verification',
64
+ stage_kind: 'experiment_plan',
65
+ dependencies: ['implementation_blueprint', 'falsification'],
66
+ outputs: ['experiment-plan.json', 'experiment-plan.md', 'replication-pack.json']
67
+ },
68
+ {
69
+ id: 'synthesis',
70
+ title: 'Research report and manuscript synthesis',
71
+ kind: 'research',
72
+ stage_kind: 'synthesis',
73
+ dependencies: ['claim_matrix_build', 'falsification', 'implementation_blueprint', 'experiment_plan'],
74
+ outputs: ['research-report.md', 'research-paper.md', 'genius-opinion-summary.md', 'agent-ledger.json', 'debate-ledger.json', 'novelty-ledger.json']
75
+ },
76
+ {
77
+ id: 'final_review',
78
+ title: 'Static plus Codex/GPT research final reviewer',
79
+ kind: 'verification',
80
+ stage_kind: 'final_review',
81
+ dependencies: ['synthesis'],
82
+ outputs: ['research-final-review.static.json', 'research-final-review.codex.json', 'research-final-review.json']
83
+ },
84
+ {
85
+ id: 'verification',
86
+ title: 'Research gate evaluation and route finalization input',
87
+ kind: 'final_review_input_pack',
88
+ stage_kind: 'verification',
89
+ dependencies: ['final_review'],
90
+ outputs: ['research-gate.json', 'research-gate.evaluated.json']
91
+ }
92
+ ];
93
+ }
94
+ function workItem(stage, index, allStages, plan = null) {
15
95
  const missionPrefix = plan?.mission_id ? `.sneakoscope/missions/${plan.mission_id}/` : '';
16
- return {
96
+ const item = {
17
97
  id: stage.id,
18
98
  kind: stage.kind,
19
99
  title: stage.title,
@@ -22,29 +102,40 @@ function workItem(stage, index, plan = null) {
22
102
  `${missionPrefix}research-plan.json`,
23
103
  `${missionPrefix}research-quality-contract.json`,
24
104
  `${missionPrefix}source-ledger.json`,
25
- `${missionPrefix}claim-evidence-matrix.json`
105
+ `${missionPrefix}claim-evidence-matrix.json`,
106
+ `${missionPrefix}falsification-ledger.json`
26
107
  ],
27
108
  write_paths: [],
28
- required_role: index < 4 ? 'research' : 'verifier',
109
+ required_role: index < RESEARCH_SOURCE_LAYERS.length ? 'research' : stage.kind === 'documentation' ? 'planner' : 'verifier',
29
110
  write_allowed: false,
30
111
  verification_required: true,
31
- dependencies: index === 0 ? [] : [STAGES[index - 1]?.id].filter(Boolean),
32
- can_run_in_parallel_with: STAGES.filter((candidate) => candidate.id !== stage.id).map((candidate) => candidate.id),
112
+ dependencies: stage.dependencies,
113
+ can_run_in_parallel_with: allStages.filter((candidate) => candidate.id !== stage.id && !stage.dependencies.includes(candidate.id)).map((candidate) => candidate.id),
33
114
  conflicts_with: [],
34
- estimated_cost: { tokens: 4000, latency_ms: 60000, cpu_weight: 1, memory_mb: 256, gpu_weight: 0 },
115
+ estimated_cost: { tokens: stage.stage_kind === 'source_shard' ? 2500 : 4000, latency_ms: stage.stage_kind === 'source_shard' ? 30000 : 60000, cpu_weight: 1, memory_mb: 256, gpu_weight: 0 },
35
116
  lease_requirements: stage.outputs.map((artifact) => ({ path: `${missionPrefix}${artifact}`, kind: 'read' })),
36
- acceptance: { requires_patch_envelope: false, requires_verification: true, requires_gpt_final: false },
117
+ acceptance: { requires_patch_envelope: false, requires_verification: true, requires_gpt_final: stage.stage_kind === 'final_review' },
37
118
  owner: null,
38
- allocation_reason: 'Stage-aware read-only research pipeline work graph',
119
+ allocation_reason: 'Stage-aware read-only research pipeline work graph with source-layer shard parallelism',
39
120
  allocation_score: 1,
40
121
  allocation_hints: { domains: [stage.kind], write_paths: [], read_only_paths: stage.outputs },
41
122
  lane: null,
42
123
  worktree: { mode: 'patch-envelope-only', required: false, allocation_required: false }
43
124
  };
125
+ return {
126
+ ...item,
127
+ stage_kind: stage.stage_kind,
128
+ layer_id: stage.layer_id || null,
129
+ output_artifacts: stage.outputs,
130
+ required: stage.required !== false
131
+ };
44
132
  }
45
133
  export function buildResearchWorkGraph(plan = null) {
46
- const requestedClones = Math.max(8, Number(plan?.native_agent_plan?.session_count || 0));
47
- const workItems = STAGES.map((stage, index) => workItem(stage, index, plan));
134
+ const stages = researchStages();
135
+ const requestedClones = Math.max(8, Number(plan?.native_agent_plan?.session_count || 0), RESEARCH_SOURCE_LAYERS.length);
136
+ const workItems = stages.map((stage, index) => workItem(stage, index, stages, plan));
137
+ const sourceShardIds = workItems.filter((item) => item.stage_kind === 'source_shard').map((item) => item.id);
138
+ const closeoutIds = workItems.filter((item) => item.stage_kind !== 'source_shard').map((item) => item.id);
48
139
  return {
49
140
  schema: 'sks.naruto-work-graph.v1',
50
141
  route: '$Naruto',
@@ -54,8 +145,8 @@ export function buildResearchWorkGraph(plan = null) {
54
145
  write_capable: false,
55
146
  work_items: workItems,
56
147
  active_waves: [
57
- { wave_id: 'research-quality-wave', work_item_ids: workItems.slice(0, 4).map((item) => item.id), write_paths: [], conflict_count: 0 },
58
- { wave_id: 'research-closeout-wave', work_item_ids: workItems.slice(4).map((item) => item.id), write_paths: [], conflict_count: 0 }
148
+ { wave_id: 'parallel-source-shard-wave', work_item_ids: sourceShardIds, write_paths: [], conflict_count: 0 },
149
+ { wave_id: 'research-closeout-wave', work_item_ids: closeoutIds, write_paths: [], conflict_count: 0 }
59
150
  ],
60
151
  mixed_work_kinds: [...new Set(workItems.map((item) => item.kind))],
61
152
  write_allowed_count: 0,
@@ -16,6 +16,7 @@ import { validateFalsificationCoverage } from './research/falsification.js';
16
16
  import { writeResearchHandoffArtifacts } from './research/research-handoff.js';
17
17
  import { RESEARCH_WORK_GRAPH_ARTIFACT, writeResearchWorkGraph } from './research/research-work-graph.js';
18
18
  import { researchPromptContractText, validateResearchPromptContract } from './research/research-prompt-contract.js';
19
+ import { buildRealisticResearchPaper, buildRealisticResearchReport } from './research/research-realistic-report.js';
19
20
  export const RESEARCH_PAPER_ARTIFACT = 'research-paper.md';
20
21
  export const RESEARCH_SOURCE_SKILL_ARTIFACT = 'research-source-skill.md';
21
22
  export const RESEARCH_GENIUS_SUMMARY_ARTIFACT = 'genius-opinion-summary.md';
@@ -904,6 +905,7 @@ export async function evaluateResearchGate(dir) {
904
905
  const reportPresent = await exists(path.join(dir, 'research-report.md'));
905
906
  const reportText = reportPresent ? await readText(path.join(dir, 'research-report.md'), '') : '';
906
907
  const reportQuality = analyzeResearchReportQuality(reportText);
908
+ const synthesisOutput = await readJson(path.join(dir, 'research-synthesis-output.json'), null);
907
909
  const reportWordCount = countWords(reportText);
908
910
  const paperArtifact = await findResearchPaperArtifact(dir, plan);
909
911
  const paperPresent = paperArtifact.exists;
@@ -1095,6 +1097,18 @@ export async function evaluateResearchGate(dir) {
1095
1097
  report_word_count: reportWordCount,
1096
1098
  report_min_words: contract.min_report_words,
1097
1099
  report_quality: reportQuality,
1100
+ report_repetition: reportQuality.repetition,
1101
+ source_density_per_1000_words: reportQuality.source_density_per_1000_words,
1102
+ claim_density_per_1000_words: reportQuality.claim_density_per_1000_words,
1103
+ template_phrase_hits: reportQuality.repetition?.template_phrase_hits || [],
1104
+ synthesis: {
1105
+ writer: synthesisOutput ? (sourceLedger?.mode === 'selftest_mock' ? 'mock' : 'codex-sdk evidence-bound writer') : 'missing',
1106
+ repetition_ratio: reportQuality.repetition?.repeated_paragraph_ratio ?? null,
1107
+ source_density_per_1000_words: reportQuality.source_density_per_1000_words,
1108
+ claim_density_per_1000_words: reportQuality.claim_density_per_1000_words,
1109
+ template_phrase_hits: reportQuality.repetition?.template_phrase_hits || [],
1110
+ codex_final_review_verdict: finalReview?.codex_review?.verdict || null
1111
+ },
1098
1112
  web_search_passes: webSearchPasses,
1099
1113
  paper_sections: Math.max(Number(gate.paper_sections || 0), paperSections),
1100
1114
  genius_opinion_summary_present: geniusSummaryPresent || gate.genius_opinion_summary_present === true,
@@ -1441,56 +1455,50 @@ export async function writeMockResearchResult(dir, plan) {
1441
1455
  await writeJsonAtomic(path.join(dir, 'falsification-ledger.json'), falsificationLedger);
1442
1456
  await writeJsonAtomic(path.join(dir, 'novelty-ledger.json'), ledger);
1443
1457
  await writeTextAtomic(path.join(dir, RESEARCH_GENIUS_SUMMARY_ARTIFACT), `${geniusSummary}\n`);
1444
- const evidenceParagraphs = Array.from({ length: 72 }, (_unused, index) => {
1445
- const claimId = mockClaimIds[index % mockClaimIds.length];
1446
- const sourceA = `mock-source-${(index % RESEARCH_SOURCE_LAYERS.length) + 1}`;
1447
- const sourceB = `mock-source-${(index % RESEARCH_SOURCE_LAYERS.length) + 8}`;
1448
- const counter = index % 2 === 0 ? 'mock-counter-1' : 'mock-counter-2';
1449
- return `Quality note ${index + 1}: claim ${claimId} is treated as a falsifiable research-pipeline assertion, not a fact about live web evidence. The mock run cites ${sourceA} and ${sourceB}, compares the claim with ${counter}, and preserves the implementation handoff as read-only evidence. This repeated fixture text deliberately keeps the selftest report above the quality-contract word floor while still naming the same source-ledger ids that the gate verifies.`;
1458
+ const mockSourceIds = [...mockLayerSources.map((source) => source.id), 'mock-counter-1', 'mock-counter-2'];
1459
+ const mockCounterIds = ['mock-counter-1', 'mock-counter-2'];
1460
+ const researchReportText = buildRealisticResearchReport({
1461
+ plan,
1462
+ claims: claimMatrix.claims,
1463
+ sourceIds: mockSourceIds,
1464
+ counterevidenceIds: mockCounterIds,
1465
+ blueprint,
1466
+ falsificationLedger,
1467
+ experimentPlan,
1468
+ replicationPack
1469
+ });
1470
+ const researchPaperText = buildRealisticResearchPaper({
1471
+ plan,
1472
+ claims: claimMatrix.claims,
1473
+ sourceIds: mockSourceIds,
1474
+ counterevidenceIds: mockCounterIds
1475
+ });
1476
+ const reportQuality = analyzeResearchReportQuality(researchReportText);
1477
+ await writeJsonAtomic(path.join(dir, 'research-synthesis-output.json'), {
1478
+ schema: 'sks.research-synthesis-output.v1',
1479
+ mission_id: plan?.mission_id || '',
1480
+ generated_at: nowIso(),
1481
+ report_markdown: researchReportText,
1482
+ paper_markdown: researchPaperText,
1483
+ synthesis_summary: {
1484
+ key_claim_ids: claimMatrix.key_claim_ids,
1485
+ source_ids_used: mockSourceIds,
1486
+ counterevidence_ids_used: mockCounterIds,
1487
+ blueprint_sections_used: blueprint.sections.map((section) => section.id),
1488
+ experiment_steps_used: experimentPlan.steps.map((step) => step.id)
1489
+ },
1490
+ quality_signals: {
1491
+ report_word_count: reportQuality.word_count,
1492
+ source_citation_count: reportQuality.source_id_mentions.length,
1493
+ unique_source_ids_cited: mockSourceIds.filter((id) => researchReportText.includes(id)).length,
1494
+ key_claims_covered: claimMatrix.key_claim_ids.filter((id) => researchReportText.includes(id)).length,
1495
+ repeated_paragraph_ratio: reportQuality.repetition.repeated_paragraph_ratio,
1496
+ template_phrase_hits: reportQuality.repetition.template_phrase_hits
1497
+ },
1498
+ blockers: reportQuality.blockers
1450
1499
  });
1451
- const researchReportText = [
1452
- '# SKS Research Report',
1453
- '',
1454
- `Prompt: ${plan.prompt}`,
1455
- '',
1456
- '## Question',
1457
- 'Can SKS Research Mode close a research mission only when it has enough sourced claims, counterevidence, falsification, implementation handoff material, and replication evidence to support a downstream execution route?',
1458
- '',
1459
- '## Methodology',
1460
- 'This mock run is a selftest fixture, so it does not claim live web retrieval. It exercises the same artifact contract that real research must satisfy: layered source ledger entries, source quality fields, claim-evidence matrix rows, falsification cases, a blueprint, an experiment plan, a replication pack, and a final reviewer decision.',
1461
- '',
1462
- '## Source Map',
1463
- 'The source ledger contains two mock sources per source layer plus two counterevidence records. The source ids include mock-source-1 through mock-source-14, and the counterevidence ids include mock-counter-1 and mock-counter-2. Each source row includes layer, kind, locator, publisher_or_author, accessed_at, reliability, credibility, stance, and claim_ids.',
1464
- '',
1465
- '## Key Claims',
1466
- ...ledger.entries.map((entry) => `- ${entry.id}: ${entry.claim} Sources: ${(entry.source_ids || []).join(', ')}. Counterevidence: ${(entry.counterevidence_ids || entry.falsifiers || []).join(', ')}.`),
1467
- '',
1468
- '## Evidence Matrix Summary',
1469
- `The claim-evidence matrix records ${claimMatrix.key_claim_ids.length} key claims and ${claimMatrix.triangulated_claim_count} triangulated claims. Each critical or high-importance claim has at least one source id and one counterevidence id, and each hypothesis has a test_or_probe field for follow-up validation.`,
1470
- '',
1471
- '## Counterevidence',
1472
- 'The first counterexample, mock-counter-1, attacks overclaiming without decisive tests. The second counterexample, mock-counter-2, attacks missing replication and thin experiment plans. Both are intentionally simple but give the gate two independent counterevidence entries to verify.',
1473
- '',
1474
- '## Falsification',
1475
- 'The falsification ledger includes four cases. They attack summary-only output, missing independent confirmation, absent counterevidence, and absent replication. The cases survive only as gate-backed requirements, not as proof that the mock topic was researched on the live web.',
1476
- '',
1477
- '## Implementation Blueprint',
1478
- 'The implementation blueprint has eight sections: problem, decision, architecture, interfaces, data contracts, execution plan, verification plan, and risks and rollbacks. The key point is that Research does not change repository source. It creates a handoff for a later $Team route that can validate the research and then decide what to implement.',
1479
- '',
1480
- '## Experiment / Validation Plan',
1481
- 'The experiment plan contains five steps: compare a baseline and research output, score cited key claims, run the smallest implementation probe, compare falsification outcomes, and record replication commands. The replication pack lists the commands and expected artifacts needed to reproduce the gate.',
1482
- '',
1483
- '## Limitations',
1484
- 'This is mock evidence for harness verification. It proves the local artifact contract and gate behavior, not live research accuracy. A normal non-mock run must still collect real sources and must keep the gate blocked if source access is unavailable.',
1485
- '',
1486
- '## References',
1487
- '- mock-source-1 through mock-source-14: layered mock sources generated by writeMockResearchResult.',
1488
- '- mock-counter-1 and mock-counter-2: counterevidence fixtures generated by writeMockResearchResult.',
1489
- '',
1490
- ...evidenceParagraphs
1491
- ].join('\n\n');
1492
1500
  await writeTextAtomic(path.join(dir, 'research-report.md'), `${researchReportText}\n`);
1493
- await writeTextAtomic(path.join(dir, paperArtifact), `# Research Paper: ${plan.prompt}\n\n## Abstract\nA source-cited research run should produce cross-layer, falsifiable novelty rather than only summarize known material.\n\n## Introduction\nThe mock topic is evaluated as a research workflow outcome with layered source coverage [mock-source-1].\n\n## Methodology\nFive xhigh agents produce Eureka ideas, debate, triangulate source layers, and falsify the strongest claim.\n\n## Findings\nThe surviving finding is that useful research needs cited novelty, source-layer coverage, cross-layer triangulation, and a cheap decisive probe.\n\n## Discussion\nThe debate favors gate-backed evidence over narrative confidence, and treats public discourse as signal rather than truth.\n\n## Limitations and Falsification\nThe claim fails without sources, counterevidence, triangulation checks, or testable predictions [mock-counter-1].\n\n## Conclusion and Next Experiment\nCompare this loop against a summary-only baseline and score testable insights.\n\n## References\n- [mock-source-1] Mock academic literature coverage.\n- [mock-source-2] Mock official government and leading-institution knowledge coverage.\n- [mock-source-3] Mock standards and primary documents coverage.\n- [mock-source-4] Mock current news and global reporting coverage.\n- [mock-source-5] Mock public discourse coverage.\n- [mock-source-6] Mock developer and practitioner knowledge coverage.\n- [mock-source-7] Mock counterevidence and fact-checking coverage.\n- [mock-counter-1] Mock overclaim counterexample.\n`);
1501
+ await writeTextAtomic(path.join(dir, paperArtifact), `${researchPaperText}\n`);
1494
1502
  await writeJsonAtomic(path.join(dir, 'research-gate.json'), {
1495
1503
  ...defaultResearchGate(),
1496
1504
  passed: true,
@@ -1528,6 +1536,22 @@ export async function writeMockResearchResult(dir, plan) {
1528
1536
  evidence: ['mock research report', `mock research paper: ${paperArtifact}`, 'mock genius opinion summary', 'mock research source skill', 'mock layered source ledger', 'mock agent ledger', 'mock debate ledger', 'mock novelty ledger', 'mock falsification ledger'],
1529
1537
  notes: ['mock mode records the new contract but does not call a model or perform live web browsing']
1530
1538
  });
1539
+ await writeJsonAtomic(path.join(dir, 'research-final-review.codex.json'), {
1540
+ schema: 'sks.research-codex-final-review.v1',
1541
+ reviewed_at: nowIso(),
1542
+ verdict: 'approve',
1543
+ unsupported_claim_ids: [],
1544
+ missing_evidence: [],
1545
+ blueprint_findings: ['mock complete package fixture has implementation blueprint sections'],
1546
+ falsification_findings: ['mock complete package fixture has counterevidence and falsification cases'],
1547
+ template_like_prose: false,
1548
+ source_density_ok: true,
1549
+ implementation_concreteness_ok: true,
1550
+ evidence_bound_synthesis_ok: true,
1551
+ required_revisions: [],
1552
+ confidence: 'high',
1553
+ mock: true
1554
+ });
1531
1555
  await writeResearchNativeAgentBatchCompletion(dir, plan);
1532
1556
  return evaluateResearchGate(dir);
1533
1557
  }