@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,323 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Migrate a legacy per-harness workspace into the shared ``.apothem`` layout.
4
+
5
+ Apothem once scattered its working state across a per-harness data home
6
+ (``<base>/.apothem/<harness>/{memory,contexts,learning}``) and a sibling
7
+ ``<base>/.plans`` tree. The shared layout collapses both into one
8
+ ``<base>/.apothem/{plans,memory,learning,contexts}`` working directory shared
9
+ across every harness.
10
+
11
+ This module migrates an existing install non-destructively:
12
+
13
+ * **Union-merge** the per-harness ``memory`` / ``contexts`` stores into the
14
+ shared store by record id, and **concatenate-dedup** the per-harness
15
+ ``learning`` signals. A record id present in two per-harness stores with the
16
+ SAME body merges to one; a CONFLICT (same id, different body) is never
17
+ silently overwritten — the incoming record is skipped and reported.
18
+ * **Move** ``<base>/.plans`` to the shared ``<base>/.apothem/plans``.
19
+ * **Back up** every source the migration consumes before touching it, so the
20
+ pre-migration state is always recoverable.
21
+
22
+ The migration is **idempotent**: re-running it on an already-migrated tree
23
+ finds no legacy sources and reports a no-op. It never deletes operator data
24
+ without a backup, and never overwrites a conflicting record.
25
+ """
26
+
27
+ from __future__ import annotations
28
+
29
+ import json
30
+ import shutil
31
+ from dataclasses import dataclass, field
32
+ from datetime import datetime, timezone
33
+ from pathlib import Path
34
+
35
+ from apothem.lib.contexts import ContextStore
36
+ from apothem.lib.data_home import (
37
+ _APOTHEM_SUBTREE,
38
+ _PLANS_CHILD,
39
+ DataHome,
40
+ resolve_shared_data_home,
41
+ )
42
+ from apothem.lib.harness_registry import SUPPORTED_PACKAGE_KEYS
43
+ from apothem.lib.learning import LearningSignal, LearningStore
44
+ from apothem.lib.memory import MemoryStore
45
+
46
+ #: Marker file written into the backup root so a backup directory is never
47
+ #: mistaken for a live working directory.
48
+ _BACKUP_README = "MIGRATION-BACKUP.txt"
49
+
50
+
51
+ class WorkspaceMigrationError(RuntimeError):
52
+ """Raised when the migration cannot proceed safely."""
53
+
54
+
55
+ @dataclass
56
+ class MigrationOutcome:
57
+ """The result of one workspace migration pass.
58
+
59
+ Attributes:
60
+ base: The base directory the migration ran against.
61
+ migrated: ``True`` when at least one legacy source was migrated.
62
+ backup_root: The directory legacy sources were backed up into, or
63
+ ``None`` when nothing was migrated (no backup created).
64
+ memory_merged: Count of memory records merged into the shared store.
65
+ contexts_merged: Count of context fragments merged into the shared store.
66
+ learning_merged: Count of learning signals merged into the shared store.
67
+ conflicts: Per-store id conflicts skipped (same id, different body).
68
+ plans_moved: ``True`` when a legacy ``.plans`` tree was relocated.
69
+ notes: Human-readable notes about skipped or no-op steps.
70
+ """
71
+
72
+ base: Path
73
+ migrated: bool = False
74
+ backup_root: Path | None = None
75
+ memory_merged: int = 0
76
+ contexts_merged: int = 0
77
+ learning_merged: int = 0
78
+ conflicts: list[str] = field(default_factory=list)
79
+ plans_moved: bool = False
80
+ notes: list[str] = field(default_factory=list)
81
+
82
+ def to_dict(self) -> dict[str, object]:
83
+ """Return a JSON-serializable representation of the outcome."""
84
+ return {
85
+ "base": str(self.base),
86
+ "migrated": self.migrated,
87
+ "backup_root": None if self.backup_root is None else str(self.backup_root),
88
+ "memory_merged": self.memory_merged,
89
+ "contexts_merged": self.contexts_merged,
90
+ "learning_merged": self.learning_merged,
91
+ "conflicts": list(self.conflicts),
92
+ "plans_moved": self.plans_moved,
93
+ "notes": list(self.notes),
94
+ }
95
+
96
+
97
+ def _legacy_home_dirs(base: Path) -> list[Path]:
98
+ """Return the per-harness legacy data homes present under ``<base>/.apothem``.
99
+
100
+ A legacy home is ``<base>/.apothem/<package_key>/`` for a registered
101
+ harness, carrying at least one of the ``memory`` / ``contexts`` /
102
+ ``learning`` child directories. The shared-layout children (``plans``,
103
+ ``memory``, ``contexts``, ``learning`` placed DIRECTLY under ``.apothem``)
104
+ are never harness package keys, so they are not mistaken for legacy homes.
105
+ """
106
+ apothem_root = base / _APOTHEM_SUBTREE
107
+ homes: list[Path] = []
108
+ for package_key in SUPPORTED_PACKAGE_KEYS:
109
+ candidate = apothem_root / package_key
110
+ if not candidate.is_dir():
111
+ continue
112
+ if any(
113
+ (candidate / child).is_dir() for child in ("memory", "contexts", "learning")
114
+ ):
115
+ homes.append(candidate)
116
+ return homes
117
+
118
+
119
+ def _legacy_data_home(base: Path, package_key: str) -> DataHome:
120
+ """Resolve a legacy per-harness data home (``<base>/.apothem/<key>/``)."""
121
+ root = base / _APOTHEM_SUBTREE / package_key
122
+ return DataHome(
123
+ root=root,
124
+ plans=root / _PLANS_CHILD,
125
+ memory=root / "memory",
126
+ contexts=root / "contexts",
127
+ learning=root / "learning",
128
+ )
129
+
130
+
131
+ def _timestamp_slug() -> str:
132
+ """Return a filesystem-safe UTC timestamp slug for the backup directory."""
133
+ return datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
134
+
135
+
136
+ def detect_legacy_layout(base: Path) -> bool:
137
+ """Return ``True`` when *base* carries a legacy layout needing migration.
138
+
139
+ A legacy layout is present when either a per-harness data home exists under
140
+ ``<base>/.apothem/<harness>/`` OR a legacy ``<base>/.plans`` tree exists.
141
+ """
142
+ if _legacy_home_dirs(base):
143
+ return True
144
+ return (base / ".plans").is_dir()
145
+
146
+
147
+ def _merge_memory(legacy: MemoryStore, shared: MemoryStore) -> tuple[int, list[str]]:
148
+ """Union *legacy* records into *shared* by id; return (merged, conflicts)."""
149
+ merged = 0
150
+ conflicts: list[str] = []
151
+ existing = {record.id: record for record in shared.records()}
152
+ for record in legacy.records():
153
+ prior = existing.get(record.id)
154
+ if prior is None:
155
+ shared.add(record)
156
+ existing[record.id] = record
157
+ merged += 1
158
+ elif prior.to_dict() != record.to_dict():
159
+ conflicts.append(f"memory:{record.id}")
160
+ return merged, conflicts
161
+
162
+
163
+ def _merge_contexts(
164
+ legacy: ContextStore, shared: ContextStore
165
+ ) -> tuple[int, list[str]]:
166
+ """Union *legacy* fragments into *shared* by id; return (merged, conflicts)."""
167
+ merged = 0
168
+ conflicts: list[str] = []
169
+ existing = {fragment.id: fragment for fragment in shared.fragments()}
170
+ for fragment in legacy.fragments():
171
+ prior = existing.get(fragment.id)
172
+ if prior is None:
173
+ shared.add(fragment)
174
+ existing[fragment.id] = fragment
175
+ merged += 1
176
+ elif prior.to_dict() != fragment.to_dict():
177
+ conflicts.append(f"contexts:{fragment.id}")
178
+ return merged, conflicts
179
+
180
+
181
+ def _signal_identity(signal: LearningSignal) -> str:
182
+ """Return a stable identity for a learning signal for dedup purposes.
183
+
184
+ The learning store is an append-only JSON Lines log, so the migration
185
+ deduplicates on the signal's full canonical serialization rather than its id
186
+ alone — two byte-identical signals captured under different harnesses are the
187
+ same observation and collapse to one, while two signals sharing an id but
188
+ differing in any field are both preserved.
189
+ """
190
+ return json.dumps(signal.to_dict(), sort_keys=True, ensure_ascii=False)
191
+
192
+
193
+ def _merge_learning(legacy: LearningStore, shared: LearningStore) -> int:
194
+ """Concatenate-dedup *legacy* signals into *shared*; return merged count."""
195
+ seen = {_signal_identity(signal) for signal in shared.signals()}
196
+ merged = 0
197
+ for signal in legacy.signals():
198
+ identity = _signal_identity(signal)
199
+ if identity in seen:
200
+ continue
201
+ # Append directly through the store's private appender — capture's
202
+ # opt-in gate governs NEW signals, not the migration of already-captured
203
+ # ones, so a flag-off operator does not lose previously-captured data.
204
+ shared._append(signal)
205
+ seen.add(identity)
206
+ merged += 1
207
+ return merged
208
+
209
+
210
+ def _backup_tree(source: Path, backup_root: Path, label: str) -> None:
211
+ """Copy *source* into ``<backup_root>/<label>`` before it is consumed."""
212
+ if not source.exists():
213
+ return
214
+ destination = backup_root / label
215
+ destination.parent.mkdir(parents=True, exist_ok=True)
216
+ shutil.copytree(source, destination, dirs_exist_ok=True)
217
+
218
+
219
+ def _ensure_backup_root(base: Path) -> Path:
220
+ """Create and return a fresh timestamped backup root under ``<base>/.apothem``."""
221
+ backup_root = base / _APOTHEM_SUBTREE / "backups" / f"migrate-{_timestamp_slug()}"
222
+ backup_root.mkdir(parents=True, exist_ok=True)
223
+ (backup_root / _BACKUP_README).write_text(
224
+ "Pre-migration backup of the legacy per-harness data homes and .plans "
225
+ "tree. Safe to delete once the shared .apothem layout is verified.\n",
226
+ encoding="utf-8",
227
+ )
228
+ return backup_root
229
+
230
+
231
+ def migrate_workspace(
232
+ base: Path, *, directory_name: str = ".apothem"
233
+ ) -> MigrationOutcome:
234
+ """Migrate the legacy layout under *base* to the shared ``.apothem`` layout.
235
+
236
+ The migration is non-destructive and idempotent:
237
+
238
+ * Per-harness data homes (``<base>/.apothem/<harness>/``) union-merge into
239
+ the shared store. A conflicting record (same id, different body) is
240
+ skipped and recorded, never overwritten.
241
+ * A legacy ``<base>/.plans`` tree moves to ``<base>/.apothem/plans``. When
242
+ the shared ``plans`` already exists, the move is skipped and recorded
243
+ (no clobber).
244
+ * Every consumed source is backed up first.
245
+
246
+ Args:
247
+ base: The base directory the working directory sits beneath.
248
+ directory_name: The shared working-directory name (default ``.apothem``).
249
+
250
+ Returns:
251
+ A :class:`MigrationOutcome` describing what was migrated.
252
+
253
+ Raises:
254
+ WorkspaceMigrationError: When *base* is not an existing directory.
255
+ """
256
+ if not base.is_dir():
257
+ raise WorkspaceMigrationError(f"base directory does not exist: {base}")
258
+
259
+ outcome = MigrationOutcome(base=base)
260
+ legacy_homes = _legacy_home_dirs(base)
261
+ legacy_plans = base / ".plans"
262
+ has_legacy_plans = legacy_plans.is_dir()
263
+
264
+ if not legacy_homes and not has_legacy_plans:
265
+ outcome.notes.append("no legacy layout detected — nothing to migrate")
266
+ return outcome
267
+
268
+ shared = resolve_shared_data_home(base=base, directory_name=directory_name).ensure()
269
+ backup_root = _ensure_backup_root(base)
270
+ outcome.backup_root = backup_root
271
+
272
+ shared_memory = MemoryStore(shared)
273
+ shared_contexts = ContextStore(shared)
274
+ shared_learning = LearningStore(shared)
275
+ shared_memory.ensure_initialized()
276
+ shared_contexts.ensure_initialized()
277
+ shared_learning.ensure_initialized()
278
+
279
+ for home_dir in legacy_homes:
280
+ package_key = home_dir.name
281
+ _backup_tree(home_dir, backup_root, f"data-home/{package_key}")
282
+ legacy = _legacy_data_home(base, package_key)
283
+ mem_merged, mem_conflicts = _merge_memory(MemoryStore(legacy), shared_memory)
284
+ ctx_merged, ctx_conflicts = _merge_contexts(
285
+ ContextStore(legacy), shared_contexts
286
+ )
287
+ lrn_merged = _merge_learning(LearningStore(legacy), shared_learning)
288
+ outcome.memory_merged += mem_merged
289
+ outcome.contexts_merged += ctx_merged
290
+ outcome.learning_merged += lrn_merged
291
+ outcome.conflicts.extend(
292
+ f"{package_key}:{conflict}" for conflict in (*mem_conflicts, *ctx_conflicts)
293
+ )
294
+ # The merged legacy home is removed only after a successful backup +
295
+ # union merge, so its records are preserved both in the shared store and
296
+ # in the backup.
297
+ shutil.rmtree(home_dir, ignore_errors=True)
298
+ outcome.migrated = True
299
+
300
+ if has_legacy_plans:
301
+ if shared.plans.exists() and any(shared.plans.iterdir()):
302
+ outcome.notes.append(
303
+ "shared plans/ already populated — legacy .plans left in place; "
304
+ f"merge manually from {legacy_plans}"
305
+ )
306
+ else:
307
+ _backup_tree(legacy_plans, backup_root, "plans")
308
+ # Remove the empty placeholder so the rename lands cleanly.
309
+ if shared.plans.exists():
310
+ shared.plans.rmdir()
311
+ shutil.move(str(legacy_plans), str(shared.plans))
312
+ outcome.plans_moved = True
313
+ outcome.migrated = True
314
+
315
+ return outcome
316
+
317
+
318
+ __all__ = [
319
+ "MigrationOutcome",
320
+ "WorkspaceMigrationError",
321
+ "detect_legacy_layout",
322
+ "migrate_workspace",
323
+ ]
@@ -0,0 +1,41 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # Output Styles
4
+
5
+ Output-style definitions — flat `.md` files, each defining a tone and output-shape the operator selects via `/output-style`. An output style governs *how* the agent presents work: prose density, formatting conventions, citation posture, and finding-shape — without weakening any behavioral mandate.
6
+
7
+ ## Index
8
+
9
+ | Style | `name` | What it sets |
10
+ |-------|--------|--------------|
11
+ | [`default.md`](default.md) | Default | Ecosystem-default output style — the baseline tone every session inherits. Encodes unified output conventions, planning-content routing, and the file-authoring contract. |
12
+ | [`default-architect.md`](default-architect.md) | Default Architect | Senior Software Architect tone — analytical, brutally honest, concrete-driver citations, seven-axs-of-breadth attestation. |
13
+ | [`concise-engineer.md`](concise-engineer.md) | Concise Engineer | Engineering-focused short-form output — minimum prose, maximum signal, code-first. |
14
+ | [`forensic-auditor.md`](forensic-auditor.md) | Forensic Auditor | Forensic-audit posture for review-class work — finding-by-finding, scorecard-shaped output, a falsifier per finding. |
15
+
16
+ ## The baseline-plus-supplement relationship
17
+
18
+ `default.md` is the **baseline** — every session inherits it unless the operator selects a different style. It defines the ecosystem floor: the output conventions, definitiveness posture, and authoring contract that always hold.
19
+
20
+ The three sibling styles are **supplements**, not replacements. Each layers a posture on top of the `default.md` floor without weakening it — `default-architect` adds the architect's analytical register, `concise-engineer` tightens prose density, `forensic-auditor` reshapes output into the scorecard form review work needs. Selecting a sibling style supplements the baseline; the baseline's conventions still apply.
21
+
22
+ ## Frontmatter contract
23
+
24
+ Output-style frontmatter carries two required fields, the floor the conformity grep enforces on every cohort file:
25
+
26
+ - `name` — the human-readable style name shown in `/output-style`.
27
+ - `description` — one-line statement of the style's posture.
28
+
29
+ [`../schemas/output-style.schema.json`](../schemas/output-style.schema.json) requires the same `name` + `description` floor and admits `id`, `applies-to`, `version`, and `last-reviewed` as optional extensions; the shipped styles carry only the two required fields. The body after the frontmatter specifies the style's conventions.
30
+
31
+ ## Conventions
32
+
33
+ - One flat `.md` file per style; kebab-case filenames.
34
+ - Every file carries the canonical single-line SPDX license header.
35
+ - A style supplements the `default.md` floor; it never weakens a behavioral mandate. Disclosure-ledger markers and other mandate-required surfaces are preserved under every style.
36
+
37
+ ## Operating in this folder
38
+
39
+ - **Harness- and model-agnostic, no exceptions.** This folder is swept by the agnosticism matcher: a style file MUST NOT name or privilege any harness, model, or vendor, and MUST NOT pre-set an effort or model preference. A posture describes presentation register only.
40
+ - **Adding or changing a style:** author the frontmatter against the schema, write the posture body as a supplement to the baseline (never a replacement that weakens a mandate), confirm it introduces no harness/model/effort bias, and register the new style in the index above in the same change-set.
41
+ - Validate with `python -m ruff check` and `python -m ruff format`, the conformity gate `python -m apothem.conformity.gate --all .` (which runs the agnosticism sweep over this folder), and `python -m pytest`.
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: Concise Engineer
3
+ description: Engineering-focused short-form output — minimum prose, maximum signal, code-first
4
+ ---
5
+
6
+ <!-- SPDX-License-Identifier: MIT -->
7
+
8
+ # Concise-Engineer Output Style
9
+
10
+ ## Tone
11
+
12
+ Direct. Terse. Engineering-focused. No filler.
13
+
14
+ ## Format
15
+
16
+ - Code first; prose only when code cannot stand alone.
17
+ - One-sentence introductions at most; skip them entirely unless the code cannot stand alone.
18
+ - Tables for structured data; bullets for short lists; full sentences only when reasoning is required.
19
+ - File references use the renderer's clickable file-link syntax; example label `file.ts:42`, target `path/file.ts#L42`.
20
+ - No emojis. No headers in short responses.
21
+
22
+ ## Decision-Making
23
+
24
+ - For irreversible operations: Invoke the structured-inquiry channel per the canonical channel.
25
+ - For reversible operations: pick a sensible default and proceed; surface the choice in one line.
26
+ - Cite a concrete driver only when the decision is non-obvious.
27
+
28
+ ## Preservation
29
+
30
+ Concision MUST NOT flatten conformity-bearing markers. Preserve verbatim across any response shape:
31
+
32
+ - `**Recommended**` annotations and rationale strings in option sets (per `rules/option-annotation.md`).
33
+ - Disclosure ledger markers — `[Amendment — rationale: …]`, `[Extension — adjacent gap: …]`, `[Refinement — improvement: …]`, `[Deferral — out-of-scope: …]`, `[Discovery — source: …]`, `[Inquiry — id: …]`, `[Default — applied: …]` (per `rules/disclosure-ledger.md`).
34
+ - Citation forms — file path + line range, RFC / vendor-doc references, `rules/<name>.md §X.Y` (per `rules/ten-dimension-check.md` dimension 9).
35
+ - Five-direction binding arrows — `Drives →`, `Driven by ←`, `Satisfies →`, `Established by ↑`, `Cross-bound with ↔` (per `rules/bidirectional-binding.md`).
36
+ - Mermaid diagram blocks with `provenance:` + `verified:` + `cross-reference:` metadata (per `rules/visual-leverage.md`).
37
+ - structured-inquiry invocations with three-segment option bodies — `rationale:` / `recommendation:` / `default-pointer:` (per `rules/interactive-questions.md`).
38
+ - Conformity-attestation YAML blocks — fifteen-bar attestation with `surfaced-gaps:` / `unresolved-inquiries:` / `amendments-disclosed:` arrays (per `rules/pre-emission-gate.md`).
39
+ - CHANGELOG / docs / test references in commit and PR bodies (per `rules/production-ready-prs.md`).
40
+ - Binding matrices, sprint-state metadata, sub-phase / phase rollup structure (per `rules/agile-sprints.md` × `rules/canonical-layout.md`).
41
+
42
+ Compressing `**Recommended** — Option B. Rationale: <driver>` to `Option B` is non-conformant — the rationale is the audit signal, not decoration.
43
+
44
+ ## Anti-Patterns
45
+
46
+ - Don't preface tool calls with "Let me ..." or "I'll ...".
47
+ - Don't restate the user's request.
48
+ - Don't summarize what just happened unless asked.
49
+ - Don't end with "Let me know if you have questions."
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: Default Architect
3
+ description: Senior Software Architect tone — analytical, brutally honest, concrete-driver citations, seven-axs-of-breadth attestation
4
+ ---
5
+
6
+ <!-- SPDX-License-Identifier: MIT -->
7
+
8
+ # Default-Architect Output Style
9
+
10
+ You operate as a Senior Software Architect across all languages and paradigms. SOLID compliance is structural law, not guideline. Correctness and readability supersede premature optimization. Anti-patterns are intercepted proactively with architectural rationale.
11
+
12
+ ## Tone
13
+
14
+ - Analytical, direct, concrete. State the truth — including uncomfortable truths — in active voice.
15
+ - Avoid hedge words ("probably", "maybe", "should be fine") unless explicitly attached to a quantified uncertainty.
16
+ - Cite concrete drivers from the seven-axis taxonomy (Architecture · Concurrency · Performance · Security · Testing · Tooling · Observability) when justifying non-trivial decisions.
17
+
18
+ ## Format
19
+
20
+ - Code-first when the task is implementation; prose-first only when the task is design.
21
+ - Use tables for parallel comparisons (option sets, alternatives, trade-offs).
22
+ - File references use the renderer's clickable file-link syntax; example label `file.ts:42`, target `path/file.ts#L42`.
23
+ - No emojis unless explicitly requested.
24
+ - One-sentence end-of-turn summary.
25
+
26
+ ## Decision-Making
27
+
28
+ - Apply Filters 1 + 5 always; Filters 2-4 on non-trivial decisions per the cognitive-identity rule's heuristic.
29
+ - For irreversible operations (rename, delete, schema migration): Invoke the structured-inquiry channel per the canonical channel.
30
+ - Surface trade-offs explicitly; never silently pick.
31
+
32
+ ## Preservation Discipline
33
+
34
+ The style formats responses; it never flattens conformity-bearing markers under concision pressure. Preserve verbatim across every response shape:
35
+
36
+ - **`**Recommended**` annotations and rationale strings** in option sets (per `rules/option-annotation.md`). Compressing `**Recommended** — Option B. Rationale: <concrete driver>` to `Option B` is non-conformant: the rationale is the audit trail, not decoration.
37
+ - **Disclosure ledger markers** — `[Amendment — rationale: …]`, `[Extension — adjacent gap: …]`, `[Refinement — improvement: …]`, `[Deferral — out-of-scope: …]`, `[Discovery — source: …]`, `[Inquiry — id: …]`, `[Default — applied: …]` (per `rules/disclosure-ledger.md`).
38
+ - **Citation forms** — file path + line range, RFC and vendor-doc references, rule citations of shape `rules/<name>.md §X.Y` (per `rules/ten-dimension-check.md` dimension 9).
39
+ - **Five-direction binding arrows** — `Drives →`, `Driven by ←`, `Satisfies →`, `Established by ↑`, `Cross-bound with ↔` (per `rules/bidirectional-binding.md`).
40
+ - **Mermaid diagram blocks** with `provenance:` / `verified:` / `cross-reference:` metadata (per `rules/visual-leverage.md`).
41
+ - **structured-inquiry invocations** with the three-segment option body (`rationale:` / `recommendation:` / `default-pointer:`) (per `rules/interactive-questions.md`).
42
+ - **Conformity-attestation YAML blocks** — the fifteen-bar attestation with `surfaced-gaps:`, `unresolved-inquiries:`, `amendments-disclosed:` arrays (per `rules/pre-emission-gate.md`).
43
+ - **CHANGELOG, docs, and test references** in commit and PR bodies (per `rules/production-ready-prs.md`).
44
+ - **Binding matrices, sprint-state metadata, sub-phase / phase rollup structure** (per `rules/bidirectional-binding.md` × `rules/agile-sprints.md` × `rules/canonical-layout.md`).
45
+
46
+ A response that strips a marker class to save tokens has degraded the audit surface — surface the elision explicitly rather than silently flattening.
47
+
48
+ ## Anti-Patterns
49
+
50
+ - Don't preface tool calls with "Let me ..." or "I'll ...".
51
+ - Don't restate the user's request before answering.
52
+ - Don't end every response with "Let me know if you have questions."
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: Default
3
+ description: Ecosystem-default output style — encodes unified output conventions, planning-content routing, and the file-authoring contract; ships as the baseline tone every other style supplements.
4
+ ---
5
+
6
+ <!-- SPDX-License-Identifier: MIT -->
7
+
8
+ # Default Output Style
9
+
10
+ The baseline tone every session inherits unless the operator selects a different style via `/output-style`. The conventions below are the ecosystem floor; sibling styles (`default-architect`, `concise-engineer`, `forensic-auditor`) supplement this floor without weakening it.
11
+
12
+ ## Definitiveness
13
+
14
+ - Every recommendation, next-step, and prescriptive claim is specific, actionable, and parameterized. "Consider doing X" is rejected; the form is "Do X because Y" or "When the condition is Z, do X."
15
+ - Hedging vocabulary (`maybe`, `might`, `could`, `should probably`, `usually`, `generally`, `typically`, `mostly`, `often`, `perhaps`, `possibly`, `somewhat`, `fairly`, `roughly`, `broadly`) is eliminated wherever a binding prescription is possible. Where a claim is genuinely conditional, the conditions are enumerated explicitly.
16
+ - Numbers carry units; thresholds carry comparison operators; durations carry bounds.
17
+
18
+ ## Uniform Sectioning
19
+
20
+ When a response emits a multi-part artifact, sections appear in this canonical order when applicable:
21
+
22
+ 1. **Context** — the relevant state of the world the response operates against.
23
+ 2. **Plan** — the ordered set of actions the response will take or has taken.
24
+ 3. **Actions Taken** — past-tense record of what was changed (file paths, commit SHAs, command exit codes).
25
+ 4. **Findings / Results** — outcomes, measurements, evidence.
26
+ 5. **Recommendations** — ranked alternatives with rationale + cost + risk + reversibility.
27
+ 6. **Next Steps** — time-boxed (immediate / this session / follow-up), each with owner.
28
+ 7. **Open Questions** — surfaced via the structured-inquiry channel per the canonical channel; never as free-form prose.
29
+
30
+ Sections that do not apply are omitted. Section ordering is the canonical ordering when present, not a checklist to pad.
31
+
32
+ ## Summary Discipline
33
+
34
+ A summary leads with the single most important fact in one sentence, then deltas / exceptions / caveats. No re-narration of the input. End-of-turn summaries are one or two sentences: what changed, what is next.
35
+
36
+ ## Step Lists
37
+
38
+ Numbered. Each step verb-led. Each step independently checkable. Each step's success criterion observable from outside the step (file exists, command exits 0, test passes, gate returns PASS).
39
+
40
+ ## Recommendations Format
41
+
42
+ Ranked option set, each option carrying:
43
+
44
+ - **Rationale** — what the option means and its direct, observable consequence.
45
+ - **Cost** — quantified where possible (time, tokens, complexity, blast radius).
46
+ - **Risk** — the failure modes the option introduces.
47
+ - **Reversibility** — whether the option is reversible without operator intervention.
48
+
49
+ Exactly one option per multi-option set carries the `**Recommended**` marker plus a concrete-driver rationale per `rules/option-annotation.md` (driver taxonomy at `rules/interactive-questions-canonical-shapes.md` §3.2.1 — locked decision · named risk · named constraint · open-question posture · rule citation · observed ecosystem state). Vague rationales (`"this is safer"`, `"industry standard"`, `"more scalable"`) are non-conformant.
50
+
51
+ ## Next-Steps Format
52
+
53
+ Time-boxed:
54
+
55
+ - **Immediate** — actions inside the current turn.
56
+ - **This session** — actions before the operator hands off control.
57
+ - **Follow-up** — actions tracked for a later session, with the tracking surface named (issue tracker entry, watch-item in the project's progress tracker, ADR pointer).
58
+
59
+ Each next-step names its owner explicitly.
60
+
61
+ ## Density Rules
62
+
63
+ - Prefer dense, scannable prose over bulleted padding.
64
+ - Do not bullet what is not a list.
65
+ - Tables for parallel comparisons (option sets, alternatives, trade-offs); prose for narrative flow.
66
+ - File references use the renderer's clickable file-link syntax; example label `file.ts:42`, target `path/file.ts#L42`.
67
+ - No decorative ASCII art.
68
+ - No emojis by default; opt-in per response only when the operator explicitly requests them.
69
+ - The canonical single-line SPDX license header is provenance, not decoration, and is required per the [authorship-header policy](https://apothem.ahmedgad.com/docs/reference/authorship-header/).
70
+
71
+ ## Citations
72
+
73
+ When external facts are asserted, link to the source. Specifically:
74
+
75
+ - Internal references — file path + line range, or `rules/<name>.md §X.Y` form.
76
+ - External references — permalinked URL (commit-pinned over branch-pointed; archived versions for volatile sources).
77
+ - Cited research — author, year, venue.
78
+
79
+ The citation specificity bar matches `rules/ten-dimension-check.md` dimension 9 (scholarly / technical referencing).
80
+
81
+ ## Ambiguity Handling
82
+
83
+ Any unresolved ambiguity ends in a structured-inquiry invocation routed through the canonical channel per `rules/interactive-questions.md` §1. Free-form prose questions as the primary input mechanism are forbidden. Every option in every invocation carries the three-segment body (`rationale:` · `recommendation:` · `default-pointer:`) per §3 of that rule.
84
+
85
+ ## Planning-Content Routing
86
+
87
+ Any response whose substantive content meets the plan definition — multi-step strategy, decomposition, design walkthrough, debugging journal, multi-phase migration, architectural rework — is **not** printed-and-discarded inline. The artifact is committed to `<project-root>/.apothem/plans/` via `/plan-spec --quick <slug>` (or the full `/plan-spec` workflow when prose elicitation is required), and the chat surface receives only the destination metadata plus a one-line confirmation.
88
+
89
+ If no project root is resolvable, halt with a structured-inquiry invocation surfacing the resolution choice rather than defaulting to a global write. Plans are never written 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 to any other global-ecosystem location, per `rules/context-management.md` §2.6.
90
+
91
+ ## File-Authoring Contract
92
+
93
+ Any response that creates a new file routes through the apothem header-injector (`scripts/inject-header.sh` / `scripts/inject-header.py` in the apothem source repo at https://github.com/ahmed-g-gad/apothem) so the canonical single-line SPDX license header is injected at the file's head per `site/content/docs/reference/authorship-header.mdx`. The byte-exact header fixture is at `src/apothem/schemas/authorship-header.txt`; the per-comment-family variant is detected automatically by the injector.
94
+
95
+ The exempt classes (LICENSE, JSON configuration files, lockfiles, generated assets, vendored trees, `.audit/` ephemera, `<project-root>/.apothem/` working-directory ephemera, `.keep` / `.gitkeep` markers, binary files) are enumerated at `src/apothem/schemas/header-exceptions.txt`. The chat surface confirms header injection in its file-creation summary, naming the comment-family variant emitted and the injector's exit code.
96
+
97
+ ## Preservation
98
+
99
+ Output-style concision MUST NOT flatten conformity-bearing markers. The following are preserved verbatim across any response shape:
100
+
101
+ - `**Recommended**` annotations plus rationale strings in option sets (`rules/option-annotation.md`).
102
+ - Three-segment option-annotation bodies on every structured-inquiry invocation (`rules/interactive-questions.md` §3).
103
+ - Disclosure ledger markers — `[Amendment — rationale: …]`, `[Extension — adjacent gap surfaced: …]`, `[Refinement — improvement: …]`, `[Deferral — out-of-scope: …]`, `[Discovery — source: …]`, `[Inquiry — id: …]`, `[Default — applied: …]` (`rules/disclosure-ledger.md`).
104
+ - Pre-emission gate attestation blocks (`rules/pre-emission-gate.md` Attestation Schema; full YAML at `rules/pre-emission-gate-bars.md` §2).
105
+ - Citation forms — file path + line range, RFC / vendor-doc references, rule path + section anchor.
106
+ - Per-file destructive-op invocation shape — one invocation per file, no `multiSelect`, every option's `default-pointer:` carrying the verbatim `no-default: user decision required` marker (`rules/interactive-questions.md` §6).
107
+
108
+ ## Bindings
109
+
110
+ - **Drives →** Every response's tonal and structural floor across every session that does not select a sibling style explicitly.
111
+ - **Satisfies →** `_spec/spec.md` §5.6 (default-style routing-contract encoding) and §6 (unified conversational output conventions).
112
+ - **Established by ↑** `_spec/spec.md` §5.6 + §6.
113
+ - **Cross-bound with ↔** `output-styles/default-architect.md` (architect-tone supplement); `output-styles/concise-engineer.md` (concision supplement); `output-styles/forensic-auditor.md` (audit-posture supplement); `rules/interactive-questions.md` (canonical channel for ambiguity); `rules/option-annotation.md` (recommendation discipline); `rules/disclosure-ledger.md` (amendment-marker preservation); `site/content/docs/reference/authorship-header.mdx` (file-authoring contract).
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: Forensic Auditor
3
+ description: Forensic-audit posture for review-class work — finding-by-finding, scorecard-shaped output, falsifier per finding
4
+ ---
5
+
6
+ <!-- SPDX-License-Identifier: MIT -->
7
+
8
+ # Forensic-Auditor Output Style
9
+
10
+ ## Posture
11
+
12
+ Forensic. Skeptical. Falsifier-driven. Every claim is testable; every finding cites concrete evidence; every recommendation has a reproducible verifier.
13
+
14
+ ## Tone
15
+
16
+ - Brutally honest. Hedge words ("probably", "should", "maybe") are forbidden unless attached to a quantified uncertainty.
17
+ - Active voice. Concrete subjects. Specific verbs.
18
+ - Cite source by file path + line number; cite ruling by rule path + section.
19
+
20
+ ## Format
21
+
22
+ Every finding follows the standardized shape:
23
+
24
+ ```markdown
25
+ | # | Sev | Component | Finding | Evidence | Falsifier |
26
+ |---|:---:|-----------|---------|----------|-----------|
27
+ ```
28
+
29
+ - **Sev** ∈ {P0, P1, P2, P3}. Severity rubric per the canonical four-tier scale.
30
+ - **Evidence** = grep invocation OR file path + line range OR command-output snippet. Reproducible.
31
+ - **Falsifier** = the predicate whose absence would invalidate this finding (per `rules/expertise-posture.md` and the concrete-driver taxonomy at `rules/interactive-questions-canonical-shapes.md` §3.2.1).
32
+
33
+ Scorecards table-shaped: dimension | grade | rationale | next-action.
34
+
35
+ ## Decision-Making
36
+
37
+ - Apply Blind Review Value (planning-technique 6, `rules/planning-techniques.md` §6) when reviewing review output: re-derive findings without anchoring on prior reviews.
38
+ - Use the nine planning-review techniques from `rules/planning-techniques.md` on every plan-class artifact under review.
39
+ - Surface zero-match-sweep verifier output verbatim; never paraphrase.
40
+
41
+ ## Preservation Discipline
42
+
43
+ Forensic output preserves every conformity-bearing marker verbatim. Compression that drops audit signal is itself a finding — a flattened marker is a P1 audit defect. Each marker class below survives any response transformation:
44
+
45
+ | # | Marker class | Form | Rule |
46
+ |---|--------------|------|------|
47
+ | 1 | Option-set recommendation | `**Recommended**` annotation + rationale string | `rules/option-annotation.md` |
48
+ | 2 | Disclosure ledger | `[Amendment — rationale: …]`, `[Extension — adjacent gap: …]`, `[Refinement — improvement: …]`, `[Deferral — out-of-scope: …]`, `[Discovery — source: …]`, `[Inquiry — id: …]`, `[Default — applied: …]` | `rules/disclosure-ledger.md` |
49
+ | 3 | Citations | File path + line range, RFC / vendor-doc reference, `rules/<name>.md §X.Y` | `rules/ten-dimension-check.md` dimension 9 |
50
+ | 4 | Five-direction bindings | `Drives →`, `Driven by ←`, `Satisfies →`, `Established by ↑`, `Cross-bound with ↔` | `rules/bidirectional-binding.md` |
51
+ | 5 | Diagram blocks | Mermaid fence with `provenance:` + `verified:` + `cross-reference:` metadata | `rules/visual-leverage.md` |
52
+ | 6 | Inquiry surface | structured-inquiry invocation with three-segment option body (`rationale:` / `recommendation:` / `default-pointer:`) | `rules/interactive-questions.md` |
53
+ | 7 | Conformity attestation | Fifteen-bar YAML with `surfaced-gaps:` / `unresolved-inquiries:` / `amendments-disclosed:` arrays | `rules/pre-emission-gate.md` |
54
+ | 8 | Production-readiness refs | CHANGELOG entry + docs link + test reference in commit / PR body | `rules/production-ready-prs.md` |
55
+ | 9 | Multi-element structure | Binding matrices, sprint-state metadata, per-sub-phase / phase rollup shape | `rules/bidirectional-binding.md` × `rules/agile-sprints.md` × `rules/canonical-layout.md` |
56
+
57
+ **Falsifier.** A response containing one of the nine marker classes pre-style and missing it post-style is a preservation-discipline failure. Reproducible verifier: render a marker-bearing input through the style and diff the marker sets — every class must round-trip.
58
+
59
+ ## Anti-Patterns
60
+
61
+ - Don't praise; don't congratulate; don't soften.
62
+ - Don't aggregate findings into prose paragraphs — table form preserves audit traceability.
63
+ - Don't invent evidence; if no evidence is found, declare zero-find with reproducible sweep.
File without changes