Spec-driven development on OpenSpec, with mechanical spec-as-source enforcement: a custom 'spec-as-source' OpenSpec schema adds file-ownership (targets) and test-verification ([@test]) metadata to every capability spec, three scripts (link check, ownership check, manifest build) keep code and specs from drifting apart, plus requirement-gathering, spec-writer, work-review, and a session-handoff skill with a proactive context-warning hook and a packaged handoff memory: the skill ships the exporter, importer, graph model, facts pipeline, Neo4j Compose runtime and operating guide to load handoffs into a local, authenticated Neo4j graph and query them.
68
85%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
{
"$comment": "GENERATED FROM SPEC — DO NOT EDIT DIRECTLY; Source: openspec/specs/handoff-graph-model/spec.md",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.invalid/handoff-graph-facts-v1.schema.json",
"title": "Handoff graph facts v1",
"type": "object",
"additionalProperties": false,
"required": [
"facts_version",
"model_version",
"namespace",
"source",
"handoff",
"nodes",
"edges",
"external"
],
"properties": {
"facts_version": {
"type": "integer",
"enum": [
1
]
},
"model_version": {
"type": "integer"
},
"namespace": {
"type": "string",
"minLength": 1
},
"source": {
"type": "object",
"additionalProperties": false,
"required": [
"kind",
"file",
"directory",
"sha256"
],
"properties": {
"kind": {
"type": "string",
"enum": [
"markdown",
"sidecar"
]
},
"file": {
"type": "string",
"pattern": "^HANDOFF-[0-9]+\\.(md|graph\\.json)$"
},
"directory": {
"type": "string",
"minLength": 1
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
}
}
},
"handoff": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"filename"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
},
"filename": {
"type": "string",
"pattern": "^HANDOFF-[0-9]+\\.md$"
}
}
},
"nodes": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"type",
"rule",
"props"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
},
"type": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"rule": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"props": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"integer",
"array"
],
"items": {
"type": "string"
}
}
}
}
}
},
"edges": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"type",
"start",
"end",
"rule"
],
"properties": {
"type": {
"type": "string",
"pattern": "^[A-Z][A-Z0-9_]*$"
},
"start": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
},
"end": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
},
"rule": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"props": {
"type": "object",
"additionalProperties": {
"type": [
"string",
"integer",
"number"
]
}
}
}
}
},
"external": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"filename"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
},
"filename": {
"type": "string",
"pattern": "^HANDOFF-[0-9]+\\.md$"
},
"type": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
}
}
}
}
}
}.tessl-plugin
rules
skills
handoff
handoff-skill
openspec-apply-change
openspec-archive-change
openspec-explore
openspec-propose
openspec-sync-specs
plan-judge
plan-mode
prompt-engineer
prompt-loop
requirement-gathering
spec-as-source-setup
templates
openspec-schema
spec-as-source
templates
spec-ci-sync
spec-loop
spec-rebuild
spec-verify
spec-writer
work-review