Specification
format: https://specscore.md/features-index-specification
SpecScore Features
SpecScore.Studio: | Explore | Edit | Ask question | Request change |
Core features of the SpecScore specification framework. This table is the canonical Document Types Registry — every SpecScore document type is listed here with its Kind, specification URL, and Consumer Path.
| Feature | Status | Kind | URL | Consumer Path | Index | Description |
|---|---|---|---|---|---|---|
| Idea | Approved | Document | https://specscore.md/idea-specification |
spec/ideas/*.md |
ideas-index | An idea is a pre-spec, lintable one-pager that captures a problem, a recommended direction, an MVP scope, and the assumptions that must hold for the direction to be worth pursuing. Ideas are the optional front-door to SpecScore: they refine a vague concept into something concrete enough to promote into one or more Features. |
| Feature | Stable | Document | https://specscore.md/feature-specification |
spec/features/**/README.md |
features-index | A feature is the atomic unit of product specification in SpecScore. It describes a capability the product should have — what it does, why it matters, and how it behaves. Features live in the spec repository under spec/features/ as directories with a mandatory README.md. They can nest (sub-features), accept change requests via proposals, trigger plans, and drive execution through task management tools. |
| Acceptance Criteria | Stable | Structure | https://specscore.md/acceptance-criteria-specification |
— | — | Acceptance criteria (ACs) are optional inline sections within a feature README that bundle related requirements into composite verification conditions. An AC states what must be true for a group of requirements to be satisfied — without prescribing specific inputs, flows, or implementation details. Concrete proof is the scenario's job. |
| Requirement | Stable | Structure | https://specscore.md/requirement-specification |
— | — | A requirement is a discrete, testable rule or condition that a system must satisfy. Requirements live as named subsections within a feature's Behavior section — they are a naming convention, not a separate file artifact. Each requirement is addressable by ID, enabling traceability from acceptance criteria and scenarios back to the specific obligation they verify. |
| Scenario | Stable | Document | https://specscore.md/scenario-specification |
spec/features/**/_tests/*.md |
scenarios-index | A scenario is a concrete example of system behavior written in Given/When/Then format. Scenarios live in a feature's _tests/ directory as standalone markdown files, each describing a specific interaction flow with exact inputs and expected outputs. They are the executable proof layer — validating that requirements and acceptance criteria hold under real conditions. Scenarios are linked to the REQs or ACs they validate and are executable by the Rehearse test runner. |
| Entity | Approved | Document | https://specscore.md/entity-specification |
spec/features/**/*.entity.md |
— | > Frozen. This Doc-Kind is feature-frozen per decision 0003 — One Structural Language: its contract, lint rules, and specscore entity CLI remain supported unchanged, but it accepts no new capabilities. New structural modelling work uses ModelSpec; a legacy-to-ModelSpec migration path will be specified before formal deprecation. |
| Property | Approved | Document | https://specscore.md/property-specification |
spec/features/**/*.property.md |
— | > Frozen. This Doc-Kind is feature-frozen per decision 0003 — One Structural Language: its contract, lint rules, and specscore property CLI remain supported unchanged, but it accepts no new capabilities. New structural modelling work uses ModelSpec; a legacy-to-ModelSpec migration path will be specified before formal deprecation. |
| Source References | Stable | Structure | https://specscore.md/source-references-specification |
— | — | Source references are inline annotations in any source file that link code to SpecScore resources (features, plans, documents). A single prefix — specscore: — lets any tool, linter, or pre-commit hook discover references by binary search, resolve them against the project's spec repository, and transform them into clickable URLs pointing to specscore.org. |
| Plan | Stable | Document | https://specscore.md/plan-specification |
spec/plans/**/README.md |
plans-index | A plan is a composite task -- a task that contains subtasks. It bridges feature specifications and change requests to executable work. Plans are mutable documents; snapshots provide immutable reference points for review, approval, and retrospective. |
| Plans Index | Draft | Index | https://specscore.md/plans-index-specification |
spec/plans/README.md |
— | The plans index — spec/plans/README.md — is the canonical entry point for understanding what implementation work is planned, in flight, approved, or superseded in a spec repository. It inherits the shared shape of every SpecScore index from the Index feature and declares only the plans-specific overrides: the Contents column set, a Recently Closed section, sub-plan indentation, and an optional per-plan summary convention. |
| Ideas Index | Draft | Index | https://specscore.md/ideas-index-specification |
spec/ideas/README.md |
— | The ideas index — spec/ideas/README.md — is the canonical entry point for understanding the pre-spec thinking in a SpecScore repository. It inherits the shared shape of every SpecScore index from the Index feature and declares only the ideas-specific overrides: the Index column set and the archived-exclusion rule that keeps Archived Ideas out of the active index. |
| Features Index | Draft | Index | https://specscore.md/features-index-specification |
spec/features/README.md |
— | The features index — spec/features/README.md — is the canonical entry point for understanding the feature surface of a SpecScore repository. It inherits the shared shape of every SpecScore index from the Index feature and declares only the features-specific override: the column set (Feature, Status, Description). Consumer repos that use SpecScore carry a features-index that follows this spec; no extra metadata is required. |
| Scenarios Index | Draft | Index | https://specscore.md/scenarios-index-specification |
spec/features/**/_tests/README.md |
— | The scenarios index is the per-feature aggregation of test scenarios living under {feature}/_tests/. One scenarios index exists per feature that has scenarios, at the path {feature-path}/_tests/README.md. It inherits the shared shape of every SpecScore index from the Index feature and declares only scenario-specific overrides: a compact Scenario / Validates column pair that traces each scenario back to the requirements and acceptance criteria it exercises. |
| Task | Stable | Document | https://specscore.md/task-specification |
spec/plans/**/tasks/*.md |
— | A task is the atomic unit of work in SpecScore. It is a leaf node -- actionable work that an agent or human picks up and completes. Tasks live as directories with a README.md and carry properties that describe their dependencies, acceptance criteria, status, and artifacts. |
| Lesson | Approved | Document | https://specscore.md/lesson-specification |
spec/lessons/*/README.md |
lessons-index | A Lesson is the durable, compact rule learned from a process gap. It is separate from append-only Occurrences that evidence the gap, so a recurring problem enriches evidence without repeatedly rewriting the lesson that names the improvement. |
| Lessons Index | Approved | Index | https://specscore.md/lessons-index-specification |
spec/lessons/README.md |
— | The Lessons Index at spec/lessons/README.md is the concise inventory of process-improvement Lessons. It presents recurrence as derived read-model data, never as a hand-maintained counter. |
| Repo Config | Draft | Document | https://specscore.md/repo-config |
specscore.yaml |
— | Defines specscore.yaml, the single mandatory repository-level config file for SpecScore projects. Specifies the file name, the mandatory schema-pointer header comment, the optional project identity block, related-project navigation hints, top-level dir-name overrides, modules with code roots, studio configuration, publication policy, and inference defaults so a minimal repo can ship with an effectively empty config. |
| Adherence Footer | Draft | Meta | — | — | — | The adherence footer is a single italic line at the bottom of every SpecScore document that declares — in one machine-verifiable, human-readable sentence — which specification format the document conforms to. It is the mechanism every Document-Kind feature uses so authors do not re-specify the rule per document type, and so lint can validate conformance from the footer alone. |
| Document Types Registry | Draft | Meta | — | — | — | The document types registry is the single canonical list of every document type SpecScore defines — Features, Plans, Ideas, Tasks, Scenarios, Indexes, and the Meta features that define SpecScore itself. The registry is a Meta overlay on the features-index: in the SpecScore meta-spec repository, spec/features/README.md serves simultaneously as the features-index (base shape) AND the registry (four additional columns capturing the doc type taxonomy). This feature specifies the overlay — the additional columns, the Kind taxonomy, and the lint cross-check that prevents drift between registry rows and feature-declared URLs. |
| Index | Draft | Meta | — | — | — | The Index feature specifies the shared shape of every Index-Kind feature in SpecScore — the structural rules that apply equally to the plans index, the ideas index, and any future index (tasks, features, proposals). It defines what every Index-Kind feature has in common: where the canonical index file lives, which sections it must contain, the completeness rule that tooling enforces, and the adherence-footer delegation every index inherits. |
| Studio Toolbar | Approved | Meta | — | — | — | Replaces the single "View in SpecStudio" link at the top of every feature README with a fixed four-item toolbar — Explore, Edit, Ask question, Request change — linking into the SpecScore.Studio web app at specscore.studio/app/. Defines the canonical byte form of the toolbar line, the URL grammar (/app/{host}/{org}/{repo}/{artifact_path}?op={verb}, per the canonical scheme in Studio URL Scheme decision (D-0001)), the brand attribution rendering rule, the new studio-toolbar lint rule (replacing view-link), and the --fix autofix that rewrites legacy lines into the canonical form. |
| Decision | Approved | Document | https://specscore.md/decision-specification |
spec/decisions/<NNNN>-<slug>.md |
— | A decision is a durable, lintable record of a choice made between two or more options — what was chosen, why, what was declined, and what consequences were predicted and then observed. Decisions are SpecScore's Architecture-Decision-Record primitive, adapted to SpecScore conventions (markdown-body metadata, REQ blocks, AC blocks, adherence footer). |
| Decisions Index | Approved | Index | https://specscore.md/decisions-index-specification |
spec/decisions/README.md |
— | The decisions index — spec/decisions/README.md — is the canonical entry point for reviewing the architectural, product, and process choices made in a SpecScore repository. It inherits the shared shape of every SpecScore index from the Index feature and declares only the decisions-specific overrides: the Index column set, the numeric ordering rule, and the exclusion of Rejected, Superseded, and Deprecated Decisions from the active index. |
| Grade body-metadata field | Approved | — | https://specscore.md/feature-specification | — | — | Defines an optional, single-value quality Grade as a canonical body-metadata field on gradeable SpecScore artifacts. The value is validated by specscore spec lint against a value set that defaults to A, B, C, D, F and is configurable per repository in specscore.yaml. The field is defined generically — it is not coupled to any reviewer-gate workflow or to an artifact's Status. |
| Publication Policy Config | Approved | — | https://specscore.md/feature-specification | — | — | Defines durable project and user configuration for SpecScore publication policy: ordered action lists, event and command scopes, branch safety, precedence, and validation rules. This Feature owns the schema consumed by SpecStudio skills and the specscore CLI; it intentionally does not define conversational prompts or perform git operations. |
| Drift Recap | In Review | — | https://specscore.md/feature-specification | — | — | A drift recap is a machine-generated, per-acceptance-criterion record of how a Feature's specification compares to the code that claims to satisfy it, captured at a specific commit. It already exists in practice — produced by the specstudio:recap skill — but SpecScore has never defined it. This Feature formalizes it as a first-class, status-less SpecScore document type: a registry row, a format: frontmatter contract, a descriptive provenance metadata block, and a lint rule that validates the YAML summary block the producing tooling already emits. Per Decision D-0002, a drift recap is always written to the user's hub repo (a configured location; default a dedicated repo; may be configured to equal the current code repo) rather than co-located in spec/. |
| Session Recap | In Review | — | https://specscore.md/feature-specification | — | — | A session recap is an automatically generated journal rollup over a working session window — its goal, decisions, scope changes, what shipped, the commits, verification, and follow-ups — the persisted "summary" projection of the journal. Per Decision D-0002, it is status-less (no Draft → Final → Archived lifecycle, no status: frontmatter), gains an optional human notes/comments section, and is keyed <timestamp>-<title>.md. It lives in the user's hub repo with a per-user subdirectory so one shared repo can hold many people's recaps without collisions. This Feature defines the artifact type — frontmatter, body shape, storage rule, the recaps: config block — and a specscore recap new --session scaffold. SpecScore defines the artifact; a producing skill writes it. |
| Journal and Summary | In Review | — | https://specscore.md/feature-specification | — | — | The journal is an append-only, low-cost record of SpecScore activity, written one event per file (date-sharded) at the existing event-emission points, plus an on-demand summary projection (day / week / month) computed at query time. It is the rollup spine of the recap model named by Decision D-0002: the session recap and month report are projections of the journal over a time window, and recap.completed / verify.completed events carry report_path + per-AC verdict counts so portfolio rollups link into the detail without scanning recap filenames for the time dimension. This Feature defines Phase 1 (single-repo journal, project-only config) — the event store and schema, write-time stream resolution, deterministic auto-write, explicit write, and the two read commands. The cross-repo journal.repo capability (Phase 2) is a proposal attached to this Feature, gated on the layered-config Feature (Under Review; not yet implemented). |
| Layered Config | In Review | — | https://specscore.md/feature-specification | — | — | Layered config resolves SpecScore configuration from three layers — specscore.local.yaml (repo, uncommitted) → specscore.yaml (repo, committed) → ~/.specscore.yaml (user/machine) — with the most specific layer winning per key and maps deep-merged. It also introduces user-scoped keys: keys that carry per-user/per-machine paths (e.g. recaps.repo, recaps.user, journal.repo, journal.stream) and therefore MUST NOT be committed into the shared project specscore.yaml, but may be set in specscore.local.yaml or ~/.specscore.yaml. This is the foundational Feature that the recap/portfolio stack depends on: it is what lets a developer point their hub repo and journal at personal locations without leaking those paths to teammates. Until it lands, those keys are documented-but-rejected by their owning Features. |
| Artifact Frontmatter Convention | Approved | — | https://specscore.md/feature-specification | — | — | Every SpecScore artifact carries two YAML-frontmatter fields: format: — the spec URL for its type (machine-readable, mirrored by the human-visible footer line *This document follows the …*, which is retained, not replaced) — and, for status-bearing types, status: — a mirror of the body **Status:** token. The body **Status:** stays canonical; frontmatter status: is a derived mirror kept in lockstep by the CLI and validated by lint. The footer keeps a human-visible format surface for renderers that hide frontmatter; lint keeps the footer URL and frontmatter format: in sync. This reconciliation follows the Approved Format Declaration — Footer + Frontmatter Mirror Idea, which supersedes the earlier footer-removal stance. This is the generic convention the drift-recap and session-recap Features name as a forward dependency: it defines the format: requirement and the Status-concept classification that determines which types carry status: and which (the status-less ones) must not. |
| Capability and Platform Implementations | Implementing | — | https://specscore.md/feature-specification | — | — | Defines two roles on the existing SpecScore Feature: a Capability (a platform-agnostic feature definition) and an Implementation (one platform's realization of it). An Implementation links upward with an **Implements:** reference reusing the source-references notation, so the link works across repositories. The Capability owns a single author-declared Implementation Matrix that records each platform's parity level and a one-line brief — making cross-surface feature drift visible at the spec layer instead of silent. |
| Capability Delivery Matrix | Draft | — | https://specscore.md/feature-specification | — | — | Defines a generated per-CLI matrix that traces every user-facing capability across runtime commands and flags, help, AI skills, and executable tests, so implemented and advertised behavior cannot drift silently. |
| New-Artefact Template Gallery | Stable | — | https://specscore.md/feature-specification | — | — | Publishes the canonical new-artefact templates as raw Markdown files on specscore.md — one per artefact type at /new/<type>.md — with a browsable index at /new/. Each published file is the bare, ready-to-fill skeleton (canonical section headings plus <!-- … --> authoring prompts), so humans, agents, and (via a later Feature) the CLI can fetch a valid starting point for a new artefact from one authoritative URL. Each skeleton also carries the YAML frontmatter every artefact is required to declare under the Approved Artifact Frontmatter Convention — a format: spec-URL key on every type, plus a status: mirror on status-bearing types — so a filled-in template is convention-clean from the first byte. |
| CLI Template Runtime-Fetch | Stable | — | https://specscore.md/feature-specification | — | — | The specscore … new scaffolders fetch the canonical artefact template from the published gallery (specscore.md/new/<type>.md) at create-time, fill the known fields (title, date, owner), and write the file — falling back to an embedded copy with a stderr warning when the site is unreachable. This makes the published gallery the live source of truth for templates, so fixes ship via the website without a CLI release, while preserving today's offline-capable UX. |
| Configurable Ideas Path | Approved | — | https://specscore.md/feature-specification | — | — | Resolve each module's ideas directory through repo-config's per-module path_overrides.ideas_path (default spec/ideas) via a single resolution contract that every reader uses, instead of a hardcoded spec/ideas literal. |
| Status Vocabulary | Approved | — | https://specscore.md/feature-specification | — | — | A single canonical definition of the lifecycle status values used by every status-bearing SpecScore artifact (Idea, Feature, Plan, Decision, sidekick Seed). Status values are organized by lifecycle role; each role has one shared term reused across artifacts, and every deviation from the shared term is an explicitly documented conscious divergence with a rationale (not silent drift). This Feature also establishes that archival is orthogonal to status — an axis of storage/visibility, never a status value. It is the source of truth the per-artifact Features (idea, feature, plan, decision) conform to, complementing artifact-frontmatter-convention, which governs where status is carried (body-canonical + frontmatter mirror) while this Feature governs which values are legal. |
| Implementation Commit Provenance | Approved | — | https://specscore.md/feature-specification | — | — | An optional, single provenance reference linking an implemented Task to the actual code commit that implemented it — a cross-repo <repo>@<sha> reference (optional branch) carried on the Task. When code is lost to a merge/rebase, the recorded reference is durable evidence that the work existed and a pointer to recover it. A Plan's implementation evidence is the derived rollup of its tasks' provenance references; it is a distinct axis from the existing plan ## Snapshots Git Hash, which records spec-document state. |
| Unify Task Status Vocabulary | Approved | — | https://specscore.md/feature-specification | — | — | The 7-value Task status enum — planning, queued, in_progress, blocked, complete, failed, aborted — is the single canonical task-status vocabulary across every surface: the Task entity, plan-inline ### Task N: blocks, the specscore plan new scaffold, the plan execution-band rollup, the task change-status verb, and the implement skill. This Feature retires the divergent pending/in-progress/done/blocked token set that the scaffold and implement skill use today, defines the canonical lifecycle the implement skill follows, and makes specscore spec lint --fix auto-migrate legacy tokens. |
| GraphSpec | Draft | Document | https://specscore.md/feature-specification |
spec/features/graphspec/ |
— | GraphSpec is a bootstrap specification language for describing connected domain models. |
| ModelSpec Validation | Draft | Document | https://specscore.md/feature-specification |
spec/features/modelspec-validation/ |
— | SpecScore recognizes ModelSpec as a first-class independent specification and provides |
Feature Hierarchy
spec/features/
├── idea/ # How to structure pre-spec ideation artifacts
├── feature/ # How to structure and write features
├── requirement/ # How to define addressable rules in Behavior sections
├── acceptance-criteria/ # How to define abstract verification conditions
├── scenario/ # How to write concrete behavior examples
├── entity/ # How to define typed business objects with YAML-frontmatter source of truth
├── property/ # How to define reusable single-field property definitions
├── source-references/ # How to link code to specifications
├── capability-delivery-matrix/ # CLI runtime/help/skill/test traceability
├── plan/ # How to structure planning documents
├── plans-index/ # How to structure the plans index
├── ideas-index/ # How to structure the ideas index
├── features-index/ # How to structure this features index
├── scenarios-index/ # How to structure per-feature scenarios indexes
├── task/ # How to define discrete units of work within a plan
├── lesson/ # Compact process-improvement rules with occurrence evidence
├── lessons-index/ # How to structure the lessons index
├── repo-config/ # Repo-level config (specscore.yaml): identity, modules, studio, publication policy
├── adherence-footer/ # Shared footer mechanism
├── document-types-registry/ # Canonical list of document types (this registry)
├── index/ # Shared shape of every Index-Kind feature
└── publication-policy-config/ # Durable project and user publication policy config
The specscore CLI is specified separately at specscore/specscore-cli.
Integration with Orchestration Tools
SpecScore specs are format-agnostic. These features define the mental model and conventions:
- Standalone: Use SpecScore specs with any orchestration tool (Linear, Jira, custom)
- With Rehearse: Add automated testing and validation to SpecScore specs
- With Synchestra: Add multi-agent orchestration and coordination
See synchestra.io for orchestration on top of SpecScore.
Open Questions
None at this time.
This document follows the https://specscore.md/features-index-specification