coding-agent-skills 0.2.8

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 (357) hide show
  1. package/AGENTS.md +44 -0
  2. package/CHANGELOG.md +205 -0
  3. package/CONTRIBUTING.md +54 -0
  4. package/LICENSE +21 -0
  5. package/README.md +85 -0
  6. package/ROADMAP.md +87 -0
  7. package/RUNBOOK.md +47 -0
  8. package/bin/coding-agent-skills +75 -0
  9. package/contracts/evidence-pack/README.md +22 -0
  10. package/contracts/evidence-pack/evidence-pack.example.json +60 -0
  11. package/contracts/evidence-pack/evidence-pack.example.md +49 -0
  12. package/contracts/evidence-pack/evidence-pack.schema.json +156 -0
  13. package/docs/adapters/README.md +82 -0
  14. package/docs/adapters/discovery.md +50 -0
  15. package/docs/adapters/external-adapters.md +42 -0
  16. package/docs/adapters/project-installation.md +135 -0
  17. package/docs/adapters/real-project-adoption.md +193 -0
  18. package/docs/adapters/upgrade-evidence.md +67 -0
  19. package/docs/adapters/upgrades.md +83 -0
  20. package/docs/architecture/README.md +23 -0
  21. package/docs/authoring/README.md +54 -0
  22. package/docs/evidence-bundles/README.md +94 -0
  23. package/docs/privacy/README.md +26 -0
  24. package/docs/release/README.md +42 -0
  25. package/docs/release/npm-package.md +85 -0
  26. package/docs/safety/README.md +94 -0
  27. package/docs/testing/README.md +100 -0
  28. package/docs/usage/README.md +89 -0
  29. package/docs/versioning/README.md +30 -0
  30. package/docs/versioning/adapter-compatibility.md +54 -0
  31. package/examples/README.md +12 -0
  32. package/examples/adapters/README.md +9 -0
  33. package/examples/adapters/documentation-precedence.json +62 -0
  34. package/examples/adapters/narrow-repo-map.json +64 -0
  35. package/examples/adapters/runtime-status-hints.json +76 -0
  36. package/examples/command-policies/README.md +3 -0
  37. package/examples/command-policies/build-verify.json +57 -0
  38. package/examples/command-policies/git-preflight.json +44 -0
  39. package/examples/command-policies/llm-drift-control.json +45 -0
  40. package/examples/command-policies/repo-map.json +59 -0
  41. package/examples/command-policies/runtime-truth.json +59 -0
  42. package/examples/evidence-packs/README.md +3 -0
  43. package/examples/evidence-packs/build-verify.json +68 -0
  44. package/examples/evidence-packs/git-preflight.json +55 -0
  45. package/examples/evidence-packs/llm-drift-control.json +55 -0
  46. package/examples/evidence-packs/repo-map.json +55 -0
  47. package/examples/evidence-packs/runtime-truth.json +55 -0
  48. package/examples/manifests/README.md +3 -0
  49. package/examples/manifests/build-verify.json +14 -0
  50. package/examples/manifests/git-preflight.json +14 -0
  51. package/examples/manifests/llm-drift-control.json +14 -0
  52. package/examples/manifests/repo-map.json +14 -0
  53. package/examples/manifests/runtime-truth.json +14 -0
  54. package/examples/upgrade-evidence/README.md +14 -0
  55. package/examples/upgrade-evidence/chain-fail.evidence.json +155 -0
  56. package/examples/upgrade-evidence/chain-fail.evidence.md +14 -0
  57. package/examples/upgrade-evidence/chain-pass.evidence.json +156 -0
  58. package/examples/upgrade-evidence/stale-pin.evidence.json +117 -0
  59. package/examples/upgrade-evidence/unsafe-upgrade.evidence.json +128 -0
  60. package/examples/upgrade-evidence/valid-upgrade.evidence.json +105 -0
  61. package/examples/upgrade-evidence/valid-upgrade.evidence.md +13 -0
  62. package/examples/workflows/README.md +3 -0
  63. package/examples/workflows/build-verify.md +20 -0
  64. package/examples/workflows/git-preflight.md +18 -0
  65. package/examples/workflows/llm-drift-control.md +16 -0
  66. package/examples/workflows/repo-map.md +20 -0
  67. package/examples/workflows/runtime-truth.md +17 -0
  68. package/package.json +58 -0
  69. package/runs/skill-runs.md +162 -0
  70. package/schemas/adapter-upgrade-evidence.schema.json +443 -0
  71. package/schemas/archive-index.schema.json +174 -0
  72. package/schemas/archive-report.schema.json +322 -0
  73. package/schemas/command-policy.schema.json +125 -0
  74. package/schemas/evidence-bundle.schema.json +394 -0
  75. package/schemas/project-adapter-installation.schema.json +127 -0
  76. package/schemas/project-adapter.schema.json +328 -0
  77. package/schemas/skill-manifest.schema.json +40 -0
  78. package/scripts/check-adapter-upgrade-chain.mjs +32 -0
  79. package/scripts/check-adapter-upgrade.mjs +31 -0
  80. package/scripts/lib/adapter-discovery.mjs +441 -0
  81. package/scripts/lib/adapter-repo-map.mjs +358 -0
  82. package/scripts/lib/adapter-upgrade-chain.mjs +261 -0
  83. package/scripts/lib/adapter-upgrade.mjs +434 -0
  84. package/scripts/lib/evidence-bundle.mjs +831 -0
  85. package/scripts/lib/pack-rules.mjs +704 -0
  86. package/scripts/lib/project-adapter-installation.mjs +327 -0
  87. package/scripts/lib/safe-evidence-output.mjs +92 -0
  88. package/scripts/lib/schema-validator.mjs +146 -0
  89. package/scripts/lib/semver.mjs +54 -0
  90. package/scripts/lib/upgrade-evidence.mjs +276 -0
  91. package/scripts/render-adapter-repo-map.mjs +8 -0
  92. package/scripts/render-evidence-archive-report.mjs +18 -0
  93. package/scripts/run-next +220 -0
  94. package/scripts/test-pack.mjs +2232 -0
  95. package/scripts/validate-adapters.mjs +10 -0
  96. package/scripts/validate-maintainer-loop.mjs +146 -0
  97. package/scripts/validate-pack.mjs +950 -0
  98. package/scripts/validate-project-adapters.mjs +8 -0
  99. package/scripts/verify-evidence-bundle.mjs +18 -0
  100. package/skills/build-verify/SKILL.md +62 -0
  101. package/skills/build-verify/adapter-interface.md +7 -0
  102. package/skills/build-verify/agents/openai.yaml +4 -0
  103. package/skills/build-verify/checklist.md +12 -0
  104. package/skills/build-verify/evidence-template.md +11 -0
  105. package/skills/build-verify/examples.md +16 -0
  106. package/skills/build-verify/failure-modes.md +14 -0
  107. package/skills/git-preflight/SKILL.md +65 -0
  108. package/skills/git-preflight/adapter-interface.md +7 -0
  109. package/skills/git-preflight/agents/openai.yaml +4 -0
  110. package/skills/git-preflight/checklist.md +11 -0
  111. package/skills/git-preflight/evidence-template.md +10 -0
  112. package/skills/git-preflight/examples.md +18 -0
  113. package/skills/git-preflight/failure-modes.md +13 -0
  114. package/skills/llm-drift-control/SKILL.md +67 -0
  115. package/skills/llm-drift-control/adapter-interface.md +7 -0
  116. package/skills/llm-drift-control/agents/openai.yaml +4 -0
  117. package/skills/llm-drift-control/checklist.md +11 -0
  118. package/skills/llm-drift-control/evidence-template.md +13 -0
  119. package/skills/llm-drift-control/examples.md +15 -0
  120. package/skills/llm-drift-control/failure-modes.md +13 -0
  121. package/skills/repo-map/SKILL.md +71 -0
  122. package/skills/repo-map/adapter-interface.md +18 -0
  123. package/skills/repo-map/agents/openai.yaml +4 -0
  124. package/skills/repo-map/checklist.md +15 -0
  125. package/skills/repo-map/evidence-template.md +29 -0
  126. package/skills/repo-map/examples.md +19 -0
  127. package/skills/repo-map/failure-modes.md +16 -0
  128. package/skills/runtime-truth/SKILL.md +62 -0
  129. package/skills/runtime-truth/adapter-interface.md +7 -0
  130. package/skills/runtime-truth/agents/openai.yaml +4 -0
  131. package/skills/runtime-truth/checklist.md +11 -0
  132. package/skills/runtime-truth/evidence-template.md +12 -0
  133. package/skills/runtime-truth/examples.md +20 -0
  134. package/skills/runtime-truth/failure-modes.md +13 -0
  135. package/tests/README.md +44 -0
  136. package/tests/adapters/README.md +15 -0
  137. package/tests/completion/README.md +15 -0
  138. package/tests/evidence/README.md +15 -0
  139. package/tests/fixtures/README.md +23 -0
  140. package/tests/fixtures/adapters/allow-deploy.json +60 -0
  141. package/tests/fixtures/adapters/allow-git-push.json +60 -0
  142. package/tests/fixtures/adapters/expand-scope.json +53 -0
  143. package/tests/fixtures/adapters/expose-secrets.json +53 -0
  144. package/tests/fixtures/adapters/incompatible-version.json +53 -0
  145. package/tests/fixtures/adapters/override-audit-only.json +53 -0
  146. package/tests/fixtures/adapters/redefine-completion.json +53 -0
  147. package/tests/fixtures/adapters/remove-required-evidence.json +53 -0
  148. package/tests/fixtures/adapters/suppress-failures.json +53 -0
  149. package/tests/fixtures/adapters/valid-narrowing.json +53 -0
  150. package/tests/fixtures/adapters/valid-repo-map.json +53 -0
  151. package/tests/fixtures/adapters/weakening-repo-map.json +42 -0
  152. package/tests/fixtures/completion/cases.json +143 -0
  153. package/tests/fixtures/completion/false-complete.json +51 -0
  154. package/tests/fixtures/evidence-bundles/advisory-review-soon/archive/evidence-archive-index.json +52 -0
  155. package/tests/fixtures/evidence-bundles/advisory-review-soon/evidence/repo-map.evidence.json +68 -0
  156. package/tests/fixtures/evidence-bundles/advisory-review-soon/evidence/valid-upgrade.evidence.json +105 -0
  157. package/tests/fixtures/evidence-bundles/advisory-review-soon/evidence-bundle.json +109 -0
  158. package/tests/fixtures/evidence-bundles/invalid-archive/archive/evidence-archive-index.json +52 -0
  159. package/tests/fixtures/evidence-bundles/invalid-archive/evidence/repo-map.evidence.json +68 -0
  160. package/tests/fixtures/evidence-bundles/invalid-archive/evidence/valid-upgrade.evidence.json +105 -0
  161. package/tests/fixtures/evidence-bundles/invalid-archive/evidence-bundle.json +109 -0
  162. package/tests/fixtures/evidence-bundles/invalid-archive-index/archive/evidence-archive-index.json +52 -0
  163. package/tests/fixtures/evidence-bundles/invalid-archive-index/evidence/repo-map.evidence.json +68 -0
  164. package/tests/fixtures/evidence-bundles/invalid-archive-index/evidence/valid-upgrade.evidence.json +105 -0
  165. package/tests/fixtures/evidence-bundles/invalid-archive-index/evidence-bundle.json +109 -0
  166. package/tests/fixtures/evidence-bundles/invalid-hash/archive/evidence-archive-index.json +52 -0
  167. package/tests/fixtures/evidence-bundles/invalid-hash/evidence/repo-map.evidence.json +68 -0
  168. package/tests/fixtures/evidence-bundles/invalid-hash/evidence/valid-upgrade.evidence.json +105 -0
  169. package/tests/fixtures/evidence-bundles/invalid-hash/evidence-bundle.json +109 -0
  170. package/tests/fixtures/evidence-bundles/invalid-missing-entry/archive/evidence-archive-index.json +52 -0
  171. package/tests/fixtures/evidence-bundles/invalid-missing-entry/evidence/repo-map.evidence.json +68 -0
  172. package/tests/fixtures/evidence-bundles/invalid-missing-entry/evidence/valid-upgrade.evidence.json +105 -0
  173. package/tests/fixtures/evidence-bundles/invalid-missing-entry/evidence-bundle.json +109 -0
  174. package/tests/fixtures/evidence-bundles/invalid-path/archive/evidence-archive-index.json +52 -0
  175. package/tests/fixtures/evidence-bundles/invalid-path/evidence/repo-map.evidence.json +68 -0
  176. package/tests/fixtures/evidence-bundles/invalid-path/evidence/valid-upgrade.evidence.json +105 -0
  177. package/tests/fixtures/evidence-bundles/invalid-path/evidence-bundle.json +109 -0
  178. package/tests/fixtures/evidence-bundles/invalid-provenance/archive/evidence-archive-index.json +52 -0
  179. package/tests/fixtures/evidence-bundles/invalid-provenance/evidence/repo-map.evidence.json +68 -0
  180. package/tests/fixtures/evidence-bundles/invalid-provenance/evidence/valid-upgrade.evidence.json +105 -0
  181. package/tests/fixtures/evidence-bundles/invalid-provenance/evidence-bundle.json +109 -0
  182. package/tests/fixtures/evidence-bundles/invalid-regression/archive/evidence-archive-index.json +52 -0
  183. package/tests/fixtures/evidence-bundles/invalid-regression/evidence/repo-map.evidence.json +68 -0
  184. package/tests/fixtures/evidence-bundles/invalid-regression/evidence/valid-upgrade.evidence.json +105 -0
  185. package/tests/fixtures/evidence-bundles/invalid-regression/evidence-bundle.json +113 -0
  186. package/tests/fixtures/evidence-bundles/invalid-retention/archive/evidence-archive-index.json +52 -0
  187. package/tests/fixtures/evidence-bundles/invalid-retention/evidence/repo-map.evidence.json +68 -0
  188. package/tests/fixtures/evidence-bundles/invalid-retention/evidence/valid-upgrade.evidence.json +105 -0
  189. package/tests/fixtures/evidence-bundles/invalid-retention/evidence-bundle.json +109 -0
  190. package/tests/fixtures/evidence-bundles/invalid-signature-plan/archive/evidence-archive-index.json +52 -0
  191. package/tests/fixtures/evidence-bundles/invalid-signature-plan/evidence/repo-map.evidence.json +68 -0
  192. package/tests/fixtures/evidence-bundles/invalid-signature-plan/evidence/valid-upgrade.evidence.json +105 -0
  193. package/tests/fixtures/evidence-bundles/invalid-signature-plan/evidence-bundle.json +109 -0
  194. package/tests/fixtures/evidence-bundles/valid-bundle/archive/evidence-archive-index.json +52 -0
  195. package/tests/fixtures/evidence-bundles/valid-bundle/evidence/repo-map.evidence.json +68 -0
  196. package/tests/fixtures/evidence-bundles/valid-bundle/evidence/valid-upgrade.evidence.json +105 -0
  197. package/tests/fixtures/evidence-bundles/valid-bundle/evidence-bundle.json +109 -0
  198. package/tests/fixtures/external-adapters/empty/README.md +3 -0
  199. package/tests/fixtures/external-adapters/invalid-completion-override/.coding-agent/adapters/completion/adapter.json +53 -0
  200. package/tests/fixtures/external-adapters/invalid-deploy/.coding-agent/adapters/deploy/adapter.json +60 -0
  201. package/tests/fixtures/external-adapters/invalid-evidence-suppression/.coding-agent/adapters/evidence/adapter.json +53 -0
  202. package/tests/fixtures/external-adapters/invalid-failure-suppression/.coding-agent/adapters/failures/adapter.json +53 -0
  203. package/tests/fixtures/external-adapters/invalid-git-push/.coding-agent/adapters/publish/adapter.json +60 -0
  204. package/tests/fixtures/external-adapters/invalid-malformed/.coding-agent/adapters/malformed/adapter.json +1 -0
  205. package/tests/fixtures/external-adapters/invalid-malformed/malformed-adapter.txt +1 -0
  206. package/tests/fixtures/external-adapters/invalid-mode-escalation/.coding-agent/adapters/mode/adapter.json +53 -0
  207. package/tests/fixtures/external-adapters/invalid-path-traversal/.coding-agent/adapters/path/adapter.json +53 -0
  208. package/tests/fixtures/external-adapters/invalid-restriction-removal/.coding-agent/adapters/restrictions/adapter.json +52 -0
  209. package/tests/fixtures/external-adapters/invalid-scope-expansion/.coding-agent/adapters/scope/adapter.json +53 -0
  210. package/tests/fixtures/external-adapters/invalid-secret-exposure/.coding-agent/adapters/secrets/adapter.json +53 -0
  211. package/tests/fixtures/external-adapters/invalid-skill-id/.coding-agent/adapters/skill/adapter.json +53 -0
  212. package/tests/fixtures/external-adapters/invalid-skill-version/.coding-agent/adapters/skill-version/adapter.json +53 -0
  213. package/tests/fixtures/external-adapters/invalid-unknown-manifest/.coding-agent/adapters/unknown/manifest.json +1 -0
  214. package/tests/fixtures/external-adapters/invalid-version/.coding-agent/adapters/version/adapter.json +53 -0
  215. package/tests/fixtures/external-adapters/mixed/.coding-agent/adapters/invalid/adapter.json +60 -0
  216. package/tests/fixtures/external-adapters/mixed/.coding-agent/adapters/valid/adapter.json +53 -0
  217. package/tests/fixtures/external-adapters/valid-basic/.coding-agent/adapters/basic/adapter.json +53 -0
  218. package/tests/fixtures/external-adapters/valid-doc-precedence/coding-agent/adapters/docs/adapter.json +53 -0
  219. package/tests/fixtures/external-adapters/valid-runtime-status/adapters/coding-agent/runtime/adapter.json +65 -0
  220. package/tests/fixtures/mutation/cases.json +87 -0
  221. package/tests/fixtures/mutation/snapshot-target/README.md +3 -0
  222. package/tests/fixtures/mutation/snapshot-target/state.json +4 -0
  223. package/tests/fixtures/policy/commands.json +164 -0
  224. package/tests/fixtures/policy/properties.json +126 -0
  225. package/tests/fixtures/privacy/cases.json +47 -0
  226. package/tests/fixtures/project-adapter-installation/invalid-adapter-location/.agents/adapters/basic/adapter.json +53 -0
  227. package/tests/fixtures/project-adapter-installation/invalid-adapter-location/.coding-agent/skills.json +23 -0
  228. package/tests/fixtures/project-adapter-installation/invalid-adapter-schema-version/.coding-agent/adapters/basic/adapter.json +53 -0
  229. package/tests/fixtures/project-adapter-installation/invalid-adapter-schema-version/.coding-agent/skills.json +23 -0
  230. package/tests/fixtures/project-adapter-installation/invalid-adapter-version-mismatch/.coding-agent/adapters/basic/adapter.json +53 -0
  231. package/tests/fixtures/project-adapter-installation/invalid-adapter-version-mismatch/.coding-agent/skills.json +23 -0
  232. package/tests/fixtures/project-adapter-installation/invalid-bad-semver/.coding-agent/adapters/basic/adapter.json +53 -0
  233. package/tests/fixtures/project-adapter-installation/invalid-bad-semver/.coding-agent/skills.json +23 -0
  234. package/tests/fixtures/project-adapter-installation/invalid-completion-override/.coding-agent/adapters/basic/adapter.json +53 -0
  235. package/tests/fixtures/project-adapter-installation/invalid-completion-override/.coding-agent/skills.json +23 -0
  236. package/tests/fixtures/project-adapter-installation/invalid-failure-suppression/.coding-agent/adapters/basic/adapter.json +53 -0
  237. package/tests/fixtures/project-adapter-installation/invalid-failure-suppression/.coding-agent/skills.json +23 -0
  238. package/tests/fixtures/project-adapter-installation/invalid-missing-declaration/.coding-agent/adapters/basic/adapter.json +53 -0
  239. package/tests/fixtures/project-adapter-installation/invalid-mode-escalation/.coding-agent/adapters/basic/adapter.json +53 -0
  240. package/tests/fixtures/project-adapter-installation/invalid-mode-escalation/.coding-agent/skills.json +23 -0
  241. package/tests/fixtures/project-adapter-installation/invalid-path-traversal/.coding-agent/adapters/basic/adapter.json +53 -0
  242. package/tests/fixtures/project-adapter-installation/invalid-path-traversal/.coding-agent/skills.json +23 -0
  243. package/tests/fixtures/project-adapter-installation/invalid-scope-expansion/.coding-agent/adapters/basic/adapter.json +53 -0
  244. package/tests/fixtures/project-adapter-installation/invalid-scope-expansion/.coding-agent/skills.json +23 -0
  245. package/tests/fixtures/project-adapter-installation/invalid-secret-exposure/.coding-agent/adapters/basic/adapter.json +53 -0
  246. package/tests/fixtures/project-adapter-installation/invalid-secret-exposure/.coding-agent/skills.json +23 -0
  247. package/tests/fixtures/project-adapter-installation/invalid-skill-mismatch/.coding-agent/adapters/basic/adapter.json +53 -0
  248. package/tests/fixtures/project-adapter-installation/invalid-skill-mismatch/.coding-agent/skills.json +23 -0
  249. package/tests/fixtures/project-adapter-installation/invalid-unknown-skill/.coding-agent/adapters/basic/adapter.json +53 -0
  250. package/tests/fixtures/project-adapter-installation/invalid-unknown-skill/.coding-agent/skills.json +23 -0
  251. package/tests/fixtures/project-adapter-installation/invalid-unsupported-core-version/.coding-agent/adapters/basic/adapter.json +53 -0
  252. package/tests/fixtures/project-adapter-installation/invalid-unsupported-core-version/.coding-agent/skills.json +23 -0
  253. package/tests/fixtures/project-adapter-installation/invalid-weakens-restrictions/.coding-agent/adapters/basic/adapter.json +52 -0
  254. package/tests/fixtures/project-adapter-installation/invalid-weakens-restrictions/.coding-agent/skills.json +23 -0
  255. package/tests/fixtures/project-adapter-installation/valid-compatible-range/coding-agent/adapters/docs/adapter.json +53 -0
  256. package/tests/fixtures/project-adapter-installation/valid-compatible-range/coding-agent.skills.json +23 -0
  257. package/tests/fixtures/project-adapter-installation/valid-exact-pin/.coding-agent/adapters/basic/adapter.json +53 -0
  258. package/tests/fixtures/project-adapter-installation/valid-exact-pin/.coding-agent/skills.json +23 -0
  259. package/tests/fixtures/project-adapter-installation/valid-multiple-adapters/.coding-agent/skills.json +28 -0
  260. package/tests/fixtures/project-adapter-installation/valid-multiple-adapters/adapters/coding-agent/repo/adapter.json +53 -0
  261. package/tests/fixtures/project-adapter-installation/valid-multiple-adapters/adapters/coding-agent/runtime/adapter.json +58 -0
  262. package/tests/fixtures/project-adapter-upgrade-chains/broken-compatibility-chain/01-current/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  263. package/tests/fixtures/project-adapter-upgrade-chains/broken-compatibility-chain/01-current/.coding-agent/skills.json +27 -0
  264. package/tests/fixtures/project-adapter-upgrade-chains/broken-compatibility-chain/02-incompatible/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  265. package/tests/fixtures/project-adapter-upgrade-chains/broken-compatibility-chain/02-incompatible/.coding-agent/skills.json +27 -0
  266. package/tests/fixtures/project-adapter-upgrade-chains/broken-compatibility-chain/03-target/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  267. package/tests/fixtures/project-adapter-upgrade-chains/broken-compatibility-chain/03-target/.coding-agent/skills.json +27 -0
  268. package/tests/fixtures/project-adapter-upgrade-chains/schema-drift-chain/01-current/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  269. package/tests/fixtures/project-adapter-upgrade-chains/schema-drift-chain/01-current/.coding-agent/skills.json +27 -0
  270. package/tests/fixtures/project-adapter-upgrade-chains/schema-drift-chain/02-schema-drift/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  271. package/tests/fixtures/project-adapter-upgrade-chains/schema-drift-chain/02-schema-drift/.coding-agent/skills.json +27 -0
  272. package/tests/fixtures/project-adapter-upgrade-chains/skill-drift-chain/01-current/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  273. package/tests/fixtures/project-adapter-upgrade-chains/skill-drift-chain/01-current/.coding-agent/skills.json +27 -0
  274. package/tests/fixtures/project-adapter-upgrade-chains/skill-drift-chain/02-skill-drift/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  275. package/tests/fixtures/project-adapter-upgrade-chains/skill-drift-chain/02-skill-drift/.coding-agent/skills.json +27 -0
  276. package/tests/fixtures/project-adapter-upgrade-chains/stale-pin-chain/01-current/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  277. package/tests/fixtures/project-adapter-upgrade-chains/stale-pin-chain/01-current/.coding-agent/skills.json +27 -0
  278. package/tests/fixtures/project-adapter-upgrade-chains/stale-pin-chain/02-stale/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  279. package/tests/fixtures/project-adapter-upgrade-chains/stale-pin-chain/02-stale/.coding-agent/skills.json +27 -0
  280. package/tests/fixtures/project-adapter-upgrade-chains/stale-pin-chain/03-target/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  281. package/tests/fixtures/project-adapter-upgrade-chains/stale-pin-chain/03-target/.coding-agent/skills.json +27 -0
  282. package/tests/fixtures/project-adapter-upgrade-chains/unsafe-weakening-chain/01-current/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  283. package/tests/fixtures/project-adapter-upgrade-chains/unsafe-weakening-chain/01-current/.coding-agent/skills.json +27 -0
  284. package/tests/fixtures/project-adapter-upgrade-chains/unsafe-weakening-chain/02-safe/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  285. package/tests/fixtures/project-adapter-upgrade-chains/unsafe-weakening-chain/02-safe/.coding-agent/skills.json +27 -0
  286. package/tests/fixtures/project-adapter-upgrade-chains/unsafe-weakening-chain/03-weakens-restrictions/.coding-agent/adapters/fixture-chain-adapter/adapter.json +69 -0
  287. package/tests/fixtures/project-adapter-upgrade-chains/unsafe-weakening-chain/03-weakens-restrictions/.coding-agent/skills.json +27 -0
  288. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/01-current/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  289. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/01-current/.coding-agent/skills.json +27 -0
  290. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/02-upgrade/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  291. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/02-upgrade/.coding-agent/skills.json +27 -0
  292. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/03-upgrade/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  293. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/03-upgrade/.coding-agent/skills.json +27 -0
  294. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/04-upgrade/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  295. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/04-upgrade/.coding-agent/skills.json +27 -0
  296. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/05-upgrade/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  297. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/05-upgrade/.coding-agent/skills.json +27 -0
  298. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/06-upgrade/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  299. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/06-upgrade/.coding-agent/skills.json +27 -0
  300. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/07-upgrade/.coding-agent/adapters/fixture-chain-adapter/adapter.json +70 -0
  301. package/tests/fixtures/project-adapter-upgrade-chains/valid-chain/07-upgrade/.coding-agent/skills.json +27 -0
  302. package/tests/fixtures/project-adapter-upgrades/adapter-schema-drift/after/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  303. package/tests/fixtures/project-adapter-upgrades/adapter-schema-drift/after/.coding-agent/skills.json +27 -0
  304. package/tests/fixtures/project-adapter-upgrades/adapter-schema-drift/before/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  305. package/tests/fixtures/project-adapter-upgrades/adapter-schema-drift/before/.coding-agent/skills.json +27 -0
  306. package/tests/fixtures/project-adapter-upgrades/safe-upgrade-preserves-restrictions/after/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +71 -0
  307. package/tests/fixtures/project-adapter-upgrades/safe-upgrade-preserves-restrictions/after/.coding-agent/skills.json +27 -0
  308. package/tests/fixtures/project-adapter-upgrades/safe-upgrade-preserves-restrictions/before/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  309. package/tests/fixtures/project-adapter-upgrades/safe-upgrade-preserves-restrictions/before/.coding-agent/skills.json +27 -0
  310. package/tests/fixtures/project-adapter-upgrades/skill-compatibility-drift/after/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  311. package/tests/fixtures/project-adapter-upgrades/skill-compatibility-drift/after/.coding-agent/skills.json +27 -0
  312. package/tests/fixtures/project-adapter-upgrades/skill-compatibility-drift/before/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  313. package/tests/fixtures/project-adapter-upgrades/skill-compatibility-drift/before/.coding-agent/skills.json +27 -0
  314. package/tests/fixtures/project-adapter-upgrades/stale-compatible-range/after/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  315. package/tests/fixtures/project-adapter-upgrades/stale-compatible-range/after/.coding-agent/skills.json +27 -0
  316. package/tests/fixtures/project-adapter-upgrades/stale-compatible-range/before/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  317. package/tests/fixtures/project-adapter-upgrades/stale-compatible-range/before/.coding-agent/skills.json +27 -0
  318. package/tests/fixtures/project-adapter-upgrades/stale-exact-pin/after/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  319. package/tests/fixtures/project-adapter-upgrades/stale-exact-pin/after/.coding-agent/skills.json +27 -0
  320. package/tests/fixtures/project-adapter-upgrades/stale-exact-pin/before/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  321. package/tests/fixtures/project-adapter-upgrades/stale-exact-pin/before/.coding-agent/skills.json +27 -0
  322. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-mode-escalation/after/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  323. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-mode-escalation/after/.coding-agent/skills.json +27 -0
  324. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-mode-escalation/before/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  325. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-mode-escalation/before/.coding-agent/skills.json +27 -0
  326. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-removes-evidence/after/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +69 -0
  327. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-removes-evidence/after/.coding-agent/skills.json +27 -0
  328. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-removes-evidence/before/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  329. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-removes-evidence/before/.coding-agent/skills.json +27 -0
  330. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-weakens-restrictions/after/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +69 -0
  331. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-weakens-restrictions/after/.coding-agent/skills.json +27 -0
  332. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-weakens-restrictions/before/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  333. package/tests/fixtures/project-adapter-upgrades/unsafe-upgrade-weakens-restrictions/before/.coding-agent/skills.json +27 -0
  334. package/tests/fixtures/project-adapter-upgrades/unsupported-future-core/after/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  335. package/tests/fixtures/project-adapter-upgrades/unsupported-future-core/after/.coding-agent/skills.json +27 -0
  336. package/tests/fixtures/project-adapter-upgrades/unsupported-future-core/before/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  337. package/tests/fixtures/project-adapter-upgrades/unsupported-future-core/before/.coding-agent/skills.json +27 -0
  338. package/tests/fixtures/project-adapter-upgrades/unsupported-old-core/after/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  339. package/tests/fixtures/project-adapter-upgrades/unsupported-old-core/after/.coding-agent/skills.json +27 -0
  340. package/tests/fixtures/project-adapter-upgrades/unsupported-old-core/before/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  341. package/tests/fixtures/project-adapter-upgrades/unsupported-old-core/before/.coding-agent/skills.json +27 -0
  342. package/tests/fixtures/project-adapter-upgrades/valid-upgrade/after/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  343. package/tests/fixtures/project-adapter-upgrades/valid-upgrade/after/.coding-agent/skills.json +27 -0
  344. package/tests/fixtures/project-adapter-upgrades/valid-upgrade/before/.coding-agent/adapters/fixture-upgrade-adapter/adapter.json +70 -0
  345. package/tests/fixtures/project-adapter-upgrades/valid-upgrade/before/.coding-agent/skills.json +27 -0
  346. package/tests/fixtures/sample-repo/.env.example +1 -0
  347. package/tests/fixtures/sample-repo/README.md +4 -0
  348. package/tests/fixtures/sample-repo/docs/architecture.md +3 -0
  349. package/tests/fixtures/sample-repo/package.json +11 -0
  350. package/tests/fixtures/sample-repo/src/index.js +3 -0
  351. package/tests/fixtures/sample-repo/test/index.test.js +8 -0
  352. package/tests/fixtures/triggers/cases.json +101 -0
  353. package/tests/policy/README.md +16 -0
  354. package/tests/privacy/README.md +14 -0
  355. package/tests/safety/README.md +17 -0
  356. package/tests/trigger/README.md +11 -0
  357. package/work-ledger.md +159 -0
@@ -0,0 +1,60 @@
1
+ {
2
+ "contractVersion": "1.0.0",
3
+ "skill": {"name": "repo-map", "version": "0.2.3"},
4
+ "invocation": {
5
+ "id": "example-repo-map-001",
6
+ "startedAt": "2026-01-01T12:00:00Z",
7
+ "endedAt": "2026-01-01T12:02:00Z"
8
+ },
9
+ "repository": {
10
+ "root": "/workspace/example-project",
11
+ "branch": "main",
12
+ "head": "0123456789abcdef",
13
+ "workingTreeState": "dirty"
14
+ },
15
+ "userIntent": "Map the repository before changing its API layer.",
16
+ "declaredScope": ["/workspace/example-project"],
17
+ "projectAdapter": null,
18
+ "environmentSummary": {"shell": "bash", "platform": "linux"},
19
+ "status": "complete",
20
+ "confidence": {
21
+ "level": "high",
22
+ "reason": "Repository identity, manifests, entry points, tests, CI, and documentation were inspected."
23
+ },
24
+ "commands": [
25
+ {
26
+ "command": "git status --short --branch",
27
+ "family": "git-status",
28
+ "workingDirectory": "/workspace/example-project",
29
+ "startedAt": "2026-01-01T12:00:10Z",
30
+ "endedAt": "2026-01-01T12:00:11Z",
31
+ "exitStatus": 0,
32
+ "resultStatus": "success",
33
+ "safetyClass": "allowed",
34
+ "approvalReference": null,
35
+ "purpose": "Record branch and working-tree state.",
36
+ "outputSummary": "Branch main; existing user changes present."
37
+ }
38
+ ],
39
+ "skippedChecks": [],
40
+ "findings": [
41
+ {
42
+ "summary": "The repository contains separate web and API packages.",
43
+ "evidence": ["package.json", "apps/web/package.json", "apps/api/package.json"]
44
+ }
45
+ ],
46
+ "risks": [
47
+ {
48
+ "summary": "The working tree contains pre-existing changes.",
49
+ "evidence": ["git status --short --branch"]
50
+ }
51
+ ],
52
+ "failures": [],
53
+ "unresolvedQuestions": [],
54
+ "changedState": {
55
+ "changed": false,
56
+ "summary": "The audit-only skill made no intentional project, Git, runtime, or remote changes."
57
+ },
58
+ "handoffSummary": "Repository boundaries and primary validation entry points are mapped.",
59
+ "recommendedNextAction": "Trace the requested API route before editing."
60
+ }
@@ -0,0 +1,49 @@
1
+ # Evidence Pack
2
+
3
+ ## Scope
4
+
5
+ - Skill: `repo-map` `0.2.3`
6
+ - Intent: Map the repository before changing its API layer.
7
+ - Scope: `/workspace/example-project`
8
+ - Status: `complete`
9
+ - Confidence: High; repository identity and required structural areas were inspected.
10
+
11
+ ## Repository Identity
12
+
13
+ - Root: `/workspace/example-project`
14
+ - Branch: `main`
15
+ - HEAD: `0123456789abcdef`
16
+ - Working tree: Dirty with pre-existing user changes
17
+
18
+ ## Checks Performed
19
+
20
+ | Check | Result | Evidence |
21
+ |---|---|---|
22
+ | Repository identity | Passed | Git root, branch, remote, and HEAD |
23
+ | Structure | Passed | Package and application directories |
24
+ | Tests and CI | Passed | Package scripts and workflow files |
25
+
26
+ ## Skipped Checks
27
+
28
+ None.
29
+
30
+ ## Findings
31
+
32
+ - Separate web and API packages exist.
33
+ - Project changes were already present before inspection.
34
+
35
+ ## Risks And Failures
36
+
37
+ - Preserve the existing working-tree changes.
38
+
39
+ ## Unresolved Questions
40
+
41
+ None.
42
+
43
+ ## State Change
44
+
45
+ No intentional project, Git, runtime, dependency, or remote state changed.
46
+
47
+ ## Handoff
48
+
49
+ The repository is mapped. Trace the requested API route before editing.
@@ -0,0 +1,156 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://coding-agent-skills.local/schemas/evidence-pack.schema.json",
4
+ "title": "Coding Agent Evidence Pack",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "contractVersion",
9
+ "skill",
10
+ "invocation",
11
+ "repository",
12
+ "userIntent",
13
+ "declaredScope",
14
+ "projectAdapter",
15
+ "environmentSummary",
16
+ "status",
17
+ "confidence",
18
+ "commands",
19
+ "skippedChecks",
20
+ "findings",
21
+ "risks",
22
+ "failures",
23
+ "unresolvedQuestions",
24
+ "changedState",
25
+ "handoffSummary",
26
+ "recommendedNextAction"
27
+ ],
28
+ "properties": {
29
+ "contractVersion": {"type": "string", "const": "1.0.0"},
30
+ "skill": {
31
+ "type": "object",
32
+ "additionalProperties": false,
33
+ "required": ["name", "version"],
34
+ "properties": {
35
+ "name": {"type": "string", "minLength": 1},
36
+ "version": {"type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"}
37
+ }
38
+ },
39
+ "invocation": {
40
+ "type": "object",
41
+ "additionalProperties": false,
42
+ "required": ["id", "startedAt", "endedAt"],
43
+ "properties": {
44
+ "id": {"type": "string", "minLength": 1},
45
+ "startedAt": {"type": "string", "format": "date-time"},
46
+ "endedAt": {"type": "string", "format": "date-time"}
47
+ }
48
+ },
49
+ "repository": {
50
+ "type": "object",
51
+ "additionalProperties": false,
52
+ "required": ["root", "branch", "head", "workingTreeState"],
53
+ "properties": {
54
+ "root": {"type": ["string", "null"]},
55
+ "branch": {"type": ["string", "null"]},
56
+ "head": {"type": ["string", "null"]},
57
+ "workingTreeState": {
58
+ "type": "string",
59
+ "enum": ["clean", "dirty", "not-git", "unknown"]
60
+ }
61
+ }
62
+ },
63
+ "userIntent": {"type": "string", "minLength": 1},
64
+ "declaredScope": {"type": "array", "items": {"type": "string"}},
65
+ "projectAdapter": {"type": ["string", "null"]},
66
+ "environmentSummary": {"type": "object"},
67
+ "status": {
68
+ "type": "string",
69
+ "enum": ["complete", "partial", "failed", "blocked"]
70
+ },
71
+ "confidence": {
72
+ "type": "object",
73
+ "additionalProperties": false,
74
+ "required": ["level", "reason"],
75
+ "properties": {
76
+ "level": {"type": "string", "enum": ["high", "medium", "low"]},
77
+ "reason": {"type": "string", "minLength": 1}
78
+ }
79
+ },
80
+ "commands": {"type": "array", "items": {"$ref": "#/$defs/commandRecord"}},
81
+ "skippedChecks": {"type": "array", "items": {"$ref": "#/$defs/skippedCheck"}},
82
+ "findings": {"type": "array", "items": {"$ref": "#/$defs/note"}},
83
+ "risks": {"type": "array", "items": {"$ref": "#/$defs/note"}},
84
+ "failures": {"type": "array", "items": {"$ref": "#/$defs/note"}},
85
+ "unresolvedQuestions": {"type": "array", "items": {"type": "string"}},
86
+ "changedState": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "required": ["changed", "summary"],
90
+ "properties": {
91
+ "changed": {"type": "boolean"},
92
+ "summary": {"type": "string", "minLength": 1}
93
+ }
94
+ },
95
+ "handoffSummary": {"type": "string"},
96
+ "recommendedNextAction": {"type": ["string", "null"]}
97
+ },
98
+ "$defs": {
99
+ "commandRecord": {
100
+ "type": "object",
101
+ "additionalProperties": false,
102
+ "required": [
103
+ "command",
104
+ "family",
105
+ "workingDirectory",
106
+ "startedAt",
107
+ "endedAt",
108
+ "exitStatus",
109
+ "resultStatus",
110
+ "safetyClass",
111
+ "approvalReference",
112
+ "purpose",
113
+ "outputSummary"
114
+ ],
115
+ "properties": {
116
+ "command": {"type": "string"},
117
+ "family": {"type": "string"},
118
+ "workingDirectory": {"type": "string"},
119
+ "startedAt": {"type": "string", "format": "date-time"},
120
+ "endedAt": {"type": "string", "format": "date-time"},
121
+ "exitStatus": {"type": ["integer", "null"]},
122
+ "resultStatus": {
123
+ "type": "string",
124
+ "enum": ["success", "failure", "running", "unknown"]
125
+ },
126
+ "safetyClass": {
127
+ "type": "string",
128
+ "enum": ["allowed", "approved-exception", "rejected"]
129
+ },
130
+ "approvalReference": {"type": ["string", "null"]},
131
+ "purpose": {"type": "string"},
132
+ "outputSummary": {"type": "string"}
133
+ }
134
+ },
135
+ "skippedCheck": {
136
+ "type": "object",
137
+ "additionalProperties": false,
138
+ "required": ["name", "reason", "consequence", "completionPermitted"],
139
+ "properties": {
140
+ "name": {"type": "string"},
141
+ "reason": {"type": "string"},
142
+ "consequence": {"type": "string"},
143
+ "completionPermitted": {"type": "boolean"}
144
+ }
145
+ },
146
+ "note": {
147
+ "type": "object",
148
+ "additionalProperties": false,
149
+ "required": ["summary", "evidence"],
150
+ "properties": {
151
+ "summary": {"type": "string"},
152
+ "evidence": {"type": "array", "items": {"type": "string"}}
153
+ }
154
+ }
155
+ }
156
+ }
@@ -0,0 +1,82 @@
1
+ # Project Adapters
2
+
3
+ Project-specific adapters live in their owning project repositories, not this shared repository.
4
+ They add bounded project context to a compatible shared skill. They are data, not executable plugins.
5
+
6
+ Every adapter must validate against [the project-adapter schema](../../schemas/project-adapter.schema.json).
7
+
8
+ ## Convention And Discovery
9
+
10
+ External discovery is opt-in and bounded to three project-relative locations. Each adapter
11
+ uses the exact manifest name `adapter.json`. See [the discovery convention](discovery.md)
12
+ for path and symlink rules, [external validation](external-adapters.md) for manifest-only
13
+ CLI behavior, and [project installation](project-installation.md) for declaration and
14
+ version-pinning rules. Use [upgrade checks](upgrades.md) to compare two declared revisions
15
+ or a multi-step compatibility chain before changing a real project. The
16
+ [upgrade evidence contract](upgrade-evidence.md) defines sanitized review output. The
17
+ [real project adoption gate](real-project-adoption.md) defines the approval and evidence
18
+ requirements that must be met before any real project adapter is created.
19
+
20
+ Discovery validates schema, skill compatibility, command policy, and inherited restrictions
21
+ before accepting any extension. It never executes adapter commands.
22
+
23
+ ## Adapter-Aware Repo Map Consumption
24
+
25
+ The shared pack can consume a validated project-owned adapter as agent context for
26
+ `repo-map` orientation:
27
+
28
+ ```bash
29
+ node scripts/render-adapter-repo-map.mjs <project-root>
30
+ ```
31
+
32
+ The renderer validates the project declaration first, confirms that `repo-map` is enabled,
33
+ then reports only adapter-declared metadata: documentation precedence, safe read paths,
34
+ ignored paths, required evidence, package-manager hints, repository bounds, and sanitized
35
+ Git branch state. It does not read target project file contents, run project tests or
36
+ builds, install packages, perform runtime checks, deploy, migrate, or read `.env` files.
37
+
38
+ This is agent context for safer repository understanding. It is not target-application
39
+ product behavior.
40
+
41
+ ## What Adapters May Do
42
+
43
+ - Add bounded relative read paths and ignored paths.
44
+ - Declare project-root markers and a bounded detection depth.
45
+ - Add documentation precedence and package-manager hints.
46
+ - Add command aliases that already satisfy the shared command policy.
47
+ - Add status-only runtime commands and manager hints.
48
+ - Require additional evidence or named approval for exceptional reads.
49
+
50
+ ## What Adapters Must Never Do
51
+
52
+ - Remove inherited denied-operation categories.
53
+ - Change an audit-only skill into an action-capable skill.
54
+ - Permit deployment, Git publication, installation, migration, or service mutation.
55
+ - Expose secrets or add secret-bearing paths.
56
+ - Suppress failures, contradictions, dirty state, or required evidence.
57
+ - Redefine completion semantics.
58
+ - Expand scanning outside the declared project root without named approval.
59
+
60
+ ## Compatibility And Inheritance
61
+
62
+ Skill manifests declare the adapter contract and compatible adapter versions. An adapter separately declares supported skill IDs, compatible skill versions, and the unchanged skill mode.
63
+
64
+ Compatibility requires both declarations to agree. Exact pilot versions and the `0.2.x`
65
+ compatibility form are supported in v0.2.3. Upgrade comparisons also preserve adapter
66
+ identity, inherited restrictions, and required evidence across revisions.
67
+
68
+ The `inheritance` object is mandatory. Shared restrictions always win, and every permission-like safety flag is fixed to `false`.
69
+
70
+ The shared skill repository stores only synthetic fixture roots. The first external
71
+ project-owned adapter was adopted in `/home/oneclickwebsitedesignfactory/tax-lien-platform`
72
+ at candidate commit `c548b1a6cbb3455a70b89d0e301e22435bfccac9`. That adapter is
73
+ `repo-map` only, docs/metadata-only, and contains no commands, runtime checks,
74
+ build/test/package behavior, platform behavior, deployment behavior, or secret-aware
75
+ behavior.
76
+
77
+ During publication, the candidate repository's normal pre-push hook attempted package
78
+ operations, including install, audit, and typecheck. The run was interrupted to preserve
79
+ the approved boundary, validation was kept to the shared adapter validators and safe
80
+ checks, and publication completed with hook verification bypass. Future real-project
81
+ adapter adoption must decide explicitly whether repository hooks are allowed or must be
82
+ bypassed to preserve a no-install/no-build/no-test boundary.
@@ -0,0 +1,50 @@
1
+ # External Adapter Discovery
2
+
3
+ External adapters are extension-only JSON data stored outside this shared skill repository.
4
+ The discovery harness accepts a confirmed project or fixture root and inspects only these
5
+ relative locations:
6
+
7
+ ```text
8
+ .coding-agent/adapters/
9
+ coding-agent/adapters/
10
+ adapters/coding-agent/
11
+ ```
12
+
13
+ Each immediate child directory represents one adapter and must contain the exact manifest
14
+ filename `adapter.json`. Discovery does not recursively scan the rest of the project.
15
+
16
+ ## Discovery Rules
17
+
18
+ 1. Resolve the supplied root without accepting `..` path traversal.
19
+ 2. Inspect only the three declared adapter locations.
20
+ 3. Reject adapter containers, directories, or manifests that are symlinks.
21
+ 4. Accept only regular `adapter.json` files no larger than the harness limit.
22
+ 5. Parse JSON without returning source snippets in errors.
23
+ 6. Reject secret-like content before semantic validation.
24
+ 7. Validate against adapter schema version `1.0.0`.
25
+ 8. Confirm skill ID, skill version, declared mode, command policy, and manifest compatibility.
26
+ 9. Apply shared restrictions before every adapter extension.
27
+ 10. Return a nonzero exit code when any discovered adapter or container is invalid.
28
+
29
+ An empty root is valid and reports that zero adapters were discovered. A missing root,
30
+ malformed manifest, unexpected container entry, or mixed valid and invalid root fails.
31
+
32
+ ## Inheritance
33
+
34
+ Adapters may add bounded read paths, documentation precedence, safe aliases, status-only
35
+ runtime hints, package-manager hints, approvals, and evidence requirements. They remain
36
+ extension-only: shared denied operations, skill modes, evidence requirements, failure
37
+ reporting, completion semantics, secret handling, and scope approval rules always win.
38
+
39
+ Symlink escapes and path traversal are rejected even when their target would otherwise
40
+ contain a structurally valid adapter.
41
+
42
+ Project repositories may later reference a versioned checkout or installed copy of this
43
+ shared core. That integration must run the core validator against the project root; it must
44
+ not copy or redefine shared restrictions locally.
45
+
46
+ The [project installation contract](project-installation.md) defines the declaration and
47
+ version pin required before a project-owned adapter can be considered installed.
48
+
49
+ No real project adapters are added in v0.2.3. The committed roots are disposable synthetic
50
+ fixtures only.
@@ -0,0 +1,42 @@
1
+ # Validating External Adapters
2
+
3
+ Run the dependency-free validator from the shared core repository:
4
+
5
+ ```bash
6
+ node scripts/validate-adapters.mjs <adapter-root>
7
+ ```
8
+
9
+ The argument is the project or fixture root beneath which the declared discovery locations
10
+ may exist. The validator reads only core schemas and policies plus discovered `adapter.json`
11
+ files. It does not read `.env`, install dependencies, run adapter commands, or change the
12
+ target project.
13
+
14
+ ## Results
15
+
16
+ - Exit `0`: every discovered adapter is accepted, including the explicit zero-adapter case.
17
+ - Exit `1`: a root, container, manifest, schema, compatibility, inheritance, or path-safety
18
+ rejection occurred.
19
+ - Exit `2`: the command is missing its required root argument.
20
+
21
+ Output contains counts, public pilot skill IDs for accepted adapters, and stable rejection
22
+ codes. It does not echo adapter IDs, commands, paths from manifest values, parse snippets,
23
+ or secret-like values.
24
+
25
+ Common rejection categories include unsupported adapter or skill versions, unsupported
26
+ skill IDs, mode override, restriction weakening, unsafe command alias, secret exposure,
27
+ failure suppression, completion override, required-evidence removal, scope expansion,
28
+ unsafe path, malformed JSON, missing manifest, and symlink escape.
29
+
30
+ ## Fixture Model
31
+
32
+ Synthetic fixture roots under `tests/fixtures/external-adapters/` exercise all three
33
+ locations, valid adapters, isolated invalid adapters, mixed roots, empty roots, malformed
34
+ input, traversal, and temporary symlink escapes. Fixtures contain no real project details.
35
+
36
+ Real project adapters remain deferred. When approved later, they should be owned by their
37
+ project repository, declare compatibility with a released shared core, and pass this
38
+ validator without changing shared restrictions.
39
+
40
+ Manifest-only validation does not prove that a project has declared or pinned the shared
41
+ core. Use the [project installation validator](project-installation.md) for that stronger
42
+ workflow.
@@ -0,0 +1,135 @@
1
+ # Project-Owned Adapter Installation
2
+
3
+ A future project repository owns its adapter manifests while the shared repository owns
4
+ schemas, skill manifests, command policies, completion rules, and validators. Installation
5
+ means declaring and validating that relationship; it does not copy or execute adapter code.
6
+
7
+ ## Required Layout
8
+
9
+ Choose one supported adapter root:
10
+
11
+ ```text
12
+ .coding-agent/adapters/
13
+ coding-agent/adapters/
14
+ adapters/coding-agent/
15
+ ```
16
+
17
+ Each immediate child directory contains one `adapter.json`. The project must also contain
18
+ exactly one declaration:
19
+
20
+ ```text
21
+ .coding-agent/skills.json
22
+ coding-agent.skills.json
23
+ ```
24
+
25
+ Two declarations are ambiguous and fail validation.
26
+
27
+ ## Declaration Contract
28
+
29
+ The declaration validates against
30
+ [`project-adapter-installation.schema.json`](../../schemas/project-adapter-installation.schema.json).
31
+ It records:
32
+
33
+ - Declaration and adapter schema versions.
34
+ - Project ID and one supported adapter root.
35
+ - Expected shared core version and an exact pin or compatible range.
36
+ - Compatible pilot skill IDs.
37
+ - Every installed adapter ID, adapter version, and skill set.
38
+ - The validation command template.
39
+ - A repository-relative evidence output location.
40
+ - A repository-relative approval policy reference.
41
+ - An explicit `noSecrets: true` guarantee.
42
+
43
+ The validation command is declared as:
44
+
45
+ ```text
46
+ node <shared-core>/scripts/validate-project-adapters.mjs <project-root>
47
+ ```
48
+
49
+ The validator checks this field; it does not execute it.
50
+
51
+ ## Version Pinning
52
+
53
+ Two version pin forms are supported:
54
+
55
+ ```text
56
+ 0.2.3
57
+ >=0.2.2 <0.3.0
58
+ ```
59
+
60
+ The expected version must equal the running shared core version. The pin must contain both
61
+ that version and the declared expected version. Missing versions, prefixes, wildcards,
62
+ caret ranges, unsupported old or future versions, and malformed comparators fail closed.
63
+
64
+ Adapter schema version `1.0.0` and every declared adapter version must match the discovered
65
+ manifest. Skill IDs and modes must remain compatible with the shared pilot manifests.
66
+
67
+ ## Validation Flow
68
+
69
+ Run:
70
+
71
+ ```bash
72
+ node scripts/validate-project-adapters.mjs <project-root>
73
+ ```
74
+
75
+ The dependency-free validator:
76
+
77
+ 1. Finds exactly one project declaration.
78
+ 2. Validates declaration structure and safe relative paths.
79
+ 3. Checks the current core version against the exact pin or compatible range.
80
+ 4. Runs bounded external adapter discovery.
81
+ 5. Matches project ID, adapter root, adapter IDs, versions, and skill IDs.
82
+ 6. Applies shared schema, command-policy, inheritance, and path-safety checks.
83
+ 7. Returns counts and stable rejection codes without echoing declaration values.
84
+
85
+ Exit `0` means the project declaration and all installed adapters are compatible. Exit `1`
86
+ means validation failed. Exit `2` means the project-root argument is missing.
87
+
88
+ ## Repo-Map Consumption
89
+
90
+ After validation passes, a project-owned adapter can be consumed as read-only `repo-map`
91
+ context:
92
+
93
+ ```bash
94
+ node scripts/render-adapter-repo-map.mjs <project-root>
95
+ ```
96
+
97
+ The renderer uses the same project declaration and adapter validation path before it reads
98
+ adapter metadata. It requires `repo-map` compatibility and then renders:
99
+
100
+ - Documentation precedence.
101
+ - Safe read paths.
102
+ - Ignored paths.
103
+ - Required evidence.
104
+ - Root markers, declared scope, and detection depth.
105
+ - Package-manager hints.
106
+ - Sanitized Git branch state and warnings.
107
+
108
+ The renderer is metadata-only. It does not read target project file contents, run target
109
+ project tests, run builds, install packages, perform runtime checks, deploy, migrate, read
110
+ `.env` files, or modify project state.
111
+
112
+ ## Safety Boundary
113
+
114
+ Project adapters are extension-only. They cannot remove denied operations, change an
115
+ audit-only mode, add deployment or publication, suppress failures, redefine completion,
116
+ remove evidence, expose secrets, expand scope without approval, or escape through symlinks
117
+ or traversal.
118
+
119
+ The validator reads only the declaration, discovered `adapter.json` files, and shared core
120
+ metadata. It ignores unrelated `.env` files and never installs packages, runs adapter
121
+ commands, deploys, migrates, or changes project state.
122
+
123
+ Use [the upgrade checker](upgrades.md) to compare a current declaration with a proposed
124
+ revision and detect stale pins or compatibility drift before adoption.
125
+
126
+ Before any real project adapter is created, use the
127
+ [real project adoption gate](real-project-adoption.md) to confirm candidate criteria,
128
+ required evidence, approval gates, stop conditions, and rollback boundaries.
129
+
130
+ All committed project roots in this shared repository remain disposable synthetic fixtures.
131
+ The first external project-owned adapter was adopted in
132
+ `/home/oneclickwebsitedesignfactory/tax-lien-platform` at candidate commit
133
+ `c548b1a6cbb3455a70b89d0e301e22435bfccac9`. The shared repository still owns the schemas,
134
+ completion rules, command policy, and validators; the project repository owns its adapter
135
+ manifest and declaration.