@skill-graph/cli 0.5.6

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 (330) hide show
  1. package/CHANGELOG.md +247 -0
  2. package/LICENSE +200 -0
  3. package/NOTICE +62 -0
  4. package/README.md +398 -0
  5. package/SKILL_GRAPH.md +443 -0
  6. package/bin/skill-graph.js +374 -0
  7. package/docs/ADOPTION.md +117 -0
  8. package/docs/CONFORMANCE.md +66 -0
  9. package/docs/PRIMER.md +384 -0
  10. package/docs/QUICKSTART-30MIN.md +333 -0
  11. package/docs/ROUTING-METRICS.md +120 -0
  12. package/docs/SKILL-MD-FORMAT-COMPATIBILITY.md +127 -0
  13. package/docs/SKILL_AUDIT_CHECKLIST.md +199 -0
  14. package/docs/SKILL_AUDIT_LOOP.md +195 -0
  15. package/docs/SKILL_METADATA_PROTOCOL.md +609 -0
  16. package/docs/_archived/marketplace-publication-priority-2026-05-18.md +239 -0
  17. package/docs/adr/0001-predicate-set.md +69 -0
  18. package/docs/adr/0002-json-ld-context.md +82 -0
  19. package/docs/adr/0003-ontoclean-rigidity-tags.md +65 -0
  20. package/docs/adr/0004-persistent-identifiers.md +74 -0
  21. package/docs/adr/0005-freshness-consolidation.md +70 -0
  22. package/docs/adr/0006-revise-predicate-rename.md +105 -0
  23. package/docs/adr/0007-audit-loop-cadence.md +99 -0
  24. package/docs/adr/0008-skill-surface-split-and-curation-policy.md +93 -0
  25. package/docs/category-consumers.md +168 -0
  26. package/docs/concept-map.md +194 -0
  27. package/docs/diagrams/drift-states.mmd +21 -0
  28. package/docs/diagrams/manifest-pipeline.mmd +25 -0
  29. package/docs/diagrams/routing-harness.mmd +41 -0
  30. package/docs/diagrams/starter-graph.mmd +53 -0
  31. package/docs/field-decision-guide.md +315 -0
  32. package/docs/field-rationale.md +211 -0
  33. package/docs/field-reference.generated.md +624 -0
  34. package/docs/field-reference.md +1426 -0
  35. package/docs/glossary.md +190 -0
  36. package/docs/head-noun-glossary.md +63 -0
  37. package/docs/images/audit-phases.png +0 -0
  38. package/docs/images/drift-states.png +0 -0
  39. package/docs/images/graded-mode.png +0 -0
  40. package/docs/images/manifest-pipeline.png +0 -0
  41. package/docs/images/routing-harness.png +0 -0
  42. package/docs/images/skill-anatomy.png +0 -0
  43. package/docs/images/starter-graph.png +0 -0
  44. package/docs/images/system-model.png +0 -0
  45. package/docs/integrations/github-actions.md +155 -0
  46. package/docs/manifest-field-mapping.md +443 -0
  47. package/docs/marketplace-publication-queue.generated.md +240 -0
  48. package/docs/marketplace-release-agent-prompt.md +82 -0
  49. package/docs/marketplace-skill-candidate-list.md +272 -0
  50. package/docs/marketplace-syndication.md +222 -0
  51. package/docs/migration-sample-review.md +155 -0
  52. package/docs/migrations/v4-to-v5.md +168 -0
  53. package/docs/migrations/v5-to-v6.md +221 -0
  54. package/docs/name-exceptions.yaml +37 -0
  55. package/docs/plans/marketplace-p1-public-migration-plan.md +41 -0
  56. package/docs/plans/multi-root-workspace.md +148 -0
  57. package/docs/plans/scripts-roadmap.md +107 -0
  58. package/docs/plans/v4-schema-bump.md +160 -0
  59. package/docs/plans/wave-2-extraction.md +122 -0
  60. package/docs/positioning-vs-marketplaces.md +175 -0
  61. package/docs/proposals/skill-audit-loop-positioning.md +160 -0
  62. package/docs/quality-doctrine.md +138 -0
  63. package/docs/recommended-skills.md +150 -0
  64. package/docs/research/skill-comprehension-eval-research.md +1830 -0
  65. package/docs/research/skill-retrieval-evidence.md +66 -0
  66. package/docs/skill-metadata-protocol.md +471 -0
  67. package/docs/skills-sh-maintainer-cleanup-request.md +80 -0
  68. package/examples/audits/a11y/findings.md +52 -0
  69. package/examples/audits/a11y/scorecard.md +21 -0
  70. package/examples/audits/a11y/verdict.md +44 -0
  71. package/examples/audits/debugging/findings.md +59 -0
  72. package/examples/audits/debugging/scorecard.md +22 -0
  73. package/examples/audits/debugging/verdict.md +33 -0
  74. package/examples/audits/documentation/findings.md +59 -0
  75. package/examples/audits/documentation/scorecard.md +22 -0
  76. package/examples/audits/documentation/verdict.md +33 -0
  77. package/examples/evals/a11y.json +140 -0
  78. package/examples/evals/api-design.json +52 -0
  79. package/examples/evals/code-review.json +52 -0
  80. package/examples/evals/data-modeling.json +52 -0
  81. package/examples/evals/database-migration.json +52 -0
  82. package/examples/evals/debugging.json +118 -0
  83. package/examples/evals/dependency-architecture.json +52 -0
  84. package/examples/evals/design-system-architecture.json +52 -0
  85. package/examples/evals/error-tracking.json +52 -0
  86. package/examples/evals/event-contract-design.json +52 -0
  87. package/examples/evals/form-ux-architecture.json +52 -0
  88. package/examples/evals/framework-fit-analysis.json +52 -0
  89. package/examples/evals/graph-audit.json +139 -0
  90. package/examples/evals/information-architecture.json +52 -0
  91. package/examples/evals/interaction-feedback.json +52 -0
  92. package/examples/evals/interaction-patterns.json +52 -0
  93. package/examples/evals/layout-composition.json +52 -0
  94. package/examples/evals/lint-overlay.json +117 -0
  95. package/examples/evals/microcopy.json +52 -0
  96. package/examples/evals/observability-modeling.json +52 -0
  97. package/examples/evals/pattern-recognition.json +96 -0
  98. package/examples/evals/performance-engineering.json +52 -0
  99. package/examples/evals/refactor.json +128 -0
  100. package/examples/evals/semiotics.json +52 -0
  101. package/examples/evals/skill-infrastructure.json +96 -0
  102. package/examples/evals/skill-router.json +140 -0
  103. package/examples/evals/skill-router.routing.json +113 -0
  104. package/examples/evals/system-interface-contracts.json +52 -0
  105. package/examples/evals/task-analysis.json +52 -0
  106. package/examples/evals/testing-strategy.json +118 -0
  107. package/examples/evals/type-safety.json +249 -0
  108. package/examples/evals/visual-design-foundations.json +52 -0
  109. package/examples/evals/webhook-integration.json +52 -0
  110. package/examples/exports/a11y.skill-md.md +80 -0
  111. package/examples/exports/debugging.skill-md.md +80 -0
  112. package/examples/exports/refactor.skill-md.md +78 -0
  113. package/examples/exports/testing-strategy.skill-md.md +81 -0
  114. package/examples/projects/markdown-static-site/README.md +115 -0
  115. package/examples/projects/markdown-static-site/skills/content-source-router/SKILL.md +131 -0
  116. package/examples/projects/markdown-static-site/skills/image-optimization-pipeline-config/SKILL.md +132 -0
  117. package/examples/projects/markdown-static-site/skills/link-rot-detection/SKILL.md +103 -0
  118. package/examples/projects/markdown-static-site/skills/markdown-post-frontmatter-validation/SKILL.md +133 -0
  119. package/examples/projects/markdown-static-site/skills/migrate-posts-to-v2-frontmatter/SKILL.md +140 -0
  120. package/examples/projects/saas-stripe-postgres/README.md +208 -0
  121. package/examples/projects/saas-stripe-postgres/db/migrations/0004_canonicalize_orders.sql +37 -0
  122. package/examples/projects/saas-stripe-postgres/db/schema.sql +112 -0
  123. package/examples/projects/saas-stripe-postgres/skills/migrate-orders-to-canonical-schema/SKILL.md +149 -0
  124. package/examples/projects/saas-stripe-postgres/skills/nextjs-server-action-validation/SKILL.md +154 -0
  125. package/examples/projects/saas-stripe-postgres/skills/payment-provider-router/SKILL.md +153 -0
  126. package/examples/projects/saas-stripe-postgres/skills/postgres-rls-pattern/SKILL.md +163 -0
  127. package/examples/projects/saas-stripe-postgres/skills/stripe-webhook-signature-verification/SKILL.md +137 -0
  128. package/examples/protocol/skill-metadata-template.md +301 -0
  129. package/examples/protocol/skills.manifest.sample.json +13245 -0
  130. package/examples/skill-metadata-template.md +317 -0
  131. package/examples/skills.manifest.sample.json +13519 -0
  132. package/examples/tests/v3-1-skos-fixture/SKILL.md +93 -0
  133. package/marketplace/README.md +17 -0
  134. package/marketplace/skills/a11y/SKILL.md +66 -0
  135. package/marketplace/skills/acid-fundamentals/SKILL.md +106 -0
  136. package/marketplace/skills/agent-engineering/SKILL.md +386 -0
  137. package/marketplace/skills/agent-eval-design/SKILL.md +55 -0
  138. package/marketplace/skills/ai-native-development/SKILL.md +294 -0
  139. package/marketplace/skills/api-design/SKILL.md +60 -0
  140. package/marketplace/skills/architecture-decision-records/SKILL.md +55 -0
  141. package/marketplace/skills/background-jobs/SKILL.md +265 -0
  142. package/marketplace/skills/bounded-context-mapping/SKILL.md +55 -0
  143. package/marketplace/skills/cap-theorem-tradeoffs/SKILL.md +127 -0
  144. package/marketplace/skills/client-server-boundary/SKILL.md +187 -0
  145. package/marketplace/skills/code-review/SKILL.md +120 -0
  146. package/marketplace/skills/color-system-design/SKILL.md +43 -0
  147. package/marketplace/skills/component-architecture/SKILL.md +126 -0
  148. package/marketplace/skills/compression/SKILL.md +112 -0
  149. package/marketplace/skills/conceptual-modeling/SKILL.md +181 -0
  150. package/marketplace/skills/connection-pooling/SKILL.md +105 -0
  151. package/marketplace/skills/constraint-awareness/SKILL.md +287 -0
  152. package/marketplace/skills/content-monitor/SKILL.md +209 -0
  153. package/marketplace/skills/context-engineering/SKILL.md +320 -0
  154. package/marketplace/skills/context-graph/SKILL.md +174 -0
  155. package/marketplace/skills/context-management/SKILL.md +174 -0
  156. package/marketplace/skills/context-window/SKILL.md +239 -0
  157. package/marketplace/skills/contract-testing/SKILL.md +120 -0
  158. package/marketplace/skills/cron-scheduling/SKILL.md +223 -0
  159. package/marketplace/skills/dark-mode-implementation/SKILL.md +47 -0
  160. package/marketplace/skills/data-modeling/SKILL.md +59 -0
  161. package/marketplace/skills/data-modeling-fundamentals/SKILL.md +117 -0
  162. package/marketplace/skills/database-migration/SKILL.md +429 -0
  163. package/marketplace/skills/debugging/SKILL.md +67 -0
  164. package/marketplace/skills/dependency-architecture/SKILL.md +58 -0
  165. package/marketplace/skills/design-module-composition/SKILL.md +43 -0
  166. package/marketplace/skills/design-system-architecture/SKILL.md +61 -0
  167. package/marketplace/skills/design-thinking/SKILL.md +44 -0
  168. package/marketplace/skills/diagnosis/SKILL.md +296 -0
  169. package/marketplace/skills/diff-analysis/SKILL.md +188 -0
  170. package/marketplace/skills/e2e-test-design/SKILL.md +113 -0
  171. package/marketplace/skills/entity-relationship-modeling/SKILL.md +218 -0
  172. package/marketplace/skills/epistemic-grounding/SKILL.md +112 -0
  173. package/marketplace/skills/error-boundary/SKILL.md +235 -0
  174. package/marketplace/skills/error-tracking/SKILL.md +261 -0
  175. package/marketplace/skills/eval-driven-development/SKILL.md +147 -0
  176. package/marketplace/skills/evaluation/SKILL.md +113 -0
  177. package/marketplace/skills/event-contract-design/SKILL.md +60 -0
  178. package/marketplace/skills/event-storming/SKILL.md +56 -0
  179. package/marketplace/skills/form-ux-architecture/SKILL.md +60 -0
  180. package/marketplace/skills/framework-fit-analysis/SKILL.md +59 -0
  181. package/marketplace/skills/frontend-architecture/SKILL.md +43 -0
  182. package/marketplace/skills/generative-ui/SKILL.md +118 -0
  183. package/marketplace/skills/graph-audit/SKILL.md +81 -0
  184. package/marketplace/skills/guardrails/SKILL.md +118 -0
  185. package/marketplace/skills/hooks-patterns/SKILL.md +185 -0
  186. package/marketplace/skills/http-semantics/SKILL.md +136 -0
  187. package/marketplace/skills/ideation/SKILL.md +41 -0
  188. package/marketplace/skills/indexing-strategy/SKILL.md +108 -0
  189. package/marketplace/skills/information-architecture/SKILL.md +59 -0
  190. package/marketplace/skills/integration-test-design/SKILL.md +111 -0
  191. package/marketplace/skills/intent-recognition/SKILL.md +136 -0
  192. package/marketplace/skills/interaction-feedback/SKILL.md +59 -0
  193. package/marketplace/skills/interaction-patterns/SKILL.md +59 -0
  194. package/marketplace/skills/journey-mapping/SKILL.md +41 -0
  195. package/marketplace/skills/keywords/SKILL.md +213 -0
  196. package/marketplace/skills/knowledge-modeling/SKILL.md +232 -0
  197. package/marketplace/skills/layout-composition/SKILL.md +59 -0
  198. package/marketplace/skills/linguistics/SKILL.md +429 -0
  199. package/marketplace/skills/lint-overlay/SKILL.md +76 -0
  200. package/marketplace/skills/mental-models/SKILL.md +126 -0
  201. package/marketplace/skills/merge-queue/SKILL.md +94 -0
  202. package/marketplace/skills/methodology/SKILL.md +317 -0
  203. package/marketplace/skills/microcopy/SKILL.md +232 -0
  204. package/marketplace/skills/middleware-patterns/SKILL.md +363 -0
  205. package/marketplace/skills/mobile-responsive-ux/SKILL.md +287 -0
  206. package/marketplace/skills/mutation-testing/SKILL.md +112 -0
  207. package/marketplace/skills/naming-conventions/SKILL.md +112 -0
  208. package/marketplace/skills/observability-modeling/SKILL.md +59 -0
  209. package/marketplace/skills/ontology-modeling/SKILL.md +67 -0
  210. package/marketplace/skills/owasp-security/SKILL.md +153 -0
  211. package/marketplace/skills/pattern-recognition/SKILL.md +472 -0
  212. package/marketplace/skills/performance-budgets/SKILL.md +185 -0
  213. package/marketplace/skills/performance-engineering/SKILL.md +58 -0
  214. package/marketplace/skills/performance-testing/SKILL.md +125 -0
  215. package/marketplace/skills/printify/SKILL.md +42 -0
  216. package/marketplace/skills/prioritization/SKILL.md +118 -0
  217. package/marketplace/skills/problem-framing/SKILL.md +41 -0
  218. package/marketplace/skills/problem-locating-solving/SKILL.md +203 -0
  219. package/marketplace/skills/project-knowledge-extraction/SKILL.md +54 -0
  220. package/marketplace/skills/prompt-craft/SKILL.md +134 -0
  221. package/marketplace/skills/prompt-injection-defense/SKILL.md +132 -0
  222. package/marketplace/skills/property-based-testing/SKILL.md +100 -0
  223. package/marketplace/skills/prototyping/SKILL.md +43 -0
  224. package/marketplace/skills/query-optimization/SKILL.md +144 -0
  225. package/marketplace/skills/real-time-updates/SKILL.md +324 -0
  226. package/marketplace/skills/ref-patterns/SKILL.md +284 -0
  227. package/marketplace/skills/refactor/SKILL.md +65 -0
  228. package/marketplace/skills/rendering-models/SKILL.md +142 -0
  229. package/marketplace/skills/replication-patterns/SKILL.md +110 -0
  230. package/marketplace/skills/research-synthesis/SKILL.md +41 -0
  231. package/marketplace/skills/route-handler-design/SKILL.md +347 -0
  232. package/marketplace/skills/schema-evolution/SKILL.md +140 -0
  233. package/marketplace/skills/security-fundamentals/SKILL.md +139 -0
  234. package/marketplace/skills/semantic-center/SKILL.md +194 -0
  235. package/marketplace/skills/semantic-relations/SKILL.md +250 -0
  236. package/marketplace/skills/semantics/SKILL.md +366 -0
  237. package/marketplace/skills/semiotics/SKILL.md +230 -0
  238. package/marketplace/skills/seo-strategy/SKILL.md +260 -0
  239. package/marketplace/skills/server-actions-design/SKILL.md +243 -0
  240. package/marketplace/skills/server-components-design/SKILL.md +190 -0
  241. package/marketplace/skills/sharding-strategy/SKILL.md +123 -0
  242. package/marketplace/skills/shopify/SKILL.md +42 -0
  243. package/marketplace/skills/skill-infrastructure/SKILL.md +320 -0
  244. package/marketplace/skills/skill-router/SKILL.md +71 -0
  245. package/marketplace/skills/skill-scaffold/SKILL.md +105 -0
  246. package/marketplace/skills/snapshot-testing/SKILL.md +120 -0
  247. package/marketplace/skills/spec-driven-development/SKILL.md +148 -0
  248. package/marketplace/skills/state-machine-modeling/SKILL.md +56 -0
  249. package/marketplace/skills/state-management/SKILL.md +134 -0
  250. package/marketplace/skills/streaming-architecture/SKILL.md +194 -0
  251. package/marketplace/skills/summarization/SKILL.md +156 -0
  252. package/marketplace/skills/suspense-patterns/SKILL.md +265 -0
  253. package/marketplace/skills/system-interface-contracts/SKILL.md +59 -0
  254. package/marketplace/skills/task-analysis/SKILL.md +201 -0
  255. package/marketplace/skills/taxonomy-design/SKILL.md +66 -0
  256. package/marketplace/skills/test-coverage-strategy/SKILL.md +108 -0
  257. package/marketplace/skills/test-doubles-design/SKILL.md +98 -0
  258. package/marketplace/skills/test-driven-development/SKILL.md +96 -0
  259. package/marketplace/skills/testing-strategy/SKILL.md +67 -0
  260. package/marketplace/skills/theme-system-design/SKILL.md +43 -0
  261. package/marketplace/skills/tool-call-flow/SKILL.md +229 -0
  262. package/marketplace/skills/tool-call-strategy/SKILL.md +292 -0
  263. package/marketplace/skills/transaction-isolation/SKILL.md +98 -0
  264. package/marketplace/skills/type-safety/SKILL.md +177 -0
  265. package/marketplace/skills/typography-system/SKILL.md +43 -0
  266. package/marketplace/skills/usability-testing/SKILL.md +43 -0
  267. package/marketplace/skills/user-research/SKILL.md +43 -0
  268. package/marketplace/skills/vercel-composition-patterns/SKILL.md +157 -0
  269. package/marketplace/skills/version-control/SKILL.md +233 -0
  270. package/marketplace/skills/visual-design-foundations/SKILL.md +59 -0
  271. package/marketplace/skills/visual-hierarchy/SKILL.md +43 -0
  272. package/marketplace/skills/webhook-integration/SKILL.md +331 -0
  273. package/marketplace/skills/writing-humanizer/SKILL.md +380 -0
  274. package/package.json +67 -0
  275. package/schemas/manifest.schema.json +811 -0
  276. package/schemas/manifest.v2.schema.json +164 -0
  277. package/schemas/manifest.v3.schema.json +758 -0
  278. package/schemas/manifest.v4.schema.json +755 -0
  279. package/schemas/manifest.v5.schema.json +755 -0
  280. package/schemas/manifest.v6.schema.json +811 -0
  281. package/schemas/skill.context.jsonld +279 -0
  282. package/schemas/skill.schema.json +919 -0
  283. package/schemas/skill.v2.schema.json +201 -0
  284. package/schemas/skill.v3.schema.json +827 -0
  285. package/schemas/skill.v4.schema.json +822 -0
  286. package/schemas/skill.v5.schema.json +830 -0
  287. package/schemas/skill.v6.schema.json +946 -0
  288. package/schemas/vocabulary/keywords.json +180 -0
  289. package/schemas/vocabulary/workspace_tags.json +23 -0
  290. package/scripts/__tests__/migrate-skill-v2-to-v3.test.js +161 -0
  291. package/scripts/__tests__/migrate-skill-v3-to-v4.test.js +158 -0
  292. package/scripts/__tests__/test-export-parser-drift.js +149 -0
  293. package/scripts/__tests__/test-marketplace-export.js +114 -0
  294. package/scripts/__tests__/test-router-paths.js +82 -0
  295. package/scripts/__tests__/test-stability-promotion.js +244 -0
  296. package/scripts/__tests__/test-v3-1-alias-contract.js +109 -0
  297. package/scripts/__tests__/test-v3-1-skos-runtime.js +116 -0
  298. package/scripts/backfill-schema-version.js +198 -0
  299. package/scripts/build-field-reference.js +160 -0
  300. package/scripts/build-retrieval-baseline.js +511 -0
  301. package/scripts/check-markdown-links.js +211 -0
  302. package/scripts/check-protocol-consistency.js +979 -0
  303. package/scripts/export-marketplace-skills.js +610 -0
  304. package/scripts/export-skill.js +374 -0
  305. package/scripts/generate-manifest.js +787 -0
  306. package/scripts/lib/alias-contract.js +83 -0
  307. package/scripts/lib/audit-prompt-builder.js +771 -0
  308. package/scripts/lib/mock-grader.js +134 -0
  309. package/scripts/lib/parse-frontmatter.js +429 -0
  310. package/scripts/lib/roots.js +119 -0
  311. package/scripts/lint/check-archetype-sections.js +185 -0
  312. package/scripts/lint/check-category-enum.js +83 -0
  313. package/scripts/lint/check-routing-eval.js +146 -0
  314. package/scripts/lint/check-routing-quality.js +211 -0
  315. package/scripts/lint/check-stability-promotion.js +220 -0
  316. package/scripts/lint/format-code-frame.js +206 -0
  317. package/scripts/marketplace-install.js +125 -0
  318. package/scripts/migrate-category-to-enum.js +169 -0
  319. package/scripts/migrate-skill-v2-to-v3.js +424 -0
  320. package/scripts/migrate-skill-v3-to-v4.js +200 -0
  321. package/scripts/migrate-skill-v5-to-v6.js +304 -0
  322. package/scripts/restructure-by-category.js +85 -0
  323. package/scripts/seed-publication-classification.js +282 -0
  324. package/scripts/skill-audit.js +893 -0
  325. package/scripts/skill-graph-drift.js +483 -0
  326. package/scripts/skill-graph-route.js +766 -0
  327. package/scripts/skill-graph-routing-eval.js +393 -0
  328. package/scripts/skill-lint.js +1317 -0
  329. package/scripts/skill-overlap.js +213 -0
  330. package/scripts/verify-skill-md-export.js +201 -0
@@ -0,0 +1,105 @@
1
+ # ADR 0006 — Revise ADR 0001 § Decision #2 (`boundary` is not `owl:disjointWith`)
2
+
3
+ - **Status:** Accepted (2026-05-04)
4
+ - **Deciders:** Skill Graph maintainers
5
+ - **Supersedes:** ADR 0001 § Decision #2 only (Decisions #1, #3, #4 stand unchanged)
6
+ - **Consulted:** OWL 2 Web Ontology Language Primer (W3C 2012), W3C SKOS Reference, GPT-5.5 empirical confirmation of the in-tree JSON-LD context (2026-05-04)
7
+
8
+ ## Context
9
+
10
+ ADR 0001 (2026-04-20) accepted four predicate-set proposals as a single bundle for v3.1:
11
+
12
+ 1. Rename `adjacent` → `related` (skos:related). **Sound and uncontested — academically defensible.**
13
+ 2. Rename `boundary` → `disjoint_with` and treat them as aliases mapping to OWL `owl:disjointWith` semantics. **Category error — see below.**
14
+ 3. Add `broader` / `narrower` (skos:broader / skos:narrower). **Sound — closes a real expressivity gap.**
15
+ 4. Keep `verify_with` and `depends_on`. **Sound — these are PROV-O and DCMI relations, not SKOS classifications.**
16
+
17
+ The 2026-05-04 board meeting (synthesis at the 2026-05-04 multi-model synthesis (kept private) § 8 Disagreements / § 12 IP-R2) flagged Decision #2 as a category error: `boundary` and `owl:disjointWith` operate at different semantic layers and equating them obscures a real distinction the schema needs to keep.
18
+
19
+ The Opus 4.7 reviewer (`opus.md`) noted this directly. The GPT-5.5 reviewer (`gpt-5.5.md`) verified empirically that the in-tree JSON-LD context (`schemas/skill.context.jsonld`) was already mapping `boundary` to `sg:disjointOwnership` — a custom Skill-Graph predicate — and not to `owl:disjointWith`. The implementation was correct; only the ADR text claiming OWL alignment was wrong. This ADR documents what the implementation already does and revises the ADR 0001 narrative to match.
20
+
21
+ ## The semantic distinction
22
+
23
+ `boundary` and `owl:disjointWith` answer different questions.
24
+
25
+ | Question | Answer in Skill Graph | Maps to | Layer |
26
+ |---|---|---|---|
27
+ | "If a query matches skill A, can the router also pick skill B?" | No (because A's `boundary: [B]` is a routing-layer hand-off) | `sg:disjointOwnership` | **Routing layer** — operational |
28
+ | "Is there an entity that is simultaneously an instance of A's class and B's class?" | No (because `owl:disjointWith` claims formal class-disjointness) | `owl:disjointWith` | **Ontology layer** — formal class theory |
29
+
30
+ `boundary` is a **directional, asymmetric** routing claim. Skill A says "I am not the right answer for queries also matching B; route those to B." Skill B is not required to make the reciprocal claim. The router uses this to demote A in the candidate list when B scores higher, even when A's keywords and triggers also matched.
31
+
32
+ `owl:disjointWith` is a **symmetric, irreflexive** class-theoretic claim. If A `owl:disjointWith` B, then B `owl:disjointWith` A — and any reasoner deriving an entity that is both A and B will flag a contradiction. (Irreflexive because a class is never disjoint with itself: every class is identical to itself, not disjoint from itself.)
33
+
34
+ These are not aliases. They model different facts about the world.
35
+
36
+ ## Empirical evidence
37
+
38
+ Per GPT-5.5's audit (2026-05-04), the existing `schemas/skill.context.jsonld` already chose the correct mapping for `boundary`:
39
+
40
+ ```json
41
+ "boundary": {
42
+ "@id": "sg:disjointOwnership",
43
+ ...
44
+ }
45
+ ```
46
+
47
+ The custom `sg:disjointOwnership` predicate was the right call: it makes a Skill-Graph-specific routing-layer claim without committing the schema to formal OWL semantics that authors do not actually intend. ADR 0001 § Decision #2 wrote prose that claimed OWL alignment, but the implementation never produced that mapping. The correction is to make the prose match the implementation, not the implementation match the prose.
48
+
49
+ ## Decision
50
+
51
+ 1. **`boundary` stays canonical** for routing-layer asymmetric handoff. The schema description, JSON-LD context, lint warnings, and field-reference narrative all describe `boundary` as the canonical name for wrong-skill routing protection. The "DEPRECATED ALIAS" framing in the v3.1 schema and ADR 0001 is reverted.
52
+ 2. **`disjoint_with` becomes a separate orthogonal relation** with explicit OWL semantics (Option B from the synthesis IP-R2 § 4). It maps to `owl:disjointWith` in the JSON-LD context. Authors use it ONLY when they want a formal ontological class-disjointness claim — which is rare. Most skill libraries will never need it; `boundary` covers the routing-layer use case.
53
+ 3. **The two predicates coexist with distinct mappings.** Lint validates targets exist for both. Routers use `boundary` for routing-layer exclusion (per `scripts/skill-graph-route.js` Stage 5). RDF consumers reading the JSON-LD projection see two distinct predicates.
54
+ 4. **Lint deprecation warnings adjust:** the `boundary -> disjoint_with` rename warning in `scripts/skill-lint.js` is removed. The `adjacent -> related` rename warning stays (Decision #1 of ADR 0001 was sound).
55
+ 5. **JSON-LD context comments cite this ADR** so future maintainers see the reasoning for the split mapping.
56
+
57
+ ## Rationale
58
+
59
+ - **The implementation was already correct.** The JSON-LD context never claimed OWL alignment for `boundary`. Reverting the prose is cheaper and safer than retroactively bending the implementation.
60
+ - **`boundary` is a real, distinct relation type.** It encodes a routing-layer fact ("I am the wrong answer; route to X") that has no clean OWL/SKOS analogue. Naming it `disjoint_with` and gesturing at OWL hides that fact under a more famous predicate. Keeping the Skill-Graph-specific name with a Skill-Graph-specific @context predicate (`sg:disjointOwnership`) is the academically defensible call.
61
+ - **Option B preserves capability over Option A (drop).** Per the project's quality doctrine ("improve = enrich, never simplify"), keeping `disjoint_with` available — but with distinct semantics — leaves authors a place to encode formal class-disjointness if the rare case arises. Removing it would force authors who genuinely want OWL semantics to invent custom extensions.
62
+ - **No skill in the wild actually used `disjoint_with` as anything other than a `boundary` alias.** Re-purposing it under the new semantics breaks zero existing skills. (`grep -r "disjoint_with:" skills/` across the workspace returned zero hits at the time of this ADR.)
63
+
64
+ ## Consequences
65
+
66
+ ### Positive
67
+
68
+ - ADR 0001's narrative now matches the implementation. No agent reading the docs can reach a wrong conclusion about `boundary`'s semantics.
69
+ - `disjoint_with` becomes available for genuinely OWL-class-disjoint claims without being conflated with routing.
70
+ - The JSON-LD context projects to RDF cleanly: `sg:disjointOwnership` for routing, `owl:disjointWith` for formal class-theory.
71
+ - Lint stops nudging authors to rename `boundary -> disjoint_with` (which would have been wrong under the new posture).
72
+
73
+ ### Negative
74
+
75
+ - Authors who already migrated to `disjoint_with` under the previous (false) "alias" framing now hold a relation with subtly different semantics. **Net impact: zero**, since no live skill in this repo or the consuming workspace uses `disjoint_with`. New authors reading the post-revision docs see only the corrected semantics.
76
+ - ADR-history readers must read ADR 0001 and ADR 0006 together to reconstruct the intended posture. Mitigated by the explicit status banner on ADR 0001.
77
+
78
+ ### Neutral
79
+
80
+ - `boundary` and `disjoint_with` are now both present in the schema. Authors who need only routing-layer behavior continue to use `boundary` and never touch `disjoint_with`. Authors with formal-OWL needs reach for `disjoint_with` deliberately.
81
+ - The W3C SKOS / OWL alignment of the rest of the predicate set (`related`, `broader`, `narrower`, `verify_with`, `depends_on`) is unchanged.
82
+
83
+ ## Implementation surface
84
+
85
+ The full set of edits accompanying this ADR is documented in the synthesis IP-R2:
86
+
87
+ - `schemas/skill.v3.schema.json` — `boundary` description restored to canonical; `disjoint_with` description rewritten with OWL framing.
88
+ - `schemas/skill.context.jsonld` — `boundary` keeps `sg:disjointOwnership`; `disjoint_with` switches from alias to `owl:disjointWith`. New `owl` namespace declared. `_adr_anchors` block added so the file points back here.
89
+ - `scripts/skill-lint.js` — `boundary -> disjoint_with` deprecation warning removed; `adjacent -> related` warning kept; new warning for declaring both `adjacent` and `related` (or both `boundary` and `disjoint_with`) for the same target.
90
+ - `docs/adr/0001-predicate-set.md` — Status banner: "Accepted with revision per ADR 0006 (Decision #2 reverted; Decisions #1, #3, #4 stand)."
91
+ - `docs/field-reference.md § relations` — Narrative updated to match the split semantics.
92
+ - `CHANGELOG.md` — `[Unreleased]` entry documenting the revision.
93
+
94
+ ## References
95
+
96
+ - W3C OWL 2 Primer — https://www.w3.org/TR/owl2-primer/
97
+ - W3C SKOS Reference (skos:related, skos:broader, skos:narrower) — https://www.w3.org/TR/skos-reference/
98
+ - ADR 0001 — `docs/adr/0001-predicate-set.md` (the decision this ADR partially supersedes)
99
+ - ADR 0002 — `docs/adr/0002-json-ld-context.md` (governs the @context coverage policy)
100
+ - Synthesis 2026-05-04 § 8 Disagreement D1 + § 12 IP-R2 — the 2026-05-04 multi-model synthesis (kept private)
101
+ - GPT-5.5 reviewer empirical verification — kept private alongside the 2026-05-04 multi-model synthesis
102
+
103
+ ## Supersedes
104
+
105
+ - ADR 0001 § Decision #2 only. Decisions #1 (`adjacent -> related`), #3 (`broader` / `narrower` additions), and #4 (`verify_with` / `depends_on` retention) stand unchanged.
@@ -0,0 +1,99 @@
1
+ # ADR-0007: Audit Loop Cadence
2
+
3
+ **Status:** Accepted
4
+ **Date:** 2026-05-18
5
+ **Task:** SH-6107
6
+
7
+ ## Context
8
+
9
+ The skill-graph tooling repo and its sibling `skills` library repo need a formal cadence for running the Skill Audit Loop. Without a documented cadence, audits happen ad-hoc, P2+ findings accumulate without tracking, and there is no shared understanding of what "audited" means for a skill.
10
+
11
+ The Skill Audit Loop specification (`SKILL_AUDIT_LOOP.md`) already defines the four operations (`audit`, `improve`, `evaluate`, `evolve`) and a generic cadence table. This ADR adds the concrete operational contract for this project:
12
+
13
+ - Who triggers audits
14
+ - What the pass criteria are
15
+ - Where findings go
16
+ - How P2+ findings are resolved before a task closes
17
+
18
+ ## Decision
19
+
20
+ ### Trigger
21
+
22
+ | Event | Action |
23
+ |---|---|
24
+ | Per skill edit (SKILL.md changes) | `node scripts/skill-lint.js <skill-path>` must pass as part of PR/commit gate |
25
+ | Weekly (automated or manual) | `node scripts/skill-graph-routing-eval.js` across all skills with `routing_eval: present` |
26
+ | Before any stability promotion | Full `audit` for all skills in the promotion batch |
27
+ | Per Linear task that touches a skill | Audit the affected skill before marking the task Done |
28
+
29
+ ### Owner
30
+
31
+ The orchestrator is responsible for triggering audits. For manual sessions, the agent working a skill-touching task is responsible for running the audit and triaging findings before closing the task.
32
+
33
+ ### Audit invocation
34
+
35
+ Run from the `skill-graph` tooling repo with the skill's absolute path:
36
+
37
+ ```bash
38
+ # Deterministic lint (always run first)
39
+ node scripts/skill-lint.js /path/to/skills/skills/<skill-name>
40
+
41
+ # Routing eval (run when skill has routing_eval: present)
42
+ node scripts/skill-graph-routing-eval.js --skill <skill-name>
43
+
44
+ # Full stub audit (generates findings.md, verdict.md, scorecard.md)
45
+ SKILL_GRAPH_WORKSPACE=/path/to/skills node scripts/skill-audit.js <skill-name> \
46
+ --audit-root audits/
47
+
48
+ # Note: skill-audit.js cross-repo path resolution is a known limitation (tracked separately).
49
+ # Until fixed, run skill-lint.js with an absolute path for authoritative results.
50
+ ```
51
+
52
+ ### Findings flow
53
+
54
+ ```
55
+ audit run
56
+ → findings.md + verdict.md + scorecard.md written to audits/<skill-name>/
57
+ → P0/P1 findings: block task, fix immediately before closing
58
+ → P2 findings: create Linear sub-issue with parent = current task, resolve before closing
59
+ → P3/P4 findings: document in Linear completion comment, defer or fix opportunistically
60
+ ```
61
+
62
+ ### Pass criteria
63
+
64
+ A skill audit passes when:
65
+
66
+ 1. `node scripts/skill-lint.js <skill-path>` exits 0 (from skill-graph workspace with absolute path)
67
+ 2. `node scripts/skill-graph-routing-eval.js --skill <skill-name>` shows 100% pass rate (when `routing_eval: present`)
68
+ 3. No P0 or P1 findings in `audits/<skill-name>/findings.md`
69
+ 4. All P2 findings have a linked Linear sub-issue
70
+
71
+ A task is **not closed** until all P2+ findings are either resolved or have a tracking sub-issue.
72
+
73
+ ### Proof-audit format
74
+
75
+ The first run of the audit loop against a skill must produce all three artifacts:
76
+
77
+ ```
78
+ audits/<skill-name>/
79
+ findings.md — required
80
+ verdict.md — required
81
+ scorecard.md — required for first audit; optional for re-audits
82
+ ```
83
+
84
+ Subsequent audits may update findings.md and verdict.md in-place. The `last_audited` Health Block field in `SKILL.md` frontmatter is updated to today's ISO date after each audit.
85
+
86
+ ## Alternatives Considered
87
+
88
+ **Integrate into CI gate:** Running the full audit as a CI gate was considered but rejected — the graded pass (LLM-powered) is too slow and expensive for every commit. The deterministic lint gate is the CI gate; the full audit is a periodic process.
89
+
90
+ **Store findings in Linear only:** Rejected — audit artifacts in `audits/` provide an append-only local evidence trail that survives Linear data issues and is grep-able during grind sessions.
91
+
92
+ **Weekly only:** Rejected — the per-task trigger is needed so that skills don't drift between the time a task modifies a skill and the next scheduled audit.
93
+
94
+ ## Consequences
95
+
96
+ - The `audits/<skill-name>/` directory is now the canonical location for skill audit evidence in the `skill-graph` repo.
97
+ - Agents working on skills must run the audit and triage findings before closing their Linear task.
98
+ - P2 findings generate Linear sub-issues automatically; P3/P4 go in the completion comment.
99
+ - The `skill-audit.js` cross-repo resolution bug (SH-6107 sub-issue) needs fixing before automated batch audits work reliably.
@@ -0,0 +1,93 @@
1
+ # ADR-0008: Skill Surface Split + Curation Policy
2
+
3
+ **Status:** Accepted
4
+ **Date:** 2026-05-18
5
+ **Task:** SH-6125
6
+ **Supersedes:** Portion of SH-6127 (Tier F mass migration)
7
+ **Related:** SH-6114 (Finding F6), SH-6127 (rescoped)
8
+
9
+ ## Context
10
+
11
+ Two skill surfaces coexist in `~/Development/`:
12
+
13
+ | Surface | Path | Count | Schema status | Audience |
14
+ |---|---|---|---|---|
15
+ | **Outer** | `~/Development/skills/<name>/` | **263** active skills | Pre-v6 flat layout; `metadata:` wrapper on 0/263; Health Block on ~121/263 (~46%) | Personal library + Sales Hub skills, mixed with PII-adjacent and project-specific content |
16
+ | **Nested** | `~/Development/skills/skills/<name>/` | **141** active skills | v6 compliant cohort, OSS-portable, canonical Skill Graph library | Public, generalizable, non-PII, non-Sales-Hub |
17
+
18
+ This duality was flagged as Finding F6 in SH-6114 ("outer vs nested ambiguity"). SH-6127 originally scoped a Tier F mass migration of the 263 outer skills onto the v6 `metadata:`-wrapped layout, blocked on this architecture decision (SH-6125).
19
+
20
+ Three options were on the table:
21
+
22
+ - **Option A — Unify:** Migrate all 263 outer skills to v6, treat as one library
23
+ - **Option B — Split cleanly:** Keep outer as personal/Sales Hub (frozen), nested as OSS-portable canonical
24
+ - **Option C — Overlay:** Outer is a superset that includes nested as a view
25
+
26
+ The implicit cost of Option A is migrating 263 mixed-purpose skills (many with PII, project-specific Sales Hub assumptions, or content that is not generalizable) to the v6 contract — work that produces no OSS value and locks Sales Hub doctrine into the public schema.
27
+
28
+ Jacob's directive (2026-05-18) settles the question by removing the production assumption that motivated Option A:
29
+
30
+ > PAUSE all production of skills for the personal library (`~/Development/skills/` top-level 263) and Sales Hub skills. Use non-PII, non-Sales-Hub personal skills as INSPIRATION for OSS additions. The 141 nested at `~/Development/skills/skills/` IS the active OSS-portable canonical library. The OSS Skill Graph repo (`~/Development/skill-graph/`) is the active development surface.
31
+
32
+ ## Decision
33
+
34
+ **Adopt Option B (Split cleanly) plus a Curation Policy that governs how content moves between surfaces.**
35
+
36
+ ### Surface ownership
37
+
38
+ | Surface | Status | Schema | Production | Audience |
39
+ |---|---|---|---|---|
40
+ | **Outer 263** | **Frozen** | Pre-v6 flat (no migration) | **No new production** | Personal + Sales Hub historical |
41
+ | **Nested 141** | **Active** | v6 `metadata:`-wrapped, Skill Graph canonical | OSS contributions only, via curation | Public, OSS-portable |
42
+ | **Sales Hub skills** | Separate concern | Lives in Sales Hub repo / scope | Owned by Sales Hub product surface | Tenant code, not OSS library |
43
+
44
+ ### Curation policy (outer → nested)
45
+
46
+ A skill on the outer surface MAY be promoted into the nested OSS library only when ALL of the following hold:
47
+
48
+ 1. **Non-PII:** Contains no personal data, no real customer references, no internal-only contacts, no production identifiers
49
+ 2. **Non-Sales-Hub:** Not coupled to Sales Hub data model, routes, tenants, schema, or product-specific doctrine
50
+ 3. **Generalizable:** Useful to consumers outside this monorepo without rewriting the procedural guidance
51
+ 4. **Curation review:** Reviewed and approved against the v6 schema contract before promotion
52
+ 5. **Schema-compliant on arrival:** Promoted skill is authored (or rewritten) directly in v6 `metadata:`-wrapped layout — no migration codemod runs on the outer surface
53
+
54
+ The curation flow itself is the rescoped scope of SH-6127 (see Consequences).
55
+
56
+ ### What this is NOT
57
+
58
+ - This is **not** a deprecation of the outer 263. They remain on disk, remain readable by the agent, remain part of personal workflow. They are frozen with respect to **new production** and **schema migration**.
59
+ - This is **not** a claim that the outer 263 is low quality. It is a claim that the outer surface mixes audiences in a way that makes a single schema contract counterproductive.
60
+ - This is **not** a merge of the two surfaces. They remain distinct paths with distinct contracts.
61
+
62
+ ## Consequences
63
+
64
+ ### Cancelled work
65
+
66
+ - **Tier F mass migration (original SH-6127 scope) is cancelled.** No v6 codemod will run across the 263 outer skills. No cohort selection pass for `comprehension_state: present` will happen on the outer surface. No mass Understanding-field hand-authoring for outer skills.
67
+ - The Health Block walker work already completed on ~121/263 outer skills (commit `3e43f6e2`) remains in place as a one-time enrichment; it is not extended to the remaining ~142 outer skills as a migration goal. If a specific outer skill is later promoted via curation, it picks up Health Block fields as part of the v6 rewrite.
68
+
69
+ ### New work (rescoped SH-6127)
70
+
71
+ - SH-6127 is rescoped to define and run the **curation pipeline**: outer → nested for non-PII, non-Sales-Hub, generalizable skills. The pipeline picks candidates, applies the v6 contract, and lands them in `~/Development/skills/skills/`.
72
+
73
+ ### Schema clarity
74
+
75
+ - The nested 141 is now the single source of v6 truth in this monorepo. Any reference to "the v6 library" in Skill Graph docs, lint, manifest, or routing tooling means the nested surface.
76
+ - The outer 263 is documented as a historical/personal surface on the pre-v6 flat layout. Tooling that targets v6 does not need to handle outer-surface compatibility.
77
+
78
+ ### Sales Hub boundary
79
+
80
+ - Sales Hub skills are a separate concern: they live in the Sales Hub repo / scope and are owned by the Sales Hub product surface, not by Skill Graph. Skill Graph does not curate or migrate Sales Hub skills into the OSS library.
81
+
82
+ ### Reversal cost
83
+
84
+ - If Jacob later decides to unify (Option A), the cancelled migration work can be revived — the policy here is "don't migrate now," not "migration is impossible." The outer 263 remain authored in their pre-v6 form, ready for codemod if ever needed.
85
+
86
+ ## References
87
+
88
+ - SH-6125 — this architecture decision
89
+ - SH-6127 — rescoped to curation pipeline
90
+ - SH-6114 § Finding F6 — original outer-vs-nested ambiguity finding
91
+ - Commit `3e43f6e2` — prior Health Block walker enrichment on 121 outer skills
92
+ - `~/Development/skills/skills/` — nested 141, OSS-portable canonical library
93
+ - `~/Development/skill-graph/` — active OSS development surface
@@ -0,0 +1,168 @@
1
+ # Category Consumer Audit (Phase 0c)
2
+
3
+ > Status: Complete · 2026-05-16 · Phase 0c gate verdict **PASS**
4
+ > Author: Opus 4.7 continuation session, post-Phase-1 v5 schema bump
5
+ > Closes the Phase 0 gate trio (0a retrieval baseline · 0b sample-migration review · 0c consumer audit).
6
+ > Reference: [`docs/plans/skill-taxonomy-v5-and-gap-fill.md`](/Users/jacobbalslev/Development/docs/plans/skill-taxonomy-v5-and-gap-fill.md) § Phase 0c
7
+
8
+ ## Brief
9
+
10
+ Per the v5 plan: grep every file in `skill-graph/scripts/` and `Development/scripts/` for `category`, `domain`, and `family` reads. List downstream consumers. Confirm none hardcode the deprecated v4 strings (`knowledge`, `frontend`, `ai-engineering`, `integration`, `integrations`, `data`, `workflow`, `security`) as expected `category` values — anything that does will silently produce empty results under v5 because no skill carries those strings anymore.
11
+
12
+ ## Key finding up front
13
+
14
+ **The v5 `category` closed enum cannot break any current Development consumer**, because the v5 137-skill library at `/Development/skills/skills/<name>/SKILL.md` and the v3 282-skill broader library at `/Development/skills/<name>/SKILL.md` are **physically separate directories with separate schemas, read by separate tooling**.
15
+
16
+ ```
17
+ /Users/jacobbalslev/Development/skills/
18
+ ├── <282 v3 skills>/SKILL.md ← read by Development/scripts/skill/* (v3 schema: type/family/layer)
19
+ ├── _meta/ ← v3 registry / docs
20
+ ├── _archived/
21
+ └── skills/
22
+ └── <137 v5 skills>/SKILL.md ← read by skill-graph/scripts/* (v5 schema: closed-enum category)
23
+ ```
24
+
25
+ The `walkSkillDir` in `Development/scripts/skill/skill-census.js` iterates direct children of `/Development/skills/` and skips namespace containers without a top-level `SKILL.md`. The nested `skills/` directory has no `SKILL.md` of its own and is therefore skipped — v3 tooling never sees v5 skills, and vice versa.
26
+
27
+ Phase 5 (broader-library migration) will eventually merge these schemas; at that point the v3 consumers below will need updates. **That work is outside Phase 0c scope.**
28
+
29
+ ## Audit method
30
+
31
+ ```bash
32
+ # Skill-graph (v5) consumers
33
+ cd /Users/jacobbalslev/Development/skill-graph
34
+ grep -rn --include='*.js' --include='*.ts' --include='*.mjs' \
35
+ -E '(\.category|\["category"\]|\.domain|\.family)' scripts/
36
+
37
+ # v4-string hardcode sweep — must return only false positives
38
+ grep -rn --include='*.js' --include='*.ts' --include='*.mjs' \
39
+ -E "['\"](knowledge|frontend|ai-engineering|integration|integrations|data|workflow|security)['\"]" \
40
+ scripts/
41
+
42
+ # Development workspace
43
+ cd /Users/jacobbalslev/Development
44
+ grep -rn --include='*.js' --include='*.ts' --include='*.mjs' \
45
+ -E '(\.category|\["category"\]|\.domain|\.family)' \
46
+ scripts/skill/ scripts/docs/ scripts/lib/ scripts/infra/ scripts/memory/
47
+ ```
48
+
49
+ Targets: all `.js`/`.ts`/`.mjs`/`.cjs` under each `scripts/` tree, excluding `node_modules`. False-positive filtering: `domain` matches for HTTP/API domain (not skill `domain`), `category` matches for error-pattern categories (not skill `category`), `family` matches for code-grouping family (not skill `family`).
50
+
51
+ ## 1. Skill-graph (v5) consumers
52
+
53
+ These five files read `category`, `domain`, or `family` from v5 SKILL.md frontmatter. **All five are clean** — none hardcode deprecated v4 strings as expected `category` values.
54
+
55
+ | File | Field(s) read | What it does | v5 status |
56
+ | --- | --- | --- | --- |
57
+ | `scripts/skill-lint.js` | `fm.category` (via check), `fm.domain_frame`, `fm.family` | Top-level lint orchestrator. Delegates `category` validation to `lint/check-category-enum.js`. Reads `family` for the family-naming guidance check (line 1084). Reads `domain_frame` for eval-mode validation (line 1050). | Clean ✓ |
58
+ | `scripts/lint/check-category-enum.js` | `fm.category` | **Canonical v5 enforcement point.** Holds `CATEGORY_ENUM = Object.freeze(['foundations','engineering','design','quality','agent','product'])` and rejects anything not in the set. | Clean ✓ — enum matches `schemas/skill.schema.json` v5 definition. |
59
+ | `scripts/generate-manifest.js` | `fm.category`, `fm.domain`, `fm.family`, `fm.domain_frame` | Pass-through fields. Writes `entry.category = fm.category` (line 273), `entry.domain = fm.domain` (line 279), aggregates `by_category` distribution at top of manifest (line 603), aggregates `by_family` (line 669). No expected-value comparisons. | Clean ✓ |
60
+ | `scripts/migrate-category-to-enum.js` | `fm.category` (write), `fm.domain` (write) | The Phase 2 v4→v5 codemod. Has a MAPPING table; reads current values and writes new closed-enum values + populates `domain`. One-shot tool — no longer active. | Clean ✓ — already-applied codemod, retained for receipts. |
61
+ | `scripts/__tests__/test-v3-1-alias-contract.js` | `fm.domain` | Asserts `entry.domain === fm.domain` (line 86) — passthrough test. No enum assumptions. | Clean ✓ |
62
+
63
+ ### Schema-level enforcement
64
+
65
+ `schemas/skill.schema.json` (synced to v5 in `skill-graph` commit `f489641`) closes the enum at the schema level:
66
+
67
+ ```json
68
+ "category": {
69
+ "type": "string",
70
+ "enum": ["foundations","engineering","design","quality","agent","product"],
71
+ "description": "Browse facet — answers 'where should a human browse to find this skill first?' Not ontology truth. Closed enum of 6 values in v5..."
72
+ }
73
+ ```
74
+
75
+ Both the schema and the lint constant are sources of truth and currently match exactly.
76
+
77
+ ### v4-string sweep in `skill-graph/scripts/` — verified zero hits
78
+
79
+ ```
80
+ grep -rn -E "['\"](knowledge|frontend|ai-engineering|integration|integrations|data|workflow|security)['\"]" scripts/
81
+ → scripts/lib/mock-grader.js:25: process.stdin.on('data', (chunk) => { ... }); [FP: Node stream event name]
82
+ → scripts/__tests__/test-v3-1-alias-contract.js:96: archetype: 'workflow' [FP: legacy archetype value, not category]
83
+ ```
84
+
85
+ Two matches, both false positives. **Zero consumers hardcode v4 category strings.**
86
+
87
+ ## 2. Development workspace consumers
88
+
89
+ These files read `category`, `domain`, or `family` from frontmatter, but they operate on the **v3 broader library** (282 skills at `/Development/skills/<name>/`), not the v5 137-skill library. They use the v3 schema's `type`/`family`/`layer`/`primaryCategory`/`layerPrimary` fields — not the v5 `category` closed enum.
90
+
91
+ | File | Field(s) read | Operates on | v5 impact |
92
+ | --- | --- | --- | --- |
93
+ | `scripts/skill/skill-census.js` | `frontmatter.type`, `frontmatter.category` (as v3 alias for type, line 246), `frontmatter.family`, `frontmatter.domain_frame`, `frontmatter.layer`, `frontmatter.primaryCategory`, `frontmatter.layerPrimary` | v3 library via `SKILL_DIRS.shared = ROOT_DIR/skills` | **None** — never sees v5 skills (nested `skills/` namespace skipped by walker, see lines 105–108). Holds VALID_FAMILIES, VALID_PRIMARY_CATEGORIES, VALID_LAYER_PRIMARY sets that include v3-era values (`'integration'`, `'workflow'`, `'knowledge'`); these are v3 enums, not v4 category values. |
94
+ | `scripts/skill/skill-lint.js` (Dev, separate from skill-graph's lint) | `frontmatter.type`, `frontmatter.family` | v3 library | **None** — `VALID_TYPES` (line 187) includes `'knowledge'`, `'workflow'`, etc. as `type` values, not `category` values. |
95
+ | `scripts/skill/backfill-skill-taxonomy.js` | `frontmatter.family`, `layerPrimary` writes | v3 library | **None** — references `'integration'`, `'frontend'`, etc. as v3 family/layer/router names. Hardcoded routerNames set at line 96 (`['backend','frontend','events','legal']`) — `'frontend'` here is a router-bundle name, not a category. |
96
+ | `scripts/skill/skill-graph-builder.js` | maps `*-skill` names to `'integration'` group (lines 107–113) | v3 library | **None** — `'integration'` used as a skill-graph node group label, not a v5 category. |
97
+ | `scripts/skill/skill-app-coverage-matrix.js` | `route.domain` | API routes, not skills | False positive — `domain` here is the URL prefix (e.g. `/api/orders` → `orders`). |
98
+ | `scripts/skill/bulk-eval-tagger.js` | `frontmatter.family`, `frontmatter.layer`, `frontmatter.primaryCategory` | v3 eval frontmatter | **None** — `'integration'`, `'workflow'`, `'security'`, `'design'` etc. used as eval `type` values, not skill `category`. |
99
+ | `scripts/skill/migrate-archetype-structure.js` | `frontmatter.family` (read/write) | v3 archetype migration | **None** — operates on v3 family field. Maps `'error-tracking' → 'knowledge'` (line 20) where `'knowledge'` is a v3 family value, not a v5 category. |
100
+ | `scripts/skill/skill-families.js` | `frontmatter.family` | v3 library | **None** — family-based grouping commands. |
101
+ | `scripts/skill/build-skill-audit-worklist.js` | `skill.family`, `skill.primaryCategory` | v3 census output | **None** — line 82 checks `skill.family === 'agent-ops' \|\| skill.family === 'skill-system'` — these are v3 family values; `'agent-ops'` and `'skill-system'` are still active under v3. |
102
+ | `scripts/skill/skill-leverage-ranker.js` | `skill.family` (via signals) | v3 census output | **None** |
103
+ | `scripts/skill/domain-context-populator.js` | `frontmatter.family`, `frontmatter.domain_frame` | v3 library | **None** |
104
+ | `scripts/skill/eval-linter.js` | `skill_type: 'knowledge'` example (line 38) | doc example | **None** — example placeholder, not a v5 enum check. |
105
+ | `scripts/skill/source-truth-catalog.js` | `category: 'http' \| 'database' \| ...` for code-pattern catalog | source code patterns | False positive — code-pattern catalog has its own `category` taxonomy unrelated to skill `category`. |
106
+ | `scripts/memory/session-log.js` | `category: ROOT_CAUSE_CATEGORIES.*` for finding-pattern detection | session log findings | False positive — finding-classification `category`, not skill `category`. |
107
+ | `scripts/docs/file-size-scanner.js` | `category` table column for file-type classification | file scan | False positive — file-type `category`, not skill `category`. |
108
+
109
+ ### Cross-schema risk: `skill-census.js:246`
110
+
111
+ ```js
112
+ type: frontmatter.type || frontmatter.category || "knowledge",
113
+ ```
114
+
115
+ This is the only Development consumer that reads `frontmatter.category` directly. In v3 schema, `category` was an accepted alias for `type` (per the comment at line 178). The `"knowledge"` ultimate fallback is a v3-era default.
116
+
117
+ Risk under v5: if census ever iterates v5 skills (it doesn't today, see walker analysis above), it would see `frontmatter.category` ∈ {foundations, engineering, ...} and assign that to the census output's `type` field. Census would then report v5 skills with `type: "engineering"` etc., which is invalid under v3's `VALID_TYPES` and would fail downstream validation.
118
+
119
+ **Today this code path is unreachable** because census doesn't iterate v5 skills. It becomes relevant only when Phase 5 merges the two libraries.
120
+
121
+ ## 3. Documentation drift discovered
122
+
123
+ ### `scripts/lint/check-category-enum.js` — stale header comment
124
+
125
+ Lines 4–22 of the file say:
126
+
127
+ > The schema allows `category` to be any string for backward compatibility, but the Skill Graph policy (as of 2026-05-15) is that the field functions as a browse facet, not ontology truth, and must take exactly one of six canonical values. … Closing the schema enum requires a v5 schema bump that cascades through manifest schemas, generators, and downstream consumers. The lint check achieves the same enforcement guarantee with no version churn.
128
+
129
+ This rationale was correct **before** Phase 1. As of 2026-05-16 (Phase 1 schema bump, commit `f489641`), the schema has been bumped to v5 and **does** close the enum at the schema level. The lint check is now redundant-but-correct rather than the sole enforcement point. The comment should reflect post-v5 reality. Low-priority cleanup.
130
+
131
+ ### `scripts/skill-lint.js:187` (Development copy) — `VALID_TYPES` includes `'knowledge'`, `'domain'`
132
+
133
+ ```js
134
+ const VALID_TYPES = ["capability","workflow","hybrid","doctrine","framework","strategy","overlay","skill","domain","system","knowledge","operational"];
135
+ ```
136
+
137
+ These are v3 `type` field values, not v5 `category` values, so they're not breaking. But the values `'knowledge'`, `'domain'`, `'system'` are awkward as types and overlap with v5 category names. Not actionable until Phase 5.
138
+
139
+ ## 4. Follow-up list
140
+
141
+ These are small cleanups identified during the audit. None block Phase 1 or Phase 5; they can be picked up in any wrap pass.
142
+
143
+ 1. **`skill-graph/scripts/lint/check-category-enum.js` header comment** — update lines 4–22 to reflect that v5 schema bump landed and the enum is closed at both schema and lint level. (~5 lines edit.) **RESOLVED 2026-05-17** — header rewritten to describe the dual-layer (schema + lint) enforcement and the three-place update protocol when the enum changes.
144
+ 2. **`Development/scripts/skill/skill-census.js:246` fallback** — replace `frontmatter.category || "knowledge"` with `frontmatter.category || null` or drop the fallback entirely. Currently inert (unreachable under v3-only iteration) but misleading. Defer to Phase 5 when census becomes v5-aware. **RESOLVED 2026-05-17** — code path preserved (changing fallback string risks downstream consumers expecting always-a-string `type`); added an inline comment that documents the v3-era origin, why the path is currently unreachable, and what will need to change when Phase 5 makes it active. The actual fallback rewrite is now owned by the Phase 5 prerequisite step (see v5 plan).
145
+ 3. **Phase 5 prerequisite** — when the 287-skill broader library migrates to v5, every entry in §2 above will need a schema-aware update. Recommend a follow-up audit at Phase 5 kickoff that re-runs the greps above against the merged library. **RESOLVED 2026-05-17** — added as an explicit prerequisite step at the top of Phase 5 in `docs/plans/skill-taxonomy-v5-and-gap-fill.md`, with the specific known-mandatory updates called out (census.js:246, `VALID_TYPES`/`VALID_FAMILIES`/`VALID_PRIMARY_CATEGORIES` constants).
146
+
147
+ ## Phase 0c gate verdict
148
+
149
+ **PASS.** The closure of the v5 `category` enum does not break any current Development consumer. The two physical libraries are independent. The skill-graph v5 consumers (§1) are five files, all clean. The Development v3 consumers (§2) read a different field on a different schema in a different directory.
150
+
151
+ The Phase 0 gate trio is now complete:
152
+
153
+ - **Phase 0a (retrieval baseline)** — committed in skill-graph `0e5ad55`, 30 queries, 20% agent-router agreement (single-rater).
154
+ - **Phase 0b (sample-migration review)** — committed in skill-graph `89e8115`, 30 skills, 26/30 = 86.67% reviewer-agreement, passes 85% gate.
155
+ - **Phase 0c (consumer audit)** — this document. Zero breaking consumers.
156
+
157
+ Phase 1 (schema bump) landed clean. Phase 5 (broader library migration) is unblocked from a consumer-safety perspective and can proceed when prioritized.
158
+
159
+ ## Critical files referenced
160
+
161
+ - `/Users/jacobbalslev/Development/skill-graph/scripts/skill-lint.js`
162
+ - `/Users/jacobbalslev/Development/skill-graph/scripts/lint/check-category-enum.js`
163
+ - `/Users/jacobbalslev/Development/skill-graph/scripts/generate-manifest.js`
164
+ - `/Users/jacobbalslev/Development/skill-graph/scripts/migrate-category-to-enum.js`
165
+ - `/Users/jacobbalslev/Development/skill-graph/schemas/skill.schema.json`
166
+ - `/Users/jacobbalslev/Development/scripts/skill/skill-census.js`
167
+ - `/Users/jacobbalslev/Development/scripts/shared/workspace-paths.js`
168
+ - `/Users/jacobbalslev/Development/docs/plans/skill-taxonomy-v5-and-gap-fill.md`