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-export/spec.md",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.invalid/handoff-graph-export.schema.json",
"title": "Handoff graph export v1",
"type": "object",
"required": ["schema_version", "project", "session", "handoff", "records"],
"additionalProperties": false,
"properties": {
"schema_version": {"type": "integer", "enum": [1]},
"project": {
"type": "object",
"required": ["id"],
"additionalProperties": false,
"properties": {"id": {"type": "string", "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}}
},
"session": {
"type": "object",
"required": ["id"],
"additionalProperties": false,
"properties": {"id": {"type": "string", "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}}
},
"handoff": {
"type": "object",
"required": ["id", "filename"],
"additionalProperties": false,
"properties": {
"id": {"type": "string", "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},
"filename": {"type": "string", "pattern": "^HANDOFF-[0-9]+\\.md$"}
}
},
"records": {
"type": "array",
"items": {
"type": "object",
"required": ["id", "type", "text", "provenance"],
"additionalProperties": false,
"properties": {
"id": {"type": "string", "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},
"type": {"type": "string", "enum": ["decision", "durable_fact", "next_action"]},
"text": {"type": "string", "minLength": 1},
"provenance": {
"type": "object",
"required": ["file", "section"],
"additionalProperties": false,
"properties": {
"file": {"type": "string", "pattern": "^HANDOFF-[0-9]+\\.md$"},
"section": {"type": "string", "minLength": 1}
}
}
}
}
}
}
}.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