@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,48 @@
1
+ ---
2
+ name: "tool-use-discipline"
3
+ description: "Ordinary tool use runs as a disciplined loop: independent tool calls go in one turn, never sequentially; the agent works an observe → decide → act cadence; the loop iterates until a verifiable exit condition is met, never a fixed count. Generalizes the agent-tier single-message parallel-launch discipline down to every tool call. Harness-agnostic; advisory under the agnostic posture."
4
+ pathFilter: ""
5
+ alwaysApply: true
6
+ ---
7
+
8
+ <!-- SPDX-License-Identifier: MIT -->
9
+
10
+ # Rule: Tool-Use Discipline — Parallel Calls, the Observe → Decide → Act Loop
11
+
12
+ ## Purpose
13
+
14
+ Every tool an agent reaches for is a step in a loop, not an isolated act. This rule names that loop and binds two disciplines on it: independent calls run together in one turn, and the loop runs until a verifiable condition closes it. The agent-orchestration rules carry the same discipline at the agent-team tier; this rule states it for ordinary tool use, below the team threshold.
15
+
16
+ ## Obligations
17
+
18
+ ### 1. Parallel Tool Execution
19
+
20
+ Independent tool calls — calls whose inputs do not depend on each other's outputs — MUST be issued together in a single turn, never one-per-turn in sequence. Reading three files, grepping two patterns, and listing a directory to answer one question is one batch, not five turns. This generalizes the single-message parallel-launch invariant `rules/agent-orchestration.md` §3 binds at the agent-dispatch tier down to the ordinary-tool tier: the same latency and context gain applies whether the parallel unit is an agent or a `Read`.
21
+
22
+ Sequence only on a genuine dependency — when call B's input is call A's output, A precedes B. A dependency the agent cannot name is not a dependency; batch the calls.
23
+
24
+ ### 2. The Observe → Decide → Act Loop
25
+
26
+ The agent's canonical working cadence is **observe → decide → act**: observe the current state (read context, run a tool, inspect a result), decide the next move from what was observed, act, then observe again. Naming the loop makes the cadence explicit. The lineage is loop-engineering; the vocabulary is apothem's own.
27
+
28
+ A turn that acts without first observing — edits a file it has not read this loop, asserts a result it has not checked — has skipped the observe step. Read-before-edit, locate-before-read per `rules/large-file-reading.md`, and check-before-claim are the same discipline at the tool tier.
29
+
30
+ ### 3. Iterate to a Verifiable Exit, Never a Fixed Count
31
+
32
+ The loop continues until a **verifiable exit condition** is true — a gate passes, a test goes green, a build succeeds, a read confirms the expected state — never until a fixed iteration count elapses, never on the agent's unchecked sense that it is "probably done." When no machine-checkable exit exists, the loop closes on an explicit stated criterion the operator can audit, not a silent stop. This is the tool-tier form of the open-loop discipline `rules/multi-agent-workflow.md` §1 declares for multi-agent waves; a bounded retry with a defined retreat per `rules/context-management.md` §8 bounds the loop when the exit resists convergence.
33
+
34
+ ## Failure tells
35
+
36
+ Three `Read` calls across three turns to answer one question (sequential where parallel was correct). An `Edit` to a file the agent has not read in the current loop (act without observe). A "done" claimed on no checked condition (no verifiable exit). A loop that stops after N tries with the exit condition still false and no retreat stated (fixed-count stop). A dependency asserted between two calls that share no input/output edge (false-sequencing).
37
+
38
+ ## Bindings (§0.j five-direction)
39
+
40
+ - **Drives →** ● Every ordinary tool-call batch (independent calls issued together per §1). ● Every agent working cadence (the observe → decide → act loop per §2). ● Every loop's exit decision (verifiable condition, never fixed count, per §3).
41
+ - **Satisfies →** ● The tool-tier generalization of the single-message parallel-launch discipline. ● The named canonical agent-loop vocabulary the ecosystem references.
42
+ - **Established by ↑** ● `rules/agent-orchestration.md` §3 (the agent-tier single-message parallel-launch invariant this rule generalizes down to ordinary tool calls). ● `rules/multi-agent-workflow.md` §1 (the open-loop verifiable-exit discipline this rule states at the tool tier).
43
+ - **Gated by ←** ● `CLAUDE.md` always-loaded preamble. ● `rules/agnostic-posture.md` §2 (this rule is advisory, not a blocking gate).
44
+ - **Cross-bound with ↔** ↔ `rules/agent-orchestration.md` (§3 single-message parallel-launch — this rule is its ordinary-tool-tier generalization; the team-tier mechanics are owned there). ↔ `rules/context-management.md` (§7.2 demand-loading and §8 bounded-retry-with-retreat — the observe step preserves context budget and the loop's retreat path is owned there). ↔ `rules/large-file-reading.md` (locate-before-read is the observe-step discipline at the file tier). ↔ `rules/multi-agent-workflow.md` (§1 open-loop verifiable-exit — this rule states the same exit discipline at the tool tier, below the multi-agent threshold).
45
+
46
+ ## Recommended Next Step
47
+
48
+ **Batch the next set of independent tool calls into one turn** and name the loop's verifiable exit condition before acting, per §1 and §3 of this rule.
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: "visual-leverage"
3
+ description: "Structural subject matter — architecture, control flow, data flow, dependency graph, state machine, sequence, decision tree, hierarchy, precedence stack, lifecycle, permission matrix — carries a current-reality diagram alongside its prose, with provenance and a verification date. Mermaid is the recommended default for Markdown-centric ecosystems; the host's existing notation is honored per M1 host-discovery."
4
+ pathFilter: "**/*.md, **/docs/**, **/CLAUDE.md, **/rules/**, **/skills/**, **/agents/**, **/commands/**, **/adr/**, **/rfcs/**, **/architecture*, **/design*"
5
+ alwaysApply: false
6
+ ---
7
+
8
+ <!-- SPDX-License-Identifier: MIT -->
9
+
10
+ # Rule: Visual Leverage — Diagrams Where Structure Is the Subject
11
+
12
+ ## What this rule enforces
13
+
14
+ This rule binds **M9 — Visual Leverage**. Where the host-project artifact's subject matter is **structural** — architecture, control flow, data flow, dependency graph, state machine, sequence, decision tree, hierarchy, precedence stack, lifecycle, permission matrix — the agent MUST produce a **diagram** alongside the prose: never a substitute (the prose carries semantics the diagram cannot) but a **co-equal first-class artifact**. Prose-only structural documentation is systematic under-utilization of the medium and a structural failure, not a style choice. Every diagram MUST carry provenance (hand-authored / generated / extracted), a **verification date**, and a back-binding to the artifact it abstracts. Diagrams reflect **current reality** — never historical or aspirational state — and a patch that changes a structure updates its diagram in the same change.
15
+
16
+ ## Pre-conditions
17
+
18
+ Applies whenever a host-project artifact's subject matter is structural in any sense enumerated above. Diagrams are NOT required for narrative prose, declarative configuration, prose-only how-to guides, or single-function code comments — the trigger is structural subject matter, not Markdown presence. A trivial-scope structural surface (a four-line pipeline described in one unambiguous paragraph) is exempt; the diagram becomes mandatory the moment the structure exceeds what one paragraph carries without ambiguity.
19
+
20
+ ## Required behavior
21
+
22
+ ### 1. Trigger Catalog — When a Diagram Is Mandatory
23
+
24
+ | Subject matter | Diagram class (recommended) | Why a diagram |
25
+ |---|---|---|
26
+ | Architecture (component layout, layering, integration boundaries) | Architecture sketch (Mermaid `graph TD` / `flowchart`) | Spatial relationships between components are illegible in linear prose |
27
+ | Control flow (decision trees, branching pipelines, retry loops) | Decision tree (`flowchart`) | Branch coverage and termination conditions are auditable visually |
28
+ | Data flow (records, tokens, sizes through stages) | Data-flow diagram (`flowchart` with edge annotations) | Stage-to-stage transformations and back-pressure points become explicit |
29
+ | State machine (lifecycle states, transition triggers) | State diagram (`stateDiagram-v2`) | Reachability and dead-end states are inspectable |
30
+ | Sequence (ordered interactions across actors) | Sequence diagram (`sequenceDiagram`) | Message ordering and concurrency are unambiguous |
31
+ | Dependency graph (modules, packages, services) | Dependency graph (`graph LR`) | Cycles and orphans are visible at a glance |
32
+ | Hierarchy (taxonomies, inheritance, organizational structure) | Tree (`graph TD`) | Depth and sibling counts are readable |
33
+ | Precedence stack (rule precedence, deny-overrides-allow, override chains) | Vertical stack (`graph TD` ordered top-down) | Override semantics need spatial ordering |
34
+ | Permission matrix (actor × resource × verdict) | Heatmap or table | Sparse / dense regions are legible in two dimensions |
35
+
36
+ Subject matter fitting one row MUST emit the corresponding diagram class (or its host-discovered equivalent per §3). Subject matter fitting two or more rows emits one diagram per row — a state machine that ALSO carries a permission matrix emits both.
37
+
38
+ ### 2. Diagram Provenance — Required Metadata
39
+
40
+ Every diagram MUST carry a metadata header (Mermaid `%%` comments, or the host's diagram-notation comment syntax) with all three fields:
41
+
42
+ - **`provenance: <hand-authored | generated-from <source> | extracted-from <source>>`** — how the diagram was produced. Generated diagrams cite the generator (script path, command, tool); extracted diagrams cite the source artifact (file path, line range).
43
+ - **`verified: <ISO-8601 date>`** — when the diagram was last verified against current reality. Updated **in the same change** that touches the abstracted structure (per §4).
44
+ - **`cross-reference: <peer artifact>`** — the artifact the diagram binds back to (prose section, code module, spec). This is the M10 reciprocal-binding surface (`rules/bidirectional-binding.md`).
45
+
46
+ A diagram missing any field is non-conformant. A diagram whose `verified` date precedes the structure it abstracts is **stale** (per §4).
47
+
48
+ ### 3. Notation Discipline — Mermaid Default, Host Override
49
+
50
+ **Mermaid is the recommended default** for Markdown-centric ecosystems (concrete drivers per `rules/interactive-questions-canonical-shapes.md` §3.2.1):
51
+
52
+ - **Class 5 rule citation** — the hooks pipeline hooks pipeline uses Mermaid decision-tree diagrams; sibling `rules/` use Mermaid for decision-trees and sequence diagrams.
53
+ - **Class 6 observed-state** — Mermaid renders inline in GitHub, GitLab, Bitbucket, Markdown editors (VS Code, Obsidian), and most doc generators (Fumadocs, Docusaurus, Sphinx via `myst-parser`); it diffs cleanly in version control and covers the full §1 diagram family.
54
+
55
+ **Host override (M1 discipline).** Where the host has ratified a different notation — PlantUML, draw.io, Graphviz dot, ASCII-art, mermaid-py, or vendor-specific (Lucidchart, Miro, Excalidraw) — honor it per `rules/host-discovery.md`: walk the host's structural-artifact corpus (`docs/`, `architecture/`, `adr/`, `rfcs/`), count notation occurrences, adopt the dominant one. Where the host is silent, surface the choice as an inquiry per `rules/authority-inquiry.md` with Mermaid as the **Recommended** option per `rules/option-annotation.md`.
56
+
57
+ ### 4. Fidelity & Staleness — Current Reality Only
58
+
59
+ Every diagram reflects **current reality**, never historical or aspirational state. Three fidelity invariants:
60
+
61
+ 1. **Same-change update.** A patch changing a structure (add a component, rename a state, reorder a precedence stack, add a permission row) updates the corresponding diagram in the same change. Splitting structure-change and diagram-update across two commits / PRs leaves the diagram stale at the boundary — non-conformant even when transient.
62
+ 2. **Staleness check.** Compare the `verified:` date against the modification date of the abstracted structure; when the structure is newer, the diagram is **stale**. The `diagram-staleness-grep` mechanical matcher flags stale diagrams at the pre-emission gate.
63
+ 3. **Aspirational-state declaration.** A diagram describing what the system *will* or *should* do (a target architecture, a future state) MUST carry the literal label `[Aspirational — target: <name>; date: <ISO-8601>]` in its metadata header AND as visible prose adjacent to it. An unlabelled aspirational diagram is non-conformant.
64
+
65
+ ### 5. Surface Imposition — Where Diagrams Land
66
+
67
+ | Surface | Diagram obligation |
68
+ |---|---|
69
+ | `CLAUDE.md` | Carries the standing directive that structural subject matter draws (M9 row in §8 fifteen-mandate registry). |
70
+ | `rules/*.md` | Decision-tree-bearing rules emit Mermaid `flowchart TD` per §1 row "Control flow". Architectural-discipline rules emit Mermaid `graph TD` per §1 row "Architecture". |
71
+ | `skills/*/SKILL.md` | Multi-step procedures whose subject matter is structural emit a sequence diagram or flowchart in the procedure body. |
72
+ | `agents/*.md` | Architectural-remit agents emit diagrams in their return format per `rules/canonical-layout.md`. |
73
+ | `commands/*.md` | Pipeline-shaped commands emit a flowchart of the pipeline's decision-tree (every `commands/plan-*.md` carries a Mermaid `flowchart TD` of its workflow). |
74
+ | `output-styles/*.md` | Preserve diagram blocks rather than flattening them — a concise output style does not collapse a Mermaid `flowchart` to a bulleted list. |
75
+ | `hooks/messages/*.md` | Carry diagrams when the hook's subject matter is structural (the dispatcher's flow, the precedence stack of overlapping matchers). |
76
+ | `conformity/*-grep.py` headers | Carry no diagrams (single-purpose scripts; structural surface is the dispatch tree at `conformity/gate.py`). |
77
+
78
+ ### 6. Failure Recovery — When a Diagram Is Missing or Stale
79
+
80
+ - **Missing diagram on structural subject matter.** Author the diagram in the same change as the prose; never emit the prose-only artifact and defer the diagram — it is non-conformant at emission. Where the diagram needs data the agent lacks (e.g., a permission matrix depending on host-discovered scope), surface the gap as an inquiry per `rules/authority-inquiry.md` and mark the missing diagram a `<USER-CONFIRM:diagram-needs-data>` placeholder — which blocks emission per the pre-emission gate.
81
+ - **Stale diagram detected.** Update the diagram and its `verified:` date in the same change that touched the structure. On a substantial rewrite, update `provenance:` to reflect it (`generated-from <source>` → `hand-authored` for a manual rewrite).
82
+ - **Notation drift.** Convert a diagram in a non-ratified notation (e.g., Mermaid in a PlantUML-host project) at next touch. Mixed-notation corpora are a finding per M14 systemic participation.
83
+
84
+ ## Disclosure surface
85
+
86
+ Every diagram emission, update, or staleness recovery is recorded in the disclosure ledger per `rules/disclosure-ledger.md`:
87
+
88
+ - `[Diagram — emitted: <path>; class: <architecture | flowchart | sequence | state | dependency | hierarchy | precedence | matrix>; provenance: <provenance-form>; verified: <ISO-8601>]` for new diagrams.
89
+ - `[Diagram — refreshed: <path>; reason: <staleness | structure-change | notation-conversion>; verified: <ISO-8601>]` for updates.
90
+ - `[Diagram — deferred: subject matter is structural but the diagram requires <missing-data>; tracking: <USER-CONFIRM:id> | inquiry-id]` for cases where the diagram cannot be authored without further input.
91
+
92
+ ## Failure tells
93
+
94
+ A 2,000-word architectural description with no diagram. An ADR that says "the new flow is …" in prose for ten paragraphs without an accompanying state diagram. A permission rule documented as a bulleted list of `(tool, scope, verdict)` triples instead of a matrix. A migration guide that lists steps in prose but draws no state machine of the migration's lifecycle. A diagram with no `verified:` date. A diagram whose `verified:` date precedes the latest modification of the structure it abstracts. A diagram in PlantUML in a host project where every other diagram is Mermaid (notation drift). An aspirational diagram presented as current reality without the `[Aspirational — …]` label. A "before / after" architecture comparison where only the "before" sketch is current and the "after" is undated. Multiple diagrams of the same subject matter scattered across the artifact corpus with conflicting depictions (no single source of truth).
95
+
96
+ ## Bindings (§0.j five-direction)
97
+
98
+ - **Drives →** ● Every structural-artifact emission across the ecosystem (every rule decision-tree, every command flowchart, every skill sequence diagram). ● The `diagram-staleness-grep` mechanical matcher at `conformity/diagram_staleness_grep.py` — operationalizes the §4 staleness check. ● Every Mermaid `%%` comment header carrying `provenance: …` + `verified: …` + `cross-reference: …`. ● The `verified:` date discipline at every `rules/*.md` Mermaid block. ◐ The aspirational-state declaration at every target-architecture diagram.
99
+ - **Satisfies →** ● the fifteen-mandate registry row **M9 — Visual Leverage**. ● the Pre-Emission Gate row 9 (M9 visual leverage check).
100
+ - **Established by ↑** ● the fifteen-mandate registry (ratifies M9). ● the Pre-Emission Gate row 9.
101
+ - **Gated by ←** ● The trivial-vs-non-trivial threshold (trivial structural surfaces with unambiguous prose are exempt). ● `CLAUDE.md` always-loaded preamble. ● The path-filter declared in this rule's frontmatter (Markdown / docs / structural-artifact directories).
102
+ - **Cross-bound with ↔** ↔ `rules/host-discovery.md` (M1 — host's existing notation overrides Mermaid default). ↔ `rules/authority-inquiry.md` (M5 — silent host on notation routes through inquiry surface). ↔ `rules/option-annotation.md` (M7 — every notation choice carries the Recommended marker plus concrete-driver rationale). ↔ `rules/bidirectional-binding.md` (M10 — diagram `cross-reference:` metadata is the M10 reciprocal-binding surface). ↔ `rules/pre-emission-gate.md` (M4 — bar 9 of the gate enforces this rule's diagram-presence check on structural subject matter). ↔ `rules/disclosure-ledger.md` (M2 — diagram emissions / refreshes / deferrals are recorded in the ledger).
@@ -0,0 +1,9 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # schemas/ — provenance notice
4
+
5
+ The `.json`, `.yaml`, and `.txt` files in this directory are exempt from the canonical authorship-header per spec §4.6.4: JSON has no comment syntax, and the byte-exact `.yaml` / `.txt` fixtures consumed verbatim by matchers and installers cannot carry an in-band header without breaking those consumers. This `NOTICE.md` carries the canonical Markdown-variant SPDX license notice on behalf of the entire `schemas/` directory as a **directory-class provenance statement**: every header-exempt file alongside it is licensed under MIT through this notice. For a curated, purpose-and-consumer description of each file, see [`README.md`](README.md) — this notice does not duplicate that enumeration. The schemas validate frontmatter on `agents/`, `skills/`, `commands/`, and `output-styles/` artifacts inside this ecosystem, and on plan files authored in downstream projects. The Plan schema is consumed by `/plan-spec --quick` at plan-frontmatter authoring time so downstream-project plans can be validated without invoking the full prose-refinement pipeline.
6
+
7
+ ## License coverage
8
+
9
+ This notice covers every header-exempt file in this directory — the `.json` schemas, the `.yaml` configuration and manifest files, and the `.txt` fixtures (including `__init__.py`'s sibling data files). The authoritative per-file purpose-and-consumer catalog lives in [`README.md`](README.md); when a new schema or fixture is added, it is described there rather than re-enumerated here.
@@ -0,0 +1,104 @@
1
+ <!-- SPDX-License-Identifier: MIT -->
2
+
3
+ # Schemas
4
+
5
+ JSON Schema definitions, configuration schemas, and fixture files — the validation surface for Apothem's artifact frontmatter and the canonical fixtures the conformity tooling reads. These files ship inside the installed wheel via `[tool.setuptools.package-data]` so downstream tooling can resolve them by package path.
6
+
7
+ > **Provenance.** [`NOTICE.md`](NOTICE.md) carries the canonical single-line SPDX license header on behalf of every `.json` / `.yaml` / `.txt` file here — those formats cannot carry an in-band header. See `NOTICE.md` for the per-file provenance record; this README describes purpose and consumers.
8
+
9
+ ## Frontmatter schemas
10
+
11
+ JSON Schema files validating the YAML frontmatter of apothem artifact classes.
12
+
13
+ | File | Validates |
14
+ |------|-----------|
15
+ | [`agent.schema.json`](agent.schema.json) | Frontmatter of persistent agent definitions under [`../agents/`](../agents/). |
16
+ | [`command.schema.json`](command.schema.json) | Frontmatter of slash-command definitions under [`../commands/`](../commands/). |
17
+ | [`output-style.schema.json`](output-style.schema.json) | Frontmatter of output-style definitions under [`../output-styles/`](../output-styles/). |
18
+ | [`skill.schema.json`](skill.schema.json) | Frontmatter of skill definitions under [`../skills/`](../skills/)`<name>/SKILL.md`. |
19
+ | [`plan.schema.json`](plan.schema.json) | Frontmatter of downstream-project plan files; consumed by `/plan-spec --quick` so plans can be validated without the full prose-refinement pipeline. |
20
+ | [`profile.schema.json`](profile.schema.json) | The apothem shared-profile configuration (`~/.config/apothem/profile.yaml`). |
21
+
22
+ ## Profile-schema versioning & migration
23
+
24
+ The shared profile carries an optional top-level `schema_version` integer
25
+ (minimum `1`). The contract is additive and forward-compatible:
26
+
27
+ - **Optional, defaults to the current version.** A version-less profile is
28
+ treated as the current schema version and validates unchanged; existing
29
+ profiles need no edit.
30
+ - **Current version is `1`.** The engine constant `_CURRENT_SCHEMA_VERSION` in
31
+ [`../lib/profile.py`](../lib/profile.py) is the source of truth.
32
+ - **Additive migration shim.** `migrate_profile` runs at the top of
33
+ `validate_profile`, before schema validation. It forward-migrates a profile
34
+ to the current version through an ordered, append-only migration chain. The
35
+ v1 chain is a no-op — the profile is returned unchanged.
36
+ - **Newer-than-supported is rejected early.** A profile stamped with a
37
+ `schema_version` greater than the engine supports raises a
38
+ `profile.version_unsupported` diagnostic — "the profile was written by a
39
+ newer apothem; upgrade the engine" — instead of an opaque
40
+ `additionalProperties` error. A non-integer `schema_version` is left for the
41
+ schema validator to reject.
42
+
43
+ ## Canonical `$id` host
44
+
45
+ Every `*.schema.json` `$id` resolves under the canonical host
46
+ `https://apothem.ahmedgad.com/schemas/<name>.schema.json` (filename segment
47
+ preserved). `tests/unit/test_schema_id_host.py` asserts the invariant across
48
+ the directory.
49
+
50
+ ## Configuration & manifest schemas
51
+
52
+ | File | Purpose |
53
+ |------|---------|
54
+ | [`compatibility-matrix.yaml`](compatibility-matrix.yaml) | Cross-harness compatibility matrix — declares per-rule, per-agent, per-hook, per-output-style, per-skill, and per-schema compatibility across the apothem harness adapters. A reference artifact exposed via `schemas.compatibility_matrix_path()`; install-time asset resolution itself flows through `../lib/propagation-manifest.yaml` and `cohort-manifest.yaml`, not this matrix. |
55
+ | [`cohort.schema.json`](cohort.schema.json) | Schema for the cohort manifest — defines the closed cohort set (`core`, `developer`, `security`, `research`, `ai-engineering`, `full`) and the `per_harness_targets` contract that resolves each cohort's native plugin target. Consumed by `cohort-manifest.yaml` (which validates against it) and `tests/unit/test_cohort_contract.py`. |
56
+ | [`cohort-manifest.yaml`](cohort-manifest.yaml) | The cohort manifest itself — declares the six cohorts and their catalog member sets, validated against `cohort.schema.json`. Consumers resolve per-harness native targets through `per_harness_targets.source` (`../lib/propagation-manifest.yaml`); asserted by `tests/unit/test_cohort_contract.py`. |
57
+ | [`plugin.schema.json`](plugin.schema.json) | Schema for the Claude Code plugin manifest (`.claude-plugin/plugin.json`) — the component-path contract for `commands`, `agents`, and `skills`. Consumed by `build_plugin_manifest` / `_validate_manifest` in [`../lib/plugin_tree.py`](../lib/plugin_tree.py). |
58
+ | [`handoff-manifest.yaml`](handoff-manifest.yaml) | Manifest schema for cross-phase handoffs in the plan pipeline. |
59
+ | [`advisory-finding.schema.json`](advisory-finding.schema.json) | Output contract for the advisory-mode conformance / security auditor and reporting surface — the finding shape (`id`, `category`, `severity`, `location`, `message`, `next_step`) plus the advisory semantics (findings reported, never blocking unless `strict`). |
60
+ | [`header-visibility.yaml`](header-visibility.yaml) | Visibility configuration for authorship-header rendering across surfaces. |
61
+ | [`cohort-metadata-vocabulary.yaml`](cohort-metadata-vocabulary.yaml) | Canonical repo-controlled vocabulary — status names, severity names, ownership classes, per-cohort frontmatter key sets (mechanical floor vs authoritative contract), version-field rules, output-contract field shapes, and exemption markers. Each entry names the live artifact (`controlled_by`) that owns its values; `tests/unit/test_cohort_metadata_vocabulary.py` asserts the live schemas and validators agree with the declared values, so drift on either surface fails the gate. |
62
+
63
+ ## Data-surface schemas
64
+
65
+ Agnostic JSON Schema files validating the records of the memory, contexts, and
66
+ continuous-learning surfaces. None carries a tool-specific or vendor-specific
67
+ identifier, so the same record applies across every installation target.
68
+
69
+ | File | Validates |
70
+ |------|-----------|
71
+ | [`memory-record.schema.json`](memory-record.schema.json) | One durable, operator-portable knowledge record in the memory surface — a fact, convention, preference, insight, or reference. |
72
+ | [`context-fragment.schema.json`](context-fragment.schema.json) | One named, injectable prompt or context fragment with an enable/disable switch and activation metadata. |
73
+ | [`learning-signal.schema.json`](learning-signal.schema.json) | One captured signal in the opt-in continuous-learning loop — the raw observation the capture stage records once the operator opts in. |
74
+
75
+ ## Fixtures
76
+
77
+ | File | Purpose |
78
+ |------|---------|
79
+ | [`authorship-header.txt`](authorship-header.txt) | Byte-exact canonical authorship-header fixture (all variant families). The conformity tooling renders per-variant blocks from these lines. |
80
+ | [`header-exceptions.txt`](header-exceptions.txt) | Glob list of file classes exempt from authorship-header injection — a pathspec fixture, one pattern per non-comment line. |
81
+ | [`profile.example.yaml`](profile.example.yaml) | Worked example of a shared profile — copy to `~/.config/apothem/profile.yaml` and edit; validated against `profile.schema.json`. |
82
+ | [`profile.minimal.yaml`](profile.minimal.yaml) | Minimal valid shared profile — the smallest profile that validates against `profile.schema.json`; consumed by `../cli/_helpers.py`, `__init__.py`, and the profile / rollback / learning tests. |
83
+ | [`freshness-token-denylist.txt`](freshness-token-denylist.txt) | Denylist of legacy / deferral / replacement narrative tokens — read by `../conformity/freshness_token_grep.py` to enforce the current-version-only facade. |
84
+ | [`reference-token-denylist.txt`](reference-token-denylist.txt) | Denylist of reference-platform brand / identifier tokens — read by `../conformity/reference_token_grep.py` to enforce own-voice reimplementation. |
85
+
86
+ ## Other contents
87
+
88
+ - `__init__.py` — package marker making `apothem.schemas` importable so the schema files resolve by package path at runtime.
89
+ - [`NOTICE.md`](NOTICE.md) — the directory's authorship-header carrier and provenance record (already present; not duplicated here).
90
+
91
+ ## Conventions
92
+
93
+ - `.json` / `.yaml` / `.txt` files carry no in-band authorship header; `NOTICE.md` carries it for the directory class per the spec's authorship-header exception.
94
+ - Frontmatter schemas are consumed by the PreToolUse Write hooks (frontmatter-compliance check) and by the ecosystem-audit skill.
95
+ - All files in this directory ship in the installed wheel via the package-data declaration in `pyproject.toml`.
96
+
97
+ ## Operating in this folder
98
+
99
+ - **Resolve-by-package-path ripple.** Matchers, installers, and the PreToolUse hooks resolve these files by package path, so a change here ripples to every consumer.
100
+ - **Byte-exact fixtures are contracts.** `authorship-header.txt`, `header-exceptions.txt`, and the denylist fixtures are consumed verbatim by matchers and installers; their content is a contract, not free prose. A whitespace or line change ripples to every consumer — treat a fixture edit as a contract change and verify its matchers and installers still pass.
101
+ - **Schema ↔ consumer agreement.** The cohort-metadata vocabulary and the live schemas must agree; a drift on either surface fails the gate. Change a frontmatter schema and its consuming validator in the same change-set.
102
+ - **Agnostic data surfaces.** The memory / context / learning record schemas carry no tool-specific or vendor-specific identifier; keep them portable across every installation target.
103
+ - **Adding or modifying a schema:** edit the `.json` / `.yaml` file (no SPDX line), update `NOTICE.md` if a new file class arrives, and update every consumer in the same change-set (the PreToolUse frontmatter check, the audit surface, or a validator that reads the schema).
104
+ - Validate with `python -m apothem.conformity.gate --all .` and `python -m pytest` (the cohort-vocabulary test asserts schema/validator agreement).
@@ -0,0 +1,176 @@
1
+ # SPDX-License-Identifier: MIT
2
+
3
+ """Schemas, fixtures, and reference data packaged as Python resources.
4
+
5
+ This package ships JSON schemas, YAML configuration fixtures, and text
6
+ fixtures (banner, exceptions list) as importable package resources so
7
+ runtime consumers resolve them via ``importlib.resources`` rather than
8
+ filesystem-walks anchored against ``__file__``. The latter break in
9
+ installed-package contexts where the relative layout differs from the
10
+ source tree.
11
+
12
+ Each public accessor returns a ``pathlib.Path`` pointing at the
13
+ on-disk-materialized resource (sufficient for ``Path.read_text``,
14
+ ``Path.is_file``, and equality comparisons), or — for callers that need
15
+ the abstract ``Traversable`` form — a direct ``.files()`` traversal is
16
+ also exported.
17
+
18
+ Example:
19
+ >>> from apothem.schemas import banner_path
20
+ >>> text = banner_path().read_text(encoding="utf-8")
21
+ """
22
+
23
+ from __future__ import annotations
24
+
25
+ from importlib.resources import as_file, files
26
+ from pathlib import Path
27
+ from typing import Final
28
+
29
+ _PACKAGE: Final[str] = __name__
30
+
31
+ _BANNER_NAME: Final[str] = "authorship-header.txt"
32
+ _HEADER_EXCEPTIONS_NAME: Final[str] = "header-exceptions.txt"
33
+ _HEADER_VISIBILITY_NAME: Final[str] = "header-visibility.yaml"
34
+ _COMPATIBILITY_MATRIX_NAME: Final[str] = "compatibility-matrix.yaml"
35
+ _HANDOFF_MANIFEST_NAME: Final[str] = "handoff-manifest.yaml"
36
+ _PROFILE_EXAMPLE_NAME: Final[str] = "profile.example.yaml"
37
+ _PROFILE_MINIMAL_NAME: Final[str] = "profile.minimal.yaml"
38
+
39
+ _AGENT_SCHEMA_NAME: Final[str] = "agent.schema.json"
40
+ _COMMAND_SCHEMA_NAME: Final[str] = "command.schema.json"
41
+ _SKILL_SCHEMA_NAME: Final[str] = "skill.schema.json"
42
+ _PLAN_SCHEMA_NAME: Final[str] = "plan.schema.json"
43
+ _OUTPUT_STYLE_SCHEMA_NAME: Final[str] = "output-style.schema.json"
44
+ _PROFILE_SCHEMA_NAME: Final[str] = "profile.schema.json"
45
+ _ADVISORY_FINDING_SCHEMA_NAME: Final[str] = "advisory-finding.schema.json"
46
+ _MEMORY_RECORD_SCHEMA_NAME: Final[str] = "memory-record.schema.json"
47
+ _CONTEXT_FRAGMENT_SCHEMA_NAME: Final[str] = "context-fragment.schema.json"
48
+ _LEARNING_SIGNAL_SCHEMA_NAME: Final[str] = "learning-signal.schema.json"
49
+
50
+
51
+ def resource_path(name: str) -> Path:
52
+ """Return the on-disk path of a schema resource by filename.
53
+
54
+ Args:
55
+ name: The schema fixture's filename (e.g.,
56
+ ``"authorship-header.txt"``).
57
+
58
+ Returns:
59
+ A ``pathlib.Path`` to the resource. When the package is
60
+ installed from a wheel into a zipfile-based loader, the path
61
+ points at a materialized on-disk copy.
62
+
63
+ Raises:
64
+ FileNotFoundError: When the named resource is not bundled in
65
+ the installed package.
66
+ """
67
+ traversable = files(_PACKAGE) / name
68
+ with as_file(traversable) as concrete:
69
+ return Path(concrete)
70
+
71
+
72
+ def banner_path() -> Path:
73
+ """Path to the canonical authorship-header fixture."""
74
+ return resource_path(_BANNER_NAME)
75
+
76
+
77
+ def header_exceptions_path() -> Path:
78
+ """Path to the header-exceptions glob fixture."""
79
+ return resource_path(_HEADER_EXCEPTIONS_NAME)
80
+
81
+
82
+ def header_visibility_path() -> Path:
83
+ """Path to the per-class header-visibility fixture."""
84
+ return resource_path(_HEADER_VISIBILITY_NAME)
85
+
86
+
87
+ def compatibility_matrix_path() -> Path:
88
+ """Path to the harness compatibility matrix."""
89
+ return resource_path(_COMPATIBILITY_MATRIX_NAME)
90
+
91
+
92
+ def handoff_manifest_schema_path() -> Path:
93
+ """Path to the plan-pipeline handoff-manifest schema."""
94
+ return resource_path(_HANDOFF_MANIFEST_NAME)
95
+
96
+
97
+ def profile_example_path() -> Path:
98
+ """Path to the example user-profile fixture."""
99
+ return resource_path(_PROFILE_EXAMPLE_NAME)
100
+
101
+
102
+ def profile_minimal_path() -> Path:
103
+ """Path to the minimal user-profile fixture."""
104
+ return resource_path(_PROFILE_MINIMAL_NAME)
105
+
106
+
107
+ def agent_schema_path() -> Path:
108
+ """Path to the agent JSON schema."""
109
+ return resource_path(_AGENT_SCHEMA_NAME)
110
+
111
+
112
+ def command_schema_path() -> Path:
113
+ """Path to the command JSON schema."""
114
+ return resource_path(_COMMAND_SCHEMA_NAME)
115
+
116
+
117
+ def skill_schema_path() -> Path:
118
+ """Path to the skill JSON schema."""
119
+ return resource_path(_SKILL_SCHEMA_NAME)
120
+
121
+
122
+ def plan_schema_path() -> Path:
123
+ """Path to the plan JSON schema."""
124
+ return resource_path(_PLAN_SCHEMA_NAME)
125
+
126
+
127
+ def output_style_schema_path() -> Path:
128
+ """Path to the output-style JSON schema."""
129
+ return resource_path(_OUTPUT_STYLE_SCHEMA_NAME)
130
+
131
+
132
+ def profile_schema_path() -> Path:
133
+ """Path to the user-profile JSON schema."""
134
+ return resource_path(_PROFILE_SCHEMA_NAME)
135
+
136
+
137
+ def advisory_finding_schema_path() -> Path:
138
+ """Path to the advisory-mode auditor findings JSON schema."""
139
+ return resource_path(_ADVISORY_FINDING_SCHEMA_NAME)
140
+
141
+
142
+ def memory_record_schema_path() -> Path:
143
+ """Path to the agnostic memory-record JSON schema."""
144
+ return resource_path(_MEMORY_RECORD_SCHEMA_NAME)
145
+
146
+
147
+ def context_fragment_schema_path() -> Path:
148
+ """Path to the injectable context-fragment JSON schema."""
149
+ return resource_path(_CONTEXT_FRAGMENT_SCHEMA_NAME)
150
+
151
+
152
+ def learning_signal_schema_path() -> Path:
153
+ """Path to the continuous-learning signal JSON schema."""
154
+ return resource_path(_LEARNING_SIGNAL_SCHEMA_NAME)
155
+
156
+
157
+ __all__ = [
158
+ "advisory_finding_schema_path",
159
+ "agent_schema_path",
160
+ "banner_path",
161
+ "command_schema_path",
162
+ "compatibility_matrix_path",
163
+ "context_fragment_schema_path",
164
+ "handoff_manifest_schema_path",
165
+ "header_exceptions_path",
166
+ "header_visibility_path",
167
+ "learning_signal_schema_path",
168
+ "memory_record_schema_path",
169
+ "output_style_schema_path",
170
+ "plan_schema_path",
171
+ "profile_example_path",
172
+ "profile_minimal_path",
173
+ "profile_schema_path",
174
+ "resource_path",
175
+ "skill_schema_path",
176
+ ]
@@ -0,0 +1,111 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://apothem.ahmedgad.com/schemas/advisory-finding.schema.json",
4
+ "title": "Apothem Advisory Auditor Findings",
5
+ "description": "Output contract for the advisory-mode conformance / security auditor and the advisory-mode reporting surface. Findings are ADVISORY by default: their presence reports issues but does not block, abort, or force failure on the end user unless the auditor runs with strict = true. Every finding carries a definitive next_step — the determinant advisory move the operator can take. An internal auditor error is itself reported as a finding (category = error), never swallowed.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["findings", "strict", "summary"],
9
+ "properties": {
10
+ "findings": {
11
+ "type": "array",
12
+ "description": "Every finding the auditor produced, in deterministic order.",
13
+ "items": {
14
+ "$ref": "#/$defs/finding"
15
+ }
16
+ },
17
+ "strict": {
18
+ "type": "boolean",
19
+ "default": false,
20
+ "description": "When false (the default), the auditor is advisory: it exits zero even with findings present. When true, findings-present forces a non-zero exit. Strict mode is opt-in, never the shipped default."
21
+ },
22
+ "summary": {
23
+ "$ref": "#/$defs/summary"
24
+ }
25
+ },
26
+ "$defs": {
27
+ "finding": {
28
+ "type": "object",
29
+ "description": "A single advisory finding. Always carries a definitive next_step.",
30
+ "additionalProperties": false,
31
+ "required": ["id", "category", "severity", "location", "message", "next_step"],
32
+ "properties": {
33
+ "id": {
34
+ "type": "string",
35
+ "minLength": 1,
36
+ "description": "Stable finding identifier (e.g., the matcher or check name)."
37
+ },
38
+ "category": {
39
+ "type": "string",
40
+ "enum": ["config-scan", "secret", "conformance", "error"],
41
+ "description": "config-scan: configuration-file scan finding. secret: secret-pattern detection (closed catalog). conformance: rule-based conformance finding. error: an internal auditor failure reported as a finding rather than a silent swallow or crash."
42
+ },
43
+ "severity": {
44
+ "type": "string",
45
+ "enum": ["HIGH", "MEDIUM", "LOW"],
46
+ "description": "Severity triage; advisory regardless of level."
47
+ },
48
+ "location": {
49
+ "$ref": "#/$defs/location"
50
+ },
51
+ "message": {
52
+ "type": "string",
53
+ "minLength": 1,
54
+ "description": "What was found, stated specifically."
55
+ },
56
+ "next_step": {
57
+ "type": "string",
58
+ "minLength": 1,
59
+ "description": "The determinant advisory move — the definitive next action the operator can take to resolve the finding. Always present and non-empty."
60
+ }
61
+ }
62
+ },
63
+ "location": {
64
+ "type": "object",
65
+ "description": "Where the finding was found.",
66
+ "additionalProperties": false,
67
+ "required": ["path"],
68
+ "properties": {
69
+ "path": {
70
+ "type": "string",
71
+ "minLength": 1,
72
+ "description": "Path to the artifact the finding concerns."
73
+ },
74
+ "line": {
75
+ "type": "integer",
76
+ "minimum": 1,
77
+ "description": "1-based line number, when the finding is line-scoped."
78
+ },
79
+ "column": {
80
+ "type": "integer",
81
+ "minimum": 1,
82
+ "description": "1-based column number, when the finding is column-scoped."
83
+ }
84
+ }
85
+ },
86
+ "summary": {
87
+ "type": "object",
88
+ "description": "Aggregate finding counts for the run.",
89
+ "additionalProperties": false,
90
+ "required": ["total", "high", "medium", "low"],
91
+ "properties": {
92
+ "total": {
93
+ "type": "integer",
94
+ "minimum": 0
95
+ },
96
+ "high": {
97
+ "type": "integer",
98
+ "minimum": 0
99
+ },
100
+ "medium": {
101
+ "type": "integer",
102
+ "minimum": 0
103
+ },
104
+ "low": {
105
+ "type": "integer",
106
+ "minimum": 0
107
+ }
108
+ }
109
+ }
110
+ }
111
+ }