Skip to content

Commit 089c7bb

Browse files
committed
docs(openspec): correct the remaining recipe .txt references to .md
NOT A NORMATIVE CHANGE. Every file under `packages/cli/src/agent/` has been `.md` since the Vale-coverage change, and the build globs `../agent/*.md`; verified there are 22 recipe files and zero `.txt` among them. The specs still described the mechanism in terms of `.txt`, so the obligations are unchanged and only the filenames they name are now the real ones. 25 occurrences across five standing specs: cli-agent (recipe lookup, embedding, template and anonymous-variant requirements), cli (the Vite embedding scenario), cli-knowledge-prompts (purpose, export, anonymous variants, topic membership), cli-rules (the improve-rule recipe) and skills (where recipes live). NONE of them sit in a requirement this branch's change wrote a delta for. Checked per line rather than assumed: the deltas touch 'CLI info subcommand outputs version as JSON', 'Recipe substitution uses sprintf-js named arguments', the three cli-onboard requirements, and an added cli-knowledge-prompts requirement, and no corrected line falls in any of them. So there is no archived copy to keep in step here. DELIBERATELY LEFT: `requirements.txt` in cli-detect. That is a Python dependency manifest, which really is a `.txt` file, and rewriting it would introduce an error rather than remove one. `openspec/changes/archive/` is untouched, as before: it records what each change said when it landed.
1 parent 9c20e2d commit 089c7bb

5 files changed

Lines changed: 24 additions & 24 deletions

File tree

‎openspec/specs/cli-agent/spec.md‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ Defines the `agent` subcommand for the `@taskless/cli` package, including recipe
1010

1111
The CLI SHALL support an `agent` subcommand that accepts at most one positional argument identifying a topic AND an optional `--anonymous` boolean flag. Topics SHALL be addressed by a single token; the subcommand SHALL NOT join multiple positionals into a topic key. When a topic is provided, the subcommand SHALL look up a matching recipe file embedded at build time using the following resolution order:
1212

13-
1. If `--anonymous` is set AND `<topic>.anonymous.txt` exists in the embedded map, return that file.
14-
2. Otherwise, return `<topic>.txt`.
13+
1. If `--anonymous` is set AND `<topic>.anonymous.md` exists in the embedded map, return that file.
14+
2. Otherwise, return `<topic>.md`.
1515
3. If neither exists, exit with code 1 and an error message suggesting `taskless agent` for the topic index.
1616

1717
When no positional argument is provided, the subcommand SHALL print a topic index containing a one-paragraph human slug followed by a topic disambiguation table mapping topic names to their summaries.
@@ -21,18 +21,18 @@ The subcommand is named for its reader. It serves agents fetching a procedure, n
2121
#### Scenario: Agent subcommand for a topic returns the recipe
2222

2323
- **WHEN** a user runs `taskless agent check`
24-
- **THEN** the CLI SHALL print the contents of `check.txt` to stdout
24+
- **THEN** the CLI SHALL print the contents of `check.md` to stdout
2525

2626
#### Scenario: Multi-word topic paths are not resolved
2727

2828
- **WHEN** a user runs `taskless agent rule create`
29-
- **THEN** the CLI SHALL NOT look up `rule-create.txt` by joining the positionals
29+
- **THEN** the CLI SHALL NOT look up `rule-create.md` by joining the positionals
3030
- **AND** it SHALL exit non-zero rather than guessing a topic
3131

3232
#### Scenario: Formerly nested topics are addressed by one token
3333

3434
- **WHEN** a user runs `taskless agent improve-rule`
35-
- **THEN** the CLI SHALL look up `improve-rule.txt` and print its contents
35+
- **THEN** the CLI SHALL look up `improve-rule.md` and print its contents
3636

3737
#### Scenario: The former command name is gone
3838

@@ -41,7 +41,7 @@ The subcommand is named for its reader. It serves agents fetching a procedure, n
4141

4242
### Requirement: Recipe files are embedded at build time
4343

44-
Recipe files SHALL be located at `packages/cli/src/agent/` as plain `.txt` files. The Vite build SHALL embed these files into the CLI bundle via `import.meta.glob` with raw imports. A recipe file SHALL exist for every registered command and subcommand.
44+
Recipe files SHALL be located at `packages/cli/src/agent/` as `.md` files. The Vite build SHALL embed these files into the CLI bundle via `import.meta.glob` with raw imports. A recipe file SHALL exist for every registered command and subcommand.
4545

4646
#### Scenario: Recipe files are available without filesystem access
4747

@@ -51,15 +51,15 @@ Recipe files SHALL be located at `packages/cli/src/agent/` as plain `.txt` files
5151
#### Scenario: Recipe file naming convention
5252

5353
- **WHEN** a recipe file is created for the `rule create` subcommand
54-
- **THEN** the file SHALL be named `rule-create.txt` in `packages/cli/src/agent/`
54+
- **THEN** the file SHALL be named `rule-create.md` in `packages/cli/src/agent/`
5555

5656
### Requirement: Recipe files follow a consistent format
5757

58-
Every recipe file at `packages/cli/src/agent/<topic>.txt` SHALL follow the canonical recipe template: a single-line header `# Topic: <name> (CLI v%(CLI_VERSION)s / topic v<n>)`, followed by `## Goal`, `## Preconditions`, `## Steps`, optional `## Input schema` (for recipes that take `--from`), `## Errors`, and `## See Also` sections in that order. Recipe templates SHALL use sprintf-js `%(KEY)s` named-argument placeholders for all substitution. The header SHALL embed `%(CLI_VERSION)s` for the CLI version. Topics that document a `--from` input SHALL embed `%(INPUT_SCHEMA)s` inside the `## Input schema` fenced code block. The topic version integer in the header SHALL be a literal value maintained by the recipe author and bumped when the recipe changes meaningfully.
58+
Every recipe file at `packages/cli/src/agent/<topic>.md` SHALL follow the canonical recipe template: a single-line header `# Topic: <name> (CLI v%(CLI_VERSION)s / topic v<n>)`, followed by `## Goal`, `## Preconditions`, `## Steps`, optional `## Input schema` (for recipes that take `--from`), `## Errors`, and `## See Also` sections in that order. Recipe templates SHALL use sprintf-js `%(KEY)s` named-argument placeholders for all substitution. The header SHALL embed `%(CLI_VERSION)s` for the CLI version. Topics that document a `--from` input SHALL embed `%(INPUT_SCHEMA)s` inside the `## Input schema` fenced code block. The topic version integer in the header SHALL be a literal value maintained by the recipe author and bumped when the recipe changes meaningfully.
5959

6060
#### Scenario: Recipe contains all template sections
6161

62-
- **WHEN** any `<topic>.txt` file is read
62+
- **WHEN** any `<topic>.md` file is read
6363
- **THEN** it SHALL begin with a `# Topic:` header containing `%(CLI_VERSION)s` and the topic version integer
6464
- **AND** SHALL contain `## Goal`, `## Preconditions`, `## Steps`, `## Errors`, and `## See Also` sections in that order
6565

@@ -206,20 +206,20 @@ Fetching a routing recipe SHALL emit the command's single intent event, `cli_age
206206

207207
### Requirement: Anonymous variant lookup uses a compile-time map
208208

209-
The `agent` command SHALL construct, at build time, a Set of topic names that have a corresponding `<topic>.anonymous.txt` file. Lookup at runtime SHALL be O(1). The Set SHALL be derived from `import.meta.glob` matching `*.anonymous.txt` in the recipe directory.
209+
The `agent` command SHALL construct, at build time, a Set of topic names that have a corresponding `<topic>.anonymous.md` file. Lookup at runtime SHALL be O(1). The Set SHALL be derived from `import.meta.glob` matching `*.anonymous.md` in the recipe directory.
210210

211211
#### Scenario: Topics with variants are detected at build time
212212

213213
- **WHEN** the CLI bundle is built
214-
- **AND** a file `improve-rule.anonymous.txt` exists
214+
- **AND** a file `improve-rule.anonymous.md` exists
215215
- **THEN** the embedded variants set SHALL contain `improve-rule`
216216

217217
#### Scenario: Topics without variants are absent from the map
218218

219219
- **WHEN** the CLI bundle is built
220-
- **AND** no `check.anonymous.txt` file exists
220+
- **AND** no `check.anonymous.md` file exists
221221
- **THEN** the embedded variants set SHALL NOT contain `check`
222-
- **AND** `taskless agent check --anonymous` SHALL fall back to `check.txt`
222+
- **AND** `taskless agent check --anonymous` SHALL fall back to `check.md`
223223

224224
### Requirement: Embedded JSON schemas are generated via zod-to-json-schema
225225

‎openspec/specs/cli-knowledge-prompts/spec.md‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Purpose
44

5-
The CLI's `agent/*.txt` recipes are the authoritative guidance Taskless gives an
5+
The CLI's `agent/*.md` recipes are the authoritative guidance Taskless gives an
66
agent about authoring and operating rules. Until now the only way to read them
77
was to run `taskless agent`, which puts them out of reach of anything that cannot
88
spawn the CLI — notably the service-side generator, which needs the same text to
@@ -20,7 +20,7 @@ silently become public API.
2020

2121
### Requirement: The package exposes knowledge prompts via a dedicated import
2222

23-
The package SHALL expose its knowledge prompts (the `agent/*.txt` recipes) through a subpath export `@taskless/cli/prompts`, built into `dist` and listed in `files`, so consumers can import them without invoking the CLI.
23+
The package SHALL expose its knowledge prompts (the `agent/*.md` recipes) through a subpath export `@taskless/cli/prompts`, built into `dist` and listed in `files`, so consumers can import them without invoking the CLI.
2424

2525
#### Scenario: Importing a prompt by topic
2626

@@ -112,7 +112,7 @@ The `@taskless/cli/prompts` module SHALL contain only embedded prompt data, type
112112

113113
### Requirement: Anonymous variants are accessible distinctly from canonical
114114

115-
Where a `<topic>.anonymous.txt` variant exists, the export SHALL make it retrievable distinctly via `PromptOptions.anonymous`, falling back to the canonical recipe when no variant exists.
115+
Where a `<topic>.anonymous.md` variant exists, the export SHALL make it retrievable distinctly via `PromptOptions.anonymous`, falling back to the canonical recipe when no variant exists.
116116

117117
#### Scenario: Anonymous variant retrieval and fallback
118118

@@ -141,18 +141,18 @@ What the requirement actually protects is not the version number but the notice.
141141

142142
### Requirement: Topic membership is explicit and verified against the recipe files
143143

144-
`PromptTopic` SHALL be derived from an explicit, hand-maintained list of exported topics rather than inferred from whatever recipe files are present, so that adding or removing an `agent/*.txt` file cannot silently change the public API. Recipe files deliberately withheld from the export SHALL be recorded in an explicit internal-topics list.
144+
`PromptTopic` SHALL be derived from an explicit, hand-maintained list of exported topics rather than inferred from whatever recipe files are present, so that adding or removing an `agent/*.md` file cannot silently change the public API. Recipe files deliberately withheld from the export SHALL be recorded in an explicit internal-topics list.
145145

146-
An automated check SHALL assert that the set of canonical `agent/*.txt` topics on disk is exactly the union of the exported topics and the internal-topics list, failing when the two diverge in either direction.
146+
An automated check SHALL assert that the set of canonical `agent/*.md` topics on disk is exactly the union of the exported topics and the internal-topics list, failing when the two diverge in either direction.
147147

148148
#### Scenario: A new recipe file is added without being classified
149149

150-
- **WHEN** a new canonical `agent/<topic>.txt` is added and appears in neither the exported topics nor the internal-topics list
150+
- **WHEN** a new canonical `agent/<topic>.md` is added and appears in neither the exported topics nor the internal-topics list
151151
- **THEN** the completeness check SHALL fail, requiring the author to either export the topic or record it as internal
152152

153153
#### Scenario: An exported topic loses its recipe file
154154

155-
- **WHEN** a topic remains in `PromptTopic` but its canonical `agent/<topic>.txt` no longer exists
155+
- **WHEN** a topic remains in `PromptTopic` but its canonical `agent/<topic>.md` no longer exists
156156
- **THEN** the completeness check SHALL fail, rather than the topic rendering empty or undefined at runtime
157157

158158
#### Scenario: A deliberately internal recipe stays unexported

‎openspec/specs/cli-rules/spec.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,12 +195,12 @@ The API calls for rule generation (`POST /cli/api/request` and `GET /cli/api/req
195195

196196
### Requirement: Rules improve has an agent recipe
197197

198-
`taskless agent improve-rule` SHALL return the recipe per `cli-agent` requirements. The recipe file is `improve-rule.txt`, with an `improve-rule.anonymous.txt` variant for the local-only flow.
198+
`taskless agent improve-rule` SHALL return the recipe per `cli-agent` requirements. The recipe file is `improve-rule.md`, with an `improve-rule.anonymous.md` variant for the local-only flow.
199199

200200
#### Scenario: The recipe resolves by its single-token name
201201

202202
- **WHEN** a user runs `taskless agent improve-rule`
203-
- **THEN** the CLI SHALL print the contents of `improve-rule.txt`
203+
- **THEN** the CLI SHALL print the contents of `improve-rule.md`
204204

205205
### Requirement: Rules delete removes rule and test files
206206

‎openspec/specs/cli/spec.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ The CLI SHALL use Vite in library mode to produce a single bundled ESM output fi
5151
#### Scenario: Build embeds agent recipe files
5252

5353
- **WHEN** `pnpm build` is run in `packages/cli/`
54-
- **THEN** every `.txt` file under `packages/cli/src/agent/` SHALL be embedded in the output bundle
54+
- **THEN** every `.md` file under `packages/cli/src/agent/` SHALL be embedded in the output bundle
5555

5656
#### Scenario: Build fails on version mismatch
5757

‎openspec/specs/skills/spec.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Defines the structure, conventions, and distribution model for Taskless skills,
1010

1111
The single skill SHALL be defined at `skills/taskless/SKILL.md` with YAML frontmatter (`name`, `description`, `metadata`) followed by markdown instructions. The `name` field SHALL be exactly `taskless` (no per-task prefix). The `metadata` field SHALL include `author`, `version`, and `commandName: tskl` keys. The `version` SHALL be used for staleness detection when the skill is installed into target repositories.
1212

13-
The skill body SHALL begin by instructing the agent that it does NOT have step-by-step instructions for any Taskless action and that recipes must be fetched via `npx @taskless/cli agent <topic>` before proceeding. The body SHALL NOT contain inline step-by-step recipes for any individual task — those live in `packages/cli/src/agent/<topic>.txt` files served by the `agent` subcommand.
13+
The skill body SHALL begin by instructing the agent that it does NOT have step-by-step instructions for any Taskless action and that recipes must be fetched via `npx @taskless/cli agent <topic>` before proceeding. The body SHALL NOT contain inline step-by-step recipes for any individual task — those live in `packages/cli/src/agent/<topic>.md` files served by the `agent` subcommand.
1414

1515
#### Scenario: Skill directory contains valid SKILL.md
1616

0 commit comments

Comments
 (0)