@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,827 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://skillgraph.dev/schemas/skill.v3.schema.json",
|
|
4
|
+
"title": "Skill Graph Skill Frontmatter (v3, pinned)",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schema_version",
|
|
9
|
+
"name",
|
|
10
|
+
"description",
|
|
11
|
+
"version",
|
|
12
|
+
"type",
|
|
13
|
+
"browse_category",
|
|
14
|
+
"scope",
|
|
15
|
+
"owner",
|
|
16
|
+
"freshness",
|
|
17
|
+
"drift_check",
|
|
18
|
+
"eval_artifacts",
|
|
19
|
+
"eval_state",
|
|
20
|
+
"routing_eval"
|
|
21
|
+
],
|
|
22
|
+
"properties": {
|
|
23
|
+
"schema_version": {
|
|
24
|
+
"oneOf": [
|
|
25
|
+
{
|
|
26
|
+
"type": "integer",
|
|
27
|
+
"const": 3
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"type": "string",
|
|
31
|
+
"const": "3"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"description": "Major contract shape version. Integer for v3+; string '3' tolerated for back-compat with hand-rolled YAML. Bumps when shape changes break consumers (additive minor changes do not bump). v4 is the next breaking-change horizon — see CHANGELOG.md and docs/skill-metadata-protocol.md § Schema Versioning Policy."
|
|
35
|
+
},
|
|
36
|
+
"name": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"pattern": "^[a-z0-9][a-z0-9-/:]*$",
|
|
39
|
+
"description": "Stable display-layer skill identifier. Lowercase kebab-case; allows `/` and `:` for hierarchical/namespaced names. Must equal the parent directory name (skills/<name>/SKILL.md). The URN at `urn` is the long-term globally-unique identifier; `name` is the local handle."
|
|
40
|
+
},
|
|
41
|
+
"urn": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"pattern": "^urn:skill:[a-z0-9][a-z0-9-]*:[a-z0-9][a-z0-9-/:]*$",
|
|
44
|
+
"description": "Optional globally-unique persistent identifier in the `urn:skill:<repo>:<skill-name>` form (RFC 8141). Consumers treat the URN as the stable identity across repos and federated registries; `name` is the display-layer handle. The `<skill-name>` segment MUST equal the `name` field."
|
|
45
|
+
},
|
|
46
|
+
"description": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"description": "The routing contract: tells a router whether this skill should activate for a given query. Pushy, specific, boundary-aware. Should include an explicit negative boundary so the router does not over-activate. No protocol length cap."
|
|
49
|
+
},
|
|
50
|
+
"version": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$",
|
|
53
|
+
"description": "Skill content version (semver). Bumps when the SKILL.md body or contract changes meaningfully. Distinct from `schema_version` (the contract shape). Used by `relations.depends_on` for `min_version` constraints."
|
|
54
|
+
},
|
|
55
|
+
"type": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"enum": [
|
|
58
|
+
"capability",
|
|
59
|
+
"workflow",
|
|
60
|
+
"router",
|
|
61
|
+
"overlay"
|
|
62
|
+
],
|
|
63
|
+
"description": "Archetype classifier — what kind of skill this is. `capability` (knows how to do something), `workflow` (orchestrates a sequence), `router` (dispatches to other skills), `overlay` (specialises a parent via `extends`). `archetype` is the v3.1 preferred alias and becomes canonical in v4."
|
|
64
|
+
},
|
|
65
|
+
"archetype": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"enum": [
|
|
68
|
+
"capability",
|
|
69
|
+
"workflow",
|
|
70
|
+
"router",
|
|
71
|
+
"overlay"
|
|
72
|
+
],
|
|
73
|
+
"description": "Archetype classifier (v3.1 preferred alias for `type`). When both are present they must match. Becomes canonical in v4."
|
|
74
|
+
},
|
|
75
|
+
"browse_category": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"description": "Flat human browse bucket (e.g., knowledge, engineering, quality). For hierarchical taxonomy use `category` instead."
|
|
78
|
+
},
|
|
79
|
+
"category": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"pattern": "^[a-z0-9][a-z0-9-]*(/[a-z0-9][a-z0-9-]*)*$",
|
|
82
|
+
"description": "Hierarchical browse path using slash-delimited segments (e.g., `ecommerce/integrations/shopify`). Complements `browse_category`; flat vs tree answer different questions. `category_path` is the v3.1 preferred alias and becomes canonical in v4."
|
|
83
|
+
},
|
|
84
|
+
"category_path": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"pattern": "^[a-z0-9][a-z0-9-]*(/[a-z0-9][a-z0-9-]*)*$",
|
|
87
|
+
"description": "Hierarchical browse path (v3.1 preferred alias for `category`). Slash-delimited segments. Becomes canonical in v4."
|
|
88
|
+
},
|
|
89
|
+
"scope": {
|
|
90
|
+
"type": "string",
|
|
91
|
+
"enum": [
|
|
92
|
+
"codebase",
|
|
93
|
+
"reference",
|
|
94
|
+
"portable"
|
|
95
|
+
],
|
|
96
|
+
"description": "Where this skill applies. `codebase` — coupled to a specific repo's code/conventions; `reference` — pure knowledge (no repo coupling); `portable` — repo-agnostic patterns. Drives multi-project overlay decisions and informs the router's project-fit check."
|
|
97
|
+
},
|
|
98
|
+
"owner": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"description": "Maintainer or team accountable for keeping this skill correct. Free-form string; conventional values: `skill-graph-maintainer`, GitHub team handles, individual usernames. Used by drift-check workflows to route review requests."
|
|
101
|
+
},
|
|
102
|
+
"freshness": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"format": "date",
|
|
105
|
+
"description": "ISO date (YYYY-MM-DD) of the last meaningful content review. The author's claim that the skill was current as of this date. Complemented by `drift_check.truth_source_hashes` for grounded skills. `reviewed_at` is the v3.1 preferred alias and becomes canonical in v4."
|
|
106
|
+
},
|
|
107
|
+
"reviewed_at": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"format": "date",
|
|
110
|
+
"description": "ISO date (YYYY-MM-DD) of the last meaningful content review (v3.1 preferred alias for `freshness`). When both are present they must match. Becomes canonical in v4."
|
|
111
|
+
},
|
|
112
|
+
"drift_check": {
|
|
113
|
+
"type": "object",
|
|
114
|
+
"additionalProperties": false,
|
|
115
|
+
"required": [
|
|
116
|
+
"last_verified"
|
|
117
|
+
],
|
|
118
|
+
"properties": {
|
|
119
|
+
"last_verified": {
|
|
120
|
+
"type": "string",
|
|
121
|
+
"format": "date",
|
|
122
|
+
"description": "ISO date of the last verification against truth sources. Authored claim. `verified_at` is the v3.1 preferred alias and becomes canonical in v4."
|
|
123
|
+
},
|
|
124
|
+
"verified_at": {
|
|
125
|
+
"type": "string",
|
|
126
|
+
"format": "date",
|
|
127
|
+
"description": "ISO date of the last verification against truth sources (v3.1 preferred alias for `last_verified`). When both are present they must match. Becomes canonical in v4."
|
|
128
|
+
},
|
|
129
|
+
"truth_source_hashes": {
|
|
130
|
+
"type": "object",
|
|
131
|
+
"description": "Map of normalized truth source key to SHA-256 hex digest at the time of last verification. Keys are `path` for whole-file sources, `path#Lstart-Lend` for line ranges, and `path#anchor` for anchor-only sources. Evidence that complements the `last_verified` claim. Computed by `node scripts/skill-graph-drift.js --record --apply <skill-path>`.",
|
|
132
|
+
"additionalProperties": {
|
|
133
|
+
"type": "string",
|
|
134
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"description": "Drift-detection record for grounded skills. `last_verified` is the author's claim; `truth_source_hashes` is content-addressable evidence keyed by each normalized `grounding.truth_sources` entry. Whole-file sources hash normalized file content; line-range sources hash only the cited slice; anchor-only sources hash the resolved Markdown section or literal text. The combination lets `scripts/skill-graph-drift.js` detect when underlying truth has changed without an accompanying review."
|
|
139
|
+
},
|
|
140
|
+
"eval_artifacts": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"enum": [
|
|
143
|
+
"none",
|
|
144
|
+
"planned",
|
|
145
|
+
"present"
|
|
146
|
+
],
|
|
147
|
+
"description": "Are eval artifacts present on disk for this skill? `none` (no evals planned), `planned` (eval intent declared but not yet shipped), `present` (eval JSON exists at `evals/<skill>.json` or similar). Lint enforces the `present` claim by requiring a real file. The `planned` state has a staleness guard — see lint check 6."
|
|
148
|
+
},
|
|
149
|
+
"eval_state": {
|
|
150
|
+
"type": "string",
|
|
151
|
+
"enum": [
|
|
152
|
+
"unverified",
|
|
153
|
+
"passing",
|
|
154
|
+
"monitored"
|
|
155
|
+
],
|
|
156
|
+
"description": "What does the eval say about content quality? `unverified` (no eval has run), `passing` (last run passed), `monitored` (eval runs on a cadence and is currently passing). Independent of `routing_eval` (the routing-coverage axis). Use to express content-level quality grading orthogonal to routing coverage."
|
|
157
|
+
},
|
|
158
|
+
"routing_eval": {
|
|
159
|
+
"type": "string",
|
|
160
|
+
"enum": [
|
|
161
|
+
"absent",
|
|
162
|
+
"present"
|
|
163
|
+
],
|
|
164
|
+
"description": "Is routing / trigger coverage explicitly evaluated? `absent` (router behaviour is not part of the eval set), `present` (the skill's `examples[]` and `anti_examples[]` pass `scripts/skill-graph-routing-eval.js`). When `present`, lint check 12 requires the harness to agree. Honesty over green checkmarks — flip to `present` only after the harness PASSes. The nested `eval.routing_coverage` is the v3.1 preferred alias."
|
|
165
|
+
},
|
|
166
|
+
"comprehension_state": {
|
|
167
|
+
"type": "string",
|
|
168
|
+
"enum": [
|
|
169
|
+
"absent",
|
|
170
|
+
"present"
|
|
171
|
+
],
|
|
172
|
+
"description": "Does this skill carry a comprehension eval (typically `evals/comprehension.json`) and a `concept` block authored for the 7-dimension comprehension grader? `absent` (no comprehension grading), `present` (comprehension evals exist; the `concept` block is required by the allOf rule). Optional in v3 — omitted means `absent`. Independent of `routing_eval` (router-level) and `eval_state` (content-level). The nested `eval.comprehension_state` is the v3.1 preferred alias."
|
|
173
|
+
},
|
|
174
|
+
"concept": {
|
|
175
|
+
"type": "object",
|
|
176
|
+
"additionalProperties": false,
|
|
177
|
+
"required": [
|
|
178
|
+
"definition",
|
|
179
|
+
"mental_model",
|
|
180
|
+
"purpose",
|
|
181
|
+
"boundary",
|
|
182
|
+
"taxonomy",
|
|
183
|
+
"analogy",
|
|
184
|
+
"misconception"
|
|
185
|
+
],
|
|
186
|
+
"properties": {
|
|
187
|
+
"definition": {
|
|
188
|
+
"type": "string",
|
|
189
|
+
"description": "What the concept IS. Primary category + what it does + who uses it. A domain outsider should understand. Author as deeply as the concept requires — there is no protocol length cap. Graded by the comprehension grader's `definition` dimension (weight 1.0)."
|
|
190
|
+
},
|
|
191
|
+
"mental_model": {
|
|
192
|
+
"type": "string",
|
|
193
|
+
"description": "Primitives and their relationships. Name primitives and the relationships between them. Markdown permitted inside the string. Author with the depth the concept needs — there is no protocol length cap. Graded by the comprehension grader's `mental_model` dimension (weight 1.5)."
|
|
194
|
+
},
|
|
195
|
+
"purpose": {
|
|
196
|
+
"type": "string",
|
|
197
|
+
"description": "What problem the concept solves and the alternative it replaced. Concrete pain point + prior alternative. No protocol length cap — explain as fully as the concept needs. Graded by the comprehension grader's `purpose` dimension (weight 1.0)."
|
|
198
|
+
},
|
|
199
|
+
"boundary": {
|
|
200
|
+
"type": "string",
|
|
201
|
+
"description": "Things commonly confused with the concept but that are NOT it. Express each difference as a mechanism (different primitives, different purpose, different scope) - not just different names. No protocol length cap. Graded by the comprehension grader's `boundary` dimension (weight 1.5)."
|
|
202
|
+
},
|
|
203
|
+
"taxonomy": {
|
|
204
|
+
"type": "string",
|
|
205
|
+
"description": "Nearby concepts with their relationship type (subset / alternative / prerequisite / composition / specialization). Markdown list permitted inside the string. No protocol length cap. Graded by the comprehension grader's `taxonomy` dimension (weight 1.0)."
|
|
206
|
+
},
|
|
207
|
+
"analogy": {
|
|
208
|
+
"type": "string",
|
|
209
|
+
"description": "Analogy that preserves the core mechanism. Translate for a non-expert without breaking the structural relationship between primitives. No protocol length cap. Graded by the comprehension grader's `analogy` dimension (weight 0.5)."
|
|
210
|
+
},
|
|
211
|
+
"misconception": {
|
|
212
|
+
"type": "string",
|
|
213
|
+
"description": "The wrong mental model people bring and why it misleads. Authored hint to inoculate the agent against the common error trap. No protocol length cap. Not directly graded; complements `boundary`."
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"description": "Seven-field universal-subject concept teaching block. Read by the comprehension grader (`scripts/skill/evaluate-skill.js --comprehension`) and rendered into the agent context when the skill is loaded. Required when `comprehension_state: present`. No protocol length cap — author each field as deeply as the concept requires. Distinct from `## Philosophy` in the body, which is about *why this skill file exists in this repo*; the `concept` block is about *what the subject is, universally*."
|
|
217
|
+
},
|
|
218
|
+
"eval_last_run": {
|
|
219
|
+
"type": "object",
|
|
220
|
+
"additionalProperties": false,
|
|
221
|
+
"description": "Optional receipt for the most recent eval run. Complements `eval_state` so `passing` and `monitored` claims can point at evidence instead of remaining self-attested.",
|
|
222
|
+
"required": [
|
|
223
|
+
"at",
|
|
224
|
+
"status"
|
|
225
|
+
],
|
|
226
|
+
"properties": {
|
|
227
|
+
"at": {
|
|
228
|
+
"type": "string",
|
|
229
|
+
"format": "date-time",
|
|
230
|
+
"description": "Timestamp for the eval run that supports the current eval_state claim."
|
|
231
|
+
},
|
|
232
|
+
"status": {
|
|
233
|
+
"type": "string",
|
|
234
|
+
"enum": [
|
|
235
|
+
"pass",
|
|
236
|
+
"fail",
|
|
237
|
+
"mixed"
|
|
238
|
+
]
|
|
239
|
+
},
|
|
240
|
+
"runner": {
|
|
241
|
+
"type": "string",
|
|
242
|
+
"description": "Eval runner or command used, e.g. `scripts/skill-audit.js --graded`."
|
|
243
|
+
},
|
|
244
|
+
"model": {
|
|
245
|
+
"type": "string",
|
|
246
|
+
"description": "Optional grader/model identifier when an LLM grader was used."
|
|
247
|
+
},
|
|
248
|
+
"receipt": {
|
|
249
|
+
"type": "string",
|
|
250
|
+
"description": "Path or URL to the eval receipt, scorecard, grader history, or CI run."
|
|
251
|
+
},
|
|
252
|
+
"receipt_hash": {
|
|
253
|
+
"type": "string",
|
|
254
|
+
"pattern": "^[a-f0-9]{64}$",
|
|
255
|
+
"description": "Optional SHA-256 digest of the receipt artifact."
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
"eval": {
|
|
260
|
+
"type": "object",
|
|
261
|
+
"additionalProperties": false,
|
|
262
|
+
"description": "Nested eval-health record (v3.1 preferred alias for the sibling triple `eval_artifacts` / `eval_state` / `routing_eval`). When both the top-level and nested forms are present they must match. Becomes canonical in v4.",
|
|
263
|
+
"properties": {
|
|
264
|
+
"artifacts": {
|
|
265
|
+
"type": "string",
|
|
266
|
+
"enum": [
|
|
267
|
+
"none",
|
|
268
|
+
"planned",
|
|
269
|
+
"present"
|
|
270
|
+
],
|
|
271
|
+
"description": "Are eval artifacts present on disk for this skill? Mirrors top-level `eval_artifacts`."
|
|
272
|
+
},
|
|
273
|
+
"content_state": {
|
|
274
|
+
"type": "string",
|
|
275
|
+
"enum": [
|
|
276
|
+
"unverified",
|
|
277
|
+
"passing",
|
|
278
|
+
"monitored"
|
|
279
|
+
],
|
|
280
|
+
"description": "What does the eval say about content quality? Mirrors top-level `eval_state`. Renamed to `content_state` here to disambiguate from `routing_coverage`."
|
|
281
|
+
},
|
|
282
|
+
"routing_coverage": {
|
|
283
|
+
"type": "string",
|
|
284
|
+
"enum": [
|
|
285
|
+
"absent",
|
|
286
|
+
"present"
|
|
287
|
+
],
|
|
288
|
+
"description": "Is routing / trigger coverage explicitly evaluated? Mirrors top-level `routing_eval`. Renamed to `routing_coverage` here to remove the head-first compound ambiguity."
|
|
289
|
+
},
|
|
290
|
+
"comprehension_state": {
|
|
291
|
+
"type": "string",
|
|
292
|
+
"enum": [
|
|
293
|
+
"absent",
|
|
294
|
+
"present"
|
|
295
|
+
],
|
|
296
|
+
"description": "Mirrors top-level `comprehension_state`. When `present`, the `concept` block is required by the allOf rule."
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
"stability": {
|
|
301
|
+
"type": "string",
|
|
302
|
+
"enum": [
|
|
303
|
+
"experimental",
|
|
304
|
+
"stable",
|
|
305
|
+
"frozen",
|
|
306
|
+
"deprecated"
|
|
307
|
+
],
|
|
308
|
+
"description": "Lifecycle posture for consumers. `experimental` (subject to change), `stable` (production-ready), `frozen` (no further changes expected), `deprecated` (use `superseded_by` to name the replacement). Drives consumer pinning decisions."
|
|
309
|
+
},
|
|
310
|
+
"superseded_by": {
|
|
311
|
+
"type": "string",
|
|
312
|
+
"description": "Name of the skill that replaces this one. Required when `stability: deprecated` — enforced by the allOf rule so every deprecated skill names its successor and consumers can follow the chain automatically. Omit on non-deprecated skills."
|
|
313
|
+
},
|
|
314
|
+
"license": {
|
|
315
|
+
"type": "string",
|
|
316
|
+
"description": "SPDX license identifier (e.g., `MIT`, `Apache-2.0`, `CC-BY-4.0`). Resolved against the SPDX license list (ISO/IEC 5962:2021). Required for skills shipped externally; optional for codebase-internal skills."
|
|
317
|
+
},
|
|
318
|
+
"compatibility": {
|
|
319
|
+
"type": "object",
|
|
320
|
+
"additionalProperties": false,
|
|
321
|
+
"properties": {
|
|
322
|
+
"runtimes": {
|
|
323
|
+
"type": "array",
|
|
324
|
+
"description": "Target agent runtimes with optional version constraints (e.g., `claude-code>=2.0`, `cursor>=0.40`). `agent_runtimes` is the v3.1 preferred alias and becomes canonical in v4.",
|
|
325
|
+
"items": {
|
|
326
|
+
"type": "string"
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
"agent_runtimes": {
|
|
330
|
+
"type": "array",
|
|
331
|
+
"description": "Target agent runtimes (v3.1 preferred alias for `runtimes`). Disambiguates from Node runtime, container runtime, etc. When both are present they must match. Becomes canonical in v4.",
|
|
332
|
+
"items": {
|
|
333
|
+
"type": "string"
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
"node": {
|
|
337
|
+
"type": "string",
|
|
338
|
+
"description": "Node.js version constraint (e.g., `>=18`). `node_version` is the v3.1 preferred alias and becomes canonical in v4."
|
|
339
|
+
},
|
|
340
|
+
"node_version": {
|
|
341
|
+
"type": "string",
|
|
342
|
+
"description": "Node.js version constraint (v3.1 preferred alias for `node`). Disambiguates from `node` reading as graph-node in a graph repo. When both are present they must match. Becomes canonical in v4."
|
|
343
|
+
},
|
|
344
|
+
"notes": {
|
|
345
|
+
"type": "string",
|
|
346
|
+
"description": "Free-text additional compatibility notes. Use sparingly; prefer structured fields. No protocol length cap."
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
"description": "Cross-runtime compatibility envelope. `runtimes` lists target agent runtimes with version constraints; `node` is the Node.js version requirement; `notes` is free-text overflow. Distinct from `extends` (overlay parent) and `relations.depends_on` (sibling skill dependency)."
|
|
350
|
+
},
|
|
351
|
+
"allowed-tools": {
|
|
352
|
+
"type": "string",
|
|
353
|
+
"description": "Optional space-separated whitelist of tools the skill is permitted to use (e.g., `Read Edit Bash`). Honoured by harnesses that gate tool calls per skill. Kebab-case spelling matches the common SKILL.md field name and Claude Code's `--allowed-tools` CLI flag. `allowed_tools` (snake_case) is the v3.1 preferred protocol alias; the export transform writes the kebab-case form for SKILL.md consumers."
|
|
354
|
+
},
|
|
355
|
+
"allowed_tools": {
|
|
356
|
+
"type": "string",
|
|
357
|
+
"description": "Space-separated whitelist of tools (v3.1 preferred snake_case alias for `allowed-tools`). When both are present they must match. The SKILL.md export transform rewrites this to the kebab-case form. Becomes canonical in v4."
|
|
358
|
+
},
|
|
359
|
+
"extends": {
|
|
360
|
+
"type": "string",
|
|
361
|
+
"description": "Overlay parent skill name. Only valid when `type: overlay`. The overlay specialises the parent and ceases to have meaning without it; its identity is INHERITED from the parent, not REPLACED. For non-existential cross-skill generalisation, use `relations.broader` instead."
|
|
362
|
+
},
|
|
363
|
+
"triggers": {
|
|
364
|
+
"type": "array",
|
|
365
|
+
"description": "Exact phrase or label triggers that activate this skill. For semantic phrases use `keywords`; for example user prompts use `examples`.",
|
|
366
|
+
"items": {
|
|
367
|
+
"type": "string"
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
"keywords": {
|
|
371
|
+
"type": "array",
|
|
372
|
+
"description": "Semantic keywords for discovery and fuzzy matching. Complements `triggers` (exact) and `examples` (full prompts).",
|
|
373
|
+
"items": {
|
|
374
|
+
"type": "string"
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
"examples": {
|
|
378
|
+
"type": "array",
|
|
379
|
+
"description": "Positive-class activation examples — realistic user prompts the skill SHOULD activate for. 2–5 entries recommended. Improves recall for embedding-based routers (SkillRouter-style few-shot retrieval) that find `keywords` alone insufficient at library scale. Groups under `activation.examples` in the manifest.",
|
|
380
|
+
"items": {
|
|
381
|
+
"type": "string",
|
|
382
|
+
"minLength": 1
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
"anti_examples": {
|
|
386
|
+
"type": "array",
|
|
387
|
+
"description": "Negative-class activation examples — realistic user prompts that look topically related but a DIFFERENT skill should handle. Used as hard-negative training signal. Pair with `relations.boundary` to name the skill that should activate instead. Groups under `activation.anti_examples` in the manifest.",
|
|
388
|
+
"items": {
|
|
389
|
+
"type": "string",
|
|
390
|
+
"minLength": 1
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
"paths": {
|
|
394
|
+
"type": "array",
|
|
395
|
+
"description": "Glob patterns that identify code surfaces this skill governs. Patterns prefixed with `!` are negations (gitignore-style). Negations only subtract from prior includes; a pattern list consisting only of negations matches nothing and is rejected by lint.",
|
|
396
|
+
"items": {
|
|
397
|
+
"type": "string",
|
|
398
|
+
"minLength": 1
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
"project_tags": {
|
|
402
|
+
"type": "array",
|
|
403
|
+
"description": "Literal project handles or semantic tags identifying which projects this skill is relevant to. Absent = ambient / cross-project. A workspace config at `.skill-graph/config.json` may map literal project handles to semantic tag sets so one skill tag matches many projects.",
|
|
404
|
+
"items": {
|
|
405
|
+
"type": "string",
|
|
406
|
+
"pattern": "^[a-z0-9][a-z0-9-]*$"
|
|
407
|
+
}
|
|
408
|
+
},
|
|
409
|
+
"routing_groups": {
|
|
410
|
+
"type": "array",
|
|
411
|
+
"items": {
|
|
412
|
+
"type": "string"
|
|
413
|
+
},
|
|
414
|
+
"description": "Tags that group skills for activation routing (e.g., `frontend`, `data-pipeline`). Routers use these for batch retrieval — when a query matches a routing group, all skills tagged with that group become candidates. Distinct from `browse_category` (single-value human bucket) and `category` (hierarchical taxonomy path)."
|
|
415
|
+
},
|
|
416
|
+
"relations": {
|
|
417
|
+
"type": "object",
|
|
418
|
+
"additionalProperties": false,
|
|
419
|
+
"description": "Typed edges to sibling skills. Lint verifies every target exists. Predicate-to-W3C-vocabulary mapping is provided via schemas/skill.context.jsonld (JSON-LD @context). `boundary` is routing-layer asymmetric handoff; `disjoint_with` is the optional OWL class-disjointness predicate — they are distinct, not aliases.",
|
|
420
|
+
"properties": {
|
|
421
|
+
"adjacent": {
|
|
422
|
+
"type": "array",
|
|
423
|
+
"description": "DEPRECATED ALIAS of `related`. Symmetric co-read relation, maps to skos:related. Still valid in v3.x; lint emits a soft warning pointing at `related` as the preferred name. Removal target: v4.",
|
|
424
|
+
"items": {
|
|
425
|
+
"type": "string"
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
"related": {
|
|
429
|
+
"type": "array",
|
|
430
|
+
"description": "Symmetric associative relation (skos:related). Use for skills that should be co-read because they teach the same surface from different angles. Max 5 entries recommended to avoid hub-and-spoke clutter. Preferred over the deprecated `adjacent` alias.",
|
|
431
|
+
"items": {
|
|
432
|
+
"type": "string"
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
"boundary": {
|
|
436
|
+
"type": "array",
|
|
437
|
+
"description": "Anti-ownership / routing handoff edge — directional. Skills this skill explicitly does NOT own; the router uses this to redirect wrong-skill queries to the correct owner. Items may be bare skill names or `{skill, reason}` objects; reasons are strongly recommended. Maps to sg:disjointOwnership — a Skill-Graph-specific routing-layer predicate, intentionally weaker than OWL class-disjointness. For formal class-disjointness, use `disjoint_with`.",
|
|
438
|
+
"items": {
|
|
439
|
+
"oneOf": [
|
|
440
|
+
{
|
|
441
|
+
"type": "string"
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
"type": "object",
|
|
445
|
+
"additionalProperties": false,
|
|
446
|
+
"required": [
|
|
447
|
+
"skill"
|
|
448
|
+
],
|
|
449
|
+
"properties": {
|
|
450
|
+
"skill": {
|
|
451
|
+
"type": "string"
|
|
452
|
+
},
|
|
453
|
+
"reason": {
|
|
454
|
+
"type": "string"
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
]
|
|
459
|
+
}
|
|
460
|
+
},
|
|
461
|
+
"disjoint_with": {
|
|
462
|
+
"type": "array",
|
|
463
|
+
"description": "Optional OWL class-disjointness assertion. Maps to owl:disjointWith — a formal ontological claim that the two skills name disjoint conceptual classes (no entity can simultaneously be an instance of both). Rare in practice. Does NOT replace `boundary` (the routing-layer asymmetric handoff). Same item shape as `boundary` — bare string OR `{skill, reason}`.",
|
|
464
|
+
"items": {
|
|
465
|
+
"oneOf": [
|
|
466
|
+
{
|
|
467
|
+
"type": "string"
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
"type": "object",
|
|
471
|
+
"additionalProperties": false,
|
|
472
|
+
"required": [
|
|
473
|
+
"skill"
|
|
474
|
+
],
|
|
475
|
+
"properties": {
|
|
476
|
+
"skill": {
|
|
477
|
+
"type": "string"
|
|
478
|
+
},
|
|
479
|
+
"reason": {
|
|
480
|
+
"type": "string"
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
]
|
|
485
|
+
}
|
|
486
|
+
},
|
|
487
|
+
"broader": {
|
|
488
|
+
"type": "array",
|
|
489
|
+
"description": "Cross-skill generalisation (skos:broader). Use when this skill is a specialisation of another skill that is NOT its overlay parent (if it were, use `extends`). Example: `react-best-practices` has `broader: [frontend]`. Closes the cross-skill generalisation gap that `browse_category` cannot express.",
|
|
490
|
+
"items": {
|
|
491
|
+
"type": "string"
|
|
492
|
+
}
|
|
493
|
+
},
|
|
494
|
+
"narrower": {
|
|
495
|
+
"type": "array",
|
|
496
|
+
"description": "Cross-skill specialisation (skos:narrower). The inverse of `broader` — this skill is more general than the targets. Tooling can infer this from other skills' `broader` edges; authoring it explicitly is optional.",
|
|
497
|
+
"items": {
|
|
498
|
+
"type": "string"
|
|
499
|
+
}
|
|
500
|
+
},
|
|
501
|
+
"verify_with": {
|
|
502
|
+
"type": "array",
|
|
503
|
+
"description": "Skills to co-load for verification. Maps to prov:wasInformedBy — this skill's claims are informed by the verifier's claims. Keep to 1-3 high-signal verifiers.",
|
|
504
|
+
"items": {
|
|
505
|
+
"type": "string"
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
"depends_on": {
|
|
509
|
+
"type": "array",
|
|
510
|
+
"description": "Skills this skill requires conceptually or operationally. Items may be bare skill names or `{skill, min_version}` objects for version-constrained dependencies.",
|
|
511
|
+
"items": {
|
|
512
|
+
"oneOf": [
|
|
513
|
+
{
|
|
514
|
+
"type": "string"
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"type": "object",
|
|
518
|
+
"additionalProperties": false,
|
|
519
|
+
"required": [
|
|
520
|
+
"skill"
|
|
521
|
+
],
|
|
522
|
+
"properties": {
|
|
523
|
+
"skill": {
|
|
524
|
+
"type": "string"
|
|
525
|
+
},
|
|
526
|
+
"min_version": {
|
|
527
|
+
"type": "string",
|
|
528
|
+
"description": "Semver range for the minimum required version of the target skill. Accepts bare semver (`1.2.0`, treated as exact), caret range (`^1.2.0`), tilde range (`~1.2.0`), comparator range (`>=1.2.0`, `>1.2.0`, `<2.0.0`, `<=1.5.0`), or AND-joined ranges (`>=1.2.0 <2.0.0`).",
|
|
529
|
+
"pattern": "^(\\^|~|>=|<=|>|<|=)?[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9.-]+)?( +(\\^|~|>=|<=|>|<|=)?[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9.-]+)?)*$"
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
]
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
},
|
|
538
|
+
"grounding": {
|
|
539
|
+
"type": "object",
|
|
540
|
+
"additionalProperties": false,
|
|
541
|
+
"required": [
|
|
542
|
+
"domain_object",
|
|
543
|
+
"grounding_mode",
|
|
544
|
+
"truth_sources",
|
|
545
|
+
"failure_modes",
|
|
546
|
+
"evidence_priority"
|
|
547
|
+
],
|
|
548
|
+
"properties": {
|
|
549
|
+
"domain_object": {
|
|
550
|
+
"type": "string",
|
|
551
|
+
"description": "What the skill is about (e.g., `Shopify order sync`). `subject` is the v3.1 preferred alias and becomes canonical in v4."
|
|
552
|
+
},
|
|
553
|
+
"subject": {
|
|
554
|
+
"type": "string",
|
|
555
|
+
"description": "What the skill is about (v3.1 preferred alias for `domain_object`). When both are present they must match. Becomes canonical in v4."
|
|
556
|
+
},
|
|
557
|
+
"grounding_mode": {
|
|
558
|
+
"type": "string",
|
|
559
|
+
"enum": [
|
|
560
|
+
"repo_specific",
|
|
561
|
+
"universal",
|
|
562
|
+
"hybrid"
|
|
563
|
+
],
|
|
564
|
+
"description": "Whether the skill's claims are repo-specific, universal, or a hybrid. `claim_scope` is the v3.1 preferred alias and becomes canonical in v4."
|
|
565
|
+
},
|
|
566
|
+
"claim_scope": {
|
|
567
|
+
"type": "string",
|
|
568
|
+
"enum": [
|
|
569
|
+
"repo_specific",
|
|
570
|
+
"universal",
|
|
571
|
+
"hybrid"
|
|
572
|
+
],
|
|
573
|
+
"description": "Whether the skill's claims are repo-specific, universal, or a hybrid (v3.1 preferred alias for `grounding_mode`). When both are present they must match. Becomes canonical in v4."
|
|
574
|
+
},
|
|
575
|
+
"truth_sources": {
|
|
576
|
+
"type": "array",
|
|
577
|
+
"items": {
|
|
578
|
+
"oneOf": [
|
|
579
|
+
{
|
|
580
|
+
"type": "string",
|
|
581
|
+
"description": "Legacy whole-resource reference. Local paths are resolved relative to the repo root; URLs are allowed for external specs."
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
"type": "object",
|
|
585
|
+
"additionalProperties": false,
|
|
586
|
+
"required": [
|
|
587
|
+
"path"
|
|
588
|
+
],
|
|
589
|
+
"properties": {
|
|
590
|
+
"path": {
|
|
591
|
+
"type": "string",
|
|
592
|
+
"minLength": 1,
|
|
593
|
+
"description": "Local file path or URL for the truth source."
|
|
594
|
+
},
|
|
595
|
+
"line_range": {
|
|
596
|
+
"type": "object",
|
|
597
|
+
"additionalProperties": false,
|
|
598
|
+
"required": [
|
|
599
|
+
"start"
|
|
600
|
+
],
|
|
601
|
+
"properties": {
|
|
602
|
+
"start": {
|
|
603
|
+
"type": "integer",
|
|
604
|
+
"minimum": 1
|
|
605
|
+
},
|
|
606
|
+
"end": {
|
|
607
|
+
"type": "integer",
|
|
608
|
+
"minimum": 1
|
|
609
|
+
}
|
|
610
|
+
},
|
|
611
|
+
"description": "Optional inclusive line range to hash and review instead of the whole file."
|
|
612
|
+
},
|
|
613
|
+
"anchor": {
|
|
614
|
+
"type": "string",
|
|
615
|
+
"description": "Optional stable heading slug or literal text anchor used by lint to detect broken pointers."
|
|
616
|
+
},
|
|
617
|
+
"note": {
|
|
618
|
+
"type": "string",
|
|
619
|
+
"description": "Short human note explaining why this source grounds the skill."
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
]
|
|
624
|
+
},
|
|
625
|
+
"description": "Files, docs, or URLs that ground the skill's claims. Prefer object entries with path plus line_range or anchor for repo-backed skills; string entries remain valid for v3 compatibility."
|
|
626
|
+
},
|
|
627
|
+
"failure_modes": {
|
|
628
|
+
"type": "array",
|
|
629
|
+
"items": {
|
|
630
|
+
"type": "string"
|
|
631
|
+
}
|
|
632
|
+
},
|
|
633
|
+
"evidence_priority": {
|
|
634
|
+
"type": "string",
|
|
635
|
+
"enum": [
|
|
636
|
+
"repo_code_first",
|
|
637
|
+
"general_knowledge_first",
|
|
638
|
+
"equal"
|
|
639
|
+
]
|
|
640
|
+
}
|
|
641
|
+
},
|
|
642
|
+
"description": "Records what the skill is grounded against — the truth sources, the grounding mode, and the failure modes when the truth drifts. Required when the skill makes claims about specific code or external systems. Optional for purely conceptual skills."
|
|
643
|
+
},
|
|
644
|
+
"portability": {
|
|
645
|
+
"type": "object",
|
|
646
|
+
"additionalProperties": false,
|
|
647
|
+
"required": [
|
|
648
|
+
"readiness",
|
|
649
|
+
"targets"
|
|
650
|
+
],
|
|
651
|
+
"properties": {
|
|
652
|
+
"readiness": {
|
|
653
|
+
"type": "string",
|
|
654
|
+
"enum": [
|
|
655
|
+
"declared",
|
|
656
|
+
"scripted",
|
|
657
|
+
"verified"
|
|
658
|
+
]
|
|
659
|
+
},
|
|
660
|
+
"targets": {
|
|
661
|
+
"type": "array",
|
|
662
|
+
"description": "Supported export destinations. `export_targets` is the v3.1 preferred alias and becomes canonical in v4.",
|
|
663
|
+
"items": {
|
|
664
|
+
"type": "string",
|
|
665
|
+
"enum": [
|
|
666
|
+
"skill-md"
|
|
667
|
+
]
|
|
668
|
+
}
|
|
669
|
+
},
|
|
670
|
+
"export_targets": {
|
|
671
|
+
"type": "array",
|
|
672
|
+
"description": "Supported export destinations (v3.1 preferred alias for `targets`). Distinguishes from bare `targets` which is generic. When both are present they must match. Becomes canonical in v4.",
|
|
673
|
+
"items": {
|
|
674
|
+
"type": "string",
|
|
675
|
+
"enum": [
|
|
676
|
+
"skill-md"
|
|
677
|
+
]
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
},
|
|
681
|
+
"description": "Portability execution signal. `readiness` declares whether portability is only declared (`declared`), covered by export tooling (`scripted`), or verified with a target-runtime receipt (`verified`). `targets` lists supported export destinations, currently `skill-md`."
|
|
682
|
+
},
|
|
683
|
+
"lifecycle": {
|
|
684
|
+
"type": "object",
|
|
685
|
+
"additionalProperties": false,
|
|
686
|
+
"description": "Per-skill maintenance policy consumed by the drift sentinel.",
|
|
687
|
+
"properties": {
|
|
688
|
+
"stale_after_days": {
|
|
689
|
+
"type": "integer",
|
|
690
|
+
"minimum": 1,
|
|
691
|
+
"description": "Days after `drift_check.last_verified` at which the skill is flagged stale. Integration skills rot faster than pure concept skills; pick per skill."
|
|
692
|
+
},
|
|
693
|
+
"review_cadence": {
|
|
694
|
+
"type": "string",
|
|
695
|
+
"enum": [
|
|
696
|
+
"per-commit",
|
|
697
|
+
"weekly",
|
|
698
|
+
"quarterly",
|
|
699
|
+
"on-truth-source-change"
|
|
700
|
+
],
|
|
701
|
+
"description": "How frequently the skill should be re-verified. Drives scheduled drift checks."
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
},
|
|
705
|
+
"runtime_telemetry": {
|
|
706
|
+
"type": "object",
|
|
707
|
+
"additionalProperties": false,
|
|
708
|
+
"required": [
|
|
709
|
+
"feedback_source"
|
|
710
|
+
],
|
|
711
|
+
"description": "Optional pointer to a real-world success/failure feed. Consumers may use telemetry to corroborate or override `eval_state`.",
|
|
712
|
+
"properties": {
|
|
713
|
+
"feedback_source": {
|
|
714
|
+
"type": "string",
|
|
715
|
+
"description": "Path or URL to a JSONL of run receipts. Each receipt is expected to carry `{ timestamp, skill, outcome }` at minimum."
|
|
716
|
+
},
|
|
717
|
+
"last_updated": {
|
|
718
|
+
"type": "string",
|
|
719
|
+
"format": "date"
|
|
720
|
+
},
|
|
721
|
+
"metrics": {
|
|
722
|
+
"type": "object",
|
|
723
|
+
"additionalProperties": false,
|
|
724
|
+
"properties": {
|
|
725
|
+
"sample_size": {
|
|
726
|
+
"type": "integer",
|
|
727
|
+
"minimum": 0
|
|
728
|
+
},
|
|
729
|
+
"success_rate": {
|
|
730
|
+
"type": "number",
|
|
731
|
+
"minimum": 0,
|
|
732
|
+
"maximum": 1
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
},
|
|
739
|
+
"allOf": [
|
|
740
|
+
{
|
|
741
|
+
"if": {
|
|
742
|
+
"properties": {
|
|
743
|
+
"type": {
|
|
744
|
+
"const": "overlay"
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
},
|
|
748
|
+
"then": {
|
|
749
|
+
"required": [
|
|
750
|
+
"extends"
|
|
751
|
+
]
|
|
752
|
+
}
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
"if": {
|
|
756
|
+
"properties": {
|
|
757
|
+
"scope": {
|
|
758
|
+
"const": "codebase"
|
|
759
|
+
}
|
|
760
|
+
},
|
|
761
|
+
"required": [
|
|
762
|
+
"scope"
|
|
763
|
+
]
|
|
764
|
+
},
|
|
765
|
+
"then": {
|
|
766
|
+
"required": [
|
|
767
|
+
"grounding"
|
|
768
|
+
]
|
|
769
|
+
}
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
"if": {
|
|
773
|
+
"properties": {
|
|
774
|
+
"type": {
|
|
775
|
+
"not": {
|
|
776
|
+
"const": "overlay"
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
},
|
|
780
|
+
"required": [
|
|
781
|
+
"type"
|
|
782
|
+
]
|
|
783
|
+
},
|
|
784
|
+
"then": {
|
|
785
|
+
"not": {
|
|
786
|
+
"required": [
|
|
787
|
+
"extends"
|
|
788
|
+
]
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
"if": {
|
|
794
|
+
"properties": {
|
|
795
|
+
"stability": {
|
|
796
|
+
"const": "deprecated"
|
|
797
|
+
}
|
|
798
|
+
},
|
|
799
|
+
"required": [
|
|
800
|
+
"stability"
|
|
801
|
+
]
|
|
802
|
+
},
|
|
803
|
+
"then": {
|
|
804
|
+
"required": [
|
|
805
|
+
"superseded_by"
|
|
806
|
+
]
|
|
807
|
+
}
|
|
808
|
+
},
|
|
809
|
+
{
|
|
810
|
+
"if": {
|
|
811
|
+
"properties": {
|
|
812
|
+
"comprehension_state": {
|
|
813
|
+
"const": "present"
|
|
814
|
+
}
|
|
815
|
+
},
|
|
816
|
+
"required": [
|
|
817
|
+
"comprehension_state"
|
|
818
|
+
]
|
|
819
|
+
},
|
|
820
|
+
"then": {
|
|
821
|
+
"required": [
|
|
822
|
+
"concept"
|
|
823
|
+
]
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
]
|
|
827
|
+
}
|