@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,443 @@
|
|
|
1
|
+
# Manifest Field Mapping
|
|
2
|
+
|
|
3
|
+
> **Scope.** This document is the authored-to-generated bridge for Skill Graph: it specifies exactly how every top-level field in a `SKILL.md` frontmatter block projects into the compiled `skills.manifest.json` that downstream tooling consumes.
|
|
4
|
+
>
|
|
5
|
+
> **Audience.** Authors of manifest generators and consumers of the manifest. If you are authoring a skill itself, read [`SKILL_METADATA_PROTOCOL.md`](https://github.com/jacob-balslev/skill-metadata-protocol) and [`docs/field-reference.md`](field-reference.md) instead. This document owns the transformation from authored to generated.
|
|
6
|
+
>
|
|
7
|
+
> **Authority.** `schemas/skill.schema.json` is the authored schema. `schemas/manifest.schema.json` is the generated manifest schema. This document explains the mapping between them and may not contradict either schema.
|
|
8
|
+
|
|
9
|
+
## Related documents
|
|
10
|
+
|
|
11
|
+
- [`SKILL_METADATA_PROTOCOL.md`](https://github.com/jacob-balslev/skill-metadata-protocol) — normative public spec for the authored `SKILL.md` protocol.
|
|
12
|
+
- [`docs/field-reference.md`](field-reference.md) — per-field authoring reference.
|
|
13
|
+
- [`docs/skill-metadata-protocol.md`](skill-metadata-protocol.md) — rationale and deep explanation.
|
|
14
|
+
- [`schemas/skill.schema.json`](../schemas/skill.schema.json) — enforceable JSON Schema for authored frontmatter.
|
|
15
|
+
- [`schemas/manifest.schema.json`](../schemas/manifest.schema.json) — enforceable JSON Schema for the generated manifest.
|
|
16
|
+
- [`examples/skills.manifest.sample.json`](../examples/skills.manifest.sample.json) — sample manifest showing the generated shape for the current `skills/` library plus the template.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Rename Map
|
|
21
|
+
|
|
22
|
+
Every top-level authored field in `schemas/skill.schema.json` has exactly one entry below. The entry declares one of five fates:
|
|
23
|
+
|
|
24
|
+
| Fate | Meaning |
|
|
25
|
+
|---|---|
|
|
26
|
+
| **copied through unchanged** | The field appears at the same top-level key in the manifest with the same shape. |
|
|
27
|
+
| **renamed but preserved** | The field appears in the manifest under a different key, with the same semantics. |
|
|
28
|
+
| **grouped under parent** | The field appears inside a manifest parent object (e.g. `health`, `activation`) rather than at the top level. |
|
|
29
|
+
| **dropped intentionally** | The field does not appear in the manifest. Loss policy explains why. |
|
|
30
|
+
| **generated only** | The manifest key is produced by the generator, not copied from authored frontmatter. |
|
|
31
|
+
|
|
32
|
+
### Top-level authored fields (v4 canonical fields plus compatibility aliases)
|
|
33
|
+
|
|
34
|
+
| # | Authored field | Fate | Manifest projection |
|
|
35
|
+
|---|---|---|---|
|
|
36
|
+
| 1 | `schema_version` | copied through unchanged | Manifest-level `schema_version` at the root; not repeated per skill. |
|
|
37
|
+
| 2 | `name` | copied through unchanged, with generated alias | Per-skill `name` plus generated `id`. |
|
|
38
|
+
| 3 | `urn` | copied through unchanged | Optional persistent identifier. |
|
|
39
|
+
| 4 | `description` | copied through unchanged | `description`. |
|
|
40
|
+
| 5 | `version` | copied through unchanged | `version`. |
|
|
41
|
+
| 6 | `type` | copied through unchanged | `type`. |
|
|
42
|
+
| 7 | `archetype` | copied through unchanged | Compatibility alias for `type`; duplicate declarations must match. |
|
|
43
|
+
| 8 | `category` | copied through unchanged | Flat browse shelf. v4 rename of v3 `browse_category`. |
|
|
44
|
+
| 9 | `domain` | copied through unchanged | Optional slash-delimited domain path. v4 rename of v3 `category` / `category_path`. |
|
|
45
|
+
| 10 | `scope` | copied through unchanged | `scope`. |
|
|
46
|
+
| 11 | `owner` | copied through unchanged | `owner`. |
|
|
47
|
+
| 12 | `freshness` | grouped under parent | `health.freshness`. |
|
|
48
|
+
| 13 | `reviewed_at` | grouped under parent | `health.reviewed_at`; compatibility alias for `freshness`. |
|
|
49
|
+
| 14 | `drift_check` | grouped under parent | `health.drift_check`. |
|
|
50
|
+
| 15 | `eval_artifacts` | grouped under parent | `health.eval_artifacts`. |
|
|
51
|
+
| 16 | `eval_state` | grouped under parent | `health.eval_state`. |
|
|
52
|
+
| 17 | `routing_eval` | grouped under parent | `health.routing_eval`. |
|
|
53
|
+
| 18 | `comprehension_state` | grouped under parent | `health.comprehension_state`. |
|
|
54
|
+
| 19 | `concept` | copied through unchanged | `concept`; required when `comprehension_state: present`. |
|
|
55
|
+
| 20 | `eval_last_run` | grouped under parent | `health.eval_last_run`. |
|
|
56
|
+
| 21 | `eval` | grouped under parent | `health.eval`; nested compatibility form for the eval-health fields. |
|
|
57
|
+
| 22 | `stability` | copied through unchanged | `stability`. |
|
|
58
|
+
| 23 | `superseded_by` | copied through unchanged | `superseded_by`. |
|
|
59
|
+
| 24 | `license` | copied through unchanged | `license`. |
|
|
60
|
+
| 25 | `compatibility` | copied through unchanged | `compatibility`. |
|
|
61
|
+
| 26 | `allowed-tools` | copied through unchanged | `allowed-tools`. |
|
|
62
|
+
| 27 | `allowed_tools` | copied through unchanged | `allowed_tools`; compatibility alias for `allowed-tools`. |
|
|
63
|
+
| 28 | `extends` | copied through unchanged | `extends`. |
|
|
64
|
+
| 29 | `triggers` | grouped under parent | `activation.triggers`. |
|
|
65
|
+
| 30 | `keywords` | grouped under parent | `activation.keywords`. |
|
|
66
|
+
| 31 | `examples` | grouped under parent | `activation.examples`. |
|
|
67
|
+
| 32 | `anti_examples` | grouped under parent | `activation.anti_examples`. |
|
|
68
|
+
| 33 | `paths` | grouped under parent | `activation.paths`. |
|
|
69
|
+
| 34 | `workspace_tags` | copied through unchanged | Authored workspace/project relevance tags. v4 rename of v3 `project_tags`. |
|
|
70
|
+
| 35 | `routing_bundles` | copied through unchanged | Activation-bundle tags. v4 rename of v3 `routing_groups`. |
|
|
71
|
+
| 36 | `relations` | copied through unchanged | `relations`. |
|
|
72
|
+
| 37 | `grounding` | copied through unchanged | `grounding`. |
|
|
73
|
+
| 38 | `portability` | copied through unchanged | `portability`. |
|
|
74
|
+
| 39 | `lifecycle` | grouped under parent | `health.lifecycle`. |
|
|
75
|
+
| 40 | `runtime_telemetry` | grouped under parent | `health.runtime_telemetry`. |
|
|
76
|
+
| 41 | `last_audited` | grouped under parent | `health.last_audited`. v6 Health Block field — ISO date the `audit` command last ran. Pass-through from authored frontmatter. |
|
|
77
|
+
| 42 | `last_changed` | grouped under parent | `health.last_changed`. v6 Health Block field — ISO date the SKILL.md was last edited. Pass-through from authored frontmatter. |
|
|
78
|
+
| 43 | `audit_verdict` | grouped under parent | `health.audit_verdict`. v6 Health Block field — aggregate verdict of the most recent audit run (`PASS`, `PASS_WITH_FIXES`, `PARTIAL`, `FAIL`, `UNKNOWN`). Pass-through from authored frontmatter. |
|
|
79
|
+
| 44 | `eval_score` | grouped under parent | `health.eval_score`. v6 Health Block field — latest aggregate eval grade (0.0–5.0). Pass-through from authored frontmatter. |
|
|
80
|
+
| 45 | `eval_failed_ids` | grouped under parent | `health.eval_failed_ids`. v6 Health Block field — eval IDs that failed in the most recent run. Pass-through from authored frontmatter. |
|
|
81
|
+
| 46 | `lint_verdict` | grouped under parent | `health.lint_verdict`. v6 Health Block field — result of the most recent lint pass (`PASS`, `FAIL`, `UNKNOWN`). Pass-through from authored frontmatter. |
|
|
82
|
+
| 47 | `drift_status` | grouped under parent | `health.drift_status`. v6 Health Block field — current truth-source drift status sentinel. Pass-through from authored frontmatter. |
|
|
83
|
+
### Generated-only manifest fields
|
|
84
|
+
|
|
85
|
+
These fields exist in `skills.manifest.json` with no authored counterpart:
|
|
86
|
+
|
|
87
|
+
| Manifest field | Source |
|
|
88
|
+
|---|---|
|
|
89
|
+
| `generated_at` | Timestamp written by the manifest generator at compile time. |
|
|
90
|
+
| `workspace` | Echoed from `.skill-graph/config.json` when present — emits `skill_roots` and `projects` so consumers can resolve semantic tags without re-reading the config. New in v3. |
|
|
91
|
+
| `summary.total_skills` | Count of entries in `skills[]`. |
|
|
92
|
+
| `summary.by_type`, `summary.by_category`, `summary.by_scope`, `summary.by_stability`, `summary.by_project` | Rollup counts derived from the corresponding authored fields across all skills. `by_category` replaces v2's `by_family`; `by_project` is new in v3 and only present when workspace mode is active. |
|
|
93
|
+
| `skills[].id` | Stable identifier derived from `name`. Normalization rules live in the generator; `id` may be equal to `name` when no normalization is needed. |
|
|
94
|
+
| `skills[].path` | Repo-relative path to the source `SKILL.md` file, written by the generator when it reads the file. |
|
|
95
|
+
| `skills[].project` | Literal handle of the project root this skill was loaded from. Absent for skills loaded from a shared root without a project owner. New in v3. |
|
|
96
|
+
| `health.has_grounding` | Boolean flag — `true` when the authored frontmatter contains a `grounding` block, `false` otherwise. A convenience signal for consumers. |
|
|
97
|
+
| `health.has_relations` | Boolean flag — `true` when the authored frontmatter contains a non-empty `relations` block. |
|
|
98
|
+
| `health.drift_detected` | Boolean flag computed by the generator when `drift_check.truth_source_hashes` is present: `true` when any live truth source SHA-256 differs from the stored hash. Absent when no hashes are recorded. New in v3. |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Loss Policy
|
|
103
|
+
|
|
104
|
+
**Current state (2026-05-18, post-SH-6131):** no authored top-level fields are dropped during manifest generation. Every field in `schemas/skill.schema.json` has a manifest projection in `schemas/manifest.schema.json`. This parity is enforced by `scripts/check-protocol-consistency.js` (C2 check) — CI fails if `manifest.schema.json` drops a field declared in the authored contract without a matching entry in this document's loss policy.
|
|
105
|
+
|
|
106
|
+
The seven v6 Health Block fields (`last_audited`, `last_changed`, `audit_verdict`, `eval_score`, `eval_failed_ids`, `lint_verdict`, `drift_status`) were added to the authored schema in commit `ecaf001` (v6 Health Block addition) but were not registered in the manifest schema or this mapping document until SH-6131 (2026-05-18). They are now flow-through fields grouped under `health.*` in the manifest, matching the pattern of other governance fields (`freshness`, `drift_check`, `eval_artifacts`, etc.).
|
|
107
|
+
|
|
108
|
+
### Previously dropped, now restored
|
|
109
|
+
|
|
110
|
+
Four Agent-Skills base-standard fields and one Skill Graph classification field were previously treated as authored-only and dropped during manifest generation. SH-5776 (commit `8791558`, 2026-04-17) restored all five to flow-through.
|
|
111
|
+
|
|
112
|
+
| Field | Prior fate | Reason for restoration |
|
|
113
|
+
|---|---|---|
|
|
114
|
+
| `license` | Dropped as "per-repo, not per-skill" | SKILL.md compatibility. Downstream runtimes that consume the manifest need the license metadata to decide whether they may execute a skill. Per-skill overrides are legitimate when a repo mixes skills under different licenses. |
|
|
115
|
+
| `compatibility` | Dropped as "belongs in a separate spec" | SKILL.md compatibility. The compatibility string declares runtime or environment requirements (e.g. `Markdown, YAML, JSON Schema` or `Python 3.11+`). Consumers route based on this. Without flow-through, consumers would have to re-parse the authored source. |
|
|
116
|
+
| `allowed-tools` | Dropped as "a runtime concern, not metadata" | SKILL.md compatibility. The base standard defines `allowed-tools` as a frontmatter field that sandboxes tool use. The manifest is the canonical feed for runtime consumers; stripping `allowed-tools` would force consumers back to the authored file, defeating the purpose of compiling a manifest. |
|
|
117
|
+
| `routing_bundles` (v1 name: `route_groups`) | Dropped as "superseded by `relations`" | Relations and routing groups encode different semantics. `relations` declares per-skill adjacencies; `routing_bundles` declares a classification tag (e.g. `quality`, `security`) that a routing layer can use to pick a skill family. They are complementary, not overlapping, and the router layer needs both. Field renamed to `routing_groups` in schema_version 2 (SH-5784), then to `routing_bundles` in schema_version 4. |
|
|
118
|
+
| `domain_object` (inside `grounding`) | Dropped from the required-field set during an earlier schema tightening | Grounded skills anchor to a specific domain object (e.g. "Shopify order reconciliation," "Skill authoring for the Skill Metadata Protocol frontmatter"). Consumers use `domain_object` to decide whether a skill matches a task's subject. Dropping it left grounded skills ungrounded to consumers. SH-5776 restored it as a required sub-field. |
|
|
119
|
+
|
|
120
|
+
### Current dropped-field list
|
|
121
|
+
|
|
122
|
+
| Field | Reason for drop | Recovery path (if ever needed) |
|
|
123
|
+
|---|---|---|
|
|
124
|
+
| *(none as of 2026-04-17)* | — | — |
|
|
125
|
+
|
|
126
|
+
If a future change drops a field, the drop must be documented in this section with three pieces of information: (1) why the field is dropped, (2) which tool or transform could reconstruct it if a consumer later needs it, and (3) the ticket or commit that authorized the drop. `scripts/skill-lint.js` checks that every field declared in `schemas/skill.schema.json` either appears in `schemas/manifest.schema.json` or has a row in this table.
|
|
127
|
+
|
|
128
|
+
### Loss-policy parity rule
|
|
129
|
+
|
|
130
|
+
The contract between authored and generated schemas is intentionally symmetric:
|
|
131
|
+
|
|
132
|
+
- Every field in `schemas/skill.schema.json` must either appear in `schemas/manifest.schema.json` or appear in the current dropped-field list above.
|
|
133
|
+
- Every field in `schemas/manifest.schema.json` must either have an authored source in the rename map above or be declared in "Generated-only manifest fields."
|
|
134
|
+
- `scripts/skill-lint.js` enforces both directions. CI fails if either side drifts.
|
|
135
|
+
|
|
136
|
+
This parity is what lets downstream consumers trust the manifest as the complete projection of the authored frontmatter. Without it, a consumer reading only the manifest would have to re-parse the authored source to recover dropped fields, defeating the entire point of compiling a manifest.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Migration Policy
|
|
141
|
+
|
|
142
|
+
The manifest schema evolves independently of the authored skill schema. Both use semver but track different contracts.
|
|
143
|
+
|
|
144
|
+
### Version surfaces
|
|
145
|
+
|
|
146
|
+
Three versions coexist in a manifest ecosystem:
|
|
147
|
+
|
|
148
|
+
| Version | Lives in | Meaning |
|
|
149
|
+
|---|---|---|
|
|
150
|
+
| Authored skill `version` | Per-skill frontmatter `version` field | Version of the skill's content (e.g. `1.2.0` means the skill has been iterated twice since its initial publish). |
|
|
151
|
+
| Authored schema version | Per-skill frontmatter `schema_version` field | Version of the `skill.schema.json` contract the skill was authored against. Currently `4` after the v4 naming cleanup. |
|
|
152
|
+
| Manifest schema version | Manifest root `schema_version` field | Version of the `manifest.schema.json` contract the manifest was generated against. Currently `4`. |
|
|
153
|
+
|
|
154
|
+
### When to bump `schema_version`
|
|
155
|
+
|
|
156
|
+
The manifest `schema_version` follows semver on the consumer contract:
|
|
157
|
+
|
|
158
|
+
| Change type | Semver bump | Example |
|
|
159
|
+
|---|---|---|
|
|
160
|
+
| New optional field added to manifest | patch | Adding an optional `health.last_audit_run` timestamp. |
|
|
161
|
+
| Existing field becomes optional (was required) | minor | Relaxing `owner` to optional for skills without a declared owner. |
|
|
162
|
+
| Existing optional field becomes required | **major** | Requiring `portability` on every skill. |
|
|
163
|
+
| Field renamed or removed | **major** | Renaming `grounding` back to `domain_frame`, renaming `grounding_mode` back to `evaluation_mode`, or dropping `allowed-tools`. |
|
|
164
|
+
| Field shape changed (e.g. string → object) | **major** | Changing `allowed-tools` from a space-separated string to an array. |
|
|
165
|
+
|
|
166
|
+
A major bump of the manifest `schema_version` does not force a major bump of the authored `skill.schema.json` — the two contracts evolve independently.
|
|
167
|
+
|
|
168
|
+
### How consumers handle version mismatches
|
|
169
|
+
|
|
170
|
+
Consumers that read `skills.manifest.json` should:
|
|
171
|
+
|
|
172
|
+
1. Read the root `schema_version` first.
|
|
173
|
+
2. If the version is higher than the consumer was built against, fall back to field-by-field introspection — new optional fields may be present that the consumer does not recognize, and unrecognized fields should be ignored rather than failing validation.
|
|
174
|
+
3. If the version is lower than the consumer was built against, the consumer may require a regeneration of the manifest against the newer schema. The generator is the source of truth for producing up-to-date manifests.
|
|
175
|
+
4. If a major version mismatch exists in either direction, the consumer should fail loudly rather than silently degrade — silent degradation masks schema drift.
|
|
176
|
+
|
|
177
|
+
### Migration path for major changes
|
|
178
|
+
|
|
179
|
+
When a major manifest schema change ships:
|
|
180
|
+
|
|
181
|
+
1. The new schema is published with its new `schema_version`.
|
|
182
|
+
2. `scripts/skill-lint.js` is updated to enforce the new contract.
|
|
183
|
+
3. A migration note lands in this document under a dated heading describing what changed and how consumers should adapt.
|
|
184
|
+
4. The old schema file remains accessible by version for consumers pinning to the old contract during their migration window.
|
|
185
|
+
|
|
186
|
+
### Migration Note — `domain_frame` → `grounding` and `evaluation_mode` → `grounding_mode` (2026-04-16, SH-5779)
|
|
187
|
+
|
|
188
|
+
The authored frontmatter field `domain_frame` has been renamed to `grounding`. Simultaneously, the sub-field `evaluation_mode` (inside the grounding block) has been renamed to `grounding_mode` — this sub-field describes the evidence source for a skill's claims (repo-specific, universal, or hybrid), not an execution mode, so the new name better expresses its intent. Both renames shipped under schema_version 1. The generated manifest projection has always used `grounding` as the key, so manifests generated before this change are unaffected at the manifest level; only the authored `SKILL.md` frontmatter format changed. `domain_frame` is rejected as an unknown field under the v2 schema via `additionalProperties: false`; authors should rename `domain_frame:` → `grounding:` and `evaluation_mode:` → `grounding_mode:` in their skill frontmatter. The generated `health.has_domain_frame` manifest flag has been renamed to `health.has_grounding` in the same change.
|
|
189
|
+
|
|
190
|
+
### Migration Note — v1 → v2 (2026-04-17, SH-5784)
|
|
191
|
+
|
|
192
|
+
Schema_version 2 is a breaking bump. Four coordinated renames ship together. The v1 field names are hard errors under the v2 schema (the schema's `additionalProperties: false` rejects them), and the old `scope` enum values are not in the v2 enum. Authors must migrate all four changes in one pass.
|
|
193
|
+
|
|
194
|
+
**1. `eval_status` (single overloaded enum) split into three orthogonal fields.**
|
|
195
|
+
|
|
196
|
+
The v1 `eval_status` compressed three orthogonal concerns — artifact state, runtime state, and routing coverage — into a single ordinal. Each axis now has its own field.
|
|
197
|
+
|
|
198
|
+
| v1 `eval_status` | v2 `eval_artifacts` | v2 `eval_state` | v2 `routing_eval` |
|
|
199
|
+
|---|---|---|---|
|
|
200
|
+
| `none` | `none` | `unverified` | `absent` |
|
|
201
|
+
| `pending` | `planned` | `unverified` | `absent` |
|
|
202
|
+
| `evals` | `present` | `passing` | `absent` |
|
|
203
|
+
| `passing` | `present` | `passing` | `absent` |
|
|
204
|
+
| `active` | `present` | `monitored` | `absent` |
|
|
205
|
+
| `evals+trigger` | `present` | `passing` | `present` |
|
|
206
|
+
|
|
207
|
+
All three v2 fields are required. The lint script verifies that `eval_artifacts: present` is backed by a real artifact under `examples/evals/` (the v1 `eval_status: evals` check moved to this field).
|
|
208
|
+
|
|
209
|
+
**2. `portability.level` → `portability.readiness` and `portability.exports` → `portability.targets`.**
|
|
210
|
+
|
|
211
|
+
`level` was an ordinal rating (`high`/`medium`/`low`) with no operational meaning. `readiness` is an operational axis that says something concrete about what is true of the skill today.
|
|
212
|
+
|
|
213
|
+
| v1 `portability.level` | v2 `portability.readiness` |
|
|
214
|
+
|---|---|
|
|
215
|
+
| `high` | `scripted` (if an export script covers at least one target) else `declared` |
|
|
216
|
+
| `medium` | `scripted` (if an export script covers at least one target) else `declared` |
|
|
217
|
+
| `low` | `declared` |
|
|
218
|
+
|
|
219
|
+
`portability.exports` was renamed to `portability.targets`. Values are unchanged. New `readiness` enum: `declared` (metadata claim only), `scripted` (export tooling exists), `verified` (tooling exists AND output has been verified with a receipt).
|
|
220
|
+
|
|
221
|
+
**3. `scope` values renamed.**
|
|
222
|
+
|
|
223
|
+
| v1 `scope` | v2 `scope` | Intent |
|
|
224
|
+
|---|---|---|
|
|
225
|
+
| `generic` | `portable` | The skill works in any codebase |
|
|
226
|
+
| `operational` | `codebase` | The skill is grounded in *this* codebase |
|
|
227
|
+
| `reference` | `reference` (unchanged) | Documentation-style skill |
|
|
228
|
+
|
|
229
|
+
The v1 names (`generic`, `operational`) are rejected as out-of-enum by the v2 schema.
|
|
230
|
+
|
|
231
|
+
**4. `route_groups` -> `routing_groups`.**
|
|
232
|
+
|
|
233
|
+
The field name was misleading — it suggested URL routing. The semantics are unchanged: a classification tag (e.g. `quality`, `security`) a routing layer can consult to pick a skill family. `routing_groups` made the intent explicit in v2; v4 later renamed the field to `routing_bundles`.
|
|
234
|
+
|
|
235
|
+
**Consumer impact.** The manifest projection shape changed in lockstep. Consumers that pin to v1 must regenerate against v2 or fall back to field-by-field introspection. The three health fields (`eval_artifacts`, `eval_state`, `routing_eval`) all appear under `health.*` in the manifest, parallel to the v1 `health.eval_status`.
|
|
236
|
+
|
|
237
|
+
### Migration Note — v2 → v3 (v0.4.0)
|
|
238
|
+
|
|
239
|
+
Schema_version 3 is a breaking bump. Four coordinated shape changes and one rename ship together, plus four new optional fields. The v2 field names are hard errors under the v3 schema (the schema's `additionalProperties: false` rejects them) and the old scalar shapes are rejected by the type constraints. Authors must migrate in one pass via `node scripts/migrate-skill-v2-to-v3.js`.
|
|
240
|
+
|
|
241
|
+
**1. `family` -> `browse_category` (rename; values unchanged).**
|
|
242
|
+
|
|
243
|
+
The v2 name invited misuse as a routing signal. The v3 name makes the browse-taxonomy intent explicit. Routing batch-activation remains `routing_groups`; hierarchical placement is the new optional `category` field.
|
|
244
|
+
|
|
245
|
+
**2. `drift_check` shape: date string → object.**
|
|
246
|
+
|
|
247
|
+
| v2 | v3 |
|
|
248
|
+
|---|---|
|
|
249
|
+
| `drift_check: "2026-04-15"` | `drift_check:`<br>` last_verified: "2026-04-15"` |
|
|
250
|
+
| (no evidence) | ` truth_source_hashes:`<br>` "src/foo.ts": "c2a4...64-char-hex..."`<br>` "src/foo.ts#L10-L40": "9d21...64-char-hex..."` |
|
|
251
|
+
|
|
252
|
+
The new `truth_source_hashes` map is optional but strongly recommended - it turns `drift_check` from a self-asserted date into evidence the drift sentinel (`scripts/skill-graph-drift.js`) verifies. Keys are normalized from `grounding.truth_sources`: `path`, `path#Lstart-Lend`, or `path#anchor`. Record hashes with `node scripts/skill-graph-drift.js --record --apply <skill-path>`.
|
|
253
|
+
|
|
254
|
+
**3. `compatibility` shape: free-text string → object.**
|
|
255
|
+
|
|
256
|
+
| v2 | v3 |
|
|
257
|
+
|---|---|
|
|
258
|
+
| `compatibility: "Node.js 18+, Git"` | `compatibility:`<br>` notes: "Node.js 18+, Git"` |
|
|
259
|
+
| — | `compatibility:`<br>` runtimes: [claude-code>=2.0]`<br>` node: ">=18"` |
|
|
260
|
+
|
|
261
|
+
The codemod drops the v2 string into `notes` unchanged. Authors upgrade to `runtimes` / `node` manually when the structured form is more accurate.
|
|
262
|
+
|
|
263
|
+
**4. `relations.boundary` and `relations.depends_on` item shape: string → `string | object`.**
|
|
264
|
+
|
|
265
|
+
v3 adds an object-item form to both:
|
|
266
|
+
|
|
267
|
+
```yaml
|
|
268
|
+
relations:
|
|
269
|
+
boundary:
|
|
270
|
+
- skill: fulfillment
|
|
271
|
+
reason: "fulfillment owns order state transitions"
|
|
272
|
+
depends_on:
|
|
273
|
+
- skill: api-key-management
|
|
274
|
+
min_version: "1.2.0"
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
The bare-string form remains valid (`- fulfillment`). The object form is opt-in per item. Not a breaking change for authors who keep bare strings; consumers must handle both shapes.
|
|
278
|
+
|
|
279
|
+
**5. New optional fields:** `category`, `project_tags`, `lifecycle`, `runtime_telemetry`. None are required. Omit them on existing skills until the added metadata is real.
|
|
280
|
+
|
|
281
|
+
**6. Workspace mode (new):** the generator now reads `.skill-graph/config.json` at the repo root. When `workspace.skill_roots` is declared, the generator walks every root, stamps each skill entry with a `project` field, and emits a top-level `workspace` block in the manifest echoing the config. Single-root mode (default `skills/`) continues to work unchanged.
|
|
282
|
+
|
|
283
|
+
**Summary table.**
|
|
284
|
+
|
|
285
|
+
| v2 field | v3 field | Type change |
|
|
286
|
+
|---|---|---|
|
|
287
|
+
| `family: <value>` | `browse_category: <value>` | rename only |
|
|
288
|
+
| `drift_check: "2026-04-15"` | `drift_check: { last_verified: "2026-04-15" }` | scalar → object |
|
|
289
|
+
| `compatibility: "<text>"` | `compatibility: { notes: "<text>" }` | scalar → object |
|
|
290
|
+
| `relations.boundary: [str]` | `relations.boundary: [str | {skill, reason}]` | extended (back-compat) |
|
|
291
|
+
| `relations.depends_on: [str]` | `relations.depends_on: [str | {skill, min_version}]` | extended (back-compat) |
|
|
292
|
+
|
|
293
|
+
**Consumer impact.** The manifest projection shape changed in lockstep. `health.drift_check` is now always an object; `compatibility` is always an object; `browse_category` replaces `family` at every reference (including `summary.by_browse_category` vs v2's `summary.by_family`). Consumers pinned to v2 must regenerate against v3 or continue using `schemas/manifest.v2.schema.json`.
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## Worked Example
|
|
298
|
+
|
|
299
|
+
The `skill-metadata-template` starter (`examples/skill-metadata-template.md`) is the canonical worked example because it exercises the widest set of fields — it is the only starter that populates `grounding`, `license`, `compatibility`, `allowed-tools`, and `portability` together with activation, relations, and all governance fields.
|
|
300
|
+
|
|
301
|
+
### Authored frontmatter (abridged to fields that transform)
|
|
302
|
+
|
|
303
|
+
```yaml
|
|
304
|
+
---
|
|
305
|
+
schema_version: 4
|
|
306
|
+
name: skill-metadata-template
|
|
307
|
+
description: "Authoring template for new Skill Metadata Protocol skills. ..."
|
|
308
|
+
version: 1.0.0
|
|
309
|
+
type: capability
|
|
310
|
+
category: knowledge
|
|
311
|
+
domain: skill-system/authoring
|
|
312
|
+
scope: reference
|
|
313
|
+
owner: maintainer
|
|
314
|
+
freshness: "2026-04-17"
|
|
315
|
+
drift_check:
|
|
316
|
+
last_verified: "2026-04-17"
|
|
317
|
+
eval_artifacts: planned
|
|
318
|
+
eval_state: unverified
|
|
319
|
+
routing_eval: absent
|
|
320
|
+
stability: stable
|
|
321
|
+
license: MIT
|
|
322
|
+
compatibility:
|
|
323
|
+
notes: Markdown, YAML, JSON Schema
|
|
324
|
+
allowed-tools: "Read Grep"
|
|
325
|
+
keywords:
|
|
326
|
+
- skill authoring
|
|
327
|
+
- skill template
|
|
328
|
+
triggers:
|
|
329
|
+
- skill-metadata-template
|
|
330
|
+
paths:
|
|
331
|
+
- examples/skill-metadata-template.md
|
|
332
|
+
- skills/**/SKILL.md
|
|
333
|
+
relations:
|
|
334
|
+
adjacent: [documentation]
|
|
335
|
+
boundary:
|
|
336
|
+
- skill: refactor
|
|
337
|
+
reason: "refactor is behavior-preserving code modification, not skill authoring"
|
|
338
|
+
verify_with: [documentation]
|
|
339
|
+
grounding:
|
|
340
|
+
domain_object: Skill authoring for the Skill Metadata Protocol frontmatter
|
|
341
|
+
grounding_mode: repo_specific
|
|
342
|
+
truth_sources:
|
|
343
|
+
- docs/skill-metadata-protocol.md
|
|
344
|
+
- schemas/skill.schema.json
|
|
345
|
+
failure_modes:
|
|
346
|
+
- placeholder_sludge
|
|
347
|
+
- cargo_cult_meta_sections
|
|
348
|
+
evidence_priority: repo_code_first
|
|
349
|
+
portability:
|
|
350
|
+
readiness: scripted
|
|
351
|
+
targets: [skill-md]
|
|
352
|
+
lifecycle:
|
|
353
|
+
stale_after_days: 180
|
|
354
|
+
review_cadence: quarterly
|
|
355
|
+
---
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Manifest projection
|
|
359
|
+
|
|
360
|
+
```json
|
|
361
|
+
{
|
|
362
|
+
"id": "skill-metadata-template",
|
|
363
|
+
"path": "examples/skill-metadata-template.md",
|
|
364
|
+
"name": "skill-metadata-template",
|
|
365
|
+
"description": "Authoring template for new Skill Metadata Protocol skills. ...",
|
|
366
|
+
"version": "1.0.0",
|
|
367
|
+
"type": "capability",
|
|
368
|
+
"category": "knowledge",
|
|
369
|
+
"domain": "skill-system/authoring",
|
|
370
|
+
"scope": "reference",
|
|
371
|
+
"owner": "maintainer",
|
|
372
|
+
"stability": "stable",
|
|
373
|
+
"license": "MIT",
|
|
374
|
+
"compatibility": { "notes": "Markdown, YAML, JSON Schema" },
|
|
375
|
+
"allowed-tools": "Read Grep",
|
|
376
|
+
"activation": {
|
|
377
|
+
"triggers": ["skill-metadata-template"],
|
|
378
|
+
"keywords": ["skill authoring", "skill template"],
|
|
379
|
+
"paths": ["examples/skill-metadata-template.md", "skills/**/SKILL.md"]
|
|
380
|
+
},
|
|
381
|
+
"relations": {
|
|
382
|
+
"adjacent": ["documentation"],
|
|
383
|
+
"boundary": [
|
|
384
|
+
{ "skill": "refactor", "reason": "refactor is behavior-preserving code modification, not skill authoring" }
|
|
385
|
+
],
|
|
386
|
+
"verify_with": ["documentation"]
|
|
387
|
+
},
|
|
388
|
+
"grounding": {
|
|
389
|
+
"domain_object": "Skill authoring for the Skill Metadata Protocol frontmatter",
|
|
390
|
+
"grounding_mode": "repo_specific",
|
|
391
|
+
"truth_sources": [
|
|
392
|
+
"docs/skill-metadata-protocol.md",
|
|
393
|
+
"schemas/skill.schema.json"
|
|
394
|
+
],
|
|
395
|
+
"failure_modes": ["placeholder_sludge", "cargo_cult_meta_sections"],
|
|
396
|
+
"evidence_priority": "repo_code_first"
|
|
397
|
+
},
|
|
398
|
+
"portability": {
|
|
399
|
+
"readiness": "scripted",
|
|
400
|
+
"targets": ["skill-md"]
|
|
401
|
+
},
|
|
402
|
+
"health": {
|
|
403
|
+
"eval_artifacts": "planned",
|
|
404
|
+
"eval_state": "unverified",
|
|
405
|
+
"routing_eval": "absent",
|
|
406
|
+
"freshness": "2026-04-17",
|
|
407
|
+
"drift_check": { "last_verified": "2026-04-17" },
|
|
408
|
+
"lifecycle": { "stale_after_days": 180, "review_cadence": "quarterly" },
|
|
409
|
+
"has_grounding": true,
|
|
410
|
+
"has_relations": true
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
### Annotated transformations
|
|
416
|
+
|
|
417
|
+
Each arrow corresponds to one row of the rename map.
|
|
418
|
+
|
|
419
|
+
- `name` → `id` **and** `name` — the generator writes both. `id` is the stable reference used by other manifest entries (e.g. `relations.adjacent: ["documentation"]` refers to the `id` of another skill). `name` remains human-readable for display.
|
|
420
|
+
- `name` → `path` — the generator records the source file path; this is the only way a consumer can trace a manifest entry back to its authored source without re-scanning the repo.
|
|
421
|
+
- `description`, `version`, `type`, `category`, `scope`, `owner`, `stability` — straight copies, same keys, same shape. (v2 `family` was renamed to `browse_category` in v3, then to `category` in v4 — see § Migration Note — v2 → v3.)
|
|
422
|
+
- `license`, `compatibility`, `allowed-tools` — straight copies (post-SH-5776). The three SKILL.md base-standard optional fields flow through unchanged; a consumer that only speaks SKILL.md sees them at the expected keys.
|
|
423
|
+
- `triggers`, `keywords`, `paths` → `activation.triggers`, `activation.keywords`, `activation.paths` — three sibling authored fields are grouped under a single `activation` object. This matches the semantic: they are all activation signals. The grouping is a presentation choice, not a loss.
|
|
424
|
+
- `relations` → `relations` — copied through with the full sub-key set (`adjacent`, `related`, `broader`, `narrower`, `boundary`, `disjoint_with`, `verify_with`, `depends_on`). Same shape on both sides.
|
|
425
|
+
- `grounding` → `grounding` — copied through unchanged. The authored field was renamed from `domain_frame` to `grounding` in SH-5779 (2026-04-16), aligning the authored field name with its long-standing manifest projection key. The internal sub-field `evaluation_mode` was renamed to `grounding_mode` in the same change — the field describes the evidence source, not the execution mode.
|
|
426
|
+
- `portability` → `portability` — copied through with the v2 sub-key set (`readiness`, `targets`). Renamed from v1 (`level`, `exports`) in SH-5784.
|
|
427
|
+
- `freshness`, `drift_check`, `eval_artifacts`, `eval_state`, `routing_eval` → `health.freshness`, `health.drift_check`, `health.eval_artifacts`, `health.eval_state`, `health.routing_eval` — five sibling governance fields are grouped under a single `health` object. The three eval-health fields replaced the v1 `health.eval_status` in SH-5784. `has_grounding` and `has_relations` are generated boolean flags that summarize presence of the corresponding authored blocks, so a consumer can filter on "grounded skills" without re-parsing the full `grounding` object.
|
|
428
|
+
|
|
429
|
+
### What is deliberately absent from the projection
|
|
430
|
+
|
|
431
|
+
`schema_version` appears only at the manifest root (as `4` in the current manifest), not inside each skill entry — manifest-level schema versioning tracks the manifest contract, and per-skill `schema_version` from the authored frontmatter is absorbed into that root value. If a future manifest supports multiple authored schema versions simultaneously, `skills[].schema_version` would become a flow-through field; today it is not, because every skill in a given manifest is bound to a single authored schema version by assumption.
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## Verification
|
|
436
|
+
|
|
437
|
+
After a generator change or a schema change, verify:
|
|
438
|
+
|
|
439
|
+
- [ ] Every top-level field in `schemas/skill.schema.json` appears in either the rename map above or the current dropped-field list.
|
|
440
|
+
- [ ] Every field in `schemas/manifest.schema.json` appears in either the rename map or the "Generated-only manifest fields" list.
|
|
441
|
+
- [ ] The worked example's JSON projection can be regenerated from its YAML frontmatter by applying only the transforms declared in the rename map.
|
|
442
|
+
- [ ] `node scripts/skill-lint.js --include-template` exits 0 on the shipped template.
|
|
443
|
+
- [ ] `examples/skills.manifest.sample.json` still matches the projection rules when regenerated from the current `skills/` library plus the template.
|