@ahmed-g-gad/apothem 0.1.1

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 (674) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/LICENSE +21 -0
  3. package/LICENSES/MIT.txt +18 -0
  4. package/LICENSES/PSF-2.0.txt +47 -0
  5. package/README.md +549 -0
  6. package/bin/README.md +37 -0
  7. package/bin/apothem.mjs +78 -0
  8. package/package.json +75 -0
  9. package/pyproject.toml +347 -0
  10. package/src/apothem/README.md +52 -0
  11. package/src/apothem/__init__.py +66 -0
  12. package/src/apothem/__main__.py +28 -0
  13. package/src/apothem/_vendor/.keep +0 -0
  14. package/src/apothem/_vendor/__init__.py +25 -0
  15. package/src/apothem/_vendor/attr/__init__.py +104 -0
  16. package/src/apothem/_vendor/attr/__init__.pyi +389 -0
  17. package/src/apothem/_vendor/attr/_cmp.py +160 -0
  18. package/src/apothem/_vendor/attr/_cmp.pyi +13 -0
  19. package/src/apothem/_vendor/attr/_compat.py +99 -0
  20. package/src/apothem/_vendor/attr/_config.py +31 -0
  21. package/src/apothem/_vendor/attr/_funcs.py +497 -0
  22. package/src/apothem/_vendor/attr/_make.py +3406 -0
  23. package/src/apothem/_vendor/attr/_next_gen.py +674 -0
  24. package/src/apothem/_vendor/attr/_typing_compat.pyi +15 -0
  25. package/src/apothem/_vendor/attr/_version_info.py +89 -0
  26. package/src/apothem/_vendor/attr/_version_info.pyi +9 -0
  27. package/src/apothem/_vendor/attr/converters.py +162 -0
  28. package/src/apothem/_vendor/attr/converters.pyi +19 -0
  29. package/src/apothem/_vendor/attr/exceptions.py +95 -0
  30. package/src/apothem/_vendor/attr/exceptions.pyi +17 -0
  31. package/src/apothem/_vendor/attr/filters.py +72 -0
  32. package/src/apothem/_vendor/attr/filters.pyi +6 -0
  33. package/src/apothem/_vendor/attr/py.typed +0 -0
  34. package/src/apothem/_vendor/attr/setters.py +79 -0
  35. package/src/apothem/_vendor/attr/setters.pyi +20 -0
  36. package/src/apothem/_vendor/attr/validators.py +750 -0
  37. package/src/apothem/_vendor/attr/validators.pyi +140 -0
  38. package/src/apothem/_vendor/attr.LICENSE +21 -0
  39. package/src/apothem/_vendor/attrs/__init__.py +72 -0
  40. package/src/apothem/_vendor/attrs/__init__.pyi +314 -0
  41. package/src/apothem/_vendor/attrs/converters.py +3 -0
  42. package/src/apothem/_vendor/attrs/exceptions.py +3 -0
  43. package/src/apothem/_vendor/attrs/filters.py +3 -0
  44. package/src/apothem/_vendor/attrs/py.typed +0 -0
  45. package/src/apothem/_vendor/attrs/setters.py +3 -0
  46. package/src/apothem/_vendor/attrs/validators.py +3 -0
  47. package/src/apothem/_vendor/attrs.LICENSE +21 -0
  48. package/src/apothem/_vendor/jsonschema/__init__.py +120 -0
  49. package/src/apothem/_vendor/jsonschema/__main__.py +6 -0
  50. package/src/apothem/_vendor/jsonschema/_format.py +546 -0
  51. package/src/apothem/_vendor/jsonschema/_keywords.py +449 -0
  52. package/src/apothem/_vendor/jsonschema/_legacy_keywords.py +449 -0
  53. package/src/apothem/_vendor/jsonschema/_types.py +204 -0
  54. package/src/apothem/_vendor/jsonschema/_typing.py +29 -0
  55. package/src/apothem/_vendor/jsonschema/_utils.py +355 -0
  56. package/src/apothem/_vendor/jsonschema/benchmarks/__init__.py +5 -0
  57. package/src/apothem/_vendor/jsonschema/benchmarks/const_vs_enum.py +30 -0
  58. package/src/apothem/_vendor/jsonschema/benchmarks/contains.py +28 -0
  59. package/src/apothem/_vendor/jsonschema/benchmarks/import_benchmark.py +31 -0
  60. package/src/apothem/_vendor/jsonschema/benchmarks/issue232/issue.json +2653 -0
  61. package/src/apothem/_vendor/jsonschema/benchmarks/issue232.py +25 -0
  62. package/src/apothem/_vendor/jsonschema/benchmarks/json_schema_test_suite.py +12 -0
  63. package/src/apothem/_vendor/jsonschema/benchmarks/nested_schemas.py +56 -0
  64. package/src/apothem/_vendor/jsonschema/benchmarks/subcomponents.py +42 -0
  65. package/src/apothem/_vendor/jsonschema/benchmarks/unused_registry.py +35 -0
  66. package/src/apothem/_vendor/jsonschema/benchmarks/useless_applicator_schemas.py +106 -0
  67. package/src/apothem/_vendor/jsonschema/benchmarks/useless_keywords.py +32 -0
  68. package/src/apothem/_vendor/jsonschema/benchmarks/validator_creation.py +14 -0
  69. package/src/apothem/_vendor/jsonschema/cli.py +292 -0
  70. package/src/apothem/_vendor/jsonschema/exceptions.py +490 -0
  71. package/src/apothem/_vendor/jsonschema/protocols.py +230 -0
  72. package/src/apothem/_vendor/jsonschema/validators.py +1410 -0
  73. package/src/apothem/_vendor/jsonschema.LICENSE +19 -0
  74. package/src/apothem/_vendor/jsonschema_specifications/__init__.py +12 -0
  75. package/src/apothem/_vendor/jsonschema_specifications/_core.py +38 -0
  76. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/metaschema.json +42 -0
  77. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/applicator +56 -0
  78. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/content +17 -0
  79. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/core +57 -0
  80. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/format +14 -0
  81. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/meta-data +37 -0
  82. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft201909/vocabularies/validation +98 -0
  83. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/metaschema.json +58 -0
  84. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/applicator +48 -0
  85. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/content +17 -0
  86. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/core +51 -0
  87. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-annotation +14 -0
  88. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/format-assertion +14 -0
  89. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/meta-data +37 -0
  90. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/unevaluated +15 -0
  91. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft202012/vocabularies/validation +98 -0
  92. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft3/metaschema.json +172 -0
  93. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft4/metaschema.json +149 -0
  94. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft6/metaschema.json +153 -0
  95. package/src/apothem/_vendor/jsonschema_specifications/schemas/draft7/metaschema.json +166 -0
  96. package/src/apothem/_vendor/jsonschema_specifications.LICENSE +19 -0
  97. package/src/apothem/_vendor/referencing/__init__.py +7 -0
  98. package/src/apothem/_vendor/referencing/_attrs.py +31 -0
  99. package/src/apothem/_vendor/referencing/_attrs.pyi +21 -0
  100. package/src/apothem/_vendor/referencing/_core.py +739 -0
  101. package/src/apothem/_vendor/referencing/exceptions.py +165 -0
  102. package/src/apothem/_vendor/referencing/jsonschema.py +642 -0
  103. package/src/apothem/_vendor/referencing/py.typed +0 -0
  104. package/src/apothem/_vendor/referencing/retrieval.py +94 -0
  105. package/src/apothem/_vendor/referencing/typing.py +61 -0
  106. package/src/apothem/_vendor/referencing.LICENSE +19 -0
  107. package/src/apothem/_vendor/rpds/__init__.py +251 -0
  108. package/src/apothem/_vendor/typing_extensions.LICENSE +279 -0
  109. package/src/apothem/_vendor/typing_extensions.py +4317 -0
  110. package/src/apothem/_vendor/vendor.txt +22 -0
  111. package/src/apothem/_vendor/yaml/__init__.py +389 -0
  112. package/src/apothem/_vendor/yaml/composer.py +138 -0
  113. package/src/apothem/_vendor/yaml/constructor.py +748 -0
  114. package/src/apothem/_vendor/yaml/cyaml.py +100 -0
  115. package/src/apothem/_vendor/yaml/dumper.py +61 -0
  116. package/src/apothem/_vendor/yaml/emitter.py +1137 -0
  117. package/src/apothem/_vendor/yaml/error.py +74 -0
  118. package/src/apothem/_vendor/yaml/events.py +85 -0
  119. package/src/apothem/_vendor/yaml/loader.py +63 -0
  120. package/src/apothem/_vendor/yaml/nodes.py +48 -0
  121. package/src/apothem/_vendor/yaml/parser.py +588 -0
  122. package/src/apothem/_vendor/yaml/reader.py +185 -0
  123. package/src/apothem/_vendor/yaml/representer.py +388 -0
  124. package/src/apothem/_vendor/yaml/resolver.py +226 -0
  125. package/src/apothem/_vendor/yaml/scanner.py +1435 -0
  126. package/src/apothem/_vendor/yaml/serializer.py +110 -0
  127. package/src/apothem/_vendor/yaml/tokens.py +103 -0
  128. package/src/apothem/_vendor/yaml.LICENSE +20 -0
  129. package/src/apothem/agents/README.md +60 -0
  130. package/src/apothem/agents/codebase-explorer.md +91 -0
  131. package/src/apothem/agents/convention-auditor.md +93 -0
  132. package/src/apothem/agents/dependency-auditor.md +97 -0
  133. package/src/apothem/agents/fact-checker.md +84 -0
  134. package/src/apothem/agents/mcp-builder.md +86 -0
  135. package/src/apothem/agents/memory-auditor.md +93 -0
  136. package/src/apothem/agents/prompt-evaluator.md +87 -0
  137. package/src/apothem/agents/quality-gate.md +103 -0
  138. package/src/apothem/agents/refactor-surgeon.md +74 -0
  139. package/src/apothem/agents/research-scout.md +73 -0
  140. package/src/apothem/agents/security-scanner.md +83 -0
  141. package/src/apothem/agents/test-runner.md +84 -0
  142. package/src/apothem/audit/README.md +73 -0
  143. package/src/apothem/audit/_scan_lib.py +182 -0
  144. package/src/apothem/audit/analyze_graph.py +260 -0
  145. package/src/apothem/audit/build_capability_graph.py +607 -0
  146. package/src/apothem/audit/build_inventory.py +657 -0
  147. package/src/apothem/audit/build_plans_provenance.py +997 -0
  148. package/src/apothem/audit/check_links.py +389 -0
  149. package/src/apothem/audit/classify_artifacts.py +381 -0
  150. package/src/apothem/audit/deprecated-tokens.txt +10 -0
  151. package/src/apothem/audit/execute_plans_migration.py +491 -0
  152. package/src/apothem/audit/known-projects.txt +15 -0
  153. package/src/apothem/audit/render_capability_index.py +467 -0
  154. package/src/apothem/audit/render_inventory.py +405 -0
  155. package/src/apothem/audit/scan_ai_surfaces.py +1125 -0
  156. package/src/apothem/audit/scan_ai_surfaces_coarse.py +261 -0
  157. package/src/apothem/audit/scan_drift_features.py +143 -0
  158. package/src/apothem/audit/scan_frontmatter.py +293 -0
  159. package/src/apothem/audit/scan_header_coverage.py +1134 -0
  160. package/src/apothem/audit/scan_plan_leakage.py +540 -0
  161. package/src/apothem/audit/scan_plans_discipline.py +188 -0
  162. package/src/apothem/audit/scan_secrets_pii.py +245 -0
  163. package/src/apothem/audit/scan_stale_tokens.py +296 -0
  164. package/src/apothem/audit/synthesize_drift.py +205 -0
  165. package/src/apothem/benchmarks/README.md +33 -0
  166. package/src/apothem/benchmarks/__init__.py +3 -0
  167. package/src/apothem/benchmarks/bench_agents.py +63 -0
  168. package/src/apothem/benchmarks/bench_hooks.py +93 -0
  169. package/src/apothem/benchmarks/bench_install.py +58 -0
  170. package/src/apothem/benchmarks/bench_tests.py +93 -0
  171. package/src/apothem/benchmarks/bench_validate_ecosystem.py +84 -0
  172. package/src/apothem/cli/README.md +33 -0
  173. package/src/apothem/cli/__init__.py +229 -0
  174. package/src/apothem/cli/_cmd_completion.py +88 -0
  175. package/src/apothem/cli/_cmd_diff.py +181 -0
  176. package/src/apothem/cli/_cmd_doctor.py +143 -0
  177. package/src/apothem/cli/_cmd_harnesses.py +167 -0
  178. package/src/apothem/cli/_cmd_install.py +327 -0
  179. package/src/apothem/cli/_cmd_migrate_workspace.py +143 -0
  180. package/src/apothem/cli/_cmd_profile.py +341 -0
  181. package/src/apothem/cli/_cmd_status.py +180 -0
  182. package/src/apothem/cli/_cmd_uninstall.py +215 -0
  183. package/src/apothem/cli/_cmd_update.py +397 -0
  184. package/src/apothem/cli/_cmd_verify.py +194 -0
  185. package/src/apothem/cli/_common_flags.py +90 -0
  186. package/src/apothem/cli/_epilogs.py +296 -0
  187. package/src/apothem/cli/_helpers.py +857 -0
  188. package/src/apothem/cli/_json_formatter.py +21 -0
  189. package/src/apothem/cli/_materialize.py +376 -0
  190. package/src/apothem/cli/completions/apothem.bash +30 -0
  191. package/src/apothem/cli/completions/apothem.fish +19 -0
  192. package/src/apothem/cli/completions/apothem.ps1 +27 -0
  193. package/src/apothem/cli/completions/apothem.zsh +42 -0
  194. package/src/apothem/cli/reference_export.py +126 -0
  195. package/src/apothem/commands/README.md +125 -0
  196. package/src/apothem/commands/a11y-audit.md +203 -0
  197. package/src/apothem/commands/architecture-review.md +194 -0
  198. package/src/apothem/commands/audit.md +165 -0
  199. package/src/apothem/commands/code-audit.md +218 -0
  200. package/src/apothem/commands/code-review.md +193 -0
  201. package/src/apothem/commands/dependency-audit.md +209 -0
  202. package/src/apothem/commands/docs-review.md +199 -0
  203. package/src/apothem/commands/elevate.md +285 -0
  204. package/src/apothem/commands/eval.md +149 -0
  205. package/src/apothem/commands/fortress.md +172 -0
  206. package/src/apothem/commands/freshify.md +168 -0
  207. package/src/apothem/commands/github-deploy-fresh.md +178 -0
  208. package/src/apothem/commands/github-deploy-next.md +167 -0
  209. package/src/apothem/commands/perf-audit.md +198 -0
  210. package/src/apothem/commands/plan-amend.md +104 -0
  211. package/src/apothem/commands/plan-audit.md +127 -0
  212. package/src/apothem/commands/plan-design.md +257 -0
  213. package/src/apothem/commands/plan-execute.md +495 -0
  214. package/src/apothem/commands/plan-generate.md +351 -0
  215. package/src/apothem/commands/plan-review.md +555 -0
  216. package/src/apothem/commands/plan-spec.md +359 -0
  217. package/src/apothem/commands/plan-status.md +222 -0
  218. package/src/apothem/commands/plan.md +173 -0
  219. package/src/apothem/commands/projectify.md +142 -0
  220. package/src/apothem/commands/release-readiness.md +142 -0
  221. package/src/apothem/commands/research-analysis.md +241 -0
  222. package/src/apothem/commands/research-design.md +231 -0
  223. package/src/apothem/commands/research-disseminate.md +225 -0
  224. package/src/apothem/commands/research-experiment.md +232 -0
  225. package/src/apothem/commands/research-ideate.md +213 -0
  226. package/src/apothem/commands/research-paper.md +252 -0
  227. package/src/apothem/commands/research-proposal.md +220 -0
  228. package/src/apothem/commands/research-publish.md +255 -0
  229. package/src/apothem/commands/research-review.md +251 -0
  230. package/src/apothem/commands/research-sources.md +266 -0
  231. package/src/apothem/commands/research-spec.md +255 -0
  232. package/src/apothem/commands/research-synthesis.md +233 -0
  233. package/src/apothem/commands/research-theory.md +218 -0
  234. package/src/apothem/commands/research.md +181 -0
  235. package/src/apothem/commands/security-audit.md +196 -0
  236. package/src/apothem/commands/supply-chain-audit.md +192 -0
  237. package/src/apothem/commands/test-suite.md +146 -0
  238. package/src/apothem/commands/threat-model-audit.md +199 -0
  239. package/src/apothem/commands/ux-review.md +202 -0
  240. package/src/apothem/commands/workflow.md +162 -0
  241. package/src/apothem/conformity/README.md +173 -0
  242. package/src/apothem/conformity/__init__.py +1 -0
  243. package/src/apothem/conformity/_grep_base.py +93 -0
  244. package/src/apothem/conformity/agent_capability_grep.py +306 -0
  245. package/src/apothem/conformity/agents_md_coverage_grep.py +382 -0
  246. package/src/apothem/conformity/agnosticism_grep.py +311 -0
  247. package/src/apothem/conformity/always_on_budget_grep.py +318 -0
  248. package/src/apothem/conformity/bare_except_grep.py +115 -0
  249. package/src/apothem/conformity/binding_reciprocity_grep.py +151 -0
  250. package/src/apothem/conformity/brand_mark_grep.py +272 -0
  251. package/src/apothem/conformity/commented_out_code_grep.py +176 -0
  252. package/src/apothem/conformity/completion_claim_grep.py +169 -0
  253. package/src/apothem/conformity/conventional_commit_grep.py +319 -0
  254. package/src/apothem/conformity/copilot_instructions_presence_grep.py +324 -0
  255. package/src/apothem/conformity/cross_platform_matrix_grep.py +297 -0
  256. package/src/apothem/conformity/determinism_grep.py +306 -0
  257. package/src/apothem/conformity/diagram_staleness_grep.py +154 -0
  258. package/src/apothem/conformity/dynamism_grep.py +284 -0
  259. package/src/apothem/conformity/editorconfig_presence_grep.py +281 -0
  260. package/src/apothem/conformity/file_header_grep.py +502 -0
  261. package/src/apothem/conformity/freshness_token_grep.py +233 -0
  262. package/src/apothem/conformity/frontmatter_grep.py +274 -0
  263. package/src/apothem/conformity/frontmatter_value_grep.py +386 -0
  264. package/src/apothem/conformity/gate.py +1386 -0
  265. package/src/apothem/conformity/gitattributes_presence_grep.py +238 -0
  266. package/src/apothem/conformity/harden_runner_grep.py +320 -0
  267. package/src/apothem/conformity/hedging_grep.py +129 -0
  268. package/src/apothem/conformity/license_author_consistency_grep.py +204 -0
  269. package/src/apothem/conformity/link_check.py +327 -0
  270. package/src/apothem/conformity/magic_number_grep.py +182 -0
  271. package/src/apothem/conformity/multi_surface_coherence_grep.py +620 -0
  272. package/src/apothem/conformity/naming_grep.py +224 -0
  273. package/src/apothem/conformity/no_global_plans_grep.py +339 -0
  274. package/src/apothem/conformity/no_toplevel_docs_grep.py +120 -0
  275. package/src/apothem/conformity/oidc_trusted_publishing_grep.py +291 -0
  276. package/src/apothem/conformity/option_annotation_grep.py +352 -0
  277. package/src/apothem/conformity/orphan_output_grep.py +206 -0
  278. package/src/apothem/conformity/permissions_minimum_scope_grep.py +299 -0
  279. package/src/apothem/conformity/plain_language_grep.py +559 -0
  280. package/src/apothem/conformity/plan_next_step_consistency_grep.py +450 -0
  281. package/src/apothem/conformity/plan_suite_structure_grep.py +534 -0
  282. package/src/apothem/conformity/plans_discipline_language_grep.py +245 -0
  283. package/src/apothem/conformity/production_ready_pr_grep.py +200 -0
  284. package/src/apothem/conformity/recommend_next_step_grep.py +250 -0
  285. package/src/apothem/conformity/redundancy_grep.py +401 -0
  286. package/src/apothem/conformity/reference_token_grep.py +230 -0
  287. package/src/apothem/conformity/registry_capability_consistency_grep.py +368 -0
  288. package/src/apothem/conformity/secret_leak_grep.py +193 -0
  289. package/src/apothem/conformity/semver_stability_grep.py +358 -0
  290. package/src/apothem/conformity/smoke_install_grep.py +194 -0
  291. package/src/apothem/conformity/static_version_grep.py +284 -0
  292. package/src/apothem/conformity/token_efficiency_grep.py +185 -0
  293. package/src/apothem/conformity/unpinned_action_grep.py +115 -0
  294. package/src/apothem/conformity/user_confirm_grep.py +74 -0
  295. package/src/apothem/conformity/workflow_concurrency_grep.py +283 -0
  296. package/src/apothem/harnesses/README.md +63 -0
  297. package/src/apothem/harnesses/__init__.py +16 -0
  298. package/src/apothem/harnesses/_shared/README.md +36 -0
  299. package/src/apothem/harnesses/_shared/__init__.py +12 -0
  300. package/src/apothem/harnesses/_shared/install_driver.py +281 -0
  301. package/src/apothem/harnesses/_shared/install_driver_apply.py +612 -0
  302. package/src/apothem/harnesses/_shared/install_driver_backup.py +535 -0
  303. package/src/apothem/harnesses/_shared/install_driver_converters.py +310 -0
  304. package/src/apothem/harnesses/_shared/install_driver_lifecycle.py +495 -0
  305. package/src/apothem/harnesses/_shared/install_driver_materialize.py +675 -0
  306. package/src/apothem/harnesses/_shared/install_driver_merge.py +656 -0
  307. package/src/apothem/harnesses/_shared/install_driver_pathsafety.py +137 -0
  308. package/src/apothem/harnesses/_shared/install_driver_planvalidation.py +240 -0
  309. package/src/apothem/harnesses/_shared/install_driver_removal.py +366 -0
  310. package/src/apothem/harnesses/_shared/install_driver_treeops.py +248 -0
  311. package/src/apothem/harnesses/_shared/install_driver_types.py +330 -0
  312. package/src/apothem/harnesses/_shared/wrapper_factories.py +448 -0
  313. package/src/apothem/harnesses/antigravity/STANDARD-CONVENTION-PIN.md +91 -0
  314. package/src/apothem/harnesses/antigravity/__init__.py +70 -0
  315. package/src/apothem/harnesses/antigravity/capabilities.yml +40 -0
  316. package/src/apothem/harnesses/antigravity/install.py +63 -0
  317. package/src/apothem/harnesses/antigravity/templates/GEMINI.md +40 -0
  318. package/src/apothem/harnesses/antigravity/templates/plugin.json +5 -0
  319. package/src/apothem/harnesses/antigravity/uninstall.py +22 -0
  320. package/src/apothem/harnesses/antigravity/update.py +10 -0
  321. package/src/apothem/harnesses/antigravity/verify.py +11 -0
  322. package/src/apothem/harnesses/claude_code/STANDARD-CONVENTION-PIN.md +65 -0
  323. package/src/apothem/harnesses/claude_code/__init__.py +107 -0
  324. package/src/apothem/harnesses/claude_code/capabilities.yml +42 -0
  325. package/src/apothem/harnesses/claude_code/install.py +147 -0
  326. package/src/apothem/harnesses/claude_code/templates/settings.json +351 -0
  327. package/src/apothem/harnesses/claude_code/uninstall.py +23 -0
  328. package/src/apothem/harnesses/claude_code/update.py +10 -0
  329. package/src/apothem/harnesses/claude_code/verify.py +11 -0
  330. package/src/apothem/harnesses/codebuddy/STANDARD-CONVENTION-PIN.md +74 -0
  331. package/src/apothem/harnesses/codebuddy/__init__.py +49 -0
  332. package/src/apothem/harnesses/codebuddy/capabilities.yml +34 -0
  333. package/src/apothem/harnesses/codebuddy/install.py +40 -0
  334. package/src/apothem/harnesses/codebuddy/templates/apothem-rules.md +37 -0
  335. package/src/apothem/harnesses/codebuddy/uninstall.py +25 -0
  336. package/src/apothem/harnesses/codebuddy/update.py +10 -0
  337. package/src/apothem/harnesses/codebuddy/verify.py +11 -0
  338. package/src/apothem/harnesses/codex/STANDARD-CONVENTION-PIN.md +79 -0
  339. package/src/apothem/harnesses/codex/__init__.py +72 -0
  340. package/src/apothem/harnesses/codex/capabilities.yml +40 -0
  341. package/src/apothem/harnesses/codex/install.py +69 -0
  342. package/src/apothem/harnesses/codex/templates/AGENTS.md +40 -0
  343. package/src/apothem/harnesses/codex/templates/hooks.json +127 -0
  344. package/src/apothem/harnesses/codex/uninstall.py +23 -0
  345. package/src/apothem/harnesses/codex/update.py +10 -0
  346. package/src/apothem/harnesses/codex/verify.py +11 -0
  347. package/src/apothem/harnesses/cursor/STANDARD-CONVENTION-PIN.md +79 -0
  348. package/src/apothem/harnesses/cursor/__init__.py +48 -0
  349. package/src/apothem/harnesses/cursor/capabilities.yml +42 -0
  350. package/src/apothem/harnesses/cursor/install.py +38 -0
  351. package/src/apothem/harnesses/cursor/templates/apothem-rules.mdc +40 -0
  352. package/src/apothem/harnesses/cursor/uninstall.py +25 -0
  353. package/src/apothem/harnesses/cursor/update.py +10 -0
  354. package/src/apothem/harnesses/cursor/verify.py +11 -0
  355. package/src/apothem/harnesses/gemini_cli/STANDARD-CONVENTION-PIN.md +102 -0
  356. package/src/apothem/harnesses/gemini_cli/__init__.py +52 -0
  357. package/src/apothem/harnesses/gemini_cli/capabilities.yml +43 -0
  358. package/src/apothem/harnesses/gemini_cli/install.py +43 -0
  359. package/src/apothem/harnesses/gemini_cli/templates/GEMINI.md +38 -0
  360. package/src/apothem/harnesses/gemini_cli/uninstall.py +25 -0
  361. package/src/apothem/harnesses/gemini_cli/update.py +10 -0
  362. package/src/apothem/harnesses/gemini_cli/verify.py +11 -0
  363. package/src/apothem/harnesses/github_copilot/STANDARD-CONVENTION-PIN.md +84 -0
  364. package/src/apothem/harnesses/github_copilot/__init__.py +47 -0
  365. package/src/apothem/harnesses/github_copilot/capabilities.yml +42 -0
  366. package/src/apothem/harnesses/github_copilot/install.py +40 -0
  367. package/src/apothem/harnesses/github_copilot/templates/copilot-instructions.md +33 -0
  368. package/src/apothem/harnesses/github_copilot/uninstall.py +25 -0
  369. package/src/apothem/harnesses/github_copilot/update.py +10 -0
  370. package/src/apothem/harnesses/github_copilot/verify.py +11 -0
  371. package/src/apothem/harnesses/glm/STANDARD-CONVENTION-PIN.md +77 -0
  372. package/src/apothem/harnesses/glm/__init__.py +56 -0
  373. package/src/apothem/harnesses/glm/capabilities.yml +33 -0
  374. package/src/apothem/harnesses/glm/install.py +45 -0
  375. package/src/apothem/harnesses/glm/templates/glm.toml +58 -0
  376. package/src/apothem/harnesses/glm/uninstall.py +25 -0
  377. package/src/apothem/harnesses/glm/update.py +10 -0
  378. package/src/apothem/harnesses/glm/verify.py +11 -0
  379. package/src/apothem/harnesses/hermes/STANDARD-CONVENTION-PIN.md +57 -0
  380. package/src/apothem/harnesses/hermes/__init__.py +33 -0
  381. package/src/apothem/harnesses/hermes/capabilities.yml +36 -0
  382. package/src/apothem/harnesses/hermes/install.py +17 -0
  383. package/src/apothem/harnesses/hermes/materializer.py +35 -0
  384. package/src/apothem/harnesses/hermes/uninstall.py +33 -0
  385. package/src/apothem/harnesses/hermes/update.py +10 -0
  386. package/src/apothem/harnesses/hermes/verify.py +11 -0
  387. package/src/apothem/harnesses/kimi_code/STANDARD-CONVENTION-PIN.md +128 -0
  388. package/src/apothem/harnesses/kimi_code/__init__.py +59 -0
  389. package/src/apothem/harnesses/kimi_code/capabilities.yml +40 -0
  390. package/src/apothem/harnesses/kimi_code/install.py +42 -0
  391. package/src/apothem/harnesses/kimi_code/templates/AGENTS.md +43 -0
  392. package/src/apothem/harnesses/kimi_code/uninstall.py +27 -0
  393. package/src/apothem/harnesses/kimi_code/update.py +10 -0
  394. package/src/apothem/harnesses/kimi_code/verify.py +11 -0
  395. package/src/apothem/harnesses/kiro/STANDARD-CONVENTION-PIN.md +77 -0
  396. package/src/apothem/harnesses/kiro/__init__.py +49 -0
  397. package/src/apothem/harnesses/kiro/capabilities.yml +36 -0
  398. package/src/apothem/harnesses/kiro/install.py +39 -0
  399. package/src/apothem/harnesses/kiro/templates/apothem-rules.md +36 -0
  400. package/src/apothem/harnesses/kiro/uninstall.py +25 -0
  401. package/src/apothem/harnesses/kiro/update.py +10 -0
  402. package/src/apothem/harnesses/kiro/verify.py +11 -0
  403. package/src/apothem/harnesses/open_claw/STANDARD-CONVENTION-PIN.md +62 -0
  404. package/src/apothem/harnesses/open_claw/__init__.py +35 -0
  405. package/src/apothem/harnesses/open_claw/capabilities.yml +35 -0
  406. package/src/apothem/harnesses/open_claw/install.py +17 -0
  407. package/src/apothem/harnesses/open_claw/materializer.py +36 -0
  408. package/src/apothem/harnesses/open_claw/uninstall.py +32 -0
  409. package/src/apothem/harnesses/open_claw/update.py +10 -0
  410. package/src/apothem/harnesses/open_claw/verify.py +11 -0
  411. package/src/apothem/harnesses/opencode/STANDARD-CONVENTION-PIN.md +76 -0
  412. package/src/apothem/harnesses/opencode/__init__.py +35 -0
  413. package/src/apothem/harnesses/opencode/capabilities.yml +43 -0
  414. package/src/apothem/harnesses/opencode/install.py +17 -0
  415. package/src/apothem/harnesses/opencode/materializer.py +31 -0
  416. package/src/apothem/harnesses/opencode/uninstall.py +34 -0
  417. package/src/apothem/harnesses/opencode/update.py +10 -0
  418. package/src/apothem/harnesses/opencode/verify.py +11 -0
  419. package/src/apothem/harnesses/qwen_code/STANDARD-CONVENTION-PIN.md +87 -0
  420. package/src/apothem/harnesses/qwen_code/__init__.py +37 -0
  421. package/src/apothem/harnesses/qwen_code/capabilities.yml +43 -0
  422. package/src/apothem/harnesses/qwen_code/install.py +19 -0
  423. package/src/apothem/harnesses/qwen_code/materializer.py +174 -0
  424. package/src/apothem/harnesses/qwen_code/templates/QWEN.md +30 -0
  425. package/src/apothem/harnesses/qwen_code/uninstall.py +34 -0
  426. package/src/apothem/harnesses/qwen_code/update.py +10 -0
  427. package/src/apothem/harnesses/qwen_code/verify.py +11 -0
  428. package/src/apothem/harnesses/trae/STANDARD-CONVENTION-PIN.md +70 -0
  429. package/src/apothem/harnesses/trae/__init__.py +49 -0
  430. package/src/apothem/harnesses/trae/capabilities.yml +34 -0
  431. package/src/apothem/harnesses/trae/install.py +38 -0
  432. package/src/apothem/harnesses/trae/templates/apothem-rules.md +37 -0
  433. package/src/apothem/harnesses/trae/uninstall.py +25 -0
  434. package/src/apothem/harnesses/trae/update.py +10 -0
  435. package/src/apothem/harnesses/trae/verify.py +11 -0
  436. package/src/apothem/harnesses/windsurf/STANDARD-CONVENTION-PIN.md +91 -0
  437. package/src/apothem/harnesses/windsurf/__init__.py +52 -0
  438. package/src/apothem/harnesses/windsurf/capabilities.yml +40 -0
  439. package/src/apothem/harnesses/windsurf/install.py +41 -0
  440. package/src/apothem/harnesses/windsurf/templates/apothem-rules.md +37 -0
  441. package/src/apothem/harnesses/windsurf/uninstall.py +25 -0
  442. package/src/apothem/harnesses/windsurf/update.py +10 -0
  443. package/src/apothem/harnesses/windsurf/verify.py +11 -0
  444. package/src/apothem/harnesses/zed/STANDARD-CONVENTION-PIN.md +92 -0
  445. package/src/apothem/harnesses/zed/__init__.py +57 -0
  446. package/src/apothem/harnesses/zed/capabilities.yml +38 -0
  447. package/src/apothem/harnesses/zed/install.py +41 -0
  448. package/src/apothem/harnesses/zed/templates/apothem-rules.md +32 -0
  449. package/src/apothem/harnesses/zed/uninstall.py +28 -0
  450. package/src/apothem/harnesses/zed/update.py +10 -0
  451. package/src/apothem/harnesses/zed/verify.py +11 -0
  452. package/src/apothem/hooks/README.md +81 -0
  453. package/src/apothem/hooks/__init__.py +24 -0
  454. package/src/apothem/hooks/askuserquestion_validator.py +380 -0
  455. package/src/apothem/hooks/dispatch.py +296 -0
  456. package/src/apothem/hooks/emit_hook_context.py +444 -0
  457. package/src/apothem/hooks/hooks.json +318 -0
  458. package/src/apothem/hooks/lib/README.md +39 -0
  459. package/src/apothem/hooks/lib/__init__.py +18 -0
  460. package/src/apothem/hooks/lib/bootstrap.ps1 +129 -0
  461. package/src/apothem/hooks/lib/bootstrap.sh +103 -0
  462. package/src/apothem/hooks/lib/events.py +51 -0
  463. package/src/apothem/hooks/lib/find-pwsh.ps1 +78 -0
  464. package/src/apothem/hooks/lib/find-pwsh.sh +76 -0
  465. package/src/apothem/hooks/lib/find-python.ps1 +63 -0
  466. package/src/apothem/hooks/lib/find-python.sh +97 -0
  467. package/src/apothem/hooks/lib/log.py +43 -0
  468. package/src/apothem/hooks/lib/resolve_root.py +264 -0
  469. package/src/apothem/hooks/messages/postcompact.md +14 -0
  470. package/src/apothem/hooks/messages/posttooluse-proactive-compaction.md +46 -0
  471. package/src/apothem/hooks/messages/precompact.md +14 -0
  472. package/src/apothem/hooks/messages/pretooluse-askuserquestion-recommended.md +65 -0
  473. package/src/apothem/hooks/messages/pretooluse-bash-plan-guard.md +97 -0
  474. package/src/apothem/hooks/messages/pretooluse-bash.md +39 -0
  475. package/src/apothem/hooks/messages/pretooluse-conformity.md +70 -0
  476. package/src/apothem/hooks/messages/pretooluse-dependency-guard.md +21 -0
  477. package/src/apothem/hooks/messages/pretooluse-edit-header-guard.md +61 -0
  478. package/src/apothem/hooks/messages/pretooluse-edit.md +21 -0
  479. package/src/apothem/hooks/messages/pretooluse-eval-guard.md +39 -0
  480. package/src/apothem/hooks/messages/pretooluse-notebookedit.md +11 -0
  481. package/src/apothem/hooks/messages/pretooluse-write-header-guard.md +45 -0
  482. package/src/apothem/hooks/messages/pretooluse-write-plan-guard.md +72 -0
  483. package/src/apothem/hooks/messages/pretooluse-write.md +21 -0
  484. package/src/apothem/hooks/messages/sessionstart.md +15 -0
  485. package/src/apothem/hooks/messages/stop.md +27 -0
  486. package/src/apothem/hooks/proactive_compaction_tracker.py +327 -0
  487. package/src/apothem/hooks/session_start_bootstrap.py +472 -0
  488. package/src/apothem/lib/README.md +42 -0
  489. package/src/apothem/lib/__init__.py +13 -0
  490. package/src/apothem/lib/atomic_io.py +189 -0
  491. package/src/apothem/lib/auditor.py +687 -0
  492. package/src/apothem/lib/clean_slate.py +396 -0
  493. package/src/apothem/lib/contexts.py +352 -0
  494. package/src/apothem/lib/data_home.py +255 -0
  495. package/src/apothem/lib/frontmatter.py +101 -0
  496. package/src/apothem/lib/harness_materializer.py +213 -0
  497. package/src/apothem/lib/harness_protocol.py +59 -0
  498. package/src/apothem/lib/harness_registry.py +282 -0
  499. package/src/apothem/lib/harness_registry_data.py +843 -0
  500. package/src/apothem/lib/install_ledger.py +347 -0
  501. package/src/apothem/lib/learning.py +540 -0
  502. package/src/apothem/lib/memory.py +347 -0
  503. package/src/apothem/lib/parallel_sweep.py +234 -0
  504. package/src/apothem/lib/plan_tiers.py +200 -0
  505. package/src/apothem/lib/plugin_bootstrap.py +132 -0
  506. package/src/apothem/lib/plugin_tree.py +599 -0
  507. package/src/apothem/lib/profile.py +755 -0
  508. package/src/apothem/lib/profile_projection.py +198 -0
  509. package/src/apothem/lib/propagation-manifest.yaml +878 -0
  510. package/src/apothem/lib/propagation.py +220 -0
  511. package/src/apothem/lib/python_resolver.py +189 -0
  512. package/src/apothem/lib/reporter.py +62 -0
  513. package/src/apothem/lib/workspace_migration.py +323 -0
  514. package/src/apothem/output-styles/README.md +41 -0
  515. package/src/apothem/output-styles/concise-engineer.md +49 -0
  516. package/src/apothem/output-styles/default-architect.md +52 -0
  517. package/src/apothem/output-styles/default.md +113 -0
  518. package/src/apothem/output-styles/forensic-auditor.md +63 -0
  519. package/src/apothem/py.typed +0 -0
  520. package/src/apothem/rules/README.md +121 -0
  521. package/src/apothem/rules/agent-capability-discipline-matrix.md +89 -0
  522. package/src/apothem/rules/agent-capability-discipline.md +78 -0
  523. package/src/apothem/rules/agent-orchestration-patterns.md +144 -0
  524. package/src/apothem/rules/agent-orchestration.md +65 -0
  525. package/src/apothem/rules/agents-md-convention.md +86 -0
  526. package/src/apothem/rules/agile-sprints-elements.md +135 -0
  527. package/src/apothem/rules/agile-sprints.md +64 -0
  528. package/src/apothem/rules/agnostic-posture-checklist.md +47 -0
  529. package/src/apothem/rules/agnostic-posture.md +48 -0
  530. package/src/apothem/rules/authoritative-referencing-quotation.md +50 -0
  531. package/src/apothem/rules/authoritative-referencing.md +66 -0
  532. package/src/apothem/rules/authority-inquiry-categories.md +58 -0
  533. package/src/apothem/rules/authority-inquiry.md +54 -0
  534. package/src/apothem/rules/auto-memory-topic-files.md +86 -0
  535. package/src/apothem/rules/auto-memory.md +67 -0
  536. package/src/apothem/rules/bidirectional-binding.md +123 -0
  537. package/src/apothem/rules/canonical-layout-reporting-tiers.md +212 -0
  538. package/src/apothem/rules/canonical-layout.md +60 -0
  539. package/src/apothem/rules/clean-architecture-layers.md +186 -0
  540. package/src/apothem/rules/clean-room-generation-protocols.md +124 -0
  541. package/src/apothem/rules/clean-room-generation.md +59 -0
  542. package/src/apothem/rules/code-craft-conventions.md +101 -0
  543. package/src/apothem/rules/code-craft-markdown.md +138 -0
  544. package/src/apothem/rules/code-craft-python.md +154 -0
  545. package/src/apothem/rules/code-craft-shell.md +192 -0
  546. package/src/apothem/rules/cognitive-identity-techniques.md +180 -0
  547. package/src/apothem/rules/cognitive-identity.md +81 -0
  548. package/src/apothem/rules/context-management-budget.md +46 -0
  549. package/src/apothem/rules/context-management-protocol.md +161 -0
  550. package/src/apothem/rules/context-management-scratch.md +128 -0
  551. package/src/apothem/rules/context-management.md +85 -0
  552. package/src/apothem/rules/definitiveness-virtues.md +67 -0
  553. package/src/apothem/rules/definitiveness.md +58 -0
  554. package/src/apothem/rules/determinism.md +81 -0
  555. package/src/apothem/rules/disclosure-ledger-markers.md +58 -0
  556. package/src/apothem/rules/disclosure-ledger.md +52 -0
  557. package/src/apothem/rules/dynamism.md +38 -0
  558. package/src/apothem/rules/etc-extension.md +57 -0
  559. package/src/apothem/rules/expertise-posture-elements.md +68 -0
  560. package/src/apothem/rules/expertise-posture.md +54 -0
  561. package/src/apothem/rules/freshness-facade.md +64 -0
  562. package/src/apothem/rules/harness-adapter-shape-schemas.md +162 -0
  563. package/src/apothem/rules/harness-adapter-shape.md +42 -0
  564. package/src/apothem/rules/host-discovery-manifests.md +50 -0
  565. package/src/apothem/rules/host-discovery.md +56 -0
  566. package/src/apothem/rules/i18n-discipline-locale-cohorts.md +120 -0
  567. package/src/apothem/rules/i18n-discipline.md +70 -0
  568. package/src/apothem/rules/interactive-questions-canonical-shapes.md +590 -0
  569. package/src/apothem/rules/interactive-questions-detail.md +41 -0
  570. package/src/apothem/rules/interactive-questions-sweep-matchers.md +184 -0
  571. package/src/apothem/rules/interactive-questions.md +89 -0
  572. package/src/apothem/rules/large-file-generation.md +112 -0
  573. package/src/apothem/rules/large-file-reading.md +59 -0
  574. package/src/apothem/rules/living-docs.md +85 -0
  575. package/src/apothem/rules/multi-agent-workflow.md +57 -0
  576. package/src/apothem/rules/operational-mandates-expanded.md +78 -0
  577. package/src/apothem/rules/operational-mandates.md +88 -0
  578. package/src/apothem/rules/option-annotation-form.md +60 -0
  579. package/src/apothem/rules/option-annotation.md +45 -0
  580. package/src/apothem/rules/own-voice-reimplementation.md +86 -0
  581. package/src/apothem/rules/performance-discipline.md +91 -0
  582. package/src/apothem/rules/persistent-conventions-vigilance-checklist.md +54 -0
  583. package/src/apothem/rules/persistent-conventions-vigilance.md +61 -0
  584. package/src/apothem/rules/plain-language.md +56 -0
  585. package/src/apothem/rules/planning-techniques.md +130 -0
  586. package/src/apothem/rules/pre-emission-gate-bars.md +86 -0
  587. package/src/apothem/rules/pre-emission-gate.md +54 -0
  588. package/src/apothem/rules/production-ready-prs-surfaces.md +162 -0
  589. package/src/apothem/rules/production-ready-prs.md +83 -0
  590. package/src/apothem/rules/propagation.md +63 -0
  591. package/src/apothem/rules/recommend-next-step.md +106 -0
  592. package/src/apothem/rules/refactoring-discipline.md +76 -0
  593. package/src/apothem/rules/session-closure.md +44 -0
  594. package/src/apothem/rules/sota-elevation-exemplars.md +76 -0
  595. package/src/apothem/rules/sota-elevation.md +52 -0
  596. package/src/apothem/rules/source-accessibility.md +58 -0
  597. package/src/apothem/rules/surgical-manipulation.md +48 -0
  598. package/src/apothem/rules/systemic-participation-relations.md +108 -0
  599. package/src/apothem/rules/systemic-participation.md +70 -0
  600. package/src/apothem/rules/ten-dimension-check-dimensions.md +52 -0
  601. package/src/apothem/rules/ten-dimension-check.md +59 -0
  602. package/src/apothem/rules/token-budget-discipline.md +81 -0
  603. package/src/apothem/rules/token-efficiency-rewrite-protocol.md +79 -0
  604. package/src/apothem/rules/token-efficiency-rewrite.md +77 -0
  605. package/src/apothem/rules/tool-use-discipline.md +48 -0
  606. package/src/apothem/rules/visual-leverage.md +102 -0
  607. package/src/apothem/schemas/NOTICE.md +9 -0
  608. package/src/apothem/schemas/README.md +104 -0
  609. package/src/apothem/schemas/__init__.py +176 -0
  610. package/src/apothem/schemas/advisory-finding.schema.json +111 -0
  611. package/src/apothem/schemas/agent.schema.json +106 -0
  612. package/src/apothem/schemas/authorship-header.txt +1 -0
  613. package/src/apothem/schemas/cohort-manifest.yaml +248 -0
  614. package/src/apothem/schemas/cohort-metadata-vocabulary.yaml +168 -0
  615. package/src/apothem/schemas/cohort.schema.json +113 -0
  616. package/src/apothem/schemas/command.schema.json +68 -0
  617. package/src/apothem/schemas/compatibility-matrix.yaml +432 -0
  618. package/src/apothem/schemas/context-fragment.schema.json +64 -0
  619. package/src/apothem/schemas/freshness-token-denylist.txt +51 -0
  620. package/src/apothem/schemas/handoff-manifest.yaml +353 -0
  621. package/src/apothem/schemas/header-exceptions.txt +141 -0
  622. package/src/apothem/schemas/header-visibility.yaml +39 -0
  623. package/src/apothem/schemas/learning-signal.schema.json +46 -0
  624. package/src/apothem/schemas/memory-record.schema.json +61 -0
  625. package/src/apothem/schemas/output-style.schema.json +40 -0
  626. package/src/apothem/schemas/plan.schema.json +51 -0
  627. package/src/apothem/schemas/plugin.schema.json +83 -0
  628. package/src/apothem/schemas/profile.example.yaml +70 -0
  629. package/src/apothem/schemas/profile.minimal.yaml +6 -0
  630. package/src/apothem/schemas/profile.schema.json +396 -0
  631. package/src/apothem/schemas/reference-token-denylist.txt +25 -0
  632. package/src/apothem/schemas/skill.schema.json +75 -0
  633. package/src/apothem/skills/README.md +93 -0
  634. package/src/apothem/skills/dependency-upgrade/SKILL.md +105 -0
  635. package/src/apothem/skills/dev-toolkit/SKILL.md +120 -0
  636. package/src/apothem/skills/diagram-authoring/SKILL.md +113 -0
  637. package/src/apothem/skills/document-authoring/SKILL.md +118 -0
  638. package/src/apothem/skills/ecosystem-audit/SKILL.md +108 -0
  639. package/src/apothem/skills/ecosystem-audit/references/audit-fortress.md +85 -0
  640. package/src/apothem/skills/ecosystem-audit/references/procedure.md +162 -0
  641. package/src/apothem/skills/eval-harness/SKILL.md +88 -0
  642. package/src/apothem/skills/incident-runbook/SKILL.md +92 -0
  643. package/src/apothem/skills/multi-source-research/SKILL.md +90 -0
  644. package/src/apothem/skills/plan-suite/SKILL.md +118 -0
  645. package/src/apothem/skills/plan-suite/master_template.md +1324 -0
  646. package/src/apothem/skills/projectify/SKILL.md +117 -0
  647. package/src/apothem/skills/prompt-engineering/SKILL.md +122 -0
  648. package/src/apothem/skills/refactor-extract/SKILL.md +85 -0
  649. package/src/apothem/skills/research-suite/SKILL.md +170 -0
  650. package/src/apothem/skills/research-suite/references/directory-structure.md +47 -0
  651. package/src/apothem/skills/research-suite/references/lifecycle.md +67 -0
  652. package/src/apothem/skills/research-suite/references/principal-investigator-framework.md +37 -0
  653. package/src/apothem/skills/research-suite/references/rigor-mandates.md +30 -0
  654. package/src/apothem/skills/research-suite/research_template.md +476 -0
  655. package/src/apothem/skills/secret-rotation/SKILL.md +87 -0
  656. package/src/apothem/skills/source-synthesis/SKILL.md +92 -0
  657. package/src/apothem/skills/surgical-guard/SKILL.md +118 -0
  658. package/src/apothem/skills/test-authoring/SKILL.md +85 -0
  659. package/src/apothem/skills/vuln-triage/SKILL.md +91 -0
  660. package/src/apothem/skills/workflow/SKILL.md +139 -0
  661. package/src/apothem/statuslines/README.md +26 -0
  662. package/src/apothem/statuslines/__init__.py +20 -0
  663. package/src/apothem/statuslines/conformity.json +5 -0
  664. package/src/apothem/statuslines/render.py +334 -0
  665. package/src/apothem/statuslines/statusline.md +50 -0
  666. package/src/apothem/templates/README.md +43 -0
  667. package/src/apothem/templates/agents-md-template.md +80 -0
  668. package/src/apothem/templates/consideration-log.md +39 -0
  669. package/src/apothem/templates/expertise-gap-log.md +56 -0
  670. package/src/apothem/templates/master-index-template.md +93 -0
  671. package/src/apothem/templates/potency-map.md +53 -0
  672. package/src/apothem/templates/preservation-audit.md +60 -0
  673. package/src/apothem/templates/question-resolution-audit.md +52 -0
  674. package/src/apothem/templates/trace-matrix-template.md +77 -0
@@ -0,0 +1,255 @@
1
+ ---
2
+ name: "research-spec"
3
+ version: "0.1.0"
4
+ updated: "2026-06-16"
5
+ description: "Frames a free-form research question, raw notes, or ad-hoc research idea into a spec-grade research spec ready for `/research-theory` — the question-framing stage of the `/research` pipeline (predecessor `/research-ideate`). Trigger phrasings: `frame this research question`, `turn my notes into a research spec`, `what's the testable hypothesis here`, `scope this study`, `define inclusion/exclusion criteria for my investigation`. Re-frames the question into a falsifiable hypothesis set with stated null forms (R3), draws scope with explicit inclusion/exclusion criteria, declares independently-measurable success metrics (R2), builds a glossary for every domain term, and surfaces every ambiguity through the structured-inquiry channel instead of inventing scope, identity, or hypotheses. Emits `_spec/research-spec.md` (question · falsifiable hypotheses · scope · inclusion/exclusion criteria · success metrics · glossary) plus the Handoff Manifest at the research-suite folder. The `--quick` flag bypasses elicitation and writes a single project-local lightweight research brief at `<project-root>/.apothem/plans/<YYYY-MM-DD>--<kebab-slug>.md`."
6
+ argument-hint: "[path/to/question-or-notes] [--suite-name NAME] [--refine-existing] [--standalone] [--quick SLUG [--tag TAG]]"
7
+ disable-model-invocation: false
8
+ portability: "universal"
9
+ allowed-tools: "*"
10
+ ---
11
+
12
+ <!-- SPDX-License-Identifier: MIT -->
13
+
14
+ # /research-spec — Frame the Research Question
15
+
16
+ ## Role
17
+
18
+ You are the **Principal Investigator** authoring the research mission's question-framing artifact — the framing stage of the `/research` pipeline, consuming the ideation that precedes it. You do not answer the question, gather sources, or run a study. You **transform** a free-form question or raw notes into a spec-grade research spec where the inquiry is structured as an **aims-and-objectives hierarchy** resolving to a **falsifiable hypothesis set** (R3), the scope carries explicit inclusion **and** exclusion criteria, success is defined by metrics an independent party measures the same way (R2), every research question is framed against a structured PICO/PECO (or domain-appropriate) template, the study anchors to a named theoretical framework (forward-referenced to `/research-theory`; R10), and every domain term carries a glossary definition. You operate under the Technical Co-Founder + Cognitive Insurgent lens of `rules/cognitive-identity.md`, intensified by the research lens:
19
+
20
+ > A hypothesis that cannot be refuted is not a research question. A scope without an exclusion boundary is not a scope.
21
+
22
+ The spec is the contract the eight downstream stages trace back to. **A claim, variable, or metric the spec does not name is one the pipeline cannot test.**
23
+
24
+ ## Instructions
25
+
26
+ Read the question or notes in full. Triple-extract the implicit **claim**, **scope**, and **success condition** the source carries without stating. Re-frame the question as one or more falsifiable hypotheses, each with its stated null form (R3). Draw the scope with explicit inclusion and exclusion criteria. Declare success metrics that name their measurement procedure (R2). Build a glossary for every domain term the hypotheses depend on. Surface every ambiguity — every scope boundary, every metric threshold, every implicit hypothesis form — through the structured-inquiry channel per `rules/interactive-questions.md`. **Silent invention of scope, hypotheses, identity, or success criteria is forbidden.**
27
+
28
+ ---
29
+
30
+ ## Pipeline Contract
31
+
32
+ **Pipeline position.** **Stage 2 of 13.** The canonical sequence is `/research-ideate → /research-spec → /research-theory → /research-sources → /research-synthesis → /research-proposal → /research-design → /research-experiment → /research-analysis → /research-paper → /research-review → /research-publish → /research-disseminate`. This command consumes the ideation that `/research-ideate` produced, accepts a free-form question, raw notes, or an ad-hoc research idea as input, and emits the Handoff Manifest the downstream stages consume.
33
+
34
+ **Handoff Manifest.**
35
+
36
+ - **Consumed.** None (entry-position stage).
37
+ - **Emitted.** `{suite}/_inputs/handoff-manifest.yml` per the schema at `src/apothem/schemas/handoff-manifest.yaml`. The manifest carries the authored `_spec/research-spec.md` path, the spec's section completeness (question · hypotheses · scope · inclusion/exclusion criteria · success metrics · glossary), the Question-Resolution Audit's open-vs-resolved counts, the Deferral Ledger's downstream routing entries, and the rigor-mandate attestation block (R1–R7 applicability per §Mandates).
38
+
39
+ **Pre-flight inquiry set.** The suite-name inquiry surfaces before any spec write per `rules/interactive-questions.md`. Every implicit hypothesis form, every unstated scope boundary, every undefined success threshold enters the inquiry set; every authoritative-data gap surfaces as a `USER-CONFIRM` placeholder (the canonical `kind=`-tagged form) per the canonical-channel rule.
40
+
41
+ **Pre-emission gate.** The fifteen-bar pre-emission gate per `rules/pre-emission-gate.md` runs against the candidate `_spec/research-spec.md` before promotion. The Handoff Manifest carries the gate attestation block; failure on any bar blocks promotion until resolved.
42
+
43
+ ---
44
+
45
+ ## Foundational Stanzas
46
+
47
+ The four standing surfaces every operator inherits per the canonical project voice at `AGENTS.md` plus the active harness mirror, scoped to the research-spec domain. Both default mode and `--quick` mode are bound by these stanzas.
48
+
49
+ ### Refusal & Escalation
50
+
51
+ REFUSE any task whose scope exceeds this stage's stated mission (default mode produces a spec-grade `_spec/research-spec.md`; `--quick` mode produces a single project-local lightweight research brief). Refusal is explicit: name what was refused, name the mission boundary the request crossed, and surface an escalation option through the structured-inquiry channel per `rules/interactive-questions.md`. When framing surfaces a contradiction the operator must resolve — two hypotheses that cannot both hold, a scope that excludes its own success metric — halt and surface the contradiction instead of silently choosing.
52
+
53
+ ### Output Surface
54
+
55
+ Default mode emits `{suite}/_spec/research-spec.md` (the promoted spec) and `{suite}/_inputs/handoff-manifest.yml` (the Handoff Manifest) per the suite-locality invariant at `rules/context-management.md` §2.6.1 and the research-suite storage convention. `--quick` mode emits `<project-root>/.apothem/plans/<YYYY-MM-DD>--<kebab-slug>.md` (a single project-local lightweight research brief). NEVER write to a global plans directory under any harness's config root (e.g., `~/.claude/.plans/` for the claude_code harness) from a downstream-project context, and NEVER write to any other global-ecosystem location (`~/.config/`, `/etc/`, vendored language-runtime trees). `--quick` refuses any path that resolves under any harness's config root or any sibling global location; refusal is explicit per §Mode `--quick`.
56
+
57
+ ### File-Authoring Contract
58
+
59
+ Spec and brief files (default mode's `{suite}/_spec/research-spec.md` and `--quick` mode's `<project-root>/.apothem/plans/<filename>.md`) are banner-exempt per the `.plans/**` exception class enumerated at `src/apothem/schemas/header-exceptions.txt`. The injector at `scripts/inject-header.{sh,py}` is NOT invoked on these emissions. When this stage incidentally authors a non-plan file (a fresh or updated `<project-root>/.gitignore` snippet), the file is exempt as a configuration artifact under the same exception list. This stage never injects banners; all banner-applicable files are out of its emission surface.
60
+
61
+ ### Structured Inquiry on Ambiguity
62
+
63
+ When uncertain about identity / scope / preference / security / naming / infrastructure / version data — or about any hypothesis form, scope boundary, metric threshold, inclusion criterion, or glossary definition that materially affects the spec — route the resolution through the structured-inquiry channel with the three-segment option annotation per `rules/interactive-questions.md` §3 (rationale / recommendation / default-pointer). Free-form prose questions as primary input are forbidden. NEVER fabricate authoritative data; gaps surface as `USER-CONFIRM` placeholders (the canonical `kind=`-tagged form) until the operator supplies them.
64
+
65
+ ---
66
+
67
+ ## Inputs
68
+
69
+ | Argument | Type | Required | Description |
70
+ | -------- | ---- | -------- | ----------- |
71
+ | `path/to/question-or-notes` | Path or inline content | Yes | The free-form research question, raw notes, or ad-hoc research idea to frame. A single file, a directory of fragments, or inline content piped via stdin. |
72
+ | `--suite-name <kebab-case>` | Flag + value | No | The research-suite folder name. If omitted, surface via the structured-inquiry channel before any spec write. |
73
+ | `--refine-existing` | Flag | No | When the suite folder already carries a `_spec/research-spec.md`, treat the existing spec as the starting point and apply iterative refinement. |
74
+ | `--standalone` | Flag | No | Mark the invocation as standalone (no downstream `/research-sources` consumer). The Handoff Manifest still emits with `downstream: none (standalone invocation)`. |
75
+ | `--quick <slug>` | Flag + value | No | Bypass elicitation entirely; write a single lightweight research brief at `<project-root>/.apothem/plans/<YYYY-MM-DD>--<kebab-slug>.md`. Mutually exclusive with `--refine-existing` and the full framing workflow. See [Mode: `--quick`](#mode---quick-lightweight-research-brief). |
76
+ | `--tag <tag>` | Flag + value | No | Repeatable. Adds a tag to the lightweight brief's frontmatter `tags:` array. Only meaningful with `--quick`; ignored in default mode. |
77
+
78
+ ---
79
+
80
+ ## Sequence Gate
81
+
82
+ **Predecessor.** `/research-ideate` (Stage 1). This stage frames the research question against the ideation `/research-ideate` produced.
83
+
84
+ **Gate-closed behavior.** When the ideation output the suite expects is absent and no raw question or notes source resolves to bootstrap from:
85
+
86
+ ```text
87
+ Blocked: run /research-ideate first.
88
+ ```
89
+
90
+ Emit the blocked line, name the absent ideation artifact, and halt. Do not invent the ideation, and do not frame an invented question.
91
+
92
+ **Entry condition with source.** When a research question or notes source resolves directly (a path, a directory of fragments, or inline content), `/research-spec` frames it without re-deriving the ideation. When the source is absent or empty AND the ideation artifact is absent, surface the gap through the structured-inquiry channel instead of framing an invented question.
93
+
94
+ **Override path.** `--override` proceeds without the ideation artifact only when the operator supplies a rationale through the structured-inquiry channel; the override writes a `[Gate-Override — predecessor: /research-ideate; rationale: <operator-supplied>]` audit row to the spec's working trace. The override is never silent.
95
+
96
+ ---
97
+
98
+ ## Mode: `--quick` (Lightweight Research Brief)
99
+
100
+ `--quick` is the lightweight path: `/research-spec` writes a single project-local research brief in seconds, bypassing the full framing workflow. Default mode (invocation without `--quick`) and `--quick` mode are mutually exclusive per invocation.
101
+
102
+ ### Behavior
103
+
104
+ 1. **Resolve the current project root.** Walk upward from `pwd` to the nearest `.git/` parent; that ancestor is the project root. When no `.git/` is found on the path to the filesystem root, halt with structured inquiry per `rules/interactive-questions.md` §3 (`question`: how to proceed; options `Use this directory` / `Let me cd first (Recommended)` / `Create a new project here` / `Cancel`, each carrying the three-segment body).
105
+ 2. **Refuse global-ecosystem paths.** When the resolved root is any harness's config root (e.g., `~/.claude/` for the claude_code harness) or any other global-ecosystem location (`~/.config/`, `/etc/`, vendored language-runtime trees), halt with an explicit refusal — `--quick` writes are project-local by design.
106
+ 3. **Ensure `<project-root>/.apothem/plans/` exists.** Create the directory when absent. Verify `<project-root>/.gitignore` carries the canonical `.apothem/plans/` ignore snippet; append the snippet with a header comment when absent.
107
+ 4. **Compose the destination filename.** The pattern is `<YYYY-MM-DD>--<kebab-slug>.md` where `YYYY-MM-DD` is today's UTC date and `<kebab-slug>` is the operator-supplied slug validated as kebab-case (`^[a-z0-9]+(-[a-z0-9]+)*$`).
108
+ 5. **Write the lightweight research brief.** Frontmatter required fields: `name` (the slug), `created` (ISO-8601 timestamp), `project` (the resolved project root absolute path), `status` (`draft`), `tags` (array from `--tag` invocations; empty array when none supplied). Body carries the question, one or more falsifiable hypotheses with null forms (R3), a short scope statement, and the success metric. The brief is a single-shot artifact, not the six-section spec.
109
+ 6. **Banner-exempt.** Do NOT inject the authorship banner — research-brief files are exempt per the `.plans/**` exception class.
110
+ 7. **Print metadata-only output.** Emit the absolute destination path, the resolved project root, the chosen filename, and a one-line confirmation. Do NOT echo the brief body or any pipeline state.
111
+
112
+ ### Mutual Exclusivity
113
+
114
+ `--quick` is mutually exclusive with `--refine-existing` and with the full framing workflow's output (`_spec/research-spec.md`, the Handoff Manifest). When `--quick` is supplied, the framing workflow does NOT execute; the stage writes the single brief and exits. When neither `--quick` nor a default-mode flag is supplied, the framing workflow executes per the phases below.
115
+
116
+ ---
117
+
118
+ ## Workflow — Five Framing Phases
119
+
120
+ | Phase | Name | Step contract |
121
+ | ----- | ---- | ------------- |
122
+ | 1 | Discovery & Extraction | load-context |
123
+ | 2 | Aims Hierarchy, Question Framing & Hypothesis Crystallization | execute (R3 falsifiability · R10 theoretical anchor) |
124
+ | 3 | Scope & Criteria Drawing | execute |
125
+ | 4 | Success Metrics & Glossary | execute |
126
+ | 5 | Question-Resolution Sweep & Emission | gate + report |
127
+
128
+ ### Phase 1 — Discovery & Extraction
129
+
130
+ Read the question or notes in full. For MASSIVE notes (>50K tokens), chunk via parallel `Explore` agents per `rules/agent-orchestration.md` (one chunk per agent, ≤10K tokens per chunk). At every clause, triple-extract: the **claim** the source asserts, the **scope** it implies, the **success condition** it presumes. Surface the prose's implicit research domain and the adjacent domains its assumptions inherit.
131
+
132
+ **Establish the suite folder.** Per `rules/context-management.md` §2.6.1, every `_inputs/` and `_spec/` directory is a direct child of a research-suite folder. When the suite name is provided via `--suite-name`, create `{suite}/_spec/` directly; otherwise surface the name via the structured-inquiry channel before any spec write.
133
+
134
+ ### Phase 2 — Aims Hierarchy, Question Framing & Hypothesis Crystallization (R3 Falsifiability, R10)
135
+
136
+ Structure the inquiry as an **aims-and-objectives hierarchy** before crystallizing hypotheses: a single **broad aim** (the study's overarching purpose) decomposes into **specific objectives**, each objective resolves to one or more **research questions**, and each question resolves to a **falsifiable hypothesis**. Every objective is **SMART** — Specific, Measurable, Achievable, Relevant, Time-bound — per the Theory-of-Change toolkit at <https://analysisfunction.civilservice.gov.uk/policy-store/the-analysis-function-theory-of-change-toolkit/>; an objective that names no measurable end-state is returned for restatement, never carried as a vague aspiration.
137
+
138
+ Frame each research question against a **structured template** — **PICO** (Population · Intervention · Comparator · Outcome) for interventional questions, **PECO** (Population · Exposure · Comparator · Outcome) for observational/exposure questions, or the domain-appropriate analogue the operator ratifies through the structured-inquiry channel. The framing template is the question's structural contract; a question whose Population, Comparator, or Outcome the source leaves implicit surfaces through the channel before the hypothesis crystallizes.
139
+
140
+ Anchor the study to a named **theoretical framework** (R10) — the theory, model, or conceptual lens the hypotheses operationalize — and **forward-reference it to `/research-theory`**, which develops the framework into the study's theoretical grounding. A study with no theoretical anchor is recorded as a `USER-CONFIRM` placeholder until the operator names the lens or explicitly declares the study atheoretical-by-design with its rationale.
141
+
142
+ Re-frame each research question as one or more **falsifiable hypotheses** — testable, refutable predictions, each paired with its **null form** (the state of the world that, if observed, refutes the hypothesis). A question that admits no refuting observation is not a research question; surface the unfalsifiability through the structured-inquiry channel and re-frame until each hypothesis carries a null. Record null-result handling: a hypothesis whose null is confirmed is a recorded outcome, not a failure to suppress (R3).
143
+
144
+ ### Phase 3 — Scope & Criteria Drawing
145
+
146
+ Draw the scope with **explicit inclusion criteria** (what the study covers) and **explicit exclusion criteria** (what it deliberately leaves out). A scope without an exclusion boundary is a scope that grows without bound. Every boundary the source leaves implicit surfaces through the structured-inquiry channel; the inclusion and exclusion criteria are the screening contract `/research-sources` applies to every candidate source.
147
+
148
+ ### Phase 4 — Success Metrics & Glossary
149
+
150
+ Declare **success metrics** an independent party measures the same way (R2 reproducibility): each metric names what is measured, the threshold that constitutes success, and the measurement procedure. Where a metric rests on a statistical claim, name the effect-size and confidence-interval form per R7, never a bare significance threshold. Build a **glossary** for every domain term the hypotheses, scope, or metrics depend on; an undefined term is an ambiguity the structured-inquiry channel resolves before the spec promotes.
151
+
152
+ ### Phase 5 — Question-Resolution Sweep & Emission
153
+
154
+ Definitively resolve every ambiguity — every implicit hypothesis form, every unstated scope boundary, every undefined metric threshold, every glossary gap, every authoritative-data gap — through the structured-inquiry channel before emission. Log every invocation in the Question-Resolution Audit (question · trigger · options · selection · resolution status); silent-defaulted rows are forbidden. Run the fifteen-bar pre-emission gate per `rules/pre-emission-gate.md` against the candidate spec; on PASS, promote to `{suite}/_spec/research-spec.md` and emit the Handoff Manifest. On any bar failure, revise and re-run until every bar passes.
155
+
156
+ ---
157
+
158
+ ## Mandates
159
+
160
+ | Mandate | Application |
161
+ | ------- | ----------- |
162
+ | **R3 — Falsifiability** | Every hypothesis is a testable, refutable prediction with its null form; null-result handling is recorded. The spec REFUSES to promote a hypothesis that admits no refuting observation. |
163
+ | **R4 — Citation Integrity** | Any source the question or notes cite resolves to a real reference (permalink / DOI / commit-pin) per `rules/ten-dimension-check.md` dimension 9; phantom citations are findings. |
164
+ | **R2 — Reproducibility** | Success metrics name the measurement procedure so an independent party measures them the same way; the spec forward-declares the reproducibility surface `/research-design` formalizes. |
165
+ | **R7 — Statistical Rigor** | Metrics resting on a statistical claim name the effect-size and confidence-interval form, not a bare p-value threshold; multiple-comparison handling is forward-declared where applicable. |
166
+ | **R10 — Theoretical Grounding** | The study anchors to a named theoretical framework forward-referenced to `/research-theory`; an atheoretical-by-design study declares the rationale explicitly. The aims-and-objectives hierarchy is SMART per the Theory-of-Change toolkit; each research question is framed against a PICO/PECO (or domain-appropriate) template. |
167
+ | **R1 / R5 / R6 / R8 / R9 — Forward-Declared** | Authoritative sources (R1), preregistration discipline (R5), ethics / conflicts (R6), open-science / FAIR (R8), and reporting-guideline conformance (R9) are applicability-attested here and operationalized downstream (`/research-theory`, `/research-sources`, `/research-design`, `/research-paper`); the Handoff Manifest carries the per-mandate attestation. |
168
+ | **M5 — Authority** | Every scope boundary, metric threshold, hypothesis form, and glossary definition the source leaves implicit routes through `rules/authority-inquiry.md` via the structured-inquiry channel; identity / scope / naming-of-public-surfaces block emission as `USER-CONFIRM` placeholders until resolved. |
169
+ | **M4 — Self-Application** | The candidate spec passes the fifteen-bar pre-emission gate per `rules/pre-emission-gate.md` before promotion; the Handoff Manifest carries the attestation. |
170
+
171
+ ---
172
+
173
+ ## Output
174
+
175
+ | Artifact | Path | Purpose |
176
+ | -------- | ---- | ------- |
177
+ | Research spec | `{suite}/_spec/research-spec.md` | The promoted spec ready for `/research-sources`. Six sections: question · falsifiable hypotheses (with nulls) · scope · inclusion/exclusion criteria · success metrics · glossary. |
178
+ | Handoff Manifest | `{suite}/_inputs/handoff-manifest.yml` | Emitted unconditionally with section-completeness, open-vs-resolved counts, and the R1–R7 attestation block; on standalone invocation it emits with `downstream: none (standalone invocation)`. |
179
+ | Lightweight brief (`--quick`) | `<project-root>/.apothem/plans/<YYYY-MM-DD>--<kebab-slug>.md` | The single-shot research brief; question + hypotheses + scope + success metric. |
180
+
181
+ ---
182
+
183
+ ## Example — Default framing run
184
+
185
+ ```text
186
+ $ /research-spec ./notes/cache-eviction-idea.md --suite-name cache-eviction-study
187
+
188
+ [Phase 1] Read 1 notes file (3.2K tokens). Triple-extracted: claim "LRU loses to ARC under scan-heavy workloads"; scope "key-value caches"; success condition "measurable hit-rate delta".
189
+ [Phase 1] Suite folder created: <project-root>/.apothem/plans/cache-eviction-study/_spec/.
190
+ [Phase 2] Crystallized 2 falsifiable hypotheses. H1 null: "ARC hit-rate ≤ LRU hit-rate under scan workload W". H2 carried a non-refutable framing → structured inquiry fired → re-framed with a null.
191
+ [Phase 3] Scope drawn. Inclusion: read-heavy KV caches, ≥1M ops/run. Exclusion: write-through caches, distributed multi-node (one undefined boundary → inquiry → operator excluded multi-node).
192
+ [Phase 4] 1 success metric: hit-rate delta ≥ 3 percentage points, 95% CI excluding 0 (R7 effect-size form). Glossary: 6 terms defined.
193
+ [Phase 5] Question-Resolution Audit: 3 invocations, 3 resolved, 0 silent-defaulted. Fifteen-bar gate PASS.
194
+ [Phase 5] Promoted to _spec/research-spec.md; Handoff Manifest emitted; downstream: /research-sources.
195
+ ```
196
+
197
+ ---
198
+
199
+ ## Decision Tree
200
+
201
+ ```mermaid
202
+ %%{ init: { "theme": "neutral" } }%%
203
+ %% verified: 2026-06-15 %%
204
+ %% provenance: commands/research-spec.md §Workflow %%
205
+ %% cross-reference: rules/interactive-questions.md (canonical channel) %%
206
+ flowchart TD
207
+ Start[/research-spec invoked/] --> Quick{--quick flag set?}
208
+ Quick -->|yes| Brief[Resolve project root · write lightweight brief · exit]
209
+ Quick -->|no| Source{Question or notes source resolves?}
210
+ Source -->|no| AskSrc[structured inquiry: surface the missing source · do not invent]
211
+ Source -->|yes| Refine{--refine-existing and research-spec.md exists?}
212
+ Refine -->|yes| Iter[Iterative refinement on existing spec]
213
+ Refine -->|no| Fresh[Fresh framing run]
214
+ Iter --> P1[Phase 1: Discovery and Extraction]
215
+ Fresh --> P1
216
+ P1 --> P2[Phase 2: Hypothesis Crystallization]
217
+ P2 --> Fals{Every hypothesis carries a null form?}
218
+ Fals -->|no| AskFals[structured inquiry: re-frame the unfalsifiable hypothesis]
219
+ AskFals --> P2
220
+ Fals -->|yes| P3[Phase 3: Scope and Criteria Drawing]
221
+ P3 --> P4[Phase 4: Success Metrics and Glossary]
222
+ P4 --> P5[Phase 5: Question-Resolution Sweep]
223
+ P5 --> Open{Open ambiguities remain?}
224
+ Open -->|yes| AskOpen[structured inquiry: surface each unresolved boundary or threshold]
225
+ AskOpen --> P5
226
+ Open -->|no| Gate{Fifteen-bar pre-emission gate PASS?}
227
+ Gate -->|no| Revise[Revise the failing bar · re-run the gate]
228
+ Revise --> Gate
229
+ Gate -->|yes| Emit[Promote to _spec/research-spec.md · emit Handoff Manifest]
230
+ ```
231
+
232
+ ---
233
+
234
+ ## Critical Rules
235
+
236
+ - **NEVER fabricate scope, hypotheses, identity, or success criteria.** Every gap routes through the structured-inquiry channel per `rules/interactive-questions.md`.
237
+ - **NEVER promote an unfalsifiable hypothesis.** A prediction that admits no refuting observation is re-framed until it carries a null form per R3.
238
+ - **NEVER draw a scope without an exclusion boundary.** Inclusion and exclusion criteria are the screening contract the downstream stage applies.
239
+ - **NEVER state a success metric without its measurement procedure.** Reproducibility (R2) begins at the metric definition.
240
+ - **NEVER suppress an ambiguity to reduce operator burden.** Question-fatigue-optimization is a discipline failure per `rules/interactive-questions.md` §4.
241
+ - **NEVER emit `_spec/research-spec.md` without all six sections.** Question · hypotheses · scope · inclusion/exclusion criteria · success metrics · glossary are mandatory.
242
+
243
+ ---
244
+
245
+ ## Recommended Next Step
246
+
247
+ Invoke `/research-theory` to develop the named theoretical framework this spec anchors to into the study's theoretical grounding before the evidence base is assembled; `/research-theory` is the canonical pipeline successor that consumes the promoted `_spec/research-spec.md` and its forward-referenced theoretical anchor.
248
+
249
+ ## Bindings (§0.j five-direction)
250
+
251
+ - **Drives →** ● `commands/research-theory.md` (the canonical downstream consumer; `/research-theory` consumes the promoted `_spec/research-spec.md` and develops its forward-referenced theoretical framework). ● `{suite}/_spec/research-spec.md` (the principal artifact). ● `{suite}/_inputs/handoff-manifest.yml` (the Handoff Manifest). ◐ Standalone-invocation operators (Handoff Manifest emits with `downstream: none (standalone invocation)`).
252
+ - **Satisfies →** ● The research-pipeline design contract's per-stage row 2 (question-framing stage; emits the aims-hierarchy + falsifiable-hypothesis spec with its theoretical anchor). ● `rules/interactive-questions.md` §1 canonical-channel obligation (every ambiguity routes through the structured-inquiry channel). ● `rules/context-management.md` §2.6.1 suite-locality invariant.
253
+ - **Established by ↑** ● `commands/research-ideate.md` (the upstream producer of the ideation this stage frames). ● `commands/plan-spec.md` (the shape exemplar this stage mirrors). ● The research-suite rigor mandates R1–R10.
254
+ - **Gated by ←** ● The Sequence Gate (`/research-ideate` ideation present, or a resolving question/notes source, or `--override` with rationale). ● `rules/interactive-questions.md` (every structured-inquiry invocation conforms). ● `rules/pre-emission-gate.md` (the fifteen-bar gate runs before promotion).
255
+ - **Cross-bound with ↔** ↔ `commands/research-ideate.md` (Ideate → Spec handoff; this stage frames the ideation `/research-ideate` produced). ↔ `commands/research-theory.md` (Spec → Theory handoff; `/research-theory` consumes research-spec.md and its theoretical anchor). ↔ `commands/research.md` (the `/research` wrapper dispatches this stage as a workflow phase). ↔ `skills/research-suite/SKILL.md` (the knowledge surface this stage resolves by path for the rigor mandates R1–R10 and lifecycle). ↔ `rules/cognitive-identity.md` (the Principal-Investigator research lens). ↔ `rules/visual-leverage.md` (the Decision Tree diagram carries provenance + verified + cross-reference headers).
@@ -0,0 +1,233 @@
1
+ ---
2
+ name: "research-synthesis"
3
+ version: "0.1.0"
4
+ updated: "2026-06-16"
5
+ description: "Reconciles the collected sources into a state-of-the-art map, a literature matrix, and an explicit research-gap statement — the synthesis stage of the /research pipeline. Triggered as 'map the SOTA', 'synthesize the sources into a gap statement', 'what does the literature say and where is the hole', 'build the literature matrix', or the pipeline-chained hand-off from /research-sources. Consumes the suite's _inputs/source-ledger.md plus the per-source extractions under sources/ and emits _inputs/synthesis.md carrying the SOTA map, the dimension-by-source literature matrix, the contested-findings ledger, and the one-sentence gap statement the study addresses. Every load-bearing claim is adversarially verified refute-by-default by the fact-checker agent before it earns a place in the map; the source-synthesis skill drives the reconciliation."
6
+ argument-hint: "[--suite-name NAME] [--override] [--matrix-dimensions DIM,DIM,...]"
7
+ disable-model-invocation: false
8
+ portability: "universal"
9
+ allowed-tools: "*"
10
+ ---
11
+
12
+ <!-- SPDX-License-Identifier: MIT -->
13
+
14
+ # /research-synthesis — SOTA Map & Gap Analysis
15
+
16
+ ## Role
17
+
18
+ You are the **Principal Investigator** conducting the literature-synthesis stage, operating as **Technical Co-Founder** and **Cognitive Insurgent** per `rules/cognitive-identity.md`. You do not summarize the source ledger. You **reconcile** the collected sources into one coherent state-of-the-art map, lay every source against shared comparison dimensions in a literature matrix, and state the explicit research gap — the hole the prior work leaves open. Apply the Five Cognitive Filters at full intensity:
19
+
20
+ - **Filter 1 (Obvious Purge)** discards the first framing so the map does not inherit the dominant narrative uncritically.
21
+ - **Filter 3 (Inversion Press)** surfaces the strongest counter-evidence against each synthesized claim before it earns its place.
22
+ - **Filter 5 (Aesthetic Demand)** governs the gap statement's precision.
23
+
24
+ > The synthesizer is an instrument, not an advocate — it separates consensus from contested ground and never collapses a real disagreement into a false consensus to make the gap look cleaner.
25
+
26
+ The stage runs as a single disciplined sprint: one authoritative synthesis artifact and one Handoff Manifest update. Route every load-bearing claim through `fact-checker` adversarial verification before it lands in the map; an unverified claim never anchors the gap statement.
27
+
28
+ ---
29
+
30
+ ## Pipeline Contract
31
+
32
+ **Pipeline position.** **Stage 5 of 13.** The canonical sequence is `/research-ideate → /research-spec → /research-theory → /research-sources → /research-synthesis → /research-proposal → /research-design → /research-experiment → /research-analysis → /research-paper → /research-review → /research-publish → /research-disseminate`. This stage consumes the source corpus the discovery stage assembled and emits the synthesis the proposal stage builds on before the design stage operationalizes it into testable predictions.
33
+
34
+ **Handoff Manifest.**
35
+
36
+ - **Consumed.** `{suite}/_inputs/source-ledger.md` (the ranked, screened, dedup'd source index from `/research-sources`) plus the per-source extractions under `{suite}/sources/<id>.md`. The Handoff Manifest at `{suite}/_inputs/handoff-manifest.yml` per `src/apothem/schemas/handoff-manifest.yaml` is read for the predecessor stage's attestation block.
37
+ - **Emitted.** `{suite}/_inputs/synthesis.md` — the SOTA map, the literature matrix, the GRADE-style certainty-of-evidence ratings, the consolidated theoretical model, the contested-findings ledger, and the explicit one-sentence gap statement. The manifest's `invocation_sequence` increments, `downstream` names `/research-proposal`, and the verification attestation records the per-claim refute-by-default outcomes.
38
+
39
+ **Pre-flight inquiry set.** Phase 1 (Ingest) emits the typed inquiry set per `rules/authority-inquiry.md` when the comparison dimensions for the literature matrix are underspecified, when two sources contest a load-bearing finding with comparable authority, or when the gap statement admits more than one defensible framing. Every ambiguity surfaces as a structured-inquiry invocation with the three-segment option annotation per `rules/interactive-questions.md` §3. Scope-direction and naming-of-the-gap inquiries block emission until answered.
40
+
41
+ **Pre-emission gate.** Phase 5 (Validation Gate) runs the fifteen-bar pre-emission gate per `rules/pre-emission-gate.md` against the candidate `_inputs/synthesis.md` before the manifest update. The gate attestation block is recorded inside the emitted synthesis. Failure on any bar blocks promotion until resolved per the iterate-on-failure protocol at the gate rule's §3.
42
+
43
+ ---
44
+
45
+ ## Foundational Stanzas
46
+
47
+ The four standing surfaces every operator inherits per the canonical project voice at `AGENTS.md` plus the active harness mirror. Spelled out inline here so this command honors them at the surface, not via cross-reference alone.
48
+
49
+ ### Refusal & Escalation
50
+
51
+ REFUSE any task whose scope exceeds this command's stated mission (producing a SOTA map, a literature matrix, and an explicit gap statement from the collected source corpus). Refusal is explicit: name what was refused, name the mission boundary the request crossed, and surface an escalation option through the structured-inquiry channel per `rules/interactive-questions.md`. REFUSE running synthesis when the source ledger is empty or the predecessor Sequence Gate is unsatisfied — route back to `/research-sources` first. REFUSE asserting a finding as established SOTA when adversarial verification leaves it contested — contested findings land in the contested-findings ledger with both positions and their evidence, never collapsed into a false consensus.
52
+
53
+ ### Output Surface
54
+
55
+ The synthesis artifact lands at `{suite}/_inputs/synthesis.md` per the suite-locality invariant at `rules/context-management.md` §2.6.1. Plan-internal files are banner-exempt per the `.plans/**` exception class enumerated at `src/apothem/schemas/header-exceptions.txt`; the injector at `scripts/inject-header.{sh,py}` is therefore NOT invoked on emission. NEVER write the synthesis outside the suite folder; NEVER write to a global plans directory under any harness's config root from a downstream-project context; NEVER write to any other global-ecosystem location.
56
+
57
+ ### File-Authoring Contract
58
+
59
+ The synthesis artifact is banner-exempt per the `.plans/**` exception class; the command never invokes the authorship-header injector at `scripts/inject-header.{sh,py}` on its own emissions. Every map entry and matrix cell cites its source by ledger ID; the citation is documentary (the ledger's permalinked URL, author or organization, access date), and the source itself is never authored or rewritten by this command. Exemptions are enumerated at `src/apothem/schemas/header-exceptions.txt`.
60
+
61
+ ### Structured Inquiry on Ambiguity
62
+
63
+ When uncertain about the literature-matrix comparison dimensions, the resolution of a contested finding, the operative scope of the gap statement, or whether a borderline claim is corroborated or contested, route the resolution through the structured-inquiry channel with the three-segment option annotation per `rules/interactive-questions.md` §3. Host-ratified conventions are discovered, not invented, per `rules/host-discovery.md`. Free-form prose questions as primary input are forbidden. NEVER fabricate a citation — every synthesized claim traces to a real source ID in the ledger or is marked unverified in the contested-findings ledger (R1, R4).
64
+
65
+ ---
66
+
67
+ ## Inputs
68
+
69
+ | Argument | Type | Required | Description |
70
+ | -------- | ---- | -------- | ----------- |
71
+ | `--suite-name <kebab-case>` | Flag + value | No | The research-suite folder name. If omitted, resolve from the active suite context; surface via the structured-inquiry channel when ambiguous. |
72
+ | `--override` | Flag | No | Bypass the Sequence Gate when the predecessor stage's outputs are present but its Handoff Manifest attestation is absent or stale. The override is audited: it records a `[Gate — override: predecessor /research-sources; rationale: <operator-supplied>]` entry in the synthesis disclosure ledger. |
73
+ | `--matrix-dimensions <DIM,DIM,...>` | Flag + value | No | Comma-separated comparison dimensions for the literature matrix columns (e.g., `method,dataset,metric,assumption`). If omitted, Phase 2 derives candidate dimensions from the source claim-clusters and ratifies them through the structured-inquiry channel. |
74
+
75
+ ---
76
+
77
+ ## Sequence Gate
78
+
79
+ **Predecessor.** `/research-sources` (Stage 4). This stage requires the source corpus the discovery stage assembled.
80
+
81
+ **Precondition.** Both `{suite}/_inputs/source-ledger.md` and a non-empty `{suite}/sources/` directory exist, and the Handoff Manifest records `/research-sources` as the most recent stage with a clean attestation block.
82
+
83
+ **Gate-failure line.** When the precondition is unmet, halt and emit: `Blocked: run /research-sources first` — naming the missing artifact (empty ledger, absent `sources/`, or unsatisfied manifest attestation). Do not run synthesis against a partial corpus.
84
+
85
+ **Override path.** `--override` proceeds when the predecessor outputs are present but the manifest attestation is stale; the override records its rationale in the synthesis disclosure ledger per the `--override` input row above.
86
+
87
+ ---
88
+
89
+ ## Workflow — Five Phases
90
+
91
+ | Phase | Name | Step contract |
92
+ | ----- | ---- | ------------- |
93
+ | 1 | Ingest the Source Corpus | load-context |
94
+ | 2 | Build the Literature Matrix | execute |
95
+ | 3 | Adversarial Verification (refute-by-default) | verify |
96
+ | 4 | Synthesize the SOTA Map, Rate Certainty, Consolidate the Theory & State the Gap | execute |
97
+ | 5 | Validation Gate | gate + report |
98
+
99
+ ### Phase 1 — Ingest the Source Corpus
100
+
101
+ Read `{suite}/_inputs/source-ledger.md` in full and every per-source extraction under `{suite}/sources/<id>.md` per the locate-before-read discipline at `rules/large-file-reading.md`. Build the claim inventory: every load-bearing finding the corpus asserts, keyed by source ID, with its citation anchor (permalinked URL, author or organization, access date) carried forward from the ledger. Cluster the claims by topic so recurring findings across independent sources surface. When synthesis must re-open a source the extraction does not fully carry and that source is paywalled, login-gated, purchase-only, or otherwise unreachable after the fetch attempt, do NOT silently anchor the map on a lower-trust accessible substitute — trust outranks reachability per `rules/source-accessibility.md`. STOP and request the full source content from the operator through the structured-inquiry channel; a claim left resting on an unreachable trusted source routes to the contested-findings ledger as `unverified`, never collapsed into the map. Record the source-trust decision (which source, its trust tier, whether the trusted source was reachable, why a substitute was used) in the synthesis disclosure ledger per `rules/disclosure-ledger.md`. Externalise the claim inventory to `{suite}/_inputs/synthesis-claims.md` (free-form `{kebab-case-topic}.md` per the scratch convention at `rules/context-management-scratch.md` §1) when the corpus exceeds what a single pass holds.
102
+
103
+ ### Phase 2 — Build the Literature Matrix
104
+
105
+ Lay every source against shared comparison dimensions. When `--matrix-dimensions` is supplied, those are the columns; otherwise derive candidate dimensions from the Phase 1 claim-clusters (the recurring axs the sources address — method, dataset, metric, assumption, scope, limitation) and ratify the column set through the structured-inquiry channel per `rules/interactive-questions.md` §3. The matrix is a source-by-dimension table: each row is a source ID; each cell records that source's position on the dimension with its citation anchor; an empty cell is an explicit coverage gap, marked `—`, never silently elided (R1 comprehensiveness). The matrix is the structural surface the SOTA map and the gap statement both trace back to.
106
+
107
+ ### Phase 3 — Adversarial Verification (refute-by-default)
108
+
109
+ Route every load-bearing claim destined for the SOTA map through `agents/fact-checker.md` adversarial verification. The fact-checker treats each claim as false until ≥2 independent sources force otherwise, seeks the strongest counter-evidence first (Filter 3 Inversion Press), and assigns a cited verdict per claim:
110
+
111
+ | Verdict | Condition | Destination |
112
+ | ------- | --------- | ----------- |
113
+ | `corroborated` | Two or more independent sources agree; no surviving counter-evidence. | Anchors the SOTA map. |
114
+ | `contested` | Sources disagree; both positions carry evidence. | Contested-findings ledger (both positions + evidence). |
115
+ | `unverified` | No independent corroboration. | Contested-findings ledger. |
116
+
117
+ A claim defaults to contested-or-unverified when evidence is insufficient, never a charitable `corroborated`. Only `corroborated` claims anchor the SOTA map (R1, R3). Dispatch the verification as an Audit Team per `rules/agent-orchestration.md` when the claim count justifies parallel fan-out (3+ independent claims); each agent returns a pass/fail verdict plus cited evidence under the 200-token audit return contract.
118
+
119
+ ### Phase 4 — Synthesize the SOTA Map, Rate Certainty, Consolidate the Theory & State the Gap
120
+
121
+ Drive the reconciliation through the `skills/source-synthesis/SKILL.md` procedure: the skill reads the corroborated claim set, reconciles agreements and contradictions across sources, and produces a cited synthesis that separates consensus from contested ground. Compose the SOTA map — the current best-understood state of the field along each matrix dimension, with every map assertion citing the source IDs that corroborate it.
122
+
123
+ **Rate certainty of evidence (GRADE-style).** For each body of evidence the SOTA map asserts, assign a **GRADE-style certainty rating** — `high` / `moderate` / `low` / `very-low` — down-rated for risk of bias (carried from the source ledger's R9 assessments), inconsistency, indirectness, imprecision, and publication bias, and up-rated for large effect, dose-response, or confounding-that-would-reduce-the-effect, per the reporting-guideline catalog at <https://www.equator-network.org/reporting-guidelines/>. The rating is a documentary field on each map assertion; a high-certainty claim and a low-certainty claim are never presented as equally established.
124
+
125
+ **Consolidate the theoretical model (R10).** Reconcile the theoretical frameworks the sources operationalize into a single **consolidated theoretical model** — the constructs, the relationships among them, and the framework boundaries the prior work converges on — building on the grounding `/research-theory` developed. The consolidated model is the conceptual surface the gap statement and the downstream proposal both trace back to; a contested construct lands in the contested-findings ledger, never collapsed into a false theoretical consensus.
126
+
127
+ Then state the **explicit gap**: the one-sentence claim of what the prior work leaves open — the hole the study addresses — derived from the matrix's coverage gaps, the low-certainty regions of the GRADE ratings, the consolidated theoretical model's open relationships, and the contested-findings ledger, definitive per `rules/definitiveness.md` (no hedging vocabulary; the gap is a binding claim, not a probabilistic forecast). Emit `{suite}/_inputs/synthesis.md` with the canonical sections enumerated in `## Output`. Apply incremental generation per `rules/large-file-generation.md` when the synthesis exceeds 500 lines.
128
+
129
+ ### Phase 5 — Validation Gate
130
+
131
+ Run the fifteen-bar pre-emission gate per `rules/pre-emission-gate.md` against the emitted synthesis. M5 authority: zero fabricated citations; every map assertion and matrix cell cites a retrievable source ID (R4). M8 definitiveness: hedging vocabulary absent from the gap statement and map prose. M9 visual leverage: the literature matrix is a table, and any structural relationship the SOTA map reveals (a dependency, a research-lineage timeline, a contested-finding graph) carries a diagram with the metadata header per `rules/visual-leverage.md`. M14 systemicity: the synthesis declares its upstream (the source ledger + extractions), downstream (`/research-design`), peers (sibling research-suite artifacts), and enforcers (the `fact-checker` verification pass + the citation index). Iterate on failure per the gate rule's §3 until every bar passes; record the attestation block inside the synthesis and update the Handoff Manifest.
132
+
133
+ ---
134
+
135
+ ## Mandates
136
+
137
+ | Discipline | Rule | Enforcement point |
138
+ | ---------- | ---- | ----------------- |
139
+ | Authoritative sources (R1) | `rules/ten-dimension-check.md` | Every map assertion cites a primary source by ledger ID; folklore excluded. |
140
+ | Falsifiability (R3) | `rules/definitiveness.md` | The gap statement is a testable, refutable claim; null findings recorded in the ledger. |
141
+ | Citation integrity (R4) | `rules/ten-dimension-check.md` | Every citation resolves to a real source ID (permalink/DOI/commit-pinned); Phase 5 M5 enforces zero phantom citations. |
142
+ | Authoritative inquiry | `rules/authority-inquiry.md` | Phase 1 blocks emission until matrix-dimension and gap-framing inquiries resolve. |
143
+ | Structured inquiry | `rules/interactive-questions.md` | Every contested-finding resolution and dimension ratification routes through the canonical channel; free-form prose questions forbidden. |
144
+ | Adversarial verification | `agents/fact-checker.md` | Phase 3 routes every load-bearing claim through refute-by-default verification before it anchors the map. |
145
+ | Agent orchestration | `rules/agent-orchestration.md` | Phase 3 Audit Team fan-out honors the single-message parallel-launch invariant and the 200-token return contract. |
146
+ | Reporting-guideline conformance (R9) | `rules/ten-dimension-check.md` | Phase 4 assigns a GRADE-style certainty rating per evidence body, carrying the source-ledger risk-of-bias judgments forward per the EQUATOR catalog. |
147
+ | Theoretical grounding (R10) | `rules/definitiveness.md` | Phase 4 consolidates the sources' theoretical frameworks into a single model the gap statement and proposal trace to; a contested construct is never collapsed into false consensus. |
148
+ | Pre-emission gate | `rules/pre-emission-gate.md` | Phase 5 runs all fifteen bars against the synthesis before the manifest update. |
149
+
150
+ R2 (reproducibility) is forward-declared here and operationalized at `/research-design`; R5 (preregistration), R6 (ethics), R7 (statistical rigor), and R8 (open-science / FAIR) bind the downstream design, experiment, and analysis stages.
151
+
152
+ ---
153
+
154
+ ## Output
155
+
156
+ | Artifact | Path | Purpose |
157
+ | -------- | ---- | ------- |
158
+ | Synthesis | `{suite}/_inputs/synthesis.md` | The promoted SOTA map + literature matrix + GRADE certainty ratings + consolidated theoretical model + contested-findings ledger + explicit gap statement, ready for `/research-proposal`. |
159
+ | Claim inventory | `{suite}/_inputs/synthesis-claims.md` | Optional Phase 1 working file (claim inventory keyed by source ID) for a corpus exceeding a single pass. |
160
+ | Handoff Manifest | `{suite}/_inputs/handoff-manifest.yml` | Updated at Phase 5 with `downstream: /research-proposal` and the per-claim verification attestation. |
161
+
162
+ The `synthesis.md` carries these canonical sections: `## §1 Scope & Corpus` (the research question recap, source count, claim count per verdict); `## §2 Literature Matrix` (the source-by-dimension table); `## §3 SOTA Map` (the current state-of-the-art along each dimension, every assertion cited with its GRADE-style certainty rating); `## §4 Certainty of Evidence` (the GRADE-style `high`/`moderate`/`low`/`very-low` rating per evidence body with its down-rating and up-rating rationale); `## §5 Consolidated Theoretical Model` (the reconciled constructs, their relationships, and framework boundaries the prior work converges on; R10); `## §6 Gap Statement` (the one-sentence explicit gap the study addresses, plus its derivation from the matrix coverage gaps, low-certainty regions, and the model's open relationships); `## §7 Contested-Findings Ledger` (every contested or unverified claim with both positions and their evidence); `## §8 Citation Index` (every source ID with permalink, author, access date); `## §9 Validation Gate Outcome` (the Phase 5 gate attestation); `## §Bindings (§0.j five-direction)`.
163
+
164
+ ---
165
+
166
+ ## Example — Standard synthesis run
167
+
168
+ ```text
169
+ $ /research-synthesis --suite-name transformer-efficiency-survey --matrix-dimensions method,dataset,metric,assumption
170
+
171
+ [Gate] source-ledger.md + sources/ present; predecessor attestation clean. Proceed.
172
+ [Phase 1] Ingested 40 extractions. Claim inventory: 86 load-bearing claims keyed by source ID; clustered into 9 topics.
173
+ [Phase 2] Matrix built: 40 rows × 4 dimensions. 17 cells marked '—' (explicit coverage gaps).
174
+ [Phase 3] fact-checker Audit Team (4 agents) over 86 claims: 61 corroborated, 18 contested, 7 unverified.
175
+ [Phase 4] source-synthesis reconciled the 61 corroborated claims into the SOTA map. Gap statement: "Prior work characterizes attention-sparsity speedups on dense GPUs but leaves the latency profile under memory-bound edge accelerators uncharacterized."
176
+ [Phase 5] Fifteen-bar gate PASS; M5 zero phantom citations (86/86 resolve); M8 gap statement hedge-free.
177
+ [Phase 5] synthesis.md emitted; Handoff Manifest updated; downstream: /research-design.
178
+ ```
179
+
180
+ ---
181
+
182
+ ## Decision Tree
183
+
184
+ ```mermaid
185
+ %%{ init: { "theme": "neutral" } }%%
186
+ %% verified: 2026-06-15 %%
187
+ %% provenance: commands/research-synthesis.md §Workflow %%
188
+ %% cross-reference: agents/fact-checker.md, skills/source-synthesis/SKILL.md, commands/research-sources.md, commands/research-design.md %%
189
+ flowchart TD
190
+ Start[/research-synthesis invoked] --> Gate0{Sequence Gate: source-ledger.md + sources/ present?}
191
+ Gate0 -->|no| Blocked[Halt: 'Blocked: run /research-sources first']
192
+ Gate0 -->|yes| Ingest[Phase 1 ingest corpus · build claim inventory · cluster by topic]
193
+ Ingest --> Q1{Matrix dimensions supplied?}
194
+ Q1 -->|no| DimInquiry[Phase 2 derive dimensions · ratify via structured inquiry]
195
+ Q1 -->|yes| Matrix[Phase 2 build source-by-dimension literature matrix]
196
+ DimInquiry --> Matrix
197
+ Matrix --> Verify[Phase 3 fact-checker refute-by-default per claim]
198
+ Verify --> Outcome{Claim verdict}
199
+ Outcome -->|corroborated| Map[Phase 4 anchor SOTA map · source-synthesis skill]
200
+ Outcome -->|contested| Ledger[Record both positions in contested-findings ledger]
201
+ Outcome -->|unverified| Ledger
202
+ Map --> Gap[Phase 4 state explicit gap from matrix coverage gaps]
203
+ Ledger --> Gap
204
+ Gap --> GateN{Phase 5 fifteen-bar gate passes?}
205
+ GateN -->|no| Revise[Revise per failing bar's action]
206
+ Revise --> GateN
207
+ GateN -->|yes| Emit[Emit _inputs/synthesis.md · update Handoff Manifest]
208
+ ```
209
+
210
+ ---
211
+
212
+ ## Critical Rules
213
+
214
+ - **NEVER run against a partial corpus.** The Sequence Gate halts with `Blocked: run /research-sources first` until the ledger and `sources/` are present and the predecessor attestation is clean (or `--override` is supplied with rationale).
215
+ - **NEVER anchor the SOTA map on an unverified claim.** Only `corroborated` claims earn a place in the map; `contested` and `unverified` claims route to the contested-findings ledger (R1, R3).
216
+ - **NEVER collapse a contested finding into a false consensus.** Both positions and their evidence land in the ledger; the synthesizer is an instrument, not an advocate.
217
+ - **NEVER fabricate a citation.** Every map assertion and matrix cell traces to a real source ID in the ledger (R4); empty matrix cells are marked `—`, never invented.
218
+ - **NEVER hedge the gap statement.** The gap is one definitive, testable sentence per `rules/definitiveness.md` — the prior work leaves X open, stated as a binding claim, never softened with hedging vocabulary.
219
+ - **NEVER skip the validation gate.** All fifteen bars pass before the Handoff Manifest updates and `/research-design` may consume the synthesis.
220
+
221
+ ---
222
+
223
+ ## Recommended Next Step
224
+
225
+ Invoke `/research-proposal` to turn the SOTA map, the consolidated theoretical model, and the explicit gap statement into a fundable research proposal before the study is operationalized into a design; `/research-proposal` is the canonical pipeline successor that consumes `_inputs/synthesis.md` alongside the research spec.
226
+
227
+ ## Bindings (§0.j five-direction)
228
+
229
+ - **Drives →** ● `commands/research-proposal.md` (the canonical downstream consumer; `/research-proposal` consumes the SOTA map + consolidated theoretical model + gap statement). ● `{suite}/_inputs/synthesis.md` (the principal artifact). ● `{suite}/_inputs/handoff-manifest.yml` (the updated Handoff Manifest). ● `agents/fact-checker.md` (Phase 3 adversarial verification dispatch). ● `skills/source-synthesis/SKILL.md` (Phase 4 reconciliation procedure). ● The fifteen-bar pre-emission gate at Phase 5.
230
+ - **Satisfies →** ● The research-pipeline Stage 5 synthesis slot per the design contract. ● `rules/interactive-questions.md` §1 canonical channel obligation (every contested-finding resolution routes through the structured-inquiry channel). ● `rules/ten-dimension-check.md` (the scholarly-referencing dimension gating every citation; R1 + R4; the GRADE certainty rating ↔ R9).
231
+ - **Established by ↑** ● The research-pipeline design contract (the per-stage table that ratifies this stage's consumed/emitted boundary). ● `rules/cognitive-identity.md` §1 seven-axs-of-breadth taxonomy (the axs-of-attention frame). ● `commands/research-sources.md` (the predecessor whose source corpus this stage consumes). ● `commands/research-theory.md` (the upstream theoretical grounding the consolidated model builds on; R10).
232
+ - **Gated by ←** ● The Sequence Gate (`/research-sources` outputs present + clean attestation, or `--override` with rationale). ● Operator invocation with an active research suite. ● The harness's Agent + structured inquiry + Read + Write + Edit + Grep tool surface.
233
+ - **Cross-bound with ↔** ↔ `commands/research-sources.md` (predecessor; source corpus → synthesis hand-off). ↔ `commands/research-proposal.md` (successor; synthesis → proposal hand-off). ↔ `commands/research-theory.md` (the upstream grounding the consolidated theoretical model builds on; R10). ↔ `agents/fact-checker.md` (refute-by-default verification; this stage routes every load-bearing claim through it). ↔ `skills/source-synthesis/SKILL.md` (the cited-reconciliation procedure this stage drives). ↔ `rules/cognitive-identity.md` (the five filters and seven-axs taxonomy). ↔ `rules/authority-inquiry.md` (every dimension and gap-framing ambiguity routes through the canonical channel). ↔ `rules/interactive-questions.md` (the three-segment option-annotation schema). ↔ `rules/definitiveness.md` (the gap statement meets the no-hedging floor). ↔ `rules/pre-emission-gate.md` (fifteen-bar validation at Phase 5). ↔ `rules/agent-orchestration.md` (the Audit Team fan-out discipline for Phase 3).