@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.
- package/CHANGELOG.md +247 -0
- package/LICENSE +200 -0
- package/NOTICE +62 -0
- package/README.md +398 -0
- package/SKILL_GRAPH.md +443 -0
- package/bin/skill-graph.js +374 -0
- package/docs/ADOPTION.md +117 -0
- package/docs/CONFORMANCE.md +66 -0
- package/docs/PRIMER.md +384 -0
- package/docs/QUICKSTART-30MIN.md +333 -0
- package/docs/ROUTING-METRICS.md +120 -0
- package/docs/SKILL-MD-FORMAT-COMPATIBILITY.md +127 -0
- package/docs/SKILL_AUDIT_CHECKLIST.md +199 -0
- package/docs/SKILL_AUDIT_LOOP.md +195 -0
- package/docs/SKILL_METADATA_PROTOCOL.md +609 -0
- package/docs/_archived/marketplace-publication-priority-2026-05-18.md +239 -0
- package/docs/adr/0001-predicate-set.md +69 -0
- package/docs/adr/0002-json-ld-context.md +82 -0
- package/docs/adr/0003-ontoclean-rigidity-tags.md +65 -0
- package/docs/adr/0004-persistent-identifiers.md +74 -0
- package/docs/adr/0005-freshness-consolidation.md +70 -0
- package/docs/adr/0006-revise-predicate-rename.md +105 -0
- package/docs/adr/0007-audit-loop-cadence.md +99 -0
- package/docs/adr/0008-skill-surface-split-and-curation-policy.md +93 -0
- package/docs/category-consumers.md +168 -0
- package/docs/concept-map.md +194 -0
- package/docs/diagrams/drift-states.mmd +21 -0
- package/docs/diagrams/manifest-pipeline.mmd +25 -0
- package/docs/diagrams/routing-harness.mmd +41 -0
- package/docs/diagrams/starter-graph.mmd +53 -0
- package/docs/field-decision-guide.md +315 -0
- package/docs/field-rationale.md +211 -0
- package/docs/field-reference.generated.md +624 -0
- package/docs/field-reference.md +1426 -0
- package/docs/glossary.md +190 -0
- package/docs/head-noun-glossary.md +63 -0
- package/docs/images/audit-phases.png +0 -0
- package/docs/images/drift-states.png +0 -0
- package/docs/images/graded-mode.png +0 -0
- package/docs/images/manifest-pipeline.png +0 -0
- package/docs/images/routing-harness.png +0 -0
- package/docs/images/skill-anatomy.png +0 -0
- package/docs/images/starter-graph.png +0 -0
- package/docs/images/system-model.png +0 -0
- package/docs/integrations/github-actions.md +155 -0
- package/docs/manifest-field-mapping.md +443 -0
- package/docs/marketplace-publication-queue.generated.md +240 -0
- package/docs/marketplace-release-agent-prompt.md +82 -0
- package/docs/marketplace-skill-candidate-list.md +272 -0
- package/docs/marketplace-syndication.md +222 -0
- package/docs/migration-sample-review.md +155 -0
- package/docs/migrations/v4-to-v5.md +168 -0
- package/docs/migrations/v5-to-v6.md +221 -0
- package/docs/name-exceptions.yaml +37 -0
- package/docs/plans/marketplace-p1-public-migration-plan.md +41 -0
- package/docs/plans/multi-root-workspace.md +148 -0
- package/docs/plans/scripts-roadmap.md +107 -0
- package/docs/plans/v4-schema-bump.md +160 -0
- package/docs/plans/wave-2-extraction.md +122 -0
- package/docs/positioning-vs-marketplaces.md +175 -0
- package/docs/proposals/skill-audit-loop-positioning.md +160 -0
- package/docs/quality-doctrine.md +138 -0
- package/docs/recommended-skills.md +150 -0
- package/docs/research/skill-comprehension-eval-research.md +1830 -0
- package/docs/research/skill-retrieval-evidence.md +66 -0
- package/docs/skill-metadata-protocol.md +471 -0
- package/docs/skills-sh-maintainer-cleanup-request.md +80 -0
- package/examples/audits/a11y/findings.md +52 -0
- package/examples/audits/a11y/scorecard.md +21 -0
- package/examples/audits/a11y/verdict.md +44 -0
- package/examples/audits/debugging/findings.md +59 -0
- package/examples/audits/debugging/scorecard.md +22 -0
- package/examples/audits/debugging/verdict.md +33 -0
- package/examples/audits/documentation/findings.md +59 -0
- package/examples/audits/documentation/scorecard.md +22 -0
- package/examples/audits/documentation/verdict.md +33 -0
- package/examples/evals/a11y.json +140 -0
- package/examples/evals/api-design.json +52 -0
- package/examples/evals/code-review.json +52 -0
- package/examples/evals/data-modeling.json +52 -0
- package/examples/evals/database-migration.json +52 -0
- package/examples/evals/debugging.json +118 -0
- package/examples/evals/dependency-architecture.json +52 -0
- package/examples/evals/design-system-architecture.json +52 -0
- package/examples/evals/error-tracking.json +52 -0
- package/examples/evals/event-contract-design.json +52 -0
- package/examples/evals/form-ux-architecture.json +52 -0
- package/examples/evals/framework-fit-analysis.json +52 -0
- package/examples/evals/graph-audit.json +139 -0
- package/examples/evals/information-architecture.json +52 -0
- package/examples/evals/interaction-feedback.json +52 -0
- package/examples/evals/interaction-patterns.json +52 -0
- package/examples/evals/layout-composition.json +52 -0
- package/examples/evals/lint-overlay.json +117 -0
- package/examples/evals/microcopy.json +52 -0
- package/examples/evals/observability-modeling.json +52 -0
- package/examples/evals/pattern-recognition.json +96 -0
- package/examples/evals/performance-engineering.json +52 -0
- package/examples/evals/refactor.json +128 -0
- package/examples/evals/semiotics.json +52 -0
- package/examples/evals/skill-infrastructure.json +96 -0
- package/examples/evals/skill-router.json +140 -0
- package/examples/evals/skill-router.routing.json +113 -0
- package/examples/evals/system-interface-contracts.json +52 -0
- package/examples/evals/task-analysis.json +52 -0
- package/examples/evals/testing-strategy.json +118 -0
- package/examples/evals/type-safety.json +249 -0
- package/examples/evals/visual-design-foundations.json +52 -0
- package/examples/evals/webhook-integration.json +52 -0
- package/examples/exports/a11y.skill-md.md +80 -0
- package/examples/exports/debugging.skill-md.md +80 -0
- package/examples/exports/refactor.skill-md.md +78 -0
- package/examples/exports/testing-strategy.skill-md.md +81 -0
- package/examples/projects/markdown-static-site/README.md +115 -0
- package/examples/projects/markdown-static-site/skills/content-source-router/SKILL.md +131 -0
- package/examples/projects/markdown-static-site/skills/image-optimization-pipeline-config/SKILL.md +132 -0
- package/examples/projects/markdown-static-site/skills/link-rot-detection/SKILL.md +103 -0
- package/examples/projects/markdown-static-site/skills/markdown-post-frontmatter-validation/SKILL.md +133 -0
- package/examples/projects/markdown-static-site/skills/migrate-posts-to-v2-frontmatter/SKILL.md +140 -0
- package/examples/projects/saas-stripe-postgres/README.md +208 -0
- package/examples/projects/saas-stripe-postgres/db/migrations/0004_canonicalize_orders.sql +37 -0
- package/examples/projects/saas-stripe-postgres/db/schema.sql +112 -0
- package/examples/projects/saas-stripe-postgres/skills/migrate-orders-to-canonical-schema/SKILL.md +149 -0
- package/examples/projects/saas-stripe-postgres/skills/nextjs-server-action-validation/SKILL.md +154 -0
- package/examples/projects/saas-stripe-postgres/skills/payment-provider-router/SKILL.md +153 -0
- package/examples/projects/saas-stripe-postgres/skills/postgres-rls-pattern/SKILL.md +163 -0
- package/examples/projects/saas-stripe-postgres/skills/stripe-webhook-signature-verification/SKILL.md +137 -0
- package/examples/protocol/skill-metadata-template.md +301 -0
- package/examples/protocol/skills.manifest.sample.json +13245 -0
- package/examples/skill-metadata-template.md +317 -0
- package/examples/skills.manifest.sample.json +13519 -0
- package/examples/tests/v3-1-skos-fixture/SKILL.md +93 -0
- package/marketplace/README.md +17 -0
- package/marketplace/skills/a11y/SKILL.md +66 -0
- package/marketplace/skills/acid-fundamentals/SKILL.md +106 -0
- package/marketplace/skills/agent-engineering/SKILL.md +386 -0
- package/marketplace/skills/agent-eval-design/SKILL.md +55 -0
- package/marketplace/skills/ai-native-development/SKILL.md +294 -0
- package/marketplace/skills/api-design/SKILL.md +60 -0
- package/marketplace/skills/architecture-decision-records/SKILL.md +55 -0
- package/marketplace/skills/background-jobs/SKILL.md +265 -0
- package/marketplace/skills/bounded-context-mapping/SKILL.md +55 -0
- package/marketplace/skills/cap-theorem-tradeoffs/SKILL.md +127 -0
- package/marketplace/skills/client-server-boundary/SKILL.md +187 -0
- package/marketplace/skills/code-review/SKILL.md +120 -0
- package/marketplace/skills/color-system-design/SKILL.md +43 -0
- package/marketplace/skills/component-architecture/SKILL.md +126 -0
- package/marketplace/skills/compression/SKILL.md +112 -0
- package/marketplace/skills/conceptual-modeling/SKILL.md +181 -0
- package/marketplace/skills/connection-pooling/SKILL.md +105 -0
- package/marketplace/skills/constraint-awareness/SKILL.md +287 -0
- package/marketplace/skills/content-monitor/SKILL.md +209 -0
- package/marketplace/skills/context-engineering/SKILL.md +320 -0
- package/marketplace/skills/context-graph/SKILL.md +174 -0
- package/marketplace/skills/context-management/SKILL.md +174 -0
- package/marketplace/skills/context-window/SKILL.md +239 -0
- package/marketplace/skills/contract-testing/SKILL.md +120 -0
- package/marketplace/skills/cron-scheduling/SKILL.md +223 -0
- package/marketplace/skills/dark-mode-implementation/SKILL.md +47 -0
- package/marketplace/skills/data-modeling/SKILL.md +59 -0
- package/marketplace/skills/data-modeling-fundamentals/SKILL.md +117 -0
- package/marketplace/skills/database-migration/SKILL.md +429 -0
- package/marketplace/skills/debugging/SKILL.md +67 -0
- package/marketplace/skills/dependency-architecture/SKILL.md +58 -0
- package/marketplace/skills/design-module-composition/SKILL.md +43 -0
- package/marketplace/skills/design-system-architecture/SKILL.md +61 -0
- package/marketplace/skills/design-thinking/SKILL.md +44 -0
- package/marketplace/skills/diagnosis/SKILL.md +296 -0
- package/marketplace/skills/diff-analysis/SKILL.md +188 -0
- package/marketplace/skills/e2e-test-design/SKILL.md +113 -0
- package/marketplace/skills/entity-relationship-modeling/SKILL.md +218 -0
- package/marketplace/skills/epistemic-grounding/SKILL.md +112 -0
- package/marketplace/skills/error-boundary/SKILL.md +235 -0
- package/marketplace/skills/error-tracking/SKILL.md +261 -0
- package/marketplace/skills/eval-driven-development/SKILL.md +147 -0
- package/marketplace/skills/evaluation/SKILL.md +113 -0
- package/marketplace/skills/event-contract-design/SKILL.md +60 -0
- package/marketplace/skills/event-storming/SKILL.md +56 -0
- package/marketplace/skills/form-ux-architecture/SKILL.md +60 -0
- package/marketplace/skills/framework-fit-analysis/SKILL.md +59 -0
- package/marketplace/skills/frontend-architecture/SKILL.md +43 -0
- package/marketplace/skills/generative-ui/SKILL.md +118 -0
- package/marketplace/skills/graph-audit/SKILL.md +81 -0
- package/marketplace/skills/guardrails/SKILL.md +118 -0
- package/marketplace/skills/hooks-patterns/SKILL.md +185 -0
- package/marketplace/skills/http-semantics/SKILL.md +136 -0
- package/marketplace/skills/ideation/SKILL.md +41 -0
- package/marketplace/skills/indexing-strategy/SKILL.md +108 -0
- package/marketplace/skills/information-architecture/SKILL.md +59 -0
- package/marketplace/skills/integration-test-design/SKILL.md +111 -0
- package/marketplace/skills/intent-recognition/SKILL.md +136 -0
- package/marketplace/skills/interaction-feedback/SKILL.md +59 -0
- package/marketplace/skills/interaction-patterns/SKILL.md +59 -0
- package/marketplace/skills/journey-mapping/SKILL.md +41 -0
- package/marketplace/skills/keywords/SKILL.md +213 -0
- package/marketplace/skills/knowledge-modeling/SKILL.md +232 -0
- package/marketplace/skills/layout-composition/SKILL.md +59 -0
- package/marketplace/skills/linguistics/SKILL.md +429 -0
- package/marketplace/skills/lint-overlay/SKILL.md +76 -0
- package/marketplace/skills/mental-models/SKILL.md +126 -0
- package/marketplace/skills/merge-queue/SKILL.md +94 -0
- package/marketplace/skills/methodology/SKILL.md +317 -0
- package/marketplace/skills/microcopy/SKILL.md +232 -0
- package/marketplace/skills/middleware-patterns/SKILL.md +363 -0
- package/marketplace/skills/mobile-responsive-ux/SKILL.md +287 -0
- package/marketplace/skills/mutation-testing/SKILL.md +112 -0
- package/marketplace/skills/naming-conventions/SKILL.md +112 -0
- package/marketplace/skills/observability-modeling/SKILL.md +59 -0
- package/marketplace/skills/ontology-modeling/SKILL.md +67 -0
- package/marketplace/skills/owasp-security/SKILL.md +153 -0
- package/marketplace/skills/pattern-recognition/SKILL.md +472 -0
- package/marketplace/skills/performance-budgets/SKILL.md +185 -0
- package/marketplace/skills/performance-engineering/SKILL.md +58 -0
- package/marketplace/skills/performance-testing/SKILL.md +125 -0
- package/marketplace/skills/printify/SKILL.md +42 -0
- package/marketplace/skills/prioritization/SKILL.md +118 -0
- package/marketplace/skills/problem-framing/SKILL.md +41 -0
- package/marketplace/skills/problem-locating-solving/SKILL.md +203 -0
- package/marketplace/skills/project-knowledge-extraction/SKILL.md +54 -0
- package/marketplace/skills/prompt-craft/SKILL.md +134 -0
- package/marketplace/skills/prompt-injection-defense/SKILL.md +132 -0
- package/marketplace/skills/property-based-testing/SKILL.md +100 -0
- package/marketplace/skills/prototyping/SKILL.md +43 -0
- package/marketplace/skills/query-optimization/SKILL.md +144 -0
- package/marketplace/skills/real-time-updates/SKILL.md +324 -0
- package/marketplace/skills/ref-patterns/SKILL.md +284 -0
- package/marketplace/skills/refactor/SKILL.md +65 -0
- package/marketplace/skills/rendering-models/SKILL.md +142 -0
- package/marketplace/skills/replication-patterns/SKILL.md +110 -0
- package/marketplace/skills/research-synthesis/SKILL.md +41 -0
- package/marketplace/skills/route-handler-design/SKILL.md +347 -0
- package/marketplace/skills/schema-evolution/SKILL.md +140 -0
- package/marketplace/skills/security-fundamentals/SKILL.md +139 -0
- package/marketplace/skills/semantic-center/SKILL.md +194 -0
- package/marketplace/skills/semantic-relations/SKILL.md +250 -0
- package/marketplace/skills/semantics/SKILL.md +366 -0
- package/marketplace/skills/semiotics/SKILL.md +230 -0
- package/marketplace/skills/seo-strategy/SKILL.md +260 -0
- package/marketplace/skills/server-actions-design/SKILL.md +243 -0
- package/marketplace/skills/server-components-design/SKILL.md +190 -0
- package/marketplace/skills/sharding-strategy/SKILL.md +123 -0
- package/marketplace/skills/shopify/SKILL.md +42 -0
- package/marketplace/skills/skill-infrastructure/SKILL.md +320 -0
- package/marketplace/skills/skill-router/SKILL.md +71 -0
- package/marketplace/skills/skill-scaffold/SKILL.md +105 -0
- package/marketplace/skills/snapshot-testing/SKILL.md +120 -0
- package/marketplace/skills/spec-driven-development/SKILL.md +148 -0
- package/marketplace/skills/state-machine-modeling/SKILL.md +56 -0
- package/marketplace/skills/state-management/SKILL.md +134 -0
- package/marketplace/skills/streaming-architecture/SKILL.md +194 -0
- package/marketplace/skills/summarization/SKILL.md +156 -0
- package/marketplace/skills/suspense-patterns/SKILL.md +265 -0
- package/marketplace/skills/system-interface-contracts/SKILL.md +59 -0
- package/marketplace/skills/task-analysis/SKILL.md +201 -0
- package/marketplace/skills/taxonomy-design/SKILL.md +66 -0
- package/marketplace/skills/test-coverage-strategy/SKILL.md +108 -0
- package/marketplace/skills/test-doubles-design/SKILL.md +98 -0
- package/marketplace/skills/test-driven-development/SKILL.md +96 -0
- package/marketplace/skills/testing-strategy/SKILL.md +67 -0
- package/marketplace/skills/theme-system-design/SKILL.md +43 -0
- package/marketplace/skills/tool-call-flow/SKILL.md +229 -0
- package/marketplace/skills/tool-call-strategy/SKILL.md +292 -0
- package/marketplace/skills/transaction-isolation/SKILL.md +98 -0
- package/marketplace/skills/type-safety/SKILL.md +177 -0
- package/marketplace/skills/typography-system/SKILL.md +43 -0
- package/marketplace/skills/usability-testing/SKILL.md +43 -0
- package/marketplace/skills/user-research/SKILL.md +43 -0
- package/marketplace/skills/vercel-composition-patterns/SKILL.md +157 -0
- package/marketplace/skills/version-control/SKILL.md +233 -0
- package/marketplace/skills/visual-design-foundations/SKILL.md +59 -0
- package/marketplace/skills/visual-hierarchy/SKILL.md +43 -0
- package/marketplace/skills/webhook-integration/SKILL.md +331 -0
- package/marketplace/skills/writing-humanizer/SKILL.md +380 -0
- package/package.json +67 -0
- package/schemas/manifest.schema.json +811 -0
- package/schemas/manifest.v2.schema.json +164 -0
- package/schemas/manifest.v3.schema.json +758 -0
- package/schemas/manifest.v4.schema.json +755 -0
- package/schemas/manifest.v5.schema.json +755 -0
- package/schemas/manifest.v6.schema.json +811 -0
- package/schemas/skill.context.jsonld +279 -0
- package/schemas/skill.schema.json +919 -0
- package/schemas/skill.v2.schema.json +201 -0
- package/schemas/skill.v3.schema.json +827 -0
- package/schemas/skill.v4.schema.json +822 -0
- package/schemas/skill.v5.schema.json +830 -0
- package/schemas/skill.v6.schema.json +946 -0
- package/schemas/vocabulary/keywords.json +180 -0
- package/schemas/vocabulary/workspace_tags.json +23 -0
- package/scripts/__tests__/migrate-skill-v2-to-v3.test.js +161 -0
- package/scripts/__tests__/migrate-skill-v3-to-v4.test.js +158 -0
- package/scripts/__tests__/test-export-parser-drift.js +149 -0
- package/scripts/__tests__/test-marketplace-export.js +114 -0
- package/scripts/__tests__/test-router-paths.js +82 -0
- package/scripts/__tests__/test-stability-promotion.js +244 -0
- package/scripts/__tests__/test-v3-1-alias-contract.js +109 -0
- package/scripts/__tests__/test-v3-1-skos-runtime.js +116 -0
- package/scripts/backfill-schema-version.js +198 -0
- package/scripts/build-field-reference.js +160 -0
- package/scripts/build-retrieval-baseline.js +511 -0
- package/scripts/check-markdown-links.js +211 -0
- package/scripts/check-protocol-consistency.js +979 -0
- package/scripts/export-marketplace-skills.js +610 -0
- package/scripts/export-skill.js +374 -0
- package/scripts/generate-manifest.js +787 -0
- package/scripts/lib/alias-contract.js +83 -0
- package/scripts/lib/audit-prompt-builder.js +771 -0
- package/scripts/lib/mock-grader.js +134 -0
- package/scripts/lib/parse-frontmatter.js +429 -0
- package/scripts/lib/roots.js +119 -0
- package/scripts/lint/check-archetype-sections.js +185 -0
- package/scripts/lint/check-category-enum.js +83 -0
- package/scripts/lint/check-routing-eval.js +146 -0
- package/scripts/lint/check-routing-quality.js +211 -0
- package/scripts/lint/check-stability-promotion.js +220 -0
- package/scripts/lint/format-code-frame.js +206 -0
- package/scripts/marketplace-install.js +125 -0
- package/scripts/migrate-category-to-enum.js +169 -0
- package/scripts/migrate-skill-v2-to-v3.js +424 -0
- package/scripts/migrate-skill-v3-to-v4.js +200 -0
- package/scripts/migrate-skill-v5-to-v6.js +304 -0
- package/scripts/restructure-by-category.js +85 -0
- package/scripts/seed-publication-classification.js +282 -0
- package/scripts/skill-audit.js +893 -0
- package/scripts/skill-graph-drift.js +483 -0
- package/scripts/skill-graph-route.js +766 -0
- package/scripts/skill-graph-routing-eval.js +393 -0
- package/scripts/skill-lint.js +1317 -0
- package/scripts/skill-overlap.js +213 -0
- package/scripts/verify-skill-md-export.js +201 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# Migration: schema_version 5 → 6
|
|
2
|
+
|
|
3
|
+
> **Status:** Active. Created 2026-05-17.
|
|
4
|
+
> **Additive structural change.** v6 promotes the nested `concept` block to flat top-level fields and adds the Health Block (audit-loop-written fields). The v5 nested `concept` shape remains accepted in v6 for v5 skills not yet migrated; the schema `anyOf` rule lets the comprehension-state requirement be satisfied by either shape. No values are removed, no fields are renamed, no requirements are tightened against existing v5 skills.
|
|
5
|
+
> **Plan:** `docs/plans/skill-audit-loop-simplification.md` (in the Development workspace) — outer frame and design rationale.
|
|
6
|
+
> **Tier C″ codification:** the cross-domain `relations.boundary[]` doctrine, codified after empirical 30-query baseline sweep on 2026-05-17. See § Cross-Domain Boundary Doctrine below.
|
|
7
|
+
|
|
8
|
+
## What changed
|
|
9
|
+
|
|
10
|
+
### 1. The seven-field `concept` block is flattened to top-level fields
|
|
11
|
+
|
|
12
|
+
v5's nested `concept` block:
|
|
13
|
+
|
|
14
|
+
```yaml
|
|
15
|
+
metadata:
|
|
16
|
+
comprehension_state: present
|
|
17
|
+
concept:
|
|
18
|
+
definition: "..."
|
|
19
|
+
mental_model: "..."
|
|
20
|
+
purpose: "..."
|
|
21
|
+
boundary: "..."
|
|
22
|
+
taxonomy: "..."
|
|
23
|
+
analogy: "..."
|
|
24
|
+
misconception: "..."
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
v6's flat shape:
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
comprehension_state: present
|
|
31
|
+
mental_model: "..." # primitives and their relationships
|
|
32
|
+
purpose: "..." # the problem this concept solves
|
|
33
|
+
boundary: "..." # what this concept is NOT (mechanism, not label)
|
|
34
|
+
analogy: "..." # one-sentence metaphor
|
|
35
|
+
misconception: "..." # wrong mental model people bring
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The two retired sub-fields:
|
|
39
|
+
|
|
40
|
+
| v5 sub-field | v6 home | Why retired |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| `concept.definition` | `description` | The v5 `description` is the routing contract — first-person prose explaining what the skill covers. v6 keeps it as the routing contract AND promotes it to also carry the concept definition. There is no separate "the concept *is* …" surface needed; the routing contract subsumes it. |
|
|
43
|
+
| `concept.taxonomy` | `category` + `relations.broader` | Taxonomy = "where does this sit relative to neighbors?" `category` answers the browse-shelf question; `relations.broader` answers the cross-skill generalization question. The two together encode what `concept.taxonomy` was for. |
|
|
44
|
+
|
|
45
|
+
The body section `## Concept Card` is also retired. The flat frontmatter fields are now the canonical location — no in-body teaching block.
|
|
46
|
+
|
|
47
|
+
**Why flat?** The nested `concept` block was an iteration, not the goal. Every other authored teaching field on a skill is flat. Nesting just one set under `concept.*` made authors learn a special access pattern, made schema readers walk an extra level, and made the comprehension grader synthesize information from two locations (the body's `## Concept Card` section AND the frontmatter `concept` object) that should have been one.
|
|
48
|
+
|
|
49
|
+
### 2. The Health Block — seven flat fields recording the audit fingerprint
|
|
50
|
+
|
|
51
|
+
v6 adds seven flat top-level fields that record a skill's audit state directly in its frontmatter, replacing the v5 model of scattered log files (`eval-history.jsonl`, `routing-misses.jsonl`, `.opencode/progress/skill-audit-*`, `health-ledger.jsonl`, `findings/*.md` — five places to know one skill's status):
|
|
52
|
+
|
|
53
|
+
```yaml
|
|
54
|
+
# Health Block (written by the audit loop — do not hand-author)
|
|
55
|
+
last_audited: 2026-05-17 # ISO date `audit` last ran
|
|
56
|
+
last_changed: 2026-05-15 # ISO date the skill was last edited
|
|
57
|
+
audit_verdict: PASS # PASS | PASS_WITH_FIXES | PARTIAL | FAIL | UNKNOWN
|
|
58
|
+
eval_score: 4.2 # 0.0–5.0 latest aggregate eval grade
|
|
59
|
+
eval_failed_ids: [] # failing eval IDs (empty when clean)
|
|
60
|
+
lint_verdict: PASS # PASS | FAIL | UNKNOWN
|
|
61
|
+
drift_status: OK # OK | DRIFT | BROKEN | STALE | NO_BASELINE | EXTERNAL_UNHASHED | UNKNOWN
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Authorship rule:** these fields are stamped by `scripts/skill/skill-audit.js`, `scripts/skill/evaluate-skill.js`, and `scripts/skill-graph-drift.js`. Do not hand-author them — the next `audit` run will overwrite hand-edits with the loop's authoritative values.
|
|
65
|
+
|
|
66
|
+
**Loop reads, log writes retire after one corpus walk.** During the v5→v6 migration window, the audit-loop scripts write to both the flat Health Block fields AND the legacy log files. After one full corpus walk, the log writes are retired and the flat fields are the single source of truth.
|
|
67
|
+
|
|
68
|
+
### 3. `comprehension_state: present` accepts either shape
|
|
69
|
+
|
|
70
|
+
The v6 schema's `allOf` rule that enforces `comprehension_state: present` was:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
// v5
|
|
74
|
+
"then": { "required": ["concept"] }
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
In v6 it becomes:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
// v6
|
|
81
|
+
"then": {
|
|
82
|
+
"anyOf": [
|
|
83
|
+
{ "required": ["mental_model", "purpose", "boundary", "analogy", "misconception"] },
|
|
84
|
+
{ "required": ["concept"] }
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The author can satisfy the requirement by populating the five flat fields (preferred), the nested `concept` block (v5 back-compat), or both (flat fields win when both are present).
|
|
90
|
+
|
|
91
|
+
### 4. Cross-Domain Boundary Doctrine — codified
|
|
92
|
+
|
|
93
|
+
`relations.boundary[]` is a Skill-Graph-specific routing-layer predicate, NOT formal class disjointness. Its runtime semantic was discovered empirically during the Wave 6 routing-tuning work and is codified in v6:
|
|
94
|
+
|
|
95
|
+
**Runtime mechanic:** `if (target.score >= declarer.score) skip target` — the declarer can exclude the target *only when the declarer is currently outscoring it on the query*. This INVERTS the surface reading "I am NOT B; defer to B" — boundary entries protect the declarer's wins, not the target's wins. Source: `skill-graph/scripts/skill-graph-route.js:548`.
|
|
96
|
+
|
|
97
|
+
**Doctrine — SAME-DOMAIN ONLY:**
|
|
98
|
+
|
|
99
|
+
1. `boundary[]` entries should declare same-domain handoffs only (same `category` AND same `domain` sub-tree). Example: `engineering/frontend` ↔ `engineering/frontend` is fine.
|
|
100
|
+
2. Cross-category or cross-sub-domain handoffs belong in `anti_examples` + `relations.related`, NOT in `boundary[]`. The `anti_examples` array preserves routing-visible documentation as wrong-use phrases; `relations.related` signals the semantic adjacency without invoking the score-aware exclusion mechanic.
|
|
101
|
+
3. Empirical justification (Tier C″ sweep, 2026-05-17): removing 16 cross-domain `boundary[]` entries across 8 Wave 6 skills caused **0 top-1 routing changes** on the 30-query baseline; only 3/30 low-confidence unmaskings of legitimate alternatives at score 3 surfaced. The cross-domain entries were performing silent low-confidence exclusion only — exactly the silent-failure risk the doctrine prevents.
|
|
102
|
+
|
|
103
|
+
**Author rule:** if you would write a `boundary[]` entry whose target lives in a different `category` or different `domain` sub-tree than the declarer, move the entry to `anti_examples` (wrong-use phrase, routing-visible) + `relations.related` (semantic adjacency signal). Lint (planned, not yet implemented) will warn on cross-domain boundary declarations.
|
|
104
|
+
|
|
105
|
+
## Migration procedure for skill authors
|
|
106
|
+
|
|
107
|
+
For every SKILL.md with `comprehension_state: present`:
|
|
108
|
+
|
|
109
|
+
### Required edits
|
|
110
|
+
|
|
111
|
+
1. Change the schema_version field:
|
|
112
|
+
|
|
113
|
+
```yaml
|
|
114
|
+
# Before (v5)
|
|
115
|
+
metadata:
|
|
116
|
+
schema_version: "5"
|
|
117
|
+
|
|
118
|
+
# After (v6)
|
|
119
|
+
metadata:
|
|
120
|
+
schema_version: "6"
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
2. Populate the five flat Understanding fields with real content (not pipe-empty placeholders):
|
|
124
|
+
|
|
125
|
+
```yaml
|
|
126
|
+
# Before (v5 — nested with placeholders)
|
|
127
|
+
metadata:
|
|
128
|
+
concept:
|
|
129
|
+
definition: "<populated text>"
|
|
130
|
+
mental_model: "|" # placeholder — fails comprehension grader
|
|
131
|
+
purpose: "|"
|
|
132
|
+
boundary: "|"
|
|
133
|
+
taxonomy: "|"
|
|
134
|
+
analogy: "|"
|
|
135
|
+
misconception: "|"
|
|
136
|
+
|
|
137
|
+
# After (v6 — flat with real content)
|
|
138
|
+
mental_model: "Skill metadata defines the routing contract, classification, health state, and grounding evidence each SKILL.md carries. The schema validator checks the shape; the lint pass checks the semantics; the manifest generator emits the consumer-readable aggregate."
|
|
139
|
+
purpose: "Without machine-readable metadata, agents cannot route to the right skill, verify a skill's claims against repo truth, or detect when a skill goes stale. The Protocol replaces the prior model of in-prose-only skills with structured signals every consumer can parse."
|
|
140
|
+
boundary: "The Protocol is NOT a content authoring style guide (use the skill-scaffold archetype contract for that). It is also NOT a routing algorithm (use skill-graph-route.js for that). The Protocol defines what every skill MUST declare; the algorithm decides which skill activates."
|
|
141
|
+
analogy: "The Protocol is to skills what package.json is to npm packages: a structured manifest every consumer reads to know what the artifact claims to do, how to verify it, and how to depend on it."
|
|
142
|
+
misconception: "Authors often think the Protocol is bureaucratic overhead. The reality is the opposite: without the Protocol's structured fields, agents must scan free-form prose to make routing decisions — costing tokens and producing inconsistent results. The Protocol is a compression scheme for relevance."
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
3. (Optional) Remove the nested `concept` block once the flat fields are populated. The schema accepts both during migration; removing `concept` removes a deprecated indirection.
|
|
146
|
+
|
|
147
|
+
### Conditional edits
|
|
148
|
+
|
|
149
|
+
| If your skill has... | Then... |
|
|
150
|
+
|---|---|
|
|
151
|
+
| `comprehension_state: present` AND nested `concept` with pipe-empty (`"\|"`) placeholders | Populate the five flat fields with real content. Pipe-empty placeholders fail the comprehension grader. |
|
|
152
|
+
| `comprehension_state: present` AND fully-populated nested `concept` | Optional: migrate to flat fields for v6 alignment. Both shapes validate against the v6 schema during the migration window. |
|
|
153
|
+
| `relations.boundary[]` entries pointing to skills in a *different* `category` or `domain` sub-tree | Move those entries to `anti_examples` (wrong-use phrase, routing-visible) + `relations.related` (semantic adjacency signal). |
|
|
154
|
+
| No comprehension grading declared (`comprehension_state: absent` or omitted) | Bump `schema_version` to 6 and skip the Understanding-fields edit — they're not required without `comprehension_state: present`. |
|
|
155
|
+
|
|
156
|
+
### Codemod available
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# 1. Bulk-bump schema_version in all SKILL.md files
|
|
160
|
+
cd /Users/jacobbalslev/Development/skills
|
|
161
|
+
find skills -name SKILL.md -exec sed -i '' 's/schema_version: "5"/schema_version: "6"/g' {} +
|
|
162
|
+
|
|
163
|
+
# 2. (Planned) Backfill the flat Understanding fields from the nested concept block
|
|
164
|
+
node scripts/migrate-skill-v5-to-v6.js --backfill --dry-run
|
|
165
|
+
# Review the diff, then:
|
|
166
|
+
node scripts/migrate-skill-v5-to-v6.js --backfill --apply
|
|
167
|
+
|
|
168
|
+
# 3. Verify lint baseline against the new schema
|
|
169
|
+
cd /Users/jacobbalslev/Development/skill-graph
|
|
170
|
+
SKILL_GRAPH_WORKSPACE=/Users/jacobbalslev/Development/skills node scripts/skill-lint.js
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The `--backfill` codemod is the v6 equivalent of the v3→v4 migrate script. It reads the nested `concept` sub-fields and writes them to the flat top-level fields. Where sub-fields are pipe-empty placeholders, the codemod leaves the flat field unpopulated for human authorship (the comprehension grader will then surface the gap on the next eval run).
|
|
174
|
+
|
|
175
|
+
## Backward compatibility
|
|
176
|
+
|
|
177
|
+
| Direction | Compatible? | Note |
|
|
178
|
+
|---|---|---|
|
|
179
|
+
| v5 tool reads v6 SKILL.md | ⚠ Partial | v5 schema's `additionalProperties: false` rejects the new flat fields (`mental_model`, `purpose`, `boundary`, `analogy`, `misconception`, `last_audited`, `last_changed`, `audit_verdict`, `eval_score`, `eval_failed_ids`, `lint_verdict`, `drift_status`). Use `normalizeFrontmatter()` from `skill-graph/scripts/lib/parse-frontmatter.js` for forward-compat reads. |
|
|
180
|
+
| v6 tool reads v5 SKILL.md | ✓ via `anyOf` | The v6 schema's `comprehension_state: present` allOf rule accepts either shape (nested `concept` OR flat Understanding fields), so v5 skills with populated `concept` blocks pass v6 validation unchanged. |
|
|
181
|
+
| Mixed v5 / v6 corpus | ✓ During migration | The `anyOf` rule and the deprecated-but-accepted `concept` field allow a corpus to migrate one skill at a time. Author convention: bump `schema_version` to `6` only after the flat Understanding fields are populated. |
|
|
182
|
+
|
|
183
|
+
**Recommendation:** apply the migration in batches grouped by `comprehension_state` value. Skills with `comprehension_state: absent` (no Understanding fields needed) can be bumped to v6 in a single sweep; skills with `comprehension_state: present` need per-skill authoring of the flat fields and should land in smaller PRs.
|
|
184
|
+
|
|
185
|
+
## Verification checklist
|
|
186
|
+
|
|
187
|
+
After running the v5→v6 migration:
|
|
188
|
+
|
|
189
|
+
- [ ] Every SKILL.md has `schema_version: "6"`
|
|
190
|
+
- [ ] Every skill with `comprehension_state: present` has either the five flat Understanding fields OR the nested `concept` block (verified by v6 schema validation)
|
|
191
|
+
- [ ] Every skill with `comprehension_state: present` and populated flat fields has no pipe-empty (`"|"`) placeholder strings
|
|
192
|
+
- [ ] No `relations.boundary[]` entries point to skills in a different `category` or `domain` sub-tree (cross-domain entries moved to `anti_examples` + `relations.related`)
|
|
193
|
+
- [ ] `node scripts/skill-lint.js` baseline unchanged (no new errors from migration)
|
|
194
|
+
- [ ] `node scripts/generate-manifest.js --output skills.manifest.json` succeeds
|
|
195
|
+
- [ ] Health Block fields are present on at least the skills that have been through one `audit` cycle since the v6 bump (initial state: all `UNKNOWN`; populated by the first audit walk)
|
|
196
|
+
- [ ] Sample retrieval-eval queries route the same or better post-migration
|
|
197
|
+
|
|
198
|
+
## Rollback procedure
|
|
199
|
+
|
|
200
|
+
If verification fails:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
cd /Users/jacobbalslev/Development/skills
|
|
204
|
+
find skills -name SKILL.md -exec sed -i '' 's/schema_version: "6"/schema_version: "5"/g' {} +
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
The flat Understanding fields and Health Block fields are not removed by the rollback — they remain in the YAML but are rejected by v5 schema validation (which has `additionalProperties: false`). To fully roll back, either:
|
|
208
|
+
|
|
209
|
+
1. Use `normalizeFrontmatter()` to strip unknown fields during the rollback sweep, OR
|
|
210
|
+
2. Manually delete the flat Understanding fields and Health Block from each affected skill.
|
|
211
|
+
|
|
212
|
+
Recommended: do not roll back — instead, identify the failing skills, fix the v6 authoring, and re-verify. The migration is additive; a partial v6 corpus is structurally safe (it just means some skills don't yet have flat Understanding fields populated).
|
|
213
|
+
|
|
214
|
+
## Related artifacts
|
|
215
|
+
|
|
216
|
+
- `schemas/skill.v6.schema.json` — JSON schema with flat Understanding fields and Health Block
|
|
217
|
+
- `SKILL_METADATA_PROTOCOL.md` — v6 protocol contract (flat fields, Health Block, boundary doctrine)
|
|
218
|
+
- `docs/skill-metadata-protocol.md` — v6 design rationale and field-count table
|
|
219
|
+
- `Development/docs/plans/skill-audit-loop-simplification.md` — outer plan that motivated the v6 simplification (collapse 13 audit commands to 4 operations, eliminate scattered log files via flat Health Block)
|
|
220
|
+
- `Development/docs/plans/skills-sh-marketshare-strategy.md` § Tier C″ — empirical sweep of 16 cross-domain `boundary[]` entries across 8 Wave 6 skills, confirming the SAME-DOMAIN doctrine
|
|
221
|
+
- `skill-graph/scripts/skill-graph-route.js:548` — runtime source for the score-aware boundary exclusion mechanic
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Skill name exceptions registry.
|
|
2
|
+
#
|
|
3
|
+
# Skills whose names violate the head-noun-glossary rule (no verb prefix,
|
|
4
|
+
# noun-anchored compound) but are kept as-is because the name is an established
|
|
5
|
+
# industry term-of-art. Adding an entry requires a citation field.
|
|
6
|
+
#
|
|
7
|
+
# See docs/head-noun-glossary.md for the rule.
|
|
8
|
+
# See SKILL_METADATA_PROTOCOL.md § name for the schema pattern.
|
|
9
|
+
|
|
10
|
+
exceptions:
|
|
11
|
+
- name: code-review
|
|
12
|
+
reason: "Industry term-of-art since Fagan inspection."
|
|
13
|
+
citation: "Fagan, M. E. (1976). Design and code inspections to reduce errors in program development. IBM Systems Journal, 15(3), 182–211."
|
|
14
|
+
|
|
15
|
+
- name: design-review
|
|
16
|
+
reason: "Established industry practice across engineering and design orgs."
|
|
17
|
+
citation: "Cooper, A., Reimann, R., Cronin, D., & Noessel, C. (2014). About Face: The Essentials of Interaction Design (4th ed.), Chapter on design reviews."
|
|
18
|
+
|
|
19
|
+
- name: event-storming
|
|
20
|
+
reason: "Named methodology, not a verb command."
|
|
21
|
+
citation: "Brandolini, A. (2013, originally posted). Introducing EventStorming. https://www.eventstorming.com"
|
|
22
|
+
|
|
23
|
+
- name: graph-audit
|
|
24
|
+
reason: "Audit is the noun reading (the artifact), not the verb (the activity). This is a graph audit, not the act of auditing a graph."
|
|
25
|
+
citation: "Skill Graph internal terminology; pairs with skill-census.js output naming."
|
|
26
|
+
|
|
27
|
+
- name: skill-scaffold
|
|
28
|
+
reason: "Scaffold is the artifact/template, not the verb. This skill provides the authoring scaffold."
|
|
29
|
+
citation: "Skill Graph internal terminology; matches scaffold tooling vocabulary (e.g. Rails scaffold, Nx scaffold)."
|
|
30
|
+
|
|
31
|
+
- name: writing-humanizer
|
|
32
|
+
reason: "Humanizer is the noun reading (the transformation tool); compound `writing-humanizer` is the named artifact."
|
|
33
|
+
citation: "Industry usage in style-tooling (Grammarly humanizer, OpenAI text humanizer). Skill represents the discipline, not the command."
|
|
34
|
+
|
|
35
|
+
- name: cron-scheduling
|
|
36
|
+
reason: "Scheduling is the discipline noun; compound `cron-scheduling` names the surface."
|
|
37
|
+
citation: "POSIX cron(8); Vixie cron documentation."
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Marketplace P1 Public Migration Plan
|
|
2
|
+
|
|
3
|
+
> Status: execution plan for the 2026-05-14 skills.sh consolidation pass.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Move public-safe Development skills that were listed as `public-after-migration` in `docs/marketplace-skill-candidate-list.md` into canonical Skill Metadata Protocol source under `skills/<slug>/SKILL.md`, then export them through the generated marketplace surface.
|
|
8
|
+
|
|
9
|
+
## Inclusion Rules
|
|
10
|
+
|
|
11
|
+
- Import only rows that are not already present in canonical `skills/`.
|
|
12
|
+
- Normalize nested names to flat marketplace slugs. `token-cost-estimation/findings` becomes `token-cost-estimation-findings` if and when it is safe to migrate.
|
|
13
|
+
- Reject any row whose full source body contains local agent-profile paths, private project names, personal paths, email addresses, or token-like strings.
|
|
14
|
+
- Keep canonical Skill Graph as the source of truth. Do not publish legacy/plain Development files directly.
|
|
15
|
+
- Preserve body content for imported skills except for replacing legacy frontmatter with schema_version 4 frontmatter.
|
|
16
|
+
- Keep eval claims honest: migrated skills start with `eval_artifacts: planned`, `eval_state: unverified`, and `routing_eval: absent`.
|
|
17
|
+
- Keep only frontmatter relations whose targets exist in the final canonical library.
|
|
18
|
+
|
|
19
|
+
## Import Set
|
|
20
|
+
|
|
21
|
+
The clean P1 rows to import in this batch are:
|
|
22
|
+
|
|
23
|
+
`background-jobs`, `command-palette`, `compression`, `content-monitor`, `cron-scheduling`, `diff-analysis`, `entity-relationship-modeling`, `evaluation`, `governance`, `guardrails`, `keywords`, `merge-queue`, `methodology`, `mobile-responsive-ux`, `ontology`, `prioritization`, `real-time-updates`, `reasoning`, `seo-strategy`, `spec-driven-development`, `summarization`, `vercel-composition-patterns`.
|
|
24
|
+
|
|
25
|
+
## Rejections For This Batch
|
|
26
|
+
|
|
27
|
+
Duplicate P1 rows already owned by canonical Skill Graph skills are rejected in favor of the canonical source.
|
|
28
|
+
|
|
29
|
+
Rows with body-level privacy or local-runtime findings are deferred until rewritten as general public skills. One private-named row is withheld from row-level public documentation: `agent-session-handoff`, `agent-task-delegation`, `autonomous-loop-patterns`, `chat-interface`, `cost-aggregation`, `dispatch-loop`, `ghostty`, `git-worktree`, `harness-engineering`, `hook-patterns`, `methodical`, `orchestration`, `perspective`, `quality-doctrine`, `self-evaluation`, `sequential-thinking`, `session-lifecycle`, `streaming`, `task-lifecycle`, `task-path-optimization`, `task-progression`, `task-sizing`, `threaded-conversations`, `token-cost-estimation-findings`, `token-efficiency`, `tui`, `vibe-kanban`.
|
|
30
|
+
|
|
31
|
+
## Verification
|
|
32
|
+
|
|
33
|
+
After import, run the standard gates plus marketplace-specific validation:
|
|
34
|
+
|
|
35
|
+
- `npm.cmd run verify`
|
|
36
|
+
- `node scripts/verify-skill-md-export.js`
|
|
37
|
+
- `node scripts/check-markdown-links.js`
|
|
38
|
+
- `node scripts/export-marketplace-skills.js --validate-only`
|
|
39
|
+
- privacy scan over generated marketplace export
|
|
40
|
+
- public CLI list count against `jacob-balslev/skills`
|
|
41
|
+
- live skills.sh canonical and owner pages
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Multi-Root Workspace Plan
|
|
2
|
+
|
|
3
|
+
> **Status.** Shipped in v0.4.0 (schema_version 3). This document is the design reference for the workspace config format and the skill-root resolution rules.
|
|
4
|
+
> **Audience.** Consumers of Skill Graph who maintain more than one project in a single repo, and contributors extending the generator, router, or drift sentinel.
|
|
5
|
+
|
|
6
|
+
## Problem
|
|
7
|
+
|
|
8
|
+
Skill Graph v0.3.0 assumed a single `skills/` directory at the repo root. That worked for a single-project workspace. It broke the moment a developer had more than one project:
|
|
9
|
+
|
|
10
|
+
- **Codebase-scoped skills** (skills with `scope: codebase` and concrete file paths in `grounding.truth_sources`) cannot live in a central `skills/` folder because their truth sources reference files in a specific project. Moving them to the central folder either invalidates the paths or picks one project over another.
|
|
11
|
+
- **Cross-project skills** (GDPR, a11y, react-best-practices) should not be duplicated per project — duplication leads to drift.
|
|
12
|
+
- **Project-specific skills** (e.g. `<project-a>-orders`, `<project-b>-seo` — names tied to one project's domain) should not pollute the shared namespace.
|
|
13
|
+
|
|
14
|
+
The existing single-root design forced authors to either duplicate skills or invent contract-breaking workarounds.
|
|
15
|
+
|
|
16
|
+
## Design — hybrid layout with a workspace config
|
|
17
|
+
|
|
18
|
+
v3 adds an optional workspace config at `.skill-graph/config.json` that declares multiple skill roots. When the config is present, the generator walks every declared root and unions the result into one manifest. Each skill entry carries a `project` field identifying which root it came from.
|
|
19
|
+
|
|
20
|
+
### Directory layout
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
workspace/
|
|
24
|
+
.skill-graph/
|
|
25
|
+
config.json # workspace definition
|
|
26
|
+
skills/ # shared / ambient skills (scope: portable | reference)
|
|
27
|
+
gdpr/SKILL.md
|
|
28
|
+
a11y/SKILL.md
|
|
29
|
+
react-best-practices/SKILL.md
|
|
30
|
+
<project-a>/ # project 1 (placeholder name — adopters use their own)
|
|
31
|
+
.skill-graph/skills/
|
|
32
|
+
<project-a>-orders/SKILL.md
|
|
33
|
+
<project-a>-billing/SKILL.md
|
|
34
|
+
<project-b>/ # project 2
|
|
35
|
+
.skill-graph/skills/
|
|
36
|
+
<project-b>-seo/SKILL.md
|
|
37
|
+
<project-b>-keywords/SKILL.md
|
|
38
|
+
shared-skills/ # optional alternative shared root
|
|
39
|
+
cross-project-onboarding/SKILL.md
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Three layout styles this design accommodates:
|
|
43
|
+
|
|
44
|
+
| Layout | Shape | Best for |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| **A — single root** | `skills/` at repo root, no config file | One project. Tutorial default. Skill Graph repo itself. |
|
|
47
|
+
| **B — per-project only** | `<project>/.skill-graph/skills/` roots, no shared root | Projects with zero shared skills (rare). |
|
|
48
|
+
| **C — hybrid** | Shared root + per-project roots | Most multi-project workspaces. Default recommendation. |
|
|
49
|
+
|
|
50
|
+
### Config format
|
|
51
|
+
|
|
52
|
+
`.skill-graph/config.json`:
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"workspace": {
|
|
57
|
+
"skill_roots": [
|
|
58
|
+
{ "path": "skills", "project": null },
|
|
59
|
+
{ "path": "<project-a>/.skill-graph/skills", "project": "<project-a>" },
|
|
60
|
+
{ "path": "<project-b>/.skill-graph/skills", "project": "<project-b>" }
|
|
61
|
+
],
|
|
62
|
+
"projects": {
|
|
63
|
+
"<project-a>": { "semantic_tags": ["ecommerce", "saas", "b2b"] },
|
|
64
|
+
"<project-b>": { "semantic_tags": ["ecommerce", "b2c"] }
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
(`<project-a>` and `<project-b>` are placeholder handles — adopters use whatever kebab-case names they choose for their projects.)
|
|
71
|
+
|
|
72
|
+
**Fields:**
|
|
73
|
+
|
|
74
|
+
- `workspace.skill_roots` (required): ordered list of skill root directories. Each entry declares:
|
|
75
|
+
- `path`: repo-relative directory to walk. The generator expects each subdirectory under the path to contain a `SKILL.md`.
|
|
76
|
+
- `project`: literal project handle stamped onto every skill loaded from this root. `null` means "shared / ambient" — skills loaded without a project owner.
|
|
77
|
+
- `workspace.projects` (optional): map of literal project handle → `{ semantic_tags: string[] }`. The router expands the active project into this semantic set before matching skills' `workspace_tags`.
|
|
78
|
+
|
|
79
|
+
### Single-root fallback
|
|
80
|
+
|
|
81
|
+
When `.skill-graph/config.json` is absent, the generator falls back to the default single-root mode: walk `skills/`, stamp no project. This keeps v2-era consumers and the Skill Graph repo itself working unchanged.
|
|
82
|
+
|
|
83
|
+
## Resolution rules
|
|
84
|
+
|
|
85
|
+
### Skill discovery
|
|
86
|
+
|
|
87
|
+
1. Generator loads the workspace config (or falls back to `[{ path: "skills", project: null }]`).
|
|
88
|
+
2. For each root, walks direct children. Each child directory with a `SKILL.md` becomes a skill.
|
|
89
|
+
3. The same skill path cannot be loaded twice — the first root to claim a path wins. Roots are processed in declaration order.
|
|
90
|
+
4. Skill `id` is the directory name; `project` is the root's declared project (or absent if null).
|
|
91
|
+
5. Manifest output adds a top-level `workspace` block echoing the config so downstream consumers don't need to re-read it.
|
|
92
|
+
|
|
93
|
+
### Router project matching
|
|
94
|
+
|
|
95
|
+
When a consumer calls `skill-graph route <query> --project <handle>`, the router:
|
|
96
|
+
|
|
97
|
+
1. Reads `manifest.workspace.projects[<handle>].semantic_tags` to expand the project handle into a set of matchable tags.
|
|
98
|
+
2. For each skill:
|
|
99
|
+
- If `workspace_tags` is absent → skill is ambient, matches.
|
|
100
|
+
- If `workspace_tags` contains the literal project handle → matches.
|
|
101
|
+
- If `workspace_tags` contains any of the project's expanded semantic tags → matches.
|
|
102
|
+
- Otherwise → excluded with reason `workspace_tags [...] exclude project "<handle>"`.
|
|
103
|
+
|
|
104
|
+
### Drift sentinel scope
|
|
105
|
+
|
|
106
|
+
`skill-graph drift` walks the same skill roots as the generator. When run without arguments, it checks every skill in every root. When run with an explicit skill directory, it checks only that skill.
|
|
107
|
+
|
|
108
|
+
## Scope placement rules
|
|
109
|
+
|
|
110
|
+
| Skill scope | Preferred root |
|
|
111
|
+
|---|---|
|
|
112
|
+
| `scope: portable` | Shared root (`skills/`). The skill makes no repo-specific claims, so it lives outside any project. |
|
|
113
|
+
| `scope: reference` | Shared root. Documentation-style skill anchored to a contract document. |
|
|
114
|
+
| `scope: codebase` | Project root (`<project>/.skill-graph/skills/`). The skill's `grounding.truth_sources` reference files inside that project. Placing it in the shared root creates paths that resolve relative to the repo root and break when the project moves. |
|
|
115
|
+
|
|
116
|
+
Lint warns when a skill's placement contradicts its scope (shared root with `scope: codebase`, or project root with `scope: portable`). The warning is advisory — in some unusual cases the placement is correct and the scope declaration is wrong.
|
|
117
|
+
|
|
118
|
+
## Migration path from single-root
|
|
119
|
+
|
|
120
|
+
For an existing v2/v3 single-root repo that wants to adopt multi-root:
|
|
121
|
+
|
|
122
|
+
1. Create `.skill-graph/config.json` with the current `skills/` directory as the first root:
|
|
123
|
+
```json
|
|
124
|
+
{
|
|
125
|
+
"workspace": {
|
|
126
|
+
"skill_roots": [{ "path": "skills", "project": null }]
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
2. Run `node scripts/generate-manifest.js` and confirm the manifest is identical to before (plus the new top-level `workspace` block).
|
|
131
|
+
3. Add per-project roots one at a time, moving `scope: codebase` skills into them.
|
|
132
|
+
4. Add `workspace_tags` to skills that should be filtered by project; leave ambient skills untouched.
|
|
133
|
+
5. For large libraries, also add hierarchical `category` values to the moved skills — a tree helps readers find skills in a workspace with dozens of per-project skills.
|
|
134
|
+
|
|
135
|
+
## Non-goals
|
|
136
|
+
|
|
137
|
+
- **No cross-workspace linking.** The manifest only unions skills within one repo. Pulling skills from a sibling repo is out of scope (and is SKILL.md' job via export).
|
|
138
|
+
- **No runtime skill-root mounting.** The set of skill roots is read at manifest generation time. A consumer cannot add a root at query time.
|
|
139
|
+
- **No glob-based skill-root declarations.** Each root is a literal directory path. Glob patterns in the config file are a footgun and are not supported.
|
|
140
|
+
|
|
141
|
+
## Reference
|
|
142
|
+
|
|
143
|
+
- `scripts/generate-manifest.js` — workspace config loader and multi-root walker.
|
|
144
|
+
- `scripts/skill-graph-route.js` — project-aware filter using semantic-tag expansion.
|
|
145
|
+
- `scripts/skill-graph-drift.js` — walks all workspace roots in default mode.
|
|
146
|
+
- `docs/field-reference.md § workspace_tags` — authored-side semantics.
|
|
147
|
+
- `docs/field-decision-guide.md § 4. How do I tag a skill for multiple projects?` — decision tables.
|
|
148
|
+
- `schemas/manifest.schema.json § workspace` — machine-enforceable config shape in the manifest.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Scripts Roadmap
|
|
2
|
+
|
|
3
|
+
This document tracks the script surfaces planned for Skill Graph. The goal is the smallest coherent toolchain that makes Skill Metadata Protocol and audit system executable.
|
|
4
|
+
|
|
5
|
+
## Status
|
|
6
|
+
|
|
7
|
+
| Script | State | Notes |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `scripts/skill-lint.js` | **Shipping** | Validates frontmatter against the schema, enforces parent-dir-matches-name, verifies relation targets exist, checks eval coherence, archetype sections, routing quality; `--strict` mode promotes warnings to errors |
|
|
10
|
+
| `scripts/generate-manifest.js` | **Shipping** | Walks `skills/**/SKILL.md`, applies the rename map from `docs/manifest-field-mapping.md`, emits deterministic validated manifest; `examples/skills.manifest.sample.json` is generated output, not hand-written |
|
|
11
|
+
| `scripts/export-skill.js` | **Shipping** | SKILL.md export target only; transforms Skill Graph extensions under `metadata:` key. Five fixtures in `examples/exports/`. Other runtimes (cursor, windsurf, copilot, agents-md) were removed from the `portability.targets` enum in 0.3.0 — re-add via a new RFC and the PR that ships the transform |
|
|
12
|
+
| `scripts/check-protocol-consistency.js` | **Shipping** | Cross-artifact consistency — field-set parity, authored-to-generated parity, example truth invariants, versioned schema parity, generated field-reference parity, and JSON-LD context coverage (C1–C8 checks) |
|
|
13
|
+
| `scripts/skill-audit.js` | **Shipping** | Stub mode seeds `audits/<skill>/{findings,verdict,scorecard}.md` from lint output (unchanged). `--graded` mode composes per-dimension prompts via `scripts/lib/audit-prompt-builder.js`, calls an external model CLI for each of the seven scorecard dimensions, and writes evidence-backed verdicts into the artifact files replacing TODO placeholders. A deterministic mock grader ships at `scripts/lib/mock-grader.js` for CI smoke-tests |
|
|
14
|
+
|
|
15
|
+
## Priority Order
|
|
16
|
+
|
|
17
|
+
### 1. Manifest generation
|
|
18
|
+
|
|
19
|
+
Target file:
|
|
20
|
+
|
|
21
|
+
- `scripts/generate-manifest.js`
|
|
22
|
+
|
|
23
|
+
Purpose:
|
|
24
|
+
|
|
25
|
+
- walk `skills/**/SKILL.md`
|
|
26
|
+
- parse frontmatter
|
|
27
|
+
- normalize activation, relations, portability, and health fields
|
|
28
|
+
- output `skills.manifest.json`
|
|
29
|
+
- validate against `schemas/manifest.schema.json`
|
|
30
|
+
|
|
31
|
+
Minimum output:
|
|
32
|
+
|
|
33
|
+
- `schema_version`
|
|
34
|
+
- `generated_at`
|
|
35
|
+
- `summary`
|
|
36
|
+
- `skills[]`
|
|
37
|
+
|
|
38
|
+
A hand-written sample manifest showing the exact output shape ships today at `examples/skills.manifest.sample.json`.
|
|
39
|
+
|
|
40
|
+
### 2. Skill lint (SHIPPED)
|
|
41
|
+
|
|
42
|
+
Target file:
|
|
43
|
+
|
|
44
|
+
- `scripts/skill-lint.js`
|
|
45
|
+
|
|
46
|
+
Shipping today. Covers:
|
|
47
|
+
|
|
48
|
+
1. required fields present and well-typed
|
|
49
|
+
2. valid `type` enum
|
|
50
|
+
3. valid `scope` enum
|
|
51
|
+
4. `extends` required for overlays (schema conditional)
|
|
52
|
+
5. `grounding` required for `scope: codebase` (schema conditional)
|
|
53
|
+
6. relation targets (`adjacent`, `boundary`, `verify_with`, `depends_on`) exist as sibling skills
|
|
54
|
+
7. parent directory name matches the authored `name` (SKILL.md compatibility)
|
|
55
|
+
8. `eval_artifacts: present` is backed by a real eval file under `examples/evals/`
|
|
56
|
+
|
|
57
|
+
Run with `node scripts/skill-lint.js` (see `README.md § Validation`). Exit 0 on success, 1 on any failure.
|
|
58
|
+
|
|
59
|
+
Planned extensions:
|
|
60
|
+
|
|
61
|
+
- flag deprecated or legacy contract usage
|
|
62
|
+
- stricter SKILL.md name pattern mode (reject `/` and `:`)
|
|
63
|
+
- integration with `generate-manifest.js` for combined health reporting
|
|
64
|
+
|
|
65
|
+
### 3. Audit runner (SHIPPED)
|
|
66
|
+
|
|
67
|
+
Target file:
|
|
68
|
+
|
|
69
|
+
- `scripts/skill-audit.js`
|
|
70
|
+
|
|
71
|
+
Purpose:
|
|
72
|
+
|
|
73
|
+
- audit one skill at a time using `SKILL_AUDIT_CHECKLIST.md`
|
|
74
|
+
- write findings, verdict, and scorecard artifacts
|
|
75
|
+
- optionally run deterministic validation after fixes
|
|
76
|
+
|
|
77
|
+
Shipping today. Two modes:
|
|
78
|
+
|
|
79
|
+
1. **Stub mode** (default) — runs `scripts/skill-lint.js` and seeds `audits/<skill>/{findings,verdict,scorecard}.md` with lint-derived findings and human-TODO placeholders for the seven qualitative dimensions.
|
|
80
|
+
2. **`--graded` mode** — on top of the stub, composes per-dimension prompts via `scripts/lib/audit-prompt-builder.js` and calls an external model CLI (`--grader-cli`, default `claude -p`) once per dimension. Each response must return a `<verdict>…</verdict>` JSON block matching the fixed schema (dimension / score / verdict / justification / findings[]). The runner parses, validates, and merges these into the artifact files, replacing TODO placeholders with structured PASS / PASS WITH FIXES / FAIL verdicts with evidence quotes.
|
|
81
|
+
|
|
82
|
+
Related files:
|
|
83
|
+
|
|
84
|
+
- `scripts/lib/audit-prompt-builder.js` — dimension registry, context collector, prompt composer, response parser, verdict aggregator
|
|
85
|
+
- `scripts/lib/mock-grader.js` — deterministic canned-response grader for CI smoke-tests and reproducible examples (prints fixed `<verdict>` blocks per dimension)
|
|
86
|
+
|
|
87
|
+
Grader CLI discipline: the runner NEVER embeds API keys. Auth is delegated to the external CLI on the host (see `.claude/rules/cli-first.md`). `--grader-cli "claude -p"` and `--grader-cli "codex exec"` both work when the respective CLIs are authenticated.
|
|
88
|
+
|
|
89
|
+
## Suggested Follow-on Scripts
|
|
90
|
+
|
|
91
|
+
After the first 5 scripts exist (all Shipping as of 2026-04-17), the next useful additions are:
|
|
92
|
+
|
|
93
|
+
1. `scripts/skill-overlap.js` — detect semantic and scope-range overlap between skills
|
|
94
|
+
2. `scripts/skill-router.js` — simulate routing decisions against a test corpus
|
|
95
|
+
3. `scripts/build-coverage.js` — build-time coverage report (keywords × triggers × archetypes)
|
|
96
|
+
4. Export transforms for `cursor`, `windsurf`, `copilot`, or `agents-md` targets — removed from scope in 0.3.0. Re-add via RFC + the PR that ships the transform.
|
|
97
|
+
|
|
98
|
+
## Non-Goals For The First Cut
|
|
99
|
+
|
|
100
|
+
Do not build these first:
|
|
101
|
+
|
|
102
|
+
- telemetry dashboards
|
|
103
|
+
- model-specific grading infrastructure
|
|
104
|
+
- marketplace packaging layers
|
|
105
|
+
- runtime execution or skill hosting
|
|
106
|
+
|
|
107
|
+
These are useful later. They are not required for a credible starter toolchain around Skill Metadata Protocol.
|