@skill-graph/cli 0.5.7 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/CHANGELOG.md +27 -3
  2. package/README.md +40 -14
  3. package/SKILL_GRAPH.md +2 -2
  4. package/bin/skill-graph.js +118 -2
  5. package/docs/ADOPTION.md +1 -1
  6. package/docs/PRIMER.md +6 -5
  7. package/docs/QUICKSTART-30MIN.md +2 -2
  8. package/docs/SKILL_AUDIT_CHECKLIST.md +1 -1
  9. package/docs/SKILL_METADATA_PROTOCOL.md +2 -2
  10. package/docs/_archived/marketplace-publication-priority-2026-05-18.md +1 -1
  11. package/docs/_drafts/0.5.8-release-prep.md +164 -0
  12. package/docs/field-reference.generated.md +1 -1
  13. package/docs/field-reference.md +2 -2
  14. package/docs/manifest-field-mapping.md +3 -3
  15. package/docs/marketplace-publication-queue.generated.md +2 -2
  16. package/docs/plans/scripts-roadmap.md +2 -2
  17. package/docs/positioning.md +88 -0
  18. package/docs/research/skill-comprehension-eval-research.md +5 -5
  19. package/docs/research/skill-demand-gap-roadmap-2026-05-16.md +215 -0
  20. package/docs/status.generated.md +48 -0
  21. package/examples/audits/context-graph/findings.md +59 -0
  22. package/examples/audits/context-graph/scorecard.md +22 -0
  23. package/examples/audits/context-graph/verdict.md +33 -0
  24. package/examples/evals/a11y.json +45 -13
  25. package/examples/evals/api-design.json +18 -5
  26. package/examples/evals/code-review.json +18 -5
  27. package/examples/evals/data-modeling.json +18 -5
  28. package/examples/evals/database-migration.json +18 -5
  29. package/examples/evals/debugging.json +37 -11
  30. package/examples/evals/dependency-architecture.json +18 -5
  31. package/examples/evals/design-system-architecture.json +18 -5
  32. package/examples/evals/error-tracking.json +18 -5
  33. package/examples/evals/event-contract-design.json +18 -5
  34. package/examples/evals/form-ux-architecture.json +18 -5
  35. package/examples/evals/framework-fit-analysis.json +18 -5
  36. package/examples/evals/graph-audit.json +55 -13
  37. package/examples/evals/information-architecture.json +18 -5
  38. package/examples/evals/interaction-feedback.json +18 -5
  39. package/examples/evals/interaction-patterns.json +18 -5
  40. package/examples/evals/layout-composition.json +18 -5
  41. package/examples/evals/lint-overlay.json +38 -11
  42. package/examples/evals/microcopy.json +18 -5
  43. package/examples/evals/observability-modeling.json +18 -5
  44. package/examples/evals/pattern-recognition.json +32 -9
  45. package/examples/evals/performance-engineering.json +18 -5
  46. package/examples/evals/refactor.json +41 -12
  47. package/examples/evals/semiotics.json +18 -5
  48. package/examples/evals/skill-infrastructure.json +32 -9
  49. package/examples/evals/skill-router.json +42 -13
  50. package/examples/evals/system-interface-contracts.json +18 -5
  51. package/examples/evals/task-analysis.json +18 -5
  52. package/examples/evals/testing-strategy.json +36 -11
  53. package/examples/evals/type-safety.json +251 -66
  54. package/examples/evals/visual-design-foundations.json +18 -5
  55. package/examples/evals/webhook-integration.json +18 -5
  56. package/examples/fixture-skills/README.md +47 -0
  57. package/examples/fixture-skills/comprehension-full/SKILL.md +79 -0
  58. package/examples/fixture-skills/minimal-capability/SKILL.md +51 -0
  59. package/examples/fixture-skills/with-grounding/SKILL.md +78 -0
  60. package/examples/fixture-skills/with-relations/SKILL.md +87 -0
  61. package/examples/skills.manifest.sample.json +1722 -446
  62. package/marketplace/README.md +1 -1
  63. package/marketplace/skills/a11y/SKILL.md +1 -1
  64. package/marketplace/skills/best-practice/SKILL.md +211 -0
  65. package/marketplace/skills/context-graph/SKILL.md +1 -1
  66. package/marketplace/skills/debugging/SKILL.md +1 -1
  67. package/marketplace/skills/graph-audit/SKILL.md +3 -1
  68. package/marketplace/skills/postgres-rls/SKILL.md +284 -0
  69. package/marketplace/skills/refactor/SKILL.md +1 -1
  70. package/marketplace/skills/skill-infrastructure/SKILL.md +2 -0
  71. package/marketplace/skills/skill-router/SKILL.md +3 -1
  72. package/marketplace/skills/testing-strategy/SKILL.md +1 -1
  73. package/package.json +3 -1
  74. package/scripts/__tests__/test-marketplace-export.js +6 -2
  75. package/scripts/__tests__/test-v3-1-alias-contract.js +3 -3
  76. package/scripts/build-status-doc.js +177 -0
  77. package/scripts/check-doc-drift.js +224 -0
  78. package/scripts/check-markdown-links.js +34 -4
  79. package/scripts/check-mirror-freeze.js +270 -0
  80. package/scripts/export-marketplace-skills.js +35 -6
  81. package/scripts/lib/audit-prompt-builder.js +3 -3
  82. package/scripts/lib/parse-frontmatter.js +2 -2
  83. package/scripts/skill-audit.js +7 -9
@@ -1,7 +1,12 @@
1
1
  {
2
2
  "skill_name": "visual-design-foundations",
3
3
  "subject": "Visual craft decisions for color, typography, spacing, density, hierarchy, elevation, and motion feel",
4
- "adjacent_concepts": ["semiotics", "design-system-architecture", "layout-composition", "a11y"],
4
+ "adjacent_concepts": [
5
+ "semiotics",
6
+ "design-system-architecture",
7
+ "layout-composition",
8
+ "a11y"
9
+ ],
5
10
  "grounding_note": "Truth sources cite the whole SKILL.md file to keep the initial eval surface stable while the new skill settles.",
6
11
  "evals": [
7
12
  {
@@ -13,7 +18,9 @@
13
18
  "truth_mode": "process_correctness",
14
19
  "skill_type": "concept",
15
20
  "criticality": "high",
16
- "truth_sources": ["skills/visual-design-foundations/SKILL.md"]
21
+ "truth_sources": [
22
+ "skills/design/visual-design-foundations/SKILL.md"
23
+ ]
17
24
  },
18
25
  {
19
26
  "id": 2,
@@ -24,7 +31,9 @@
24
31
  "truth_mode": "code_verification",
25
32
  "skill_type": "concept",
26
33
  "criticality": "normal",
27
- "truth_sources": ["skills/visual-design-foundations/SKILL.md"]
34
+ "truth_sources": [
35
+ "skills/design/visual-design-foundations/SKILL.md"
36
+ ]
28
37
  },
29
38
  {
30
39
  "id": 3,
@@ -35,7 +44,9 @@
35
44
  "truth_mode": "code_verification",
36
45
  "skill_type": "concept",
37
46
  "criticality": "normal",
38
- "truth_sources": ["skills/visual-design-foundations/SKILL.md"]
47
+ "truth_sources": [
48
+ "skills/design/visual-design-foundations/SKILL.md"
49
+ ]
39
50
  },
40
51
  {
41
52
  "id": 4,
@@ -46,7 +57,9 @@
46
57
  "truth_mode": "conceptual_correctness_plus_repo_application",
47
58
  "skill_type": "concept",
48
59
  "criticality": "normal",
49
- "truth_sources": ["skills/visual-design-foundations/SKILL.md"]
60
+ "truth_sources": [
61
+ "skills/design/visual-design-foundations/SKILL.md"
62
+ ]
50
63
  }
51
64
  ]
52
65
  }
@@ -1,7 +1,12 @@
1
1
  {
2
2
  "skill_name": "webhook-integration",
3
3
  "subject": "Inbound third-party webhook handler design for signature verification, idempotency, provider retry contracts, raw payload persistence, quarantine, secret rotation, and PII capture timing",
4
- "adjacent_concepts": ["event-contract-design", "testing-strategy", "debugging", "owasp-security"],
4
+ "adjacent_concepts": [
5
+ "event-contract-design",
6
+ "testing-strategy",
7
+ "debugging",
8
+ "owasp-security"
9
+ ],
5
10
  "grounding_note": "Truth sources cite the whole SKILL.md file to keep the initial eval surface stable while routing boundaries are tightened.",
6
11
  "evals": [
7
12
  {
@@ -13,7 +18,9 @@
13
18
  "truth_mode": "process_correctness",
14
19
  "skill_type": "workflow",
15
20
  "criticality": "high",
16
- "truth_sources": ["skills/webhook-integration/SKILL.md"]
21
+ "truth_sources": [
22
+ "skills/engineering/webhook-integration/SKILL.md"
23
+ ]
17
24
  },
18
25
  {
19
26
  "id": 2,
@@ -24,7 +31,9 @@
24
31
  "truth_mode": "conceptual_correctness_plus_repo_application",
25
32
  "skill_type": "workflow",
26
33
  "criticality": "high",
27
- "truth_sources": ["skills/webhook-integration/SKILL.md"]
34
+ "truth_sources": [
35
+ "skills/engineering/webhook-integration/SKILL.md"
36
+ ]
28
37
  },
29
38
  {
30
39
  "id": 3,
@@ -35,7 +44,9 @@
35
44
  "truth_mode": "code_verification",
36
45
  "skill_type": "concept",
37
46
  "criticality": "normal",
38
- "truth_sources": ["skills/webhook-integration/SKILL.md"]
47
+ "truth_sources": [
48
+ "skills/engineering/webhook-integration/SKILL.md"
49
+ ]
39
50
  },
40
51
  {
41
52
  "id": 4,
@@ -46,7 +57,9 @@
46
57
  "truth_mode": "code_verification",
47
58
  "skill_type": "concept",
48
59
  "criticality": "normal",
49
- "truth_sources": ["skills/webhook-integration/SKILL.md"]
60
+ "truth_sources": [
61
+ "skills/engineering/webhook-integration/SKILL.md"
62
+ ]
50
63
  }
51
64
  ]
52
65
  }
@@ -0,0 +1,47 @@
1
+ # Hermetic Test Fixtures (v6)
2
+
3
+ > **Purpose:** minimal v6-conformant skills used as hermetic fixtures for the
4
+ > `@skill-graph/cli` package tests. The published package can validate
5
+ > against these without needing a sibling `skills/` clone.
6
+ >
7
+ > **Status:** v6 (current contract). Update when the schema bumps.
8
+
9
+ ## Fixtures
10
+
11
+ | Fixture | Type | Scope | Tests | Status |
12
+ |---|---|---|---|---|
13
+ | [`minimal-capability`](minimal-capability/SKILL.md) | capability | portable | Bare-minimum v6 frontmatter; happy-path lint pass | **shipped** |
14
+ | [`with-grounding`](with-grounding/SKILL.md) | capability | codebase | Conditional requiredness — `grounding.*` sub-fields + non-empty `keywords` | **shipped** |
15
+ | [`with-relations`](with-relations/SKILL.md) | capability | portable | All four `relations.*` edges (related / boundary / verify_with / depends_on) using `{skill, reason}` object shape | **shipped** |
16
+ | [`comprehension-full`](comprehension-full/SKILL.md) | capability | portable | Flat Understanding fields + nested v5 `concept` block (anyOf back-compat) | **shipped** |
17
+
18
+ All four fixtures cross-reference each other in `with-relations`, forming
19
+ a closed reference set: lint resolves every relation target from this
20
+ directory alone, with no dependency on the sibling `../skills/skills/`
21
+ canonical library. The four fixtures together exercise every conditional
22
+ required rule in the v6 schema (`scope: codebase → grounding`,
23
+ `comprehension_state: present → concept`) plus the lint rule that
24
+ `scope: codebase` demands non-empty `keywords`. See [SH-6132](https://linear.app/sales-hub/issue/SH-6132) EPIC for context.
25
+
26
+ ## Usage
27
+
28
+ ```bash
29
+ # Lint a single fixture against the v6 schema:
30
+ node bin/skill-graph.js lint examples/fixture-skills/minimal-capability
31
+
32
+ # Lint every fixture in one pass:
33
+ node scripts/skill-lint.js --path examples/fixture-skills
34
+ ```
35
+
36
+ ## Invariants
37
+
38
+ - Every shipped fixture validates against `schemas/skill.v6.schema.json` with zero errors.
39
+ - Every fixture has `schema_version: 6`.
40
+ - No fixture depends on a non-fixture skill (relations between fixtures only).
41
+ - Cross-fixture `relations.*` targets MUST exist in this directory.
42
+
43
+ ## Maintenance
44
+
45
+ - When the schema bumps, every fixture's `schema_version` advances in the same commit as the schema change.
46
+ - When a new conditional rule lands (e.g. a new `allOf` block), add or extend the fixture that exercises it.
47
+ - Treat these as the canonical regression suite for any change to lint, audit, manifest generation, or routing.
@@ -0,0 +1,79 @@
1
+ ---
2
+ schema_version: 6
3
+ name: comprehension-full
4
+ description: "Use as the v6-conformant fixture exercising the full Understanding surface — flat top-level fields (mental_model, purpose, boundary, analogy, misconception) AND the nested v5 concept block for anyOf back-compat. Activate this skill when verifying that lint accepts both presentation forms when comprehension_state is present. Do NOT use as a production skill (use a real capability skill from the canonical library)."
5
+ version: 1.0.0
6
+ type: capability
7
+ category: engineering
8
+ scope: portable
9
+ owner: skill-graph-fixture-suite
10
+ freshness: "2026-05-19"
11
+ comprehension_state: present
12
+ mental_model: "Understanding fields are the comprehension grader's reading surface. The grader expects five primitives — mental_model, purpose, boundary, analogy, misconception — each with its own grading dimension and weight. v6 promotes them to flat top-level fields; v5 nested them inside a concept block. Both shapes must round-trip cleanly through lint, manifest generation, and the grader."
13
+ purpose: "Comprehension grading checks whether an agent given the SKILL.md can answer realistic scenarios. The Understanding fields anchor that grading by declaring what the skill claims to teach. Before v6, these primitives lived as bold-label body sections that parsers had to scrape; v5 lifted them into the nested concept block; v6 promotes them to flat top-level fields so consumers no longer need to walk a sub-object to read them."
14
+ boundary: "Comprehension grading is NOT routing-eval (which tests whether the router picks the right skill) and NOT lint (which tests schema conformance). The flat top-level boundary field (concept-layer) is also distinct from relations.boundary (routing-layer handoff): one declares what the skill is NOT conceptually; the other declares which sibling skill should handle a misrouted query."
15
+ analogy: "Like the difference between a book's table of contents and its index. Both let a reader find content, but they answer different questions. Flat Understanding fields are the index — direct, addressable, no nesting. The legacy concept block was the table of contents — hierarchical, requiring traversal."
16
+ misconception: "Believing that comprehension_state: present means the skill ships a passing comprehension eval. It does not. comprehension_state: present means the skill carries the Understanding fields the grader reads against; eval_state: passing is a separate, independent claim that the eval has been run and succeeded."
17
+ concept:
18
+ definition: "The legacy nested v5 concept block. Seven required sub-fields covering definition, mental_model, purpose, boundary, taxonomy, analogy, and misconception. Retained in v6 for back-compat so v5 skills not yet migrated still satisfy the comprehension_state: present requirement."
19
+ mental_model: "v5 grouped the seven primitives under one frontmatter key (concept) for namespacing. v6 unbundled them to flat top-level fields. The grader reads from the flat fields first when both are present; the nested block remains valid as a fallback."
20
+ purpose: "Allow v5 skills to satisfy the comprehension_state: present requirement during the multi-cycle v5→v6 migration without forcing a flag-day rewrite of every author skill."
21
+ boundary: "Not a replacement for the flat fields in v6 — when both are present in a v6 skill, the flat fields win. Do not author new v6 skills that only set the nested block; treat the nested block as a back-compat surface, not the canonical home."
22
+ taxonomy: "Subset of the v6 Understanding surface — every nested concept.* sub-field has a flat top-level equivalent (or, for definition, is absorbed by description; for taxonomy, by category + relations.broader)."
23
+ analogy: "Like the v3.1 alias pattern (e.g., grounding.subject for grounding.domain_object). Both shapes validate; both round-trip; the preferred form takes precedence when both are present."
24
+ misconception: "Believing the v6 schema removed the nested concept block. It did not — the schema retains it under an anyOf rule so v5 skills continue to validate without modification. v6 deprecates the nested form for new skills but does not eliminate it."
25
+ drift_check:
26
+ last_verified: "2026-05-19"
27
+ eval_artifacts: none
28
+ eval_state: unverified
29
+ routing_eval: absent
30
+ stability: experimental
31
+ license: Apache-2.0
32
+ ---
33
+
34
+ # Comprehension-Full Fixture
35
+
36
+ This fixture exercises the full Understanding surface in two presentation
37
+ forms simultaneously: the v6 flat top-level fields (`mental_model`,
38
+ `purpose`, `boundary`, `analogy`, `misconception`) AND the nested v5
39
+ `concept` block. The lint and the comprehension grader must both accept
40
+ either shape, and when both are present the flat fields must win.
41
+
42
+ ## Coverage
43
+
44
+ The five flat Understanding fields (v6 canonical) and the seven nested
45
+ `concept` sub-fields (v5 back-compat) co-existing in one skill, plus
46
+ `comprehension_state: present` to trigger the conditional requirement.
47
+ No grounding (scope: portable), no relations, no Health Block.
48
+
49
+ ## Philosophy
50
+
51
+ The v5 → v6 migration cannot happen as a flag-day — there are too many
52
+ adopter skills to rewrite atomically. v6 keeps the nested `concept` block
53
+ under an `anyOf` rule so v5 skills validate without changes, while the
54
+ new flat top-level fields become the canonical authoring surface for
55
+ new skills. This fixture is the smallest configuration that proves both
56
+ shapes round-trip through lint together, anchoring the regression test
57
+ that detects any future change that would force a flag-day rewrite.
58
+
59
+ ## Verification
60
+
61
+ ```bash
62
+ node scripts/skill-lint.js --path examples/fixture-skills/comprehension-full
63
+ # expected: 0 errors
64
+ node scripts/skill-lint.js --path examples/fixture-skills
65
+ # expected: 0 errors across all four fixtures
66
+ ```
67
+
68
+ Lint must accept the dual-shape skill: `comprehension_state: present`
69
+ satisfied by the nested `concept` block (per the v6 anyOf back-compat
70
+ rule) AND the flat top-level fields present alongside it. If the grader
71
+ reads from both, the flat values must take precedence — that contract is
72
+ documented in the v5-to-v6 migration note in `skill-metadata-protocol`.
73
+
74
+ ## Do NOT Use When
75
+
76
+ - You need to test the bare-minimum frontmatter — use `minimal-capability`.
77
+ - You need to test codebase grounding — use `with-grounding`.
78
+ - You need to test typed relations — use `with-relations`.
79
+ - You need to test v6-only flat Understanding fields without the nested back-compat block — author a separate fixture or use a real v6-only canonical skill.
@@ -0,0 +1,51 @@
1
+ ---
2
+ schema_version: 6
3
+ name: minimal-capability
4
+ description: "Use as the smallest v6-conformant capability fixture for skill-graph package tests. Activate this skill when verifying that lint, manifest generation, and routing accept the bare-minimum required v6 frontmatter. Do NOT use as a production skill (use a real capability skill from the canonical library)."
5
+ version: 1.0.0
6
+ type: capability
7
+ category: engineering
8
+ scope: portable
9
+ owner: skill-graph-fixture-suite
10
+ freshness: "2026-05-19"
11
+ drift_check:
12
+ last_verified: "2026-05-19"
13
+ eval_artifacts: none
14
+ eval_state: unverified
15
+ routing_eval: absent
16
+ stability: experimental
17
+ license: Apache-2.0
18
+ ---
19
+
20
+ # Minimal Capability Fixture
21
+
22
+ This fixture exercises the bare-minimum required v6 frontmatter. It contains
23
+ only the required fields, the recommended stability + license fields, and the
24
+ four capability-archetype body sections.
25
+
26
+ ## Coverage
27
+
28
+ The 13 required v6 frontmatter fields, plus `stability` and `license`. No
29
+ optional fields, no relations, no grounding, no Understanding fields, no
30
+ Health Block.
31
+
32
+ ## Philosophy
33
+
34
+ The simplest possible v6 skill should still pass lint. If this fixture ever
35
+ starts failing lint without a deliberate schema change, the lint check has
36
+ regressed or grown a new required field that this fixture should adopt
37
+ together with the canonical library.
38
+
39
+ ## Verification
40
+
41
+ ```bash
42
+ node scripts/skill-lint.js --path examples/fixture-skills/minimal-capability
43
+ # expected: 0 errors
44
+ ```
45
+
46
+ ## Do NOT Use When
47
+
48
+ - You need to exercise codebase grounding — see the `with-grounding` planned fixture in [`../README.md`](../README.md).
49
+ - You need to exercise typed relations — see the `with-relations` planned fixture in [`../README.md`](../README.md).
50
+ - You need to exercise flat Understanding fields or the Health Block — see the `comprehension-full` planned fixture in [`../README.md`](../README.md).
51
+ - You need a real production-grade authoring example — use a canonical skill from `skills/`.
@@ -0,0 +1,78 @@
1
+ ---
2
+ schema_version: 6
3
+ name: with-grounding
4
+ description: "Use as the minimal v6-conformant codebase-grounded fixture for skill-graph package tests. Activate this skill when verifying that lint enforces grounding requireds (domain_object, grounding_mode, truth_sources, failure_modes, evidence_priority) and non-empty keywords for scope: codebase. Do NOT use as a production skill (use a real grounded skill from the canonical library)."
5
+ version: 1.0.0
6
+ type: capability
7
+ category: engineering
8
+ scope: codebase
9
+ owner: skill-graph-fixture-suite
10
+ freshness: "2026-05-19"
11
+ keywords:
12
+ - grounding
13
+ - fixture
14
+ - truth-sources
15
+ - hermetic-test
16
+ grounding:
17
+ domain_object: "v6 grounding contract"
18
+ grounding_mode: repo_specific
19
+ truth_sources:
20
+ - path: "examples/fixture-skills/README.md"
21
+ anchor: "Invariants"
22
+ note: "The hermetic-fixture invariants document what every fixture in this directory must satisfy."
23
+ failure_modes:
24
+ - "If the v6 schema renames or removes a grounding sub-field, this fixture must move in lockstep with the schema bump."
25
+ - "If the fixture-skills README anchor 'Invariants' is renamed, the anchor reference above breaks and lint fails."
26
+ evidence_priority: repo_code_first
27
+ drift_check:
28
+ last_verified: "2026-05-19"
29
+ eval_artifacts: none
30
+ eval_state: unverified
31
+ routing_eval: absent
32
+ stability: experimental
33
+ license: Apache-2.0
34
+ ---
35
+
36
+ # With-Grounding Fixture
37
+
38
+ This fixture exercises the v6 conditional rule `scope: codebase → grounding
39
+ required`, plus the lint rule that `scope: codebase` skills must declare
40
+ non-empty `keywords`. Together those two rules form the smallest
41
+ routing-discoverable, drift-trackable v6 skill.
42
+
43
+ ## Coverage
44
+
45
+ The five required `grounding` sub-fields (`domain_object`, `grounding_mode`,
46
+ `truth_sources`, `failure_modes`, `evidence_priority`), an object-shaped
47
+ truth_source entry with `path` + `anchor` + `note`, and the non-empty
48
+ `keywords` array that scope: codebase demands. No relations, no Health Block,
49
+ no Understanding fields.
50
+
51
+ ## Philosophy
52
+
53
+ The grounding block is the contract that distinguishes a knowledge skill from
54
+ a hallucinated one. A `scope: codebase` skill is making claims about specific
55
+ local files; those claims rot when the files move. The grounding block records
56
+ *which* files anchor the claim, *how* to detect drift (anchor or line_range
57
+ hashing), and *what* failure modes appear when drift occurs. This fixture is
58
+ the smallest configuration that exercises every grounding required field
59
+ without depending on a sibling skills clone.
60
+
61
+ ## Verification
62
+
63
+ ```bash
64
+ node scripts/skill-lint.js --path examples/fixture-skills/with-grounding
65
+ # expected: 0 errors
66
+ ```
67
+
68
+ Lint must accept this fixture even when the published `@skill-graph/cli`
69
+ package is installed standalone (no sibling `../skills/skills/` clone). The
70
+ truth_source path resolves under the package's own `examples/fixture-skills/`
71
+ tree, not under the canonical skill library.
72
+
73
+ ## Do NOT Use When
74
+
75
+ - You need to test the bare-minimum frontmatter — use `minimal-capability`.
76
+ - You need to test typed relations — use `with-relations`.
77
+ - You need to test flat Understanding fields or the nested concept block — use `comprehension-full`.
78
+ - You need a production codebase-grounded skill — use a real grounded skill from `skills/` (e.g. `nextauth-patterns`, `query-tier-safety`).
@@ -0,0 +1,87 @@
1
+ ---
2
+ schema_version: 6
3
+ name: with-relations
4
+ description: "Use as the v6-conformant fixture exercising all four typed relation predicates (related, boundary, verify_with, depends_on) using the {skill, reason} object shape. Activate this skill when verifying that lint resolves cross-fixture relation targets without a sibling skills clone. Do NOT use as a production skill (use a real capability skill from the canonical library)."
5
+ version: 1.0.0
6
+ type: capability
7
+ category: engineering
8
+ scope: portable
9
+ owner: skill-graph-fixture-suite
10
+ freshness: "2026-05-19"
11
+ relations:
12
+ related:
13
+ - skill: minimal-capability
14
+ reason: "Same fixture-suite kind (capability/portable) — minimal-capability is the bare-minimum baseline this fixture extends with relation edges."
15
+ boundary:
16
+ - skill: with-grounding
17
+ reason: "Use with-grounding instead when the test target is grounding-block requireds or scope: codebase keyword enforcement — this fixture is portable and groundless by design."
18
+ verify_with:
19
+ - skill: comprehension-full
20
+ reason: "When this fixture's relation edges are exercised in a routing-eval pass, comprehension-full provides the flat Understanding fields the grader reads against."
21
+ depends_on:
22
+ - skill: minimal-capability
23
+ reason: "Composition signal: this fixture assumes the lint passes for the minimal-capability baseline; if minimal-capability regresses, this fixture is meaningless until the baseline is repaired."
24
+ drift_check:
25
+ last_verified: "2026-05-19"
26
+ eval_artifacts: none
27
+ eval_state: unverified
28
+ routing_eval: absent
29
+ stability: experimental
30
+ license: Apache-2.0
31
+ ---
32
+
33
+ # With-Relations Fixture
34
+
35
+ This fixture exercises every typed relation predicate in the v6 contract using
36
+ the canonical `{skill, reason}` object shape. Together with the sibling
37
+ fixtures (`minimal-capability`, `with-grounding`, `comprehension-full`) it
38
+ forms a closed cross-reference cluster — lint resolves every relation target
39
+ from the fixtures directory alone, with no dependency on the sibling
40
+ `../skills/skills/` canonical library.
41
+
42
+ ## Coverage
43
+
44
+ The four relation kinds with distinct semantics:
45
+
46
+ | Predicate | Meaning | Target here |
47
+ |---|---|---|
48
+ | `related` | Adjacency for browse / routing expansion | `minimal-capability` |
49
+ | `boundary` | Routing-layer handoff ("use that one instead because...") | `with-grounding` |
50
+ | `verify_with` | Cross-check: when applied, verify with another | `comprehension-full` |
51
+ | `depends_on` | Composition: this assumes the other is in scope | `minimal-capability` |
52
+
53
+ Each entry carries a non-empty `reason` string — lint warns on relations that
54
+ omit the reason field because routing decisions become unauditable without it.
55
+
56
+ ## Philosophy
57
+
58
+ Relations are the edges of the Skill Graph. The four predicates are
59
+ intentionally orthogonal: `related` is symmetric and weakly directional,
60
+ `boundary` is asymmetric and routing-routed, `verify_with` is symmetric and
61
+ quality-routed, `depends_on` is asymmetric and load-order-routed. Conflating
62
+ them would force the router to guess intent. This fixture is the smallest
63
+ configuration that demonstrates the distinction across every predicate at
64
+ once, hermetically, without leaking any canonical-skill name into the test
65
+ surface.
66
+
67
+ ## Verification
68
+
69
+ ```bash
70
+ node scripts/skill-lint.js --path examples/fixture-skills/with-relations
71
+ # expected: 0 errors
72
+ node scripts/skill-lint.js --path examples/fixture-skills
73
+ # expected: 0 errors across all four fixtures with relations resolved
74
+ ```
75
+
76
+ Lint must resolve every relation target from the union of configured roots
77
+ plus the explicit `--path` set. In a hermetic package-test environment
78
+ (no sibling skills clone), the four fixtures in this directory form a closed
79
+ cross-reference set: every `relations.*` target above names another fixture
80
+ that lives in the same directory.
81
+
82
+ ## Do NOT Use When
83
+
84
+ - You need to test the bare-minimum frontmatter — use `minimal-capability`.
85
+ - You need to test codebase grounding — use `with-grounding`.
86
+ - You need to test flat Understanding fields or the nested concept block — use `comprehension-full`.
87
+ - You need to test relation-target resolution against the canonical library — use any real skill from `skills/` (e.g. `naming-conventions` → `semantics`).