Files
Clay GoodandClaude Opus 5 b928165276 docs(explore): stop claiming explore never writes files (#1838)
* docs(explore): stop claiming explore never writes files

Sixteen lines across both documentation trees told users that
`/opsx:explore` creates no artifacts and writes no files, full stop.

That has been false since explore shipped (#467): its capture branch
writes the planning artifacts the user asked for, and can edit an
existing change's artifacts. #1503 later made it scaffold with
`openspec new change` first, closing #668 and #720.

The claim appeared in two shapes. Six lines denied the capability
outright ("Explore creates no artifacts and writes no code"). Ten more
said the same thing as a timing claim ("before any artifact exists"),
which reads as ordinary pitch copy and is what escaped the first pass.

Every site now carries one guarantee, worded the same way: explore
never writes code, and writes nothing else unless you ask, or say yes
when it offers. Four sites described only the user-initiated trigger,
which left the offer path - the one a reader actually hits - looking
like it did not exist.

docs/explore.md and docs/commands.md also gain a positive description
of capture where the denial used to sit, including what scaffolding
creates beyond the artifacts you named, and how capture differs from
handing off to propose (propose writes the set your schema requires;
capture writes only what you named).

Closes #1833

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* test(docs): keep the retired explore wording retired

A flat list of the phrasings that actually carried the claim, swept
over the eleven pages that pitch explore. Fails on main with all
sixteen offenders; clean on this branch.

Modeled on test/vocabulary-sweep.test.ts, and deliberately a list
rather than a grammar. An earlier draft built the grammar - section
splitting, code-fence tracking, a conditional-marker exemption so
"creates no artifacts unless you ask" would pass - and measured
against realistic prose it was imprecise in both directions while
returning the same verdict on the real input. The list has no
exemption logic to get wrong, and any maintainer can extend it.

Phrasings that are only wrong in the absolute ("writes nothing",
"creates nothing") are left to review, since the conditional form of
each is the wording the failure message recommends.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* test(docs): pin the explore capture contract, not the word

The guide check matched any "capture", so "explore automatically captures
every artifact" passed. Both explore.md and commands.md now must name the
user trigger, `openspec new change`, and the named-artifacts scope, with no
capture line claiming it happens unprompted, and keep "never writes code".

Also scope the explore.md guarantee to the setup files a new change needs,
and make the commands.md offer name the change and its scope, which the
template asks for on main and after #1832.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* test(docs): accept negated unprompted-capture wording, catch non-capture verbs

The unprompted check matched "automatically" on any capture line, so the
correct "Explore does not automatically capture artifacts" failed, while
"Explore automatically writes planning artifacts" was never scanned because
it lacks the word capture. Check each clause of lines naming explore or
capture for an unprompted write verb with no preceding negation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 15:45:53 +00:00

7.6 KiB

Glossary

Every OpenSpec term in one place, defined in plain language. Skim it once and the rest of the docs read faster.

Terms are grouped by topic, then alphabetized within each group.

The core nouns

Spec. A document describing how part of your system behaves. Specs live in openspec/specs/, are organized by domain, and are made of requirements and scenarios. The spec is the agreed-upon answer to "what does this software do?" See Concepts.

Source of truth. The openspec/specs/ directory as a whole. It holds the current, agreed-upon behavior of your system. Changes propose edits to it; archiving applies them.

Change. One unit of work, packaged as a folder under openspec/changes/<name>/. A change holds everything about that work: its proposal, design, tasks, and the spec edits it introduces. One change, one feature or fix.

Artifact. A document inside a change. The standard artifacts are the proposal, the delta specs, the design, and the tasks. They're created in dependency order and feed into each other.

Delta spec. A spec inside a change that describes only what's changing, using ADDED, MODIFIED, and REMOVED sections, rather than restating the entire spec. This is what lets OpenSpec edit existing systems cleanly. See Concepts.

Domain. A logical grouping for specs, like auth/, payments/, or ui/. You choose domains that match how you think about your system.

Inside a spec

Requirement. A single behavior the system must have, usually written with an RFC 2119 keyword: "The system SHALL expire sessions after 30 minutes." Requirements state the what, not the how.

Scenario. A concrete, testable example of a requirement in action, typically in Given/When/Then form. Scenarios make a requirement verifiable: you could write an automated test from one.

RFC 2119 keywords. The words MUST, SHALL, SHOULD, and MAY, which carry standardized meaning about how strict a requirement is. MUST and SHALL are absolute. SHOULD is recommended with room for exceptions. MAY is optional. The name comes from the internet standards document that defined them.

The artifacts

Proposal (proposal.md). The why and what of a change: its intent, scope, and high-level approach. The first artifact you create.

Design (design.md). The how: technical approach, architecture decisions, and the files you expect to touch. Optional for simple changes.

Tasks (tasks.md). The implementation checklist, with checkboxes. The AI works through it during /opsx:apply and checks items off as it goes.

The lifecycle

Archive. The act of finishing a change. Its delta specs merge into the main specs, and the change folder moves to openspec/changes/archive/YYYY-MM-DD-<name>/. After archiving, your specs describe the new reality. See Concepts.

Sync. Merging a change's delta specs into the main specs without archiving the change. Usually automatic (archive offers to do it), but available on its own as /opsx:sync for long-running changes. See Commands.

Workflow and commands

OPSX. The current standard OpenSpec workflow, built around fluid actions instead of rigid phases. Its slash commands all start with /opsx:. See OPSX Workflow.

Slash command. A command you type into your AI assistant's chat, like /opsx:propose. Slash commands drive the workflow. They are not terminal commands. See How Commands Work.

Explore (/opsx:explore). The thinking-partner command. It reads your codebase, compares options, and clarifies a fuzzy idea into a concrete plan. It never writes code, and writes nothing else unless you ask it to capture the exploration as a change, or say yes when it offers. The recommended starting point whenever you have a problem but not yet a plan. See Explore First.

CLI. The openspec program you run in your terminal. It sets up projects, lists and validates changes, opens the dashboard, and archives. The terminal half of OpenSpec. See CLI.

Skill. A folder of instructions (.../skills/openspec-*/SKILL.md) that your AI assistant auto-detects and follows. Skills are the emerging cross-tool standard for delivering the OpenSpec workflow to your assistant.

Command file. A per-tool slash command file (.../commands/opsx-*). The older delivery mechanism, still supported alongside skills. You rarely touch these directly.

Profile. The set of slash commands installed in your project. Core (the default) is propose, explore, apply, update, sync, archive. The expanded set adds new, continue, ff, verify, bulk-archive, onboard. Change it with openspec config profile.

Delivery. Whether OpenSpec installs skills, command files, or both for your tools. Configured globally and applied with openspec update.

Customization

Schema. The definition of which artifacts a workflow has and how they depend on one another. The built-in default is spec-driven (proposal → specs → design → tasks). You can fork it or write your own. See Customization.

Template. A Markdown file inside a schema that shapes what the AI generates for a given artifact. Editing a template changes the AI's output immediately, with no rebuild.

Project config (openspec/config.yaml). Per-project settings: the default schema, the context: injected into every planning request, and per-artifact rules:. The easiest way to teach OpenSpec about your stack and conventions. See Customization.

Context injection. Putting project background in config.yaml's context: field so it's automatically added to every artifact the AI generates. More reliable than hoping the AI reads a separate file.

Dependency graph. The directed graph formed by artifact requires: relationships. It's a DAG (directed acyclic graph: arrows only point forward, never in a loop), and OpenSpec uses it to know what you can create next.

Enablers, not gates. The principle that artifact dependencies show what becomes possible next, not what's required next. You can revisit and edit any artifact at any time. See Core Concepts at a Glance.

Coordination across repos (beta)

These terms apply only if your planning spans more than one repo. They're in beta. Most users can ignore them. See the Stores User Guide.

Store. A standalone repo whose whole job is planning. It has the same openspec/ shape you already know (specs and changes) plus a small identity file. You register it on your machine once, by name, and then any OpenSpec command can work in it from anywhere.

Reference. A declaration, in a code repo's openspec/config.yaml, of a store that repo draws on. References are read-only: the repo keeps its own root, and openspec instructions gains an index of the referenced store's specs, each with the exact command to fetch it.

Working context. What openspec context assembles for the current repo: its OpenSpec root plus every store it references, each with how to fetch it. The answer to "what am I working with?"

Workset. A personal, machine-local set of folders you open together (a store alongside the code repos you work on). Created explicitly with openspec workset create; nothing about those local paths is committed to the shared planning repo.

See also