scriveno 2.7.1 → 2.8.0

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,6 +1,6 @@
1
1
  ---
2
2
  description: Compile and export manuscript to publication-ready formats.
3
- argument-hint: "[--format <format>] [--formatted] [--print-ready] [--skip-validate]"
3
+ argument-hint: "[--format <format>] [--formatted] [--print-ready] [--skip-validate] [--check]"
4
4
  ---
5
5
 
6
6
  # /scr:export -- Manuscript Export
@@ -11,11 +11,13 @@ Assemble the manuscript from OUTLINE.md and export to the specified format. Hand
11
11
 
12
12
  ```
13
13
  /scr:export # interactive picker
14
- /scr:export --format <format> [--formatted] [--print-ready] [--skip-validate]
14
+ /scr:export --format <format> [--formatted] [--print-ready] [--skip-validate] [--check]
15
15
  ```
16
16
 
17
17
  If `--format` is omitted, run the interactive picker (see STEP 0). Otherwise jump straight to STEP 1 with the requested format.
18
18
 
19
+ If `--check` is passed, check format availability and required external tools, print a readiness report, and stop before assembling or writing export files.
20
+
19
21
  ---
20
22
 
21
23
  ### STEP 0: INTERACTIVE PICKER (only when --format is omitted)
@@ -135,6 +137,8 @@ Then **stop**.
135
137
 
136
138
  **Check for scaffold markers in `.manuscript/drafts/`.**
137
139
 
140
+ If `--check` was passed, skip the scaffold-marker scan and proceed to STEP 2. Tool check mode verifies readiness of external commands only; it does not certify manuscript content.
141
+
138
142
  Scan all `.md` files in `.manuscript/drafts/` for:
139
143
  - Lines containing `[Fill in` (covers `[Fill in:]`, `[Fill in or delete:]`)
140
144
  - Lines containing `[Delete if not applicable:]`
@@ -217,6 +221,27 @@ Proceed to STEP 2.
217
221
 
218
222
  Check for required external tools based on the requested format.
219
223
 
224
+ **Tool gate rules:**
225
+
226
+ 1. Never silently substitute one tool for another. For example, do not use WeasyPrint when Typst is missing, and do not use Calibre when Pandoc is missing.
227
+ 2. Record the tool command that was checked and, when available, the detected version.
228
+ 3. If `--check` was passed, do not create `.manuscript/output/`, do not assemble the manuscript, and do not run conversion commands. Print the report and stop after this step.
229
+ 4. If a required tool is missing, stop and show install instructions. Do not attempt a degraded export.
230
+
231
+ Use this readiness report shape in `--check` mode:
232
+
233
+ ```text
234
+ Export Tool Check
235
+ =================
236
+ Format: pdf --print-ready
237
+
238
+ [PASS] pandoc .......... pandoc 3.x
239
+ [PASS] typst ........... typst 0.x
240
+ [SKIP] ghostscript ..... not required for this format
241
+
242
+ Result: ready
243
+ ```
244
+
220
245
  **For markdown:** No external tools needed. Skip to Step 3.
221
246
 
222
247
  **For docx, epub, latex, query-package:** Check for Pandoc:
@@ -269,6 +294,22 @@ If not found, provide install instructions (`pip install screenplain`) and stop.
269
294
 
270
295
  **For fountain:** No external tools needed.
271
296
 
297
+ **For kdp-package:** Check for Pandoc and Typst. If either tool is missing, stop before building the package.
298
+
299
+ **For ingram-package:** Check for Pandoc, Typst, and Ghostscript (`gs`). If any required tool is missing, stop before building the package.
300
+
301
+ **For query-package and submission-package:** Check for Pandoc.
302
+
303
+ **Optional screenplay PDF:** Afterwriting is optional for `fountain`. If it is missing, do not fail the Fountain export; report it as optional. If `--check` is passed, show it as optional with install guidance:
304
+
305
+ ```bash
306
+ command -v afterwriting >/dev/null 2>&1
307
+ ```
308
+
309
+ > Optional: To generate a formatted screenplay PDF, install Afterwriting with `npm i -g afterwriting`.
310
+
311
+ If `--check` was passed, stop here after printing the readiness report.
312
+
272
313
  ---
273
314
 
274
315
  ### STEP 3: ASSEMBLE MANUSCRIPT
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Diagnose and repair common project state issues.
3
- argument-hint: "[--repair]"
3
+ argument-hint: "[--repair] [--context]"
4
4
  ---
5
5
 
6
6
  # Health
@@ -87,6 +87,39 @@ With `--repair`, fix what can be auto-fixed:
87
87
 
88
88
  After repair: re-run diagnostics and show the updated health report.
89
89
 
90
+ ## Context mode (--context)
91
+
92
+ With `--context`, focus only on loaded-context health. This is a read-only guard for long projects and large unit sessions.
93
+
94
+ 1. Estimate the files an agent is likely to load before writing:
95
+ - `.manuscript/STYLE-GUIDE.md`
96
+ - `.manuscript/CONTEXT.md`
97
+ - `.manuscript/STATE.md`
98
+ - `.manuscript/OUTLINE.md`
99
+ - `.manuscript/RECORD.md`
100
+ - The newest plan, draft, and review files for the active unit
101
+ 2. Estimate tokens as `ceil(bytes / 4)`. This is intentionally simple and conservative.
102
+ 3. Classify the result:
103
+ - `ok`: under 45,000 estimated tokens
104
+ - `watch`: 45,000-79,999 estimated tokens
105
+ - `tight`: 80,000-119,999 estimated tokens
106
+ - `critical`: 120,000 or more estimated tokens
107
+ 4. Report the five largest loaded files so the writer can see what is making the session heavy.
108
+ 5. If the state is `watch`, suggest `/scr:health --context` again before the next large operation.
109
+ 6. If the state is `tight`, suggest `/scr:save` before drafting, review, translation, or export.
110
+ 7. If the state is `critical`, suggest `/scr:thread` or a fresh unit session before writing more prose.
111
+
112
+ If the shared CLI engine is available, prefer it:
113
+
114
+ ```bash
115
+ scriveno status --project "$PWD" --trigger "/scr:health --context"
116
+ node lib/auto-invoke-engine.js --project "$PWD" --trigger "/scr:health --context"
117
+ node "$HOME/.scriveno/lib/auto-invoke-engine.js" --project "$PWD" --trigger "/scr:health --context"
118
+ node .scriveno/lib/auto-invoke-engine.js --project "$PWD" --trigger "/scr:health --context"
119
+ ```
120
+
121
+ Return only the context-health portion of the report unless another health issue blocks the command.
122
+
90
123
  ## Automation Status
91
124
 
92
125
  Every response must include a compact status block:
@@ -100,6 +133,7 @@ Candidate agents:
100
133
  - none
101
134
  Local operations:
102
135
  - health checks run: {count}
136
+ - context estimate run: {yes|no}
103
137
  - repairs applied: {count}
104
138
  Candidate local helpers:
105
139
  - /scr:scan or /scr:save when health detects repairable drift
@@ -34,7 +34,7 @@ You are helping the user navigate Scriveno commands. Load Scriveno's installed/s
34
34
 
35
35
  ## The "getting started" view (no project yet)
36
36
 
37
- Ask the user what they want to do. Don't list all 113 commands -- show them this:
37
+ Ask the user what they want to do. Don't list all 115 commands -- show them this:
38
38
 
39
39
  ```
40
40
  Scriveno -- ready to start.
@@ -69,7 +69,7 @@ Always create `RECORD.md` from `templates/RECORD.md` without renaming it. It is
69
69
  Write `.manuscript/config.json` by starting from `templates/config.json` and filling the project-specific values. The generated config must include the shared settings blocks that later commands read:
70
70
  ```json
71
71
  {
72
- "scriveno_version": "2.7.1",
72
+ "scriveno_version": "2.8.0",
73
73
  "work_type": "<chosen>",
74
74
  "group": "<group>",
75
75
  "command_unit": "<unit>",
@@ -0,0 +1,138 @@
1
+ ---
2
+ description: Run one manuscript unit through a proof path from voice profile to export readiness.
3
+ argument-hint: "[unit] [--demo] [--export-check]"
4
+ ---
5
+
6
+ # Proof Unit
7
+
8
+ You are proving that Scriveno can carry one unit through the real writing loop without losing the writer's voice.
9
+
10
+ Follow the auto-invoke policy. In the source repository it is documented at `docs/auto-invoke-policy.md`. `/scr:proof-unit` coordinates existing commands. It should keep every step small and stop before any destructive or publishing action unless the writer explicitly confirms.
11
+
12
+ ## Goal
13
+
14
+ Run one chosen unit through this vertical slice:
15
+
16
+ 1. Confirm project and voice context.
17
+ 2. Discuss or refine the unit shape.
18
+ 3. Plan the unit.
19
+ 4. Draft the unit with fresh context.
20
+ 5. Review the draft for voice, continuity, and revision issues.
21
+ 6. Check context health before another large operation.
22
+ 7. Check export prerequisites without writing final packages unless requested.
23
+
24
+ The proof is successful only if the unit still sounds like the writer and the next production step is obvious.
25
+
26
+ ## Inputs
27
+
28
+ - `unit`: The unit number or label. If omitted, infer it from `.manuscript/STATE.md`.
29
+ - `--demo`: Prefer the demo project path and use its planned proof unit.
30
+ - `--export-check`: Run `/scr:export --check` after review to verify external tools.
31
+
32
+ If there is no `.manuscript/` directory, recommend `/scr:demo` or `/scr:new-work` before doing anything else.
33
+
34
+ ## Required Checks
35
+
36
+ 1. Read `.manuscript/STYLE-GUIDE.md` first. If it is missing or thin, suggest `/scr:profile-writer` or `/scr:voice-test` before drafting.
37
+ 2. Read `.manuscript/STATE.md`, `.manuscript/OUTLINE.md`, and `.manuscript/config.json`.
38
+ 3. Run context health with the shared engine when available:
39
+
40
+ ```bash
41
+ scriveno status --project "$PWD" --trigger /scr:proof-unit
42
+ node lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:proof-unit
43
+ node "$HOME/.scriveno/lib/auto-invoke-engine.js" --project "$PWD" --trigger /scr:proof-unit
44
+ node .scriveno/lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:proof-unit
45
+ ```
46
+
47
+ 4. If context health is `tight` or `critical`, stop before drafting and suggest `/scr:save`, `/scr:thread`, or a fresh unit session.
48
+ 5. Verify that the plan, draft, and review files are all unit-scoped. Do not load the whole manuscript into a drafting pass.
49
+
50
+ ## Execution Path
51
+
52
+ Use the first missing step in order:
53
+
54
+ 1. Missing voice profile: `/scr:profile-writer` or `/scr:voice-test`.
55
+ 2. Missing unit discussion: `/scr:discuss <unit>`.
56
+ 3. Missing unit plan: `/scr:plan <unit>`.
57
+ 4. Missing unit draft: `/scr:draft <unit>`.
58
+ 5. Missing review: `/scr:editor-review <unit>`.
59
+ 6. Review flags voice drift: `/scr:voice-check <unit>`.
60
+ 7. Review flags continuity drift: `/scr:continuity-check <unit>`.
61
+ 8. Review passes and `--export-check` was provided: `/scr:export --check`.
62
+ 9. Review passes without export check: `/scr:submit <unit>` or `/scr:progress`.
63
+
64
+ Do not run more than one prose-generating step without reporting back. The writer should see the proof path as a sequence of verified stops, not a silent batch.
65
+
66
+ ## Proof Report
67
+
68
+ End with a compact proof report:
69
+
70
+ ```markdown
71
+ Proof unit: Chapter 3
72
+ Voice profile: present
73
+ Plan: present
74
+ Draft: present
75
+ Review: present
76
+ Context health: ok
77
+ Export prerequisites: not checked
78
+
79
+ Result: ready for submit, with no blocking voice drift found.
80
+ ```
81
+
82
+ When something fails, name the missing file or blocking step and offer the direct command that fixes it.
83
+
84
+ ## Automation Status
85
+
86
+ Every response must include a compact status block:
87
+
88
+ ```text
89
+ Automation status:
90
+ Trigger: /scr:proof-unit {unit}
91
+ Spawned agents:
92
+ - drafter when /scr:draft is the selected step
93
+ - voice-checker when draft or voice review is selected
94
+ - diagnostic worker when /scr:editor-review is selected
95
+ Candidate agents:
96
+ - drafter
97
+ - voice-checker
98
+ - continuity-checker
99
+ Local operations:
100
+ - project state inspected: yes
101
+ - context health estimated: yes
102
+ - export prerequisite check: {yes|no}
103
+ Candidate local helpers:
104
+ - /scr:health --context
105
+ - /scr:export --check
106
+ Manual gates:
107
+ - publish or final package creation
108
+ Auto-invoked:
109
+ - {selected command}: {yes|no}
110
+ Why: proof-unit coordinates the smallest real writing loop while keeping publishing actions explicit
111
+ ```
112
+
113
+ ## Response Contract
114
+
115
+ Every writer-facing response must end with one to four next-command suggestions. Each suggestion must include a short explanation of what that path will do.
116
+
117
+ Use this format:
118
+
119
+ ```markdown
120
+ Next commands:
121
+ - `/scr:...`: One short sentence explaining what this path will do.
122
+ - `/scr:...`: One short sentence explaining what this alternate path will do.
123
+ ```
124
+
125
+ If exactly one path is clearly best, provide one suggestion. If two, three, or four useful paths exist, show them as alternatives. Do not force a linear path when the writer has a real choice.
126
+
127
+ If the writer seems unsure or no specific next command is obvious, include this default option:
128
+
129
+ ```markdown
130
+ Next commands:
131
+ - `/scr:next`: Inspect the project state and choose the right next step.
132
+ ```
133
+
134
+ If the command stops because a prerequisite is missing, suggest the command that fixes the prerequisite. Keep every explanation practical and writer-facing.
135
+
136
+ ## Tone
137
+
138
+ Focused and evidence-first. The point is to build trust with one real unit, not to rush the whole manuscript.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: "Publishing wizard or preset-driven pipeline. Chains export commands based on destination."
3
- argument-hint: "[--preset <preset>] [--all] [--skip-validate]"
3
+ argument-hint: "[--preset <preset>] [--all] [--skip-validate] [--preflight]"
4
4
  ---
5
5
 
6
6
  # /scr:publish -- Publishing Wizard
@@ -10,12 +10,13 @@ You are the publishing wizard. Your job is to turn a completed manuscript into p
10
10
  ## Usage
11
11
 
12
12
  ```
13
- /scr:publish [--preset <preset>] [--all] [--skip-validate]
13
+ /scr:publish [--preset <preset>] [--all] [--skip-validate] [--preflight]
14
14
  ```
15
15
 
16
16
  - `--preset <preset>` -- Run a named preset pipeline without questions
17
17
  - `--all` -- Run every preset available for the current work type
18
18
  - `--skip-validate` -- Skip the scaffold-marker gate (not recommended)
19
+ - `--preflight` -- Check readiness and required tools, then stop before writing deliverables
19
20
  - No arguments -- Run the interactive wizard
20
21
 
21
22
  ---
@@ -124,6 +125,48 @@ Proceed to STEP 2.
124
125
 
125
126
  ---
126
127
 
128
+ ### STEP 1.7: PREFLIGHT MODE
129
+
130
+ If `--preflight` was passed, run a readiness check only and stop before generating front matter, back matter, exports, packages, or history entries.
131
+
132
+ Preflight must include:
133
+
134
+ 1. The validation gate from STEP 1.5 unless `--skip-validate` was also passed.
135
+ 2. The front-matter scaffold exclusion check from STEP 1.6a.
136
+ 3. The publishing prerequisite checklist from STEP 3a.
137
+ 4. Preset availability against `CONSTRAINTS.json`.
138
+ 5. External tool checks by calling the matching export checks:
139
+ - `share-pdf`: `/scr:export --format pdf --check`
140
+ - `share-docx`: `/scr:export --format docx --check`
141
+ - `share-epub`: `/scr:export --format epub --check`
142
+ - `kdp-ebook`: `/scr:export --format epub --check`
143
+ - `kdp-paperback`: `/scr:export --format pdf --print-ready --check` and `/scr:export --format kdp-package --check`
144
+ - `ingram-paperback`: `/scr:export --format pdf --print-ready --check` and `/scr:export --format ingram-package --check`
145
+ - `query-submission`: `/scr:export --format query-package --check`
146
+ - `submission-package`: `/scr:export --format submission-package --check`
147
+ - `screenplay-query`: `/scr:export --format fountain --check`, `/scr:export --format fdx --check`, and `/scr:export --format query-package --check`
148
+ - `all-formats`: check each available base format
149
+
150
+ Use this report shape:
151
+
152
+ ```text
153
+ Publishing Preflight
154
+ ====================
155
+ Preset: kdp-paperback
156
+
157
+ [PASS] manuscript validation
158
+ [WARN] front matter ........ not generated
159
+ [PASS] pandoc
160
+ [PASS] typst
161
+ [SKIP] ghostscript ......... not required until ingram-package
162
+
163
+ Result: ready after 1 optional item
164
+ ```
165
+
166
+ If preflight finds a blocking issue, stop and suggest the command that fixes it. Do not continue into STEP 2.
167
+
168
+ ---
169
+
127
170
  ### STEP 2: ROUTE
128
171
 
129
172
  **If `--preset` is given:** Validate the preset name against the known presets below. If valid, jump to STEP 4 (preset pipeline). If invalid, show the list of available presets and stop.
@@ -38,8 +38,8 @@ Run every check. Do not stop on first finding. Bundle them all into one report.
38
38
  Read `STATE.md` for `Units drafted`, `Units planned`, `Units reviewed`, and `Total words`. Then count what is actually on disk:
39
39
 
40
40
  - **Units drafted** = files matching `.manuscript/drafts/body/*-DRAFT.md`
41
- - **Units planned** = files matching `.manuscript/*-*-PLAN.md` (numeric-prefixed plan files)
42
- - **Units reviewed** = files matching `.manuscript/*-EDITOR-NOTES.md`
41
+ - **Units planned** = files matching `.manuscript/plans/*-PLAN.md`; legacy root-level `.manuscript/*-PLAN.md` also counts
42
+ - **Units reviewed** = files matching `.manuscript/reviews/*-REVIEW.md`; legacy root-level `.manuscript/*-EDITOR-NOTES.md` also counts
43
43
  - **Total words** = `wc -w` summed across all `drafts/body/*-DRAFT.md` files
44
44
 
45
45
  For each metric where STATE.md value != filesystem value, emit:
@@ -67,7 +67,7 @@ For each orphan, emit one finding with the unit identifier and the file path.
67
67
 
68
68
  ### CHECK 3: Plan vs. draft alignment
69
69
 
70
- For each `*-PLAN.md` file in `.manuscript/`, check whether the corresponding `*-DRAFT.md` exists in `drafts/body/`. If a plan exists but no draft:
70
+ For each `*-PLAN.md` file in `.manuscript/plans/` (and any legacy root-level `*-PLAN.md` file), check whether the corresponding `*-DRAFT.md` exists in `drafts/body/`. If a plan exists but no draft:
71
71
 
72
72
  ```
73
73
  INFO Unit 8 has a plan ({N}-{A}-PLAN.md) but no draft yet.
@@ -0,0 +1,149 @@
1
+ ---
2
+ description: Inspect or change the installed Scriveno command profile.
3
+ argument-hint: "[list|status|profile <core|writing|publishing|translation|specialist|full>] [--runtime <runtime>] [--dry-run]"
4
+ ---
5
+
6
+ # Surface
7
+
8
+ You are helping the writer keep Scriveno's installed command surface clear, small, and appropriate for the work they are doing.
9
+
10
+ Follow the auto-invoke policy. In the source repository it is documented at `docs/auto-invoke-policy.md`. `/scr:surface` is a local installer helper. It does not spawn agents and should not edit a manuscript.
11
+
12
+ ## What This Command Does
13
+
14
+ Use this command when the writer wants fewer commands, a publishing-only install, a translation-focused install, or a check of what profile is currently installed.
15
+
16
+ Available profiles:
17
+
18
+ - `core`: Main writing loop and orientation commands.
19
+ - `writing`: Core workflow plus revision, structure, character, and quality commands.
20
+ - `publishing`: Core workflow plus export, publishing, metadata, and platform packaging commands.
21
+ - `translation`: Core workflow plus translation, localization, glossary, and multi-publish commands.
22
+ - `specialist`: Core workflow plus sacred, illustration, collaboration, and utility surfaces.
23
+ - `full`: Every Scriveno command.
24
+
25
+ ## Actions
26
+
27
+ ### `list`
28
+
29
+ Run:
30
+
31
+ ```bash
32
+ scriveno surface list
33
+ ```
34
+
35
+ Report each profile, command count, and intended use.
36
+
37
+ ### `status`
38
+
39
+ Run:
40
+
41
+ ```bash
42
+ scriveno surface status
43
+ ```
44
+
45
+ Report:
46
+
47
+ - Installed profile from `.scriveno/settings.json` or `~/.scriveno/settings.json`
48
+ - Installed runtimes
49
+ - Scope (`project` or `global`)
50
+ - Writer or developer mode
51
+ - Suggested profile if the current one is much larger than the active workflow needs
52
+
53
+ ### `profile <name>`
54
+
55
+ Before changing anything, run a dry run:
56
+
57
+ ```bash
58
+ scriveno surface profile <name> --dry-run
59
+ ```
60
+
61
+ If the writer confirms, reinstall that profile for the same runtime surface:
62
+
63
+ ```bash
64
+ scriveno surface profile <name>
65
+ ```
66
+
67
+ If no prior runtime is recorded, ask for one runtime target, then run:
68
+
69
+ ```bash
70
+ scriveno surface profile <name> --runtimes codex --project
71
+ ```
72
+
73
+ Use the active runtime name instead of `codex` when the writer is in Claude Code, Cursor, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, Antigravity, Manus, Perplexity Desktop, or the generic skill fallback.
74
+
75
+ ## Safety Rules
76
+
77
+ 1. Prefer `--dry-run` before changing the installed surface.
78
+ 2. Do not delete custom user files. The installer cleans only Scriveno-owned command mirrors.
79
+ 3. Keep agents installed even when a smaller command profile is selected. Drafting, review, and translation still need their agent prompts when a profile includes those workflows.
80
+ 4. Do not imply that a smaller profile disables project data. It only changes the installed command surface.
81
+ 5. If the writer is unsure, recommend `writing` for active drafting and `full` for exploration.
82
+
83
+ ## Output Shape
84
+
85
+ Use this shape:
86
+
87
+ ```markdown
88
+ Surface profile: writing
89
+ Installed runtimes: codex
90
+ Scope: project
91
+
92
+ Selected commands: 52 command files
93
+ Best use: active drafting with revision and structure tools
94
+
95
+ No files changed because this was a dry run.
96
+ ```
97
+
98
+ ## Automation Status
99
+
100
+ Every response must include a compact status block:
101
+
102
+ ```text
103
+ Automation status:
104
+ Trigger: /scr:surface {args}
105
+ Spawned agents:
106
+ - none
107
+ Candidate agents:
108
+ - none
109
+ Local operations:
110
+ - surface profile inspected: {yes|no}
111
+ - installer dry run: {yes|no}
112
+ - installer profile change: {yes|no}
113
+ Candidate local helpers:
114
+ - scriveno surface list
115
+ - scriveno surface status
116
+ - scriveno surface profile <name> --dry-run
117
+ Manual gates:
118
+ - writer confirmation before changing installed runtimes
119
+ Auto-invoked:
120
+ - none
121
+ Why: surface management changes installed command files, not manuscript prose
122
+ ```
123
+
124
+ ## Response Contract
125
+
126
+ Every writer-facing response must end with one to four next-command suggestions. Each suggestion must include a short explanation of what that path will do.
127
+
128
+ Use this format:
129
+
130
+ ```markdown
131
+ Next commands:
132
+ - `/scr:...`: One short sentence explaining what this path will do.
133
+ - `/scr:...`: One short sentence explaining what this alternate path will do.
134
+ ```
135
+
136
+ If exactly one path is clearly best, provide one suggestion. If two, three, or four useful paths exist, show them as alternatives. Do not force a linear path when the writer has a real choice.
137
+
138
+ If the writer seems unsure or no specific next command is obvious, include this default option:
139
+
140
+ ```markdown
141
+ Next commands:
142
+ - `/scr:next`: Inspect the project state and choose the right next step.
143
+ ```
144
+
145
+ If the command stops because a prerequisite is missing, suggest the command that fixes the prerequisite. Keep every explanation practical and writer-facing.
146
+
147
+ ## Tone
148
+
149
+ Clear and practical. Treat command-surface changes like workspace organization, not like a feature upsell.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./constraints.schema.json",
3
- "version": "2.7.1",
3
+ "version": "2.8.0",
4
4
  "description": "Scriveno constraint system: work types, command availability, exports, and dependencies. Every command checks this file at runtime.",
5
5
  "_notes": {
6
6
  "sacred_keys": "Sacred subcommands live at commands/scr/sacred/<name>.md and run as /scr:sacred:<name>. Their CONSTRAINTS keys use the sacred:<name> form so /scr:help can render the runnable slash-command path directly. The sacred-numbering-format entry is a separate flat command (commands/scr/sacred-numbering-format.md) that surfaces the active tradition's numbering format. It used to be named sacred-verse-numbering, which collided with sacred:verse-numbering at install time -- both flattened to scr-sacred-verse-numbering. Renamed in v1.6.x; the installer now refuses to install when two sources share a flat skill name."
@@ -3015,6 +3015,23 @@
3015
3015
  ],
3016
3016
  "description": "Diagnose and repair common project state issues"
3017
3017
  },
3018
+ "surface": {
3019
+ "category": "utility",
3020
+ "available": [
3021
+ "all"
3022
+ ],
3023
+ "description": "Inspect or change the installed Scriveno command profile"
3024
+ },
3025
+ "proof-unit": {
3026
+ "category": "core",
3027
+ "available": [
3028
+ "all"
3029
+ ],
3030
+ "description": "Run one manuscript unit through a proof path from voice profile to export readiness",
3031
+ "requires": [
3032
+ "profile-writer"
3033
+ ]
3034
+ },
3018
3035
  "scan": {
3019
3036
  "category": "utility",
3020
3037
  "available": [
@@ -43,7 +43,7 @@ Proof artifacts:
43
43
  > scriveno smoke --json
44
44
  {
45
45
  "ok": true,
46
- "expectedCommands": 113,
46
+ "expectedCommands": 115,
47
47
  "expectedAgents": [
48
48
  "continuity-checker",
49
49
  "drafter",
@@ -439,7 +439,7 @@ Scriveno's `package.json` has no runtime dependencies. The installer is pure Nod
439
439
 
440
440
  ### Plan is canonical
441
441
 
442
- The product plan is the source of truth. If a command file contradicts the plan, the command file is wrong. This ensures consistency across 113 commands and prevents drift as multiple contributors work on the system.
442
+ The product plan is the source of truth. If a command file contradicts the plan, the command file is wrong. This ensures consistency across 115 commands and prevents drift as multiple contributors work on the system.
443
443
 
444
444
  ### Backward compatibility
445
445