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.
- package/README.md +6 -6
- package/bin/install.js +522 -43
- package/commands/scr/export.md +43 -2
- package/commands/scr/health.md +35 -1
- package/commands/scr/help.md +1 -1
- package/commands/scr/new-work.md +1 -1
- package/commands/scr/proof-unit.md +138 -0
- package/commands/scr/publish.md +45 -2
- package/commands/scr/scan.md +3 -3
- package/commands/scr/surface.md +149 -0
- package/data/CONSTRAINTS.json +18 -1
- package/data/proof/first-run/README.md +1 -1
- package/docs/architecture.md +1 -1
- package/docs/command-reference.md +51 -4
- package/docs/configuration.md +1 -1
- package/docs/development.md +1 -1
- package/docs/release-notes.md +28 -2
- package/docs/route-graph.md +2 -2
- package/docs/sacred-texts.md +1 -1
- package/docs/voice-dna.md +1 -1
- package/docs/work-types.md +1 -1
- package/lib/auto-invoke-engine.js +158 -6
- package/package.json +1 -1
- package/templates/config.json +1 -1
package/commands/scr/export.md
CHANGED
|
@@ -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
|
package/commands/scr/health.md
CHANGED
|
@@ -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
|
package/commands/scr/help.md
CHANGED
|
@@ -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
|
|
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.
|
package/commands/scr/new-work.md
CHANGED
|
@@ -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.
|
|
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.
|
package/commands/scr/publish.md
CHANGED
|
@@ -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.
|
package/commands/scr/scan.md
CHANGED
|
@@ -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
|
|
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
|
|
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.
|
package/data/CONSTRAINTS.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./constraints.schema.json",
|
|
3
|
-
"version": "2.
|
|
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": [
|
package/docs/architecture.md
CHANGED
|
@@ -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
|
|
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
|
|