roadmapsmith 0.9.28 → 0.9.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "roadmapsmith",
3
- "version": "0.9.28",
4
- "description": "One-command evidence-backed ROADMAP.md generator and sync tool for AI coding agents, with shared RoadmapSmith plugin skills for Codex and Claude plus the roadmapsmith status readiness surface.",
3
+ "version": "0.9.30",
4
+ "description": "Evidence-backed ROADMAP.md workflows for AI coding agents, with canonical RoadmapSmith status and maintain surfaces plus advanced sync/generate tools and legacy compatibility aliases.",
5
5
  "author": {
6
6
  "name": "PapiScholz"
7
7
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "roadmapsmith",
3
- "version": "0.9.28",
4
- "description": "One-command evidence-backed ROADMAP.md generator and sync tool for AI coding agents, with shared RoadmapSmith plugin skills for Codex and Claude plus the roadmapsmith status readiness surface.",
3
+ "version": "0.9.30",
4
+ "description": "Evidence-backed ROADMAP.md workflows for AI coding agents, with canonical RoadmapSmith status and maintain surfaces plus advanced sync/generate tools and legacy compatibility aliases.",
5
5
  "author": {
6
6
  "name": "PapiScholz"
7
7
  },
@@ -35,7 +35,7 @@
35
35
  "interface": {
36
36
  "displayName": "RoadmapSmith",
37
37
  "shortDescription": "Evidence-backed roadmap workflows for AI coding agents",
38
- "longDescription": "Install RoadmapSmith in Codex to expose the shared skills bundle for zero-mode onboarding, existing-repo maintenance, roadmap discovery, and evidence-backed validation while keeping the CLI and Claude bundle surfaces aligned.",
38
+ "longDescription": "Install RoadmapSmith in Codex to expose the shared skills bundle for zero-mode onboarding, existing-repo maintenance, roadmap discovery, evidence-backed validation, and compatibility-aware host readiness while keeping the CLI and Claude bundle surfaces aligned.",
39
39
  "developerName": "PapiScholz",
40
40
  "category": "Developer Tools",
41
41
  "capabilities": [
package/README.md CHANGED
@@ -1,378 +1,164 @@
1
- <p align="center">
2
- <img src="https://raw.githubusercontent.com/PapiScholz/roadmapsmith/main/assets/roadmapsmith-logo.png" alt="RoadmapSmith logo" width="180">
3
- </p>
1
+ # RoadmapSmith CLI Contract
4
2
 
5
- <h1 align="center">RoadmapSmith</h1>
3
+ This package owns the RoadmapSmith CLI, validator, sync engine, host setup files, and the shared command-surface contract consumed by the root bundle docs, `skills.json`, and both plugin manifests.
6
4
 
7
- Production-grade roadmap generator and sync tool for agent-driven projects.
5
+ ## Public Contract
8
6
 
9
- ## Install
7
+ ### Canonical
10
8
 
11
- ### CLI
9
+ - `roadmapsmith setup`
10
+ - `roadmapsmith zero`
11
+ - `roadmapsmith maintain`
12
+ - `roadmapsmith status [--json]`
13
+ - `roadmapsmith validate [--json] [--strict]`
14
+ - `roadmapsmith update [--task <stable-id> --evidence "<single-line evidence>"]`
12
15
 
13
- ```bash
14
- npm install -g roadmapsmith
15
- roadmapsmith setup
16
- roadmapsmith zero
17
- roadmapsmith maintain
18
- ```
19
-
20
- Slash entrypoints are also supported from the CLI and launcher, for example: `roadmapsmith /roadmap`, `roadmapsmith /roadmap-zero`, `roadmapsmith /roadmap-maintain`, `roadmapsmith /roadmap-update`, and the deprecated legacy router form `roadmapsmith /roadmap-sync validate`.
21
- The generated VS Code task layer now resolves Node automatically where possible; if it cannot, RoadmapSmith prints a readable runtime diagnostic instead of a dead task.
22
- `RoadmapSmith: Status` now treats "ready" as runnable task UX, not merely generated files.
23
-
24
- ### Agent Skill
25
-
26
- ```bash
27
- npx skills add PapiScholz/roadmapsmith --skill '*' -a claude-code
28
- ```
29
-
30
- This is the recommended Claude Code install path for native GUI slash commands such as `/roadmap`, `/roadmap-zero`, `/roadmap-maintain`, `/roadmap-status`, `/roadmap-init`, `/roadmap-generate`, `/roadmap-validate`, `/roadmap-update`, `/roadmap-audit`, and `/roadmap-setup`.
31
- `roadmap-sync` is deprecated compatibility only; install the full bundle for new workflows and use `/roadmap-maintain` or `/roadmap-update`.
32
- The skill bundle does not install the CLI and it does not create visible VS Code actions by itself.
33
- The published `roadmapsmith` package/plugin surface now also ships the shared bundle files for both hosts (`skills.json`, `skills/*`, `.codex-plugin/plugin.json`, `.claude-plugin/plugin.json`) for downstream host installers, but consuming the CLI alone still does not auto-register native Codex or Claude GUI commands.
16
+ ### Advanced
34
17
 
35
- ## Updating
18
+ - `roadmapsmith init`
19
+ - `roadmapsmith generate`
20
+ - `roadmapsmith generate --full-regen`
21
+ - `roadmapsmith sync`
22
+ - `roadmapsmith sync --audit`
23
+ - `roadmapsmith sync` as the advanced alias for `roadmapsmith update`
36
24
 
37
- Update the CLI based on how it was installed:
25
+ ### Compatibility only
38
26
 
39
- ```bash
40
- # Global npm install
41
- npm install -g roadmapsmith@latest
42
-
43
- # Project dependency
44
- npm install roadmapsmith@latest
27
+ - `roadmapsmith doctor`
28
+ - `roadmapsmith regenerate`
29
+ - `roadmapsmith /road <action>`
30
+ - `roadmapsmith /roadmap-sync <action>`
31
+ - deprecated direct aliases such as `/maintain` or `/status`
45
32
 
46
- # One-off execution without installing
47
- npx roadmapsmith@latest validate --json
48
- ```
33
+ `status` is the public readiness command. `doctor` remains a compatibility alias to the same payload.
49
34
 
50
- The Claude skill bundle is separate from the CLI. Re-running the skills install updates the Claude-facing instructions, but it does not update the `roadmapsmith` npm binary or the generated VS Code host files:
35
+ `update` is the public checklist-refresh and verified single-task completion family. `sync` remains executable as the advanced alias for the refresh path.
51
36
 
52
- ```bash
53
- npx skills add PapiScholz/roadmapsmith --skill '*' -a claude-code
54
- ```
37
+ `generate --full-regen` is the only public destructive rebuild path. `regenerate` remains executable but prints a deprecation warning.
55
38
 
56
- After updating the Claude skill bundle, run `/reload-skills` and, if applicable, `/reload-plugins`.
57
- After updating the CLI, rerun `roadmapsmith setup` in repositories where you want the latest VS Code tasks, task wrappers, launcher behavior, or Claude hook template. Published npm/plugin artifacts now include the Codex and Claude bundle files for downstream host loaders, but native UX still depends on the host loading the correct surface.
58
-
59
- Fixes are available through `@latest` after the automated release path completes on `main`. In this repo, a successful push to `main` now opens or refreshes an automated `release/vX.Y.Z` PR, that PR squashes back into `main` as the bot release commit `chore(release): vX.Y.Z`, and the follow-up `main` run publishes the new patch version. Before that completes, install from a local checkout or a packed tarball for testing.
60
-
61
- ## Operating Modes
39
+ ## Modes
62
40
 
63
41
  ### Zero Mode
64
42
 
65
- Agent-guided discovery for empty or low-context repositories. The developer has a product idea but no implementation files, no stack decision, and no ROADMAP.md yet.
66
-
67
- Run `roadmapsmith setup` first if you want visible VS Code tasks. `roadmapsmith zero` is the one-command entrypoint: it runs the terminal interview, creates governance files when needed, and generates the first roadmap.
68
-
69
- ```bash
70
- roadmapsmith setup
71
- roadmapsmith zero
72
- ```
43
+ Use for empty or low-context repositories. `roadmapsmith zero` runs the terminal interview, updates config, and generates the first roadmap.
73
44
 
74
45
  ### Sync/Audit Mode
75
46
 
76
- Repository-backed roadmap generation, validation, and synchronization. Use when the repository already has code, tests, docs, TODOs, or an existing ROADMAP.md.
47
+ Use for repositories that already contain code, tests, docs, TODOs, or an existing roadmap. `roadmapsmith maintain` is the preserve-first one-command flow.
77
48
 
78
- ```bash
79
- roadmapsmith setup
80
- roadmapsmith maintain
81
- ```
49
+ ## Verification Model
82
50
 
83
- ## Recommended Daily Flow
51
+ RoadmapSmith separates candidate discovery from completion.
84
52
 
85
- Use the public entrypoints first:
53
+ Candidate discovery may use:
86
54
 
87
- ```bash
88
- roadmapsmith setup
89
- roadmapsmith zero # empty repo
90
- roadmapsmith maintain # existing repo
91
- ```
55
+ - explicit path hints
56
+ - symbol matches
57
+ - code-token overlap
58
+ - task-path overlap
59
+ - test references
92
60
 
93
- Use the lower-level commands only when you want manual control over generation, validation, or sync.
61
+ Unchecked implementation tasks complete only from:
94
62
 
95
- ## Host Support Today
63
+ - valid explicit `Evidence:`
64
+ - `Verify: kind=contains`
65
+ - `Verify: kind=property`
66
+ - `Verify: kind=endpoints`
67
+ - `Verify: kind=behavior` plus fresh configured test-report proof
96
68
 
97
- | Host | Current support |
98
- |---|---|
99
- | Claude Code | Supported through the full RoadmapSmith skill bundle for native GUI slash commands, plus `roadmapsmith setup` for visible VS Code tasks and the optional repo-local Claude hook. |
100
- | Codex / Codex CLI | Supported through the native Codex plugin surface (`.codex-plugin/plugin.json` + repo marketplace) and the visible VS Code task workflow after `roadmapsmith setup`. |
101
- | CI | Use disposable checkouts if you run `sync --audit`, because it still mutates the roadmap today. |
102
- | Other hosts | Use the skill plus manual CLI commands. |
69
+ Behavioral tasks without explicit proof remain warnings. When the engine can generate exactly one task-specific verification recipe, sync can render it as `Verification recipe:`. If the recipe is global, duplicated, off-domain, or otherwise non-specific, it is suppressed.
103
70
 
104
- If Node is installed outside PATH, set `ROADMAPSMITH_NODE` to a working `node` executable before using the generated VS Code tasks. If the globally installed `roadmapsmith` shim itself cannot resolve Node, bypass it in PowerShell with:
71
+ Generated outputs such as `dist-electron/`, `dist/`, `build/`, `out/`, `.next/`, and `coverage/` are excluded from heuristic evidence discovery.
105
72
 
106
- ```powershell
107
- & "C:\Program Files\nodejs\node.exe" "$env:APPDATA\npm\node_modules\roadmapsmith\bin\cli.js" <command>
108
- ```
73
+ Auxiliary tooling paths such as `scripts/` and `tools/` are excluded from heuristic scoring unless the task explicitly references them.
109
74
 
110
- ---
75
+ ## Strict Validation
111
76
 
112
- ## Commands
77
+ `roadmapsmith validate --strict` is the independent audit path.
113
78
 
114
- ```bash
115
- roadmapsmith /roadmap
116
- roadmapsmith /roadmap-zero
117
- roadmapsmith /roadmap-maintain
118
- roadmapsmith /roadmap-update
119
- roadmapsmith /roadmap-sync validate
120
- roadmapsmith setup [--project-root <path>] [--config <path>] [--editor vscode] [--hosts <codex,claude>] [--dry-run]
121
- roadmapsmith zero [--project-root <path>] [--config <path>]
122
- roadmapsmith maintain [--project-root <path>] [--config <path>] [--roadmap-file <path>] [--full-regen]
123
- roadmapsmith init [--roadmap-file <path>] [--agents-file <path>] [--dry-run]
124
- roadmapsmith generate [--project-root <path>] [--config <path>] [--roadmap-file <path>] [--dry-run] [--audit] [--full-regen]
125
- roadmapsmith sync [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--dry-run] [--audit]
126
- roadmapsmith update --task <stable-id> --evidence <text> [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--dry-run]
127
- roadmapsmith validate [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--task <id|text>] [--json]
128
- roadmapsmith status [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--json]
129
- roadmapsmith doctor [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--json] # compatibility alias
130
- ```
79
+ In strict mode:
131
80
 
132
- ## Claude Code native slash commands
81
+ - candidate discovery still narrows where to look
82
+ - PASS may come only from explicit `Evidence:` or passing typed `Verify:`
83
+ - file existence, domain overlap, token proximity, and test-file presence alone never produce PASS
84
+ - preserved checked-state behavior is disabled
133
85
 
134
- Install the full skill bundle for Claude Code:
86
+ Recommended audit sequence:
135
87
 
136
88
  ```bash
137
- npx skills add PapiScholz/roadmapsmith --skill '*' -a claude-code
138
- ```
139
-
140
- Then reload the session:
141
-
142
- 1. Run `/reload-skills`
143
- 2. If RoadmapSmith was installed through a Claude plugin, also run `/reload-plugins`
144
- 3. Confirm the slash menu shows `/roadmap`, `/roadmap-zero`, `/roadmap-maintain`, `/roadmap-status`, `/roadmap-init`, `/roadmap-generate`, `/roadmap-validate`, `/roadmap-update`, `/roadmap-audit`, and `/roadmap-setup`
145
-
146
- Native Claude GUI slash commands come from the installed skill bundle. CLI slash routing such as `roadmapsmith /roadmap` is a separate surface and does not populate the Claude GUI menu by itself. The packed npm artifact now mirrors that bundle on disk so published plugin/distribution flows can expose the same slash set without depending on a source checkout.
147
-
148
- ## Codex native plugin install
149
-
150
- RoadmapSmith now exposes a native Codex plugin manifest at `.codex-plugin/plugin.json` and a repo-local marketplace at `.agents/plugins/marketplace.json`.
151
-
152
- From the repository root:
153
-
154
- ```bash
155
- codex plugin marketplace add .
89
+ roadmapsmith maintain
90
+ roadmapsmith validate --strict --json
156
91
  ```
157
92
 
158
- Then restart Codex, open the plugin directory, install `roadmapsmith` from the `RoadmapSmith Local Plugins` marketplace, and confirm the plugin resolves the shared `./skills/` bundle.
159
-
160
- Codex native plugin support means install/enable discovery inside Codex. It is separate from Claude-specific `/reload-skills` behavior, and the VS Code task layer remains the fallback/manual workflow when you are not using the plugin directory.
93
+ `sync --audit` remains an advanced mutating summary, not an independent audit engine.
161
94
 
162
- `roadmapsmith status --json` now reports native slash surfaces separately from the VS Code task layer (`doctor --json` remains a compatibility alias):
95
+ ## Slash And Host Surfaces
163
96
 
164
- - `claudeGui`
165
- - `claudeCli`
166
- - `codexGui`
167
- - `codexCli`
97
+ Canonical native slash surfaces:
168
98
 
169
- Each surface includes the detected source, expected slash commands, missing commands, and duplicate registrations such as a second `/roadmap-sync` coming from a legacy user skill install.
99
+ - `/roadmap`
100
+ - `/roadmap-zero`
101
+ - `/roadmap-maintain`
102
+ - `/roadmap-status`
103
+ - `/roadmap-validate`
104
+ - `/roadmap-update`
105
+ - `/roadmap-setup`
170
106
 
171
- If Codex shows `Roadmap Sync` twice, the usual cause is a collision between:
107
+ Advanced native slash surfaces:
172
108
 
173
- - `~/.agents/skills/roadmap-sync`
174
- - the installed `roadmapsmith` Codex plugin
109
+ - `/roadmap-init`
110
+ - `/roadmap-generate`
111
+ - `/roadmap-audit`
175
112
 
176
- The repo does not remove user-global skills automatically. Use the `doctor` output to confirm the duplicate and then disable or remove the legacy skill if you want a single `/roadmap-sync` entry.
113
+ Compatibility-only slash surfaces:
177
114
 
178
- ## Behavior
115
+ - `/roadmap-sync <action>`
116
+ - `/road <action>`
117
+ - deprecated direct aliases
179
118
 
180
- - Generates deterministic `ROADMAP.md` with fixed section order.
181
- - Uses stable task IDs: `<!-- rs:task=<slug> -->`.
182
- - Sync marks `[x]` only when validation passes.
183
- - `sync --audit` currently runs sync and then prints a mismatch summary; it is not yet a dedicated read-only audit mode.
184
- - Validation evidence gate:
185
- - code OR test OR artifact evidence required.
186
- - test evidence required for code tasks when test frameworks are detected.
187
- - Validation failures in sync write warning lines:
188
- - `- ⚠️ attempted but validation failed: <reason>` when there is concrete attempt evidence
189
- - `- ⚠️ no implementation evidence found yet: <reason>` when there is not
190
- - Preserves unmanaged markdown content by updating only the managed roadmap block.
191
- - `validate` emits structured diagnostics in human and JSON output (`FAIL:NOT_IMPLEMENTED`, `FAIL:NO_TEST`, `FAIL:MISSING_REFERENCE`, and `WARN:STALE_EVIDENCE`).
192
- - `update --task <id> --evidence <text>` writes only when the evidence validates at high confidence; otherwise the roadmap is unchanged.
119
+ Native-bundle readiness is computed from canonical surfaces only. Missing advanced labels or duplicate legacy `/roadmap-sync` installs are warnings, not canonical-health failures.
193
120
 
194
- ## Defaults
121
+ ## Host Setup
195
122
 
196
- - Roadmap file: `./ROADMAP.md` (falls back to `./roadmap.md` when only the legacy file exists)
197
- - Agent rules file: `./AGENTS.md` (falls back to `./CLAUDE.md` when present)
198
- - Config file: `./roadmap-skill.config.json`
123
+ `roadmapsmith setup` generates:
199
124
 
200
- Roadmap resolution precedence:
125
+ - `.vscode/tasks.json`
126
+ - `.vscode/roadmapsmith-launcher.js`
127
+ - `.vscode/roadmapsmith-task.cmd`
128
+ - `.vscode/roadmapsmith-task.sh`
129
+ - optional Claude hook wiring
201
130
 
202
- 1. `--roadmap-file` CLI flag
203
- 2. `config.roadmapFile` in `roadmap-skill.config.json`
204
- 3. Existing `./ROADMAP.md`
205
- 4. Existing `./roadmap.md` (legacy fallback)
206
- 5. `./ROADMAP.md` when neither file exists
131
+ The internal hook filename remains `.claude/hooks/roadmap-sync.js`. It is a legacy internal filename, not a public command surface.
207
132
 
208
133
  ## Config
209
134
 
210
- Create `roadmap-skill.config.json`:
135
+ Typical config file:
211
136
 
212
137
  ```json
213
138
  {
214
139
  "roadmapFile": "./ROADMAP.md",
215
140
  "agentsFile": "./AGENTS.md",
216
- "roadmapProfile": "professional",
217
- "product": {
218
- "name": "My Project",
219
- "northStar": "Ship a self-hosted CLI tool for website capture and AI-readable design analysis.",
220
- "positioning": "What makes this different from alternatives.",
221
- "primaryUser": "Frontend developers, full-stack developers, and AI coding agents.",
222
- "targetOutcome": "A stable CLI that captures full-page screenshots, crawls internal links, exports metadata, and produces an AI-readable report.",
223
- "antiGoals": [
224
- "Do not bypass authentication",
225
- "Do not target private systems without authorization"
226
- ],
227
- "risks": [
228
- "Browser automation instability",
229
- "Scope creep into generic scraping"
230
- ],
231
- "successCriteria": [
232
- "CLI works against a public test site",
233
- "Screenshots and metadata are exported deterministically",
234
- "README documents safe and authorized usage"
235
- ]
236
- },
237
-
238
- "taskMatchers": [
239
- {
240
- "pattern": "src/payments/",
241
- "task": "Complete payment flow hardening",
242
- "phase": "P0",
243
- "priority": "P0"
244
- }
245
- ],
246
- "validators": [
247
- {
248
- "type": "file-exists",
249
- "when": "migration",
250
- "path": "db/migrations"
251
- },
252
- {
253
- "type": "grant-evidence",
254
- "whenId": "^p0-electron-builder-windows$",
255
- "evidence": ["test"],
256
- "testFiles": ["test/electron-builder.test.js"]
257
- }
258
- ],
259
- "customSections": [
260
- {
261
- "title": "Compliance",
262
- "items": [
263
- "- [ ] Complete SOC2 evidence packet <!-- rs:task=compliance-soc2-evidence -->"
264
- ]
265
- }
266
- ],
267
- "plugins": [
268
- "./plugins/roadmap.plugin.js"
269
- ],
270
- "milestones": [
271
- { "version": "v0.1", "goal": "Foundation" },
272
- { "version": "v0.2", "goal": "Reliability" },
273
- { "version": "v0.3", "goal": "Release candidate" },
274
- { "version": "v1.0", "goal": "General availability" }
275
- ],
276
- "phaseTemplates": {
277
- "P0": ["Stabilize critical path"],
278
- "P1": ["Expand reliability"],
279
- "P2": ["Finalize release hardening"]
280
- }
281
- }
282
- ```
283
-
284
- Task markers can include `rs:no-test` to disable the test-evidence requirement for one task:
285
-
286
- ```markdown
287
- - [ ] Add Windows autostart script <!-- rs:task=p0-windows-autostart rs:no-test -->
288
- ```
289
-
290
- Validator rules are backward compatible:
291
-
292
- - `when` matches task text.
293
- - `whenId` matches the stable `rs:task` ID.
294
- - `grant-evidence` can grant `code`, `test`, or `artifact` evidence without `overrideResult`.
295
- - `overrideResult: true` is only needed when a rule should replace automatic failures.
296
- - Tests that read a referenced file with `fs.readFileSync`, `fs.readFile`, `readFileSync`, or `readFile` can count as test evidence for tasks that explicitly mention that file.
297
-
298
- ## Plugin API
299
-
300
- Plugin module path(s) are loaded from `config.plugins` in deterministic order.
301
-
302
- ```js
303
- module.exports = {
304
- registerTaskDetectors(ctx) {
305
- return [
306
- { text: 'Implement billing retries', phase: 'P1', priority: 'P1' }
307
- ];
308
- },
309
- registerSectionGenerators(ctx) {
310
- return [
311
- {
312
- title: 'Platform Notes',
313
- items: ['- [ ] Verify deployment rollback path <!-- rs:task=verify-deployment-rollback-path -->']
314
- }
315
- ];
316
- },
317
- registerValidators(ctx) {
318
- return [
141
+ "validation": {
142
+ "minimumConfidence": "low",
143
+ "recipeCommand": "npm test -- {testFile}",
144
+ "testReports": [
319
145
  {
320
- type: 'symbol',
321
- when: 'billing',
322
- pattern: 'retry',
323
- message: 'billing retry symbol not found'
146
+ "path": "test-results.json",
147
+ "format": "vitest-json"
324
148
  }
325
- ];
149
+ ]
326
150
  }
327
- };
328
- ```
329
-
330
- ## Example Usage
331
-
332
- ```bash
333
- roadmapsmith zero
334
- roadmapsmith maintain
335
- roadmapsmith validate --json
336
- roadmapsmith sync --dry-run
337
- ```
338
-
339
- ## Dry Run and Audit
340
-
341
- - `--dry-run`: shows file diff preview without writing.
342
- - `--audit`: currently runs sync and then reports roadmap/code mismatches:
343
- - checked without evidence
344
- - ready but unchecked
345
-
346
- ## Development
347
-
348
- ```bash
349
- npm test
350
- npm run validate:qa-regression
351
- npm run validate:functional-smoke
352
- ```
353
-
354
- If `npm test` fails in your shell with "`node` is not recognized", treat that as a local PATH/runtime issue first and rerun the suite with an explicit Node executable.
355
-
356
- ## Publishing
357
-
358
- ```bash
359
- npm run validate:qa-regression
360
- npm run validate:functional-smoke
361
- npm test
151
+ }
362
152
  ```
363
153
 
364
- Repository-specific release note:
154
+ Key validation fields:
365
155
 
366
- - The canonical release automation lives in `.github/workflows/ci.yml`.
367
- - Every successful push to `main` now bumps `PATCH` through an automated `release/vX.Y.Z` PR, writes the version back with the squashed bot commit `chore(release): vX.Y.Z`, and then the follow-up `main` run publishes npm plus the GitHub Release.
368
- - Repair reruns on the bot release commit do not bump again; they only publish/create any missing artifacts left behind by a partial failure.
369
- - On repos where GitHub blocks `GITHUB_TOKEN` from creating or merging PRs, provide a dedicated secret such as `RELEASE_BOT_TOKEN` so the protected-branch release PR flow can complete.
370
- - Before any push, run the dual validation gate with separate owners: `QA/Regression` uses `npm run validate:qa-regression` and `Functional/Smoke` uses `npm run validate:functional-smoke`.
371
- - The release gate now includes packed-artifact verification for `skills.json`, `skills/*`, `.codex-plugin/plugin.json`, `.claude-plugin/plugin.json`, and the referenced Codex assets so the published surface matches the GitHub-source bundle for both hosts.
372
- - Before merging to `main`, verify the UX/release gate in `docs/release-ux-gate.md` and keep `CHANGELOG.md` ready for CI-managed version section generation.
156
+ - `minimumConfidence`: output filter for validate/sync
157
+ - `recipeCommand`: optional command suffix for generated verification recipes
158
+ - `testReports`: configured behavioral proof sources
373
159
 
374
- ## Versioning Strategy
160
+ ## Related Docs
375
161
 
376
- - `patch`: bug fixes and non-breaking validation/generation improvements.
377
- - `minor`: backward-compatible features (new flags, new plugin hooks, additive config fields).
378
- - `major`: breaking CLI/config behavior or marker/format changes.
162
+ - [../docs/command-surfaces.md](../docs/command-surfaces.md)
163
+ - [../docs/troubleshooting-host-setup.md](../docs/troubleshooting-host-setup.md)
164
+ - [../docs/use-cases/sync-audit-mode.md](../docs/use-cases/sync-audit-mode.md)
package/bin/cli.js CHANGED
@@ -19,21 +19,27 @@ const { buildZeroModeConfigPatch, buildZeroModeDefaults, collectZeroModeAnswers,
19
19
  function printHelp() {
20
20
  console.log([
21
21
  'Usage:',
22
+ ' Canonical commands:',
22
23
  ' roadmapsmith zero [--project-root <path>] [--config <path>]',
23
24
  ' roadmapsmith maintain [--project-root <path>] [--config <path>] [--roadmap-file <path>] [--full-regen]',
24
- ' roadmapsmith /roadmap',
25
- ' roadmapsmith /roadmap <action>',
26
- ' roadmapsmith /roadmap-zero | /roadmap-maintain | /roadmap-status | /roadmap-init | /roadmap-generate | /roadmap-validate | /roadmap-update | /roadmap-audit | /roadmap-setup',
27
- ' roadmapsmith /road <action> # deprecated compatibility alias',
28
- ' roadmapsmith /roadmap-sync <action> # deprecated legacy compatibility root',
29
- ' roadmapsmith init [--roadmap-file <path>] [--agents-file <path>] [--dry-run]',
25
+ ' roadmapsmith status [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--json]',
26
+ ' roadmapsmith validate [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--task <id|text>] [--json] [--strict]',
27
+ ' roadmapsmith update [--task <stable-id> --evidence <text>] [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--dry-run]',
30
28
  ' roadmapsmith setup [--project-root <path>] [--config <path>] [--editor vscode] [--hosts <codex,claude>] [--dry-run]',
29
+ '',
30
+ ' Advanced commands:',
31
+ ' roadmapsmith init [--roadmap-file <path>] [--agents-file <path>] [--dry-run]',
31
32
  ' roadmapsmith generate [--project-root <path>] [--config <path>] [--roadmap-file <path>] [--dry-run] [--audit] [--full-regen]',
32
33
  ' roadmapsmith sync [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--dry-run] [--audit]',
33
- ' roadmapsmith update --task <stable-id> --evidence <text> [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--dry-run]',
34
- ' roadmapsmith validate [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--task <id|text>] [--json]',
35
- ' roadmapsmith status [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--json]',
36
- ' roadmapsmith doctor [--roadmap-file <path>] [--project-root <path>] [--config <path>] [--json] # compatibility alias'
34
+ ' roadmapsmith /roadmap',
35
+ ' roadmapsmith /roadmap <action>',
36
+ ' roadmapsmith /roadmap-zero | /roadmap-maintain | /roadmap-status | /roadmap-validate | /roadmap-update | /roadmap-setup | /roadmap-init | /roadmap-generate | /roadmap-audit',
37
+ '',
38
+ ' Compatibility notes:',
39
+ ' roadmapsmith doctor [--json] # compatibility alias for status',
40
+ ' roadmapsmith regenerate # deprecated alias for generate --full-regen',
41
+ ' roadmapsmith /road <action> # deprecated compatibility alias',
42
+ ' roadmapsmith /roadmap-sync <action> # deprecated legacy compatibility root'
37
43
  ].join('\n'));
38
44
  }
39
45
 
@@ -48,7 +54,9 @@ function formatResultLine(task, result) {
48
54
  const diagnostics = Array.isArray(result.diagnostics) ? result.diagnostics : [];
49
55
  const primaryError = diagnostics.find((item) => item.severity === 'error');
50
56
  const warnings = diagnostics.filter((item) => item.severity === 'warning');
51
- const status = primaryError ? `FAIL:${primaryError.code}` : (result.passed ? 'PASS' : 'FAIL');
57
+ const status = primaryError
58
+ ? `FAIL:${primaryError.code}`
59
+ : (result.passed ? 'PASS' : (warnings[0] ? `WARN:${warnings[0].code}` : 'FAIL'));
52
60
  const parts = [...result.reasons];
53
61
  warnings.forEach((item) => parts.push(`WARN:${item.code} ${item.message}`));
54
62
  const reason = parts.length > 0 ? ` :: ${parts.join('; ')}` : '';
@@ -79,6 +87,23 @@ function printAudit(audit) {
79
87
  }
80
88
  }
81
89
 
90
+ function printReadinessSummary(summary) {
91
+ if (!summary || typeof summary !== 'object') {
92
+ return;
93
+ }
94
+
95
+ console.log('\nStructured readiness summary:');
96
+ console.log(`- Workspace readiness: ${summary.workspaceReady ? 'ready' : 'needs setup'}`);
97
+ console.log(`- Codex readiness: ${summary.codexReady ? 'ready' : 'needs setup'}`);
98
+ console.log(`- Claude readiness: ${summary.claudeReady ? 'ready' : 'needs setup'}`);
99
+ console.log(`- Canonical native surfaces: ${summary.canonicalSurfaceReady ? 'ready' : 'needs attention'}`);
100
+ if (Array.isArray(summary.advancedSurfaceWarnings) && summary.advancedSurfaceWarnings.length > 0) {
101
+ summary.advancedSurfaceWarnings.forEach((warning) => {
102
+ console.log(`- Advanced warning: ${warning}`);
103
+ });
104
+ }
105
+ }
106
+
82
107
  function formatSurfaceLabel(surfaceKey) {
83
108
  return surfaceKey
84
109
  .replace(/([A-Z])/g, ' $1')
@@ -305,13 +330,18 @@ function printHumanStatus(payload) {
305
330
  if (!payload.vscode.tasks.ready && payload.vscode.tasks.missingLabels.length > 0) {
306
331
  console.log(`Missing VS Code tasks: ${payload.vscode.tasks.missingLabels.join(', ')}`);
307
332
  }
333
+ if (Array.isArray(payload.vscode.tasks.missingAdvancedLabels) && payload.vscode.tasks.missingAdvancedLabels.length > 0) {
334
+ console.log(`Missing advanced VS Code tasks: ${payload.vscode.tasks.missingAdvancedLabels.join(', ')}`);
335
+ }
308
336
  if (!payload.vscode.wrappers.ready) {
309
337
  console.log(`Missing task wrapper files: ${payload.vscode.wrappers.missingPaths.join(', ')}`);
310
338
  }
311
339
  console.log(`Codex readiness: ${payload.hosts.codex.ready ? 'ready' : 'needs setup'} (${payload.hosts.codex.message})`);
312
340
  console.log(`Claude readiness: ${payload.hosts.claude.ready ? 'ready' : 'needs setup'} (${payload.hosts.claude.message})`);
341
+ printReadinessSummary(payload.summary);
313
342
  printNativeSurfaceStatus(payload.surfaces);
314
- console.log('\nRecommended entrypoints: roadmapsmith zero (empty repo), roadmapsmith maintain (existing repo).');
343
+ console.log('\nRecommended entrypoints: roadmapsmith zero (empty repo), roadmapsmith maintain (existing repo), roadmapsmith update (canonical checklist refresh/task completion).');
344
+ console.log('Compatibility note: roadmapsmith doctor mirrors this payload for existing automation.');
315
345
  if (!payload.cli.ready) {
316
346
  console.log('\nInstalling the skill alone does not expose the CLI in VS Code. Install the CLI and rerun roadmapsmith setup.');
317
347
  }
@@ -420,8 +450,6 @@ async function run() {
420
450
  if (slashAction.id === 'audit') {
421
451
  flags.audit = true;
422
452
  effectiveCommand = 'sync';
423
- } else if (slashAction.id === 'sync' && String(command).trim().toLowerCase() === '/roadmap-update') {
424
- effectiveCommand = 'update';
425
453
  } else {
426
454
  effectiveCommand = slashAction.id;
427
455
  }
@@ -456,6 +484,7 @@ async function run() {
456
484
  if (effectiveCommand === 'regenerate') {
457
485
  const projectRoot = path.resolve(String(flags['project-root'] || process.cwd()));
458
486
  const config = loadConfig({ projectRoot, configPath: flags.config });
487
+ process.stderr.write('The regenerate command is deprecated. Use generate --full-regen for the public destructive rebuild path.\n');
459
488
  runRegenerateCommand(projectRoot, config, flags);
460
489
  return;
461
490
  }
@@ -508,7 +537,9 @@ async function run() {
508
537
 
509
538
  const parsedRoadmap = parseRoadmap(content);
510
539
  const tasks = maybeFilterTasks(parsedRoadmap.tasks, flags.task);
511
- const validationContext = buildValidationContext(projectRoot, config, loadPlugins(projectRoot, config.plugins));
540
+ const validationContext = buildValidationContext(projectRoot, config, loadPlugins(projectRoot, config.plugins), {
541
+ strictValidation: isEnabled(flags.strict)
542
+ });
512
543
  const results = validateTasks(tasks, validationContext, config, validationContext.plugins);
513
544
 
514
545
  const minRank = CONFIDENCE_RANK[config.validation && config.validation.minimumConfidence] ?? 0;
@@ -604,6 +635,9 @@ async function run() {
604
635
  logError(`[fail] VS Code tasks incomplete: missing ${hostStatus.vscode.tasks.missingLabels.join(', ') || 'managed labels'}`);
605
636
  ok = false;
606
637
  }
638
+ if (Array.isArray(hostStatus.vscode.tasks.missingAdvancedLabels) && hostStatus.vscode.tasks.missingAdvancedLabels.length > 0) {
639
+ log(`[warn] Advanced VS Code tasks missing: ${hostStatus.vscode.tasks.missingAdvancedLabels.join(', ')}`);
640
+ }
607
641
 
608
642
  if (hostStatus.runtime.ready) {
609
643
  log(`[ok] Node runtime: ${hostStatus.runtime.kind}${hostStatus.runtime.path ? ` (${hostStatus.runtime.path})` : ''}`);