scriveno 2.0.12 → 2.6.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.
Files changed (61) hide show
  1. package/README.md +12 -6
  2. package/agents/voice-checker.md +10 -0
  3. package/bin/install.js +91 -2
  4. package/commands/scr/autopilot-publish.md +1 -1
  5. package/commands/scr/autopilot-translate.md +5 -6
  6. package/commands/scr/autopilot.md +3 -3
  7. package/commands/scr/beta-reader.md +6 -3
  8. package/commands/scr/build-ebook.md +1 -1
  9. package/commands/scr/build-print.md +2 -2
  10. package/commands/scr/continuity-check.md +1 -0
  11. package/commands/scr/copy-edit.md +1 -0
  12. package/commands/scr/demo.md +1 -0
  13. package/commands/scr/dialogue-audit.md +1 -0
  14. package/commands/scr/discussion-questions.md +1 -0
  15. package/commands/scr/draft.md +2 -2
  16. package/commands/scr/export.md +1 -1
  17. package/commands/scr/first-run.md +128 -0
  18. package/commands/scr/help.md +2 -1
  19. package/commands/scr/line-edit.md +1 -0
  20. package/commands/scr/map-manuscript.md +1 -0
  21. package/commands/scr/multi-publish.md +3 -2
  22. package/commands/scr/new-character.md +1 -0
  23. package/commands/scr/new-work.md +1 -1
  24. package/commands/scr/originality-check.md +1 -0
  25. package/commands/scr/pacing-analysis.md +1 -0
  26. package/commands/scr/polish.md +1 -0
  27. package/commands/scr/quick-write.md +4 -1
  28. package/commands/scr/sensitivity-review.md +1 -0
  29. package/commands/scr/synopsis.md +1 -0
  30. package/commands/scr/theme-tracker.md +1 -0
  31. package/commands/scr/timeline.md +1 -0
  32. package/commands/scr/track.md +2 -0
  33. package/commands/scr/translate.md +1 -1
  34. package/commands/scr/voice-check.md +1 -0
  35. package/data/CONSTRAINTS.json +11 -1
  36. package/data/export-templates/scriveno-book.typst +2 -2
  37. package/data/export-templates/scriveno-chapbook.typst +1 -1
  38. package/data/export-templates/scriveno-picturebook.typst +9 -0
  39. package/data/export-templates/scriveno-stageplay.typst +14 -4
  40. package/data/proof/first-run/README.md +96 -0
  41. package/data/proof/runtime-parity/README.md +48 -0
  42. package/docs/architecture.md +6 -3
  43. package/docs/command-reference.md +39 -23
  44. package/docs/configuration.md +28 -3
  45. package/docs/contributing.md +2 -2
  46. package/docs/drafter-quality.md +1 -1
  47. package/docs/getting-started.md +4 -1
  48. package/docs/proof-artifacts.md +11 -0
  49. package/docs/quick-proof.md +23 -2
  50. package/docs/release-notes.md +61 -0
  51. package/docs/route-graph.md +2 -2
  52. package/docs/runtime-support.md +4 -3
  53. package/docs/sacred-texts.md +1 -1
  54. package/docs/shipped-assets.md +2 -0
  55. package/docs/starter-sets.md +8 -0
  56. package/docs/translation.md +7 -11
  57. package/docs/voice-dna.md +4 -4
  58. package/docs/work-types.md +1 -1
  59. package/lib/track-safety.js +72 -0
  60. package/package.json +1 -1
  61. package/templates/config.json +1 -1
@@ -57,22 +57,47 @@ When a writer runs `/scr:new-work`, Scriveno creates `.manuscript/config.json`.
57
57
 
58
58
  ```json
59
59
  {
60
- "scriveno_version": "2.0.12",
60
+ "scriveno_version": "2.6.0",
61
61
  "work_type": "<chosen>",
62
62
  "group": "<group>",
63
63
  "command_unit": "<unit>",
64
64
  "developer_mode": false,
65
65
  "created_at": "<ISO timestamp>",
66
+ "updated_at": "<ISO timestamp>",
66
67
  "autopilot": {
67
68
  "enabled": false,
68
- "profile": "guided"
69
+ "profile": "guided",
70
+ "custom_checkpoints": []
71
+ },
72
+ "voice": {
73
+ "calibrated": false,
74
+ "last_calibration": null,
75
+ "drift_threshold": 0.3
76
+ },
77
+ "draft": {
78
+ "rigor": "standard",
79
+ "context_profile": "standard",
80
+ "pitfalls_enabled": true
81
+ },
82
+ "export": {
83
+ "default_format": "docx_manuscript",
84
+ "include_front_matter": true,
85
+ "include_back_matter": true
86
+ },
87
+ "translation": {
88
+ "source_language": "en",
89
+ "target_languages": []
90
+ },
91
+ "collaboration": {
92
+ "tracks_enabled": false,
93
+ "default_track": "canon"
69
94
  }
70
95
  }
71
96
  ```
72
97
 
73
98
  That `scriveno_version` value should track the current package release and the live `/scr:new-work` contract, not an older milestone snapshot.
74
99
 
75
- Every project gets those core keys. Additional blocks are added only when the work type requires them.
100
+ Every project gets those core keys and shared blocks (`autopilot`, `voice`, `draft`, `export`, `translation`, `collaboration`). The `voice.drift_threshold` default of 0.3 is the voice-drift gate: drift is `(100 - score) / 100`, so 0.3 offers a re-draft when the voice score falls below 70 (see [Drafter Quality](drafter-quality.md) and `agents/voice-checker.md`). Additional blocks are added only when the work type requires them: a `technical` block for technical writing, top-level sacred profile keys for sacred work types, and `platform` for work types with an inferred publishing target.
76
101
 
77
102
  ### Technical writing projects
78
103
 
@@ -19,7 +19,7 @@ templates/ Base project templates + technical/ and sacred/ variants
19
19
  templates/technical/ 6 technical-writing context variants
20
20
  templates/sacred/ Sacred-specific context templates and tradition manifests
21
21
  bin/install.js Multi-platform installer (Node.js)
22
- docs/ Documentation suite (16 guides)
22
+ docs/ Documentation suite (25 guides)
23
23
  ```
24
24
 
25
25
  Key principle: the AI agent reads these files at runtime. There is no compilation, no bundling, no transpilation. If you can write markdown, you can contribute.
@@ -343,7 +343,7 @@ The export command (`commands/scr/export.md`) needs to know about your format. A
343
343
 
344
344
  ### Step 3: Add CONSTRAINTS.json entry (if restricted)
345
345
 
346
- If your export format is only available for certain work types, add an entry to the `"export_formats"` section of CONSTRAINTS.json with an `available_for` array specifying which work type groups can use it.
346
+ If your export format is only available for certain work types, add an entry to the `"exports"` section of CONSTRAINTS.json with an `available` array specifying which work type groups can use it (or `["all"]` for universal formats).
347
347
 
348
348
  ## Testing Your Changes
349
349
 
@@ -104,7 +104,7 @@ Rough guidance for matching settings to model class. The writer's experience wit
104
104
  | Mid-tier (Sonnet 4.x, GPT-4 mini, Haiku 4.x) | Day-to-day drafting, most novels and screenplays | `standard` | `standard` |
105
105
  | Budget (Haiku, GPT-3.5, local 7-13B) | Bulk drafting of short scenes, repetitive structural work | `strict` | `minimal` |
106
106
 
107
- If voice fidelity drops below the writer's `voice.drift_threshold`, the first lever is `rigor: strict`. The second is to step up a model tier. The third is to recalibrate STYLE-GUIDE.md via `/scr:voice-test`.
107
+ If voice fidelity drops below the writer's `voice.drift_threshold` (a voice-checker score below 70 at the default 0.3, where drift is `(100 - score) / 100`), the first lever is `rigor: strict`. The second is to step up a model tier. The third is to recalibrate STYLE-GUIDE.md via `/scr:voice-test`.
108
108
 
109
109
  ## Token economy
110
110
 
@@ -22,12 +22,13 @@ npx scriveno@latest
22
22
 
23
23
  This installs Scriveno into the runtime you choose. Command-directory and skills targets place files where the runtime expects them. Guided targets like Perplexity Desktop instead write setup assets and show the exact connector steps you need. Takes about 30 seconds.
24
24
 
25
- Once installed, Claude Code uses flat `/scr-*` commands such as `/scr-help` and `/scr-new-work`. Other command-directory runtimes currently keep `/scr:*`. Codex uses generated `$scr-*` skills such as `$scr-help` and `$scr-new-work`. Guided targets explain their supported setup path directly in the generated setup files.
25
+ Once installed, Claude Code uses flat `/scr-*` commands such as `/scr-help`, `/scr-first-run`, and `/scr-new-work`. Other command-directory runtimes currently keep `/scr:*`. Codex uses generated `$scr-*` skills such as `$scr-help`, `$scr-first-run`, and `$scr-new-work`. Guided targets explain their supported setup path directly in the generated setup files.
26
26
 
27
27
  You can also ask Scriveno for a read-only project status from any terminal:
28
28
 
29
29
  ```
30
30
  scriveno status --project .
31
+ scriveno first-run --project .
31
32
  scriveno status . --json
32
33
  scriveno status --project . --apply-safe
33
34
  scriveno sync --check
@@ -37,6 +38,8 @@ That status command is the same shared auto-invoke engine used by `/scr-next`, `
37
38
 
38
39
  Use `--apply-safe` when you want Scriveno to run the read-only checks and show which helpers are safe, skipped, or agent-ready. Use `sync --check` when you want the installed runtime surfaces checked too.
39
40
 
41
+ If you want one guided proof path instead of separate checks, start with `scriveno first-run --project .`.
42
+
40
43
  ## Step 2: Explore the Demo (Optional)
41
44
 
42
45
  Not sure what Scriveno does? Try the demo before starting your own project:
@@ -5,6 +5,7 @@ This document is the canonical index of Scriveno's proof layer. It points to con
5
5
  ## Start Here
6
6
 
7
7
  - Read **Quick Proof** if you want one 10-minute route through installation checks, demo inspection, runtime command shapes, and the next draft command.
8
+ - Read **First-Run Proof** if you want the committed transcript artifact for `/scr:first-run`, `scriveno first-run --project .`, runtime smoke, and the demo flow.
8
9
  - Read the **Watchmaker Sample Flow** if you want one end-to-end writing workflow from setup through drafts, review, and next step.
9
10
  - Read **Voice DNA** if you want the shortest possible proof of how style guidance changes output on the same brief.
10
11
  - Read **Creative Context** if you want to see one craft choice travel through discuss, plan, draft, and review artifacts.
@@ -32,6 +33,14 @@ This document is the canonical index of Scriveno's proof layer. It points to con
32
33
 
33
34
  Start with the proof bundle if you want the curated version. Follow the underlying files if you want to inspect the raw sample directly.
34
35
 
36
+ ## First-Run Proof
37
+
38
+ **What it proves:** Scriveno has an executable first-run guide and committed transcript artifacts for the first proof path.
39
+
40
+ **Canonical artifact:** [data/proof/first-run/README.md](../data/proof/first-run/README.md)
41
+
42
+ **Related parity artifact:** [data/proof/runtime-parity/README.md](../data/proof/runtime-parity/README.md)
43
+
35
44
  ## Voice DNA
36
45
 
37
46
  **What it proves:** Scriveno's style-guide layer changes draft behavior in visible ways when the same brief is written unguided versus guided.
@@ -57,6 +66,8 @@ Read the bundle in order if you want to inspect sentence rhythm, metaphor select
57
66
  - [Shipped Assets](shipped-assets.md) -- canonical inventory of the trust-critical files Scriveno actually bundles
58
67
  - [Quick Proof](quick-proof.md) -- 10-minute proof-first path through install checks, the demo, and the next draft
59
68
  - [Starter Sets](starter-sets.md) -- small command sets by writing goal
69
+ - [data/proof/first-run/README.md](../data/proof/first-run/README.md) -- committed first-run transcript artifact
70
+ - [data/proof/runtime-parity/README.md](../data/proof/runtime-parity/README.md) -- runtime surface evidence and host-parity boundary
60
71
  - [Runtime Support](runtime-support.md) -- canonical runtime matrix and installer-baseline framing
61
72
  - [Auto-Invoke Policy](auto-invoke-policy.md) -- proactive status, safe apply, local-helper, and agent-spawn boundaries
62
73
  - [Route Graph Audit](route-graph.md) -- generated route graph, automation lanes, and priority fixtures
@@ -1,10 +1,11 @@
1
1
  # Quick Proof
2
2
 
3
- This is the shortest proof-first path through Scriveno. It is meant for a fresh user who wants to see real shipped artifacts, a demo manuscript, runtime expectations, and the first practical commands before reading the full manual.
3
+ This is the shortest proof-first path through Scriveno. It is meant for a fresh user who wants to see real shipped artifacts, a demo manuscript, runtime expectations, and the first practical commands before reading the full manual. If your runtime supports Scriveno commands, the executable version of this page is `/scr:first-run`.
4
4
 
5
5
  ## What This Proves
6
6
 
7
7
  - Scriveno ships inspectable proof bundles, not only feature claims.
8
+ - Scriveno ships `/scr:first-run` and `scriveno first-run --project .` as guided first-run surfaces.
8
9
  - The watchmaker demo includes real manuscript state, drafts, review notes, and a planned next unit.
9
10
  - Voice DNA changes output on the same brief, with guided and unguided samples side by side.
10
11
  - Runtime behavior is explicit: Claude Code is the primary reference runtime, Codex uses generated `$scr-*` skills, standard slash-command targets use `/scr:*`, and guided targets document their local setup path.
@@ -27,31 +28,35 @@ node bin/install.js --runtimes claude-code,cursor,gemini-cli,codex,opencode,copi
27
28
  ### 2. Check The Installed Surface
28
29
 
29
30
  ```bash
31
+ scriveno first-run --project .
30
32
  scriveno status --project .
31
33
  scriveno smoke --json
32
34
  scriveno agents --json
33
35
  scriveno routes --json
34
36
  ```
35
37
 
36
- Expected result: the commands report installed surfaces, agent prompt availability, route lanes, and any manual gates. They do not mutate manuscript files.
38
+ Expected result: the commands report the recommended first path, installed surfaces, agent prompt availability, route lanes, and any manual gates. They do not mutate manuscript files.
37
39
 
38
40
  ### 3. Open The Demo
39
41
 
40
42
  Claude Code:
41
43
 
42
44
  ```text
45
+ /scr-first-run
43
46
  /scr-demo
44
47
  ```
45
48
 
46
49
  Standard slash-command runtimes:
47
50
 
48
51
  ```text
52
+ /scr:first-run
49
53
  /scr:demo
50
54
  ```
51
55
 
52
56
  Codex:
53
57
 
54
58
  ```text
59
+ $scr-first-run
55
60
  $scr-demo
56
61
  ```
57
62
 
@@ -72,6 +77,8 @@ Start here:
72
77
  - [data/proof/watchmaker-flow/README.md](../data/proof/watchmaker-flow/README.md)
73
78
  - [data/proof/voice-dna/README.md](../data/proof/voice-dna/README.md)
74
79
  - [data/proof/creative-context/README.md](../data/proof/creative-context/README.md)
80
+ - [data/proof/first-run/README.md](../data/proof/first-run/README.md)
81
+ - [data/proof/runtime-parity/README.md](../data/proof/runtime-parity/README.md)
75
82
 
76
83
  The fastest comparison is the Voice DNA pair:
77
84
 
@@ -147,6 +154,18 @@ Candidate local helpers: scan, save
147
154
  Manual gates: writer approval before publishing or overwriting exports
148
155
  ```
149
156
 
157
+ ```text
158
+ > scriveno first-run --project .
159
+ Scriveno first-run guide
160
+ Current recommendation: /scr:new-work
161
+ Recommended first path:
162
+ 1. /scr:demo
163
+ 2. cd scriveno-demo
164
+ 3. /scr:next
165
+ 4. /scr:draft 5
166
+ 5. /scr:editor-review 5
167
+ ```
168
+
150
169
  ```text
151
170
  > /scr:draft 5
152
171
  Loaded STYLE-GUIDE.md and the plan for unit 5.
@@ -169,6 +188,8 @@ No runtime claim here should be read as host-runtime parity proof. The repo prov
169
188
  ## Where To Go Next
170
189
 
171
190
  - [Starter Sets](starter-sets.md) for small command paths by writing goal
191
+ - [data/proof/first-run/README.md](../data/proof/first-run/README.md) for committed first-run transcripts
192
+ - [data/proof/runtime-parity/README.md](../data/proof/runtime-parity/README.md) for runtime parity evidence
172
193
  - [Getting Started](getting-started.md) for the complete first-project walkthrough
173
194
  - [Proof Artifacts](proof-artifacts.md) for the proof hub
174
195
  - [Runtime Support](runtime-support.md) for installation and support levels
@@ -2,6 +2,67 @@
2
2
 
3
3
  This document is the public-facing summary of what changed between package releases. For package history, see the root [CHANGELOG](../CHANGELOG.md).
4
4
 
5
+ ## 2.6.0 - 2026-05-29
6
+
7
+ ### What changed
8
+
9
+ - Fixed a Pandoc-variable mismatch so RTL, CJK, and non-Latin fonts now reach the print and PDF path; added RTL support to the picturebook and stageplay templates (all four interior templates verified with `dir=rtl`).
10
+ - Made the voice-drift gate functional: `agents/voice-checker.md` now defines `drift = (100 - score) / 100`, so the default `voice.drift_threshold` of 0.3 means a re-draft is offered below a voice score of 70.
11
+ - Kept `/scr:autopilot-publish` fully unattended and advisory; a severe voice failure is surfaced loudly rather than halting the run.
12
+ - Corrected `/scr:quick-write` and `/scr:beta-reader` framing to match what they actually do.
13
+ - Marked the translation and illustration API tables as future targets, not shipped behavior.
14
+ - Audited and fixed documentation drift across the suite: command reference usage lines, the configuration baseline, the architecture file tree, voice-dna part numbering, the missing speech work type, and stale counts.
15
+ - Added `lib/track-safety.js` with adversarial tests, and `argument-hint` to 17 commands.
16
+
17
+ ### Why it matters
18
+
19
+ This release closes the gap between what Scriveno documented and what it shipped. The export fix makes RTL and non-Latin print output actually work, the voice gate is now a real computed check instead of a phantom threshold, and the documentation no longer claims integrations or behavior that the prompt system does not provide.
20
+
21
+ ### Affected areas
22
+
23
+ - export and print templates (RTL, CJK, fonts)
24
+ - voice-checker drift mapping and autopilot gates
25
+ - translation and illustration honesty
26
+ - documentation suite (command reference, configuration, architecture, voice-dna, README)
27
+ - track-safety helper and command argument hints
28
+ - package metadata and release-alignment tests
29
+
30
+ ## 2.5.0 - 2026-05-16
31
+
32
+ ### What changed
33
+
34
+ - Scriveno now ships `/scr:first-run`, an executable first-run path through install checks, demo proof, starter choices, and next commands.
35
+ - The public CLI now supports `scriveno first-run --project .`, giving terminal users the same proof path without relying on host-specific slash-command behavior.
36
+ - First-run guidance is connected to `/scr:help`, `/scr:demo`, Quick Proof, Starter Sets, Runtime Support, Shipped Assets, Command Reference, README launch copy, and architecture docs.
37
+ - Scriveno now includes committed first-run and runtime-parity proof bundles under `data/proof/`.
38
+ - Runtime smoke now validates the 113-command installed surface across Claude Code, Codex, Cursor, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, Antigravity, Manus, Perplexity Desktop, and the generic fallback.
39
+ - README badges, package metadata, constraints metadata, generated config metadata, changelog, release notes, configuration docs, route graph docs, architecture docs, proof docs, and release tests are aligned on `2.5.0`.
40
+
41
+ ### Why it matters
42
+
43
+ The previous release documented a stronger proof path. This release makes that path executable. A new writer can install Scriveno, run one first-run command, inspect proof artifacts, create the demo, and move into drafting without having to assemble the path from documentation.
44
+
45
+ ### Affected areas
46
+
47
+ - first-run command surface
48
+ - public CLI installer and smoke checks
49
+ - proof artifact bundles
50
+ - README badges and launch copy
51
+ - runtime support matrix
52
+ - command reference and route graph docs
53
+ - package metadata and generated project examples
54
+ - release-alignment tests
55
+
56
+ ### Verification
57
+
58
+ - `npm run policy:check`
59
+ - `node --test test/first-run-proof-surface.test.js test/adaptive-concierge.test.js test/auto-invoke-engine.test.js test/command-surface-coherence.test.js test/collaboration-trust-surface.test.js test/package.test.js test/phase15-proof-artifacts-positioning.test.js`
60
+ - `npm test`
61
+ - `npm run release:check`
62
+ - `git diff --check`
63
+ - `scriveno first-run --project .`
64
+ - `scriveno smoke --json`
65
+
5
66
  ## 2.0.12 - 2026-05-16
6
67
 
7
68
  ### What changed
@@ -13,9 +13,9 @@ The text report summarizes command count, graph edges, agent-capable routes, loc
13
13
 
14
14
  ## Current Shape
15
15
 
16
- As of `2.0.12`, the route graph contains:
16
+ As of `2.6.0`, the route graph contains:
17
17
 
18
- - 112 commands
18
+ - 113 commands
19
19
  - intent-order edges from `command_intents`
20
20
  - dependency-chain edges from `dependencies.core_chain`
21
21
  - automation lanes from `getCommandAutomationPolicy()`
@@ -69,12 +69,13 @@ Node is not a runtime dependency for Scriveno's markdown command system itself.
69
69
 
70
70
  Scriveno docs use `/scr:*` as the shared command id format unless a host-specific example is needed. Installed command surfaces differ by runtime:
71
71
 
72
- - Claude Code: `/scr-demo`, `/scr-new-work`, `/scr-next`
73
- - Standard command-directory runtimes: `/scr:demo`, `/scr:new-work`, `/scr:next`
74
- - Codex: `$scr-demo`, `$scr-new-work`, `$scr-next`
72
+ - Claude Code: `/scr-first-run`, `/scr-demo`, `/scr-new-work`, `/scr-next`
73
+ - Standard command-directory runtimes: `/scr:first-run`, `/scr:demo`, `/scr:new-work`, `/scr:next`
74
+ - Codex: `$scr-first-run`, `$scr-demo`, `$scr-new-work`, `$scr-next`
75
75
  - Guided targets: follow the generated setup instructions and connector recipe
76
76
 
77
77
  Use [Quick Proof](quick-proof.md) for the 10-minute proof route and [Starter Sets](starter-sets.md) for goal-based command paths.
78
+ Use [Runtime Parity Evidence](../data/proof/runtime-parity/README.md) for the committed boundary between install-surface proof and host-runtime parity proof.
78
79
 
79
80
  ## Shared Auto-Invoke Engine
80
81
 
@@ -292,5 +292,5 @@ Here is a quick walkthrough for starting a sacred writing project:
292
292
  ## See Also
293
293
 
294
294
  - [Getting Started](getting-started.md) -- Install Scriveno and create your first project
295
- - [Command Reference](command-reference.md) -- Full reference for all 112 commands, including the [Sacred Exclusive](command-reference.md#sacred-exclusive) section
295
+ - [Command Reference](command-reference.md) -- Full reference for all 113 commands, including the [Sacred Exclusive](command-reference.md#sacred-exclusive) section
296
296
  - [README](../README.md) -- Project overview and feature list
@@ -123,6 +123,8 @@ Sacred commands read top-level sacred profile keys in new projects and preserve
123
123
  - `docs/configuration.md` -- canonical project config and package metadata reference
124
124
  - `data/proof/watchmaker-flow/README.md` -- canonical sample-flow proof bundle rooted in shipped demo files
125
125
  - `data/proof/voice-dna/README.md` -- canonical Voice DNA proof bundle
126
+ - `data/proof/first-run/README.md` -- committed transcript artifact for the executable first-run path
127
+ - `data/proof/runtime-parity/README.md` -- runtime install-surface evidence and host-parity boundary
126
128
  - `commands/scr/export.md` -- source of truth for export command behavior
127
129
  - `docs/publishing.md` -- user-facing explanation of export formats and publishing packages
128
130
  - `docs/contributing.md` -- contributor-facing guidance for extending export support
@@ -4,6 +4,14 @@ Scriveno has a large command surface because it covers many kinds of writing. St
4
4
 
5
5
  Each set is intentionally small. Use `/scr-next`, `/scr:next`, or `$scr-next` whenever you are unsure which command should come next.
6
6
 
7
+ ## First 10 Minutes
8
+
9
+ - `/scr:first-run` runs the guided proof path and shows runtime-specific command shapes.
10
+ - `/scr:demo` creates the isolated watchmaker demo.
11
+ - `/scr:next` inspects the demo state and recommends the next move.
12
+ - `/scr:draft` drafts the planned fifth unit.
13
+ - `/scr:editor-review` reviews the new draft.
14
+
7
15
  ## Draft A Book
8
16
 
9
17
  - `/scr:new-work` creates the project and work-type context.
@@ -2,17 +2,13 @@
2
2
 
3
3
  Scriveno translates your manuscript into any language while preserving your voice. The translation pipeline handles glossary management, translation memory, cultural adaptation, quality verification, and multi-language publishing -- from setup to finished translated editions.
4
4
 
5
- This guide covers the full pipeline: choosing a translation engine, translating your manuscript, managing terminology, verifying quality, and publishing in multiple languages.
5
+ This guide covers the full pipeline: how translation works, translating your manuscript, managing terminology, verifying quality, and publishing in multiple languages.
6
6
 
7
- ## Translation Engines
7
+ ## Translation approach
8
8
 
9
- Scriveno uses three translation approaches, each suited to different languages and content types.
9
+ Scriveno translates through the in-context translator agent (`agents/translator.md`), not an external translation API. The agent itself handles literary nuance, sacred-text registers, and cultural adaptation that machine-translation services miss. It applies your voice profile, maintains glossary compliance, and can do formal or dynamic equivalence translation. Every unit is translated by the translator agent in fresh context with your STYLE-GUIDE.md loaded.
10
10
 
11
- **DeepL** -- Primary engine for European languages. Higher quality than alternatives for English, French, German, Spanish, Italian, Portuguese, Dutch, Polish, Japanese, Chinese, and Korean. GDPR-compliant -- your content is not stored or used for training.
12
-
13
- **Google Cloud Translation** -- Broad language coverage with 130+ languages. Required for Arabic, Hebrew, Hindi, Swahili, and other languages DeepL does not cover. Best choice for RTL scripts and languages with limited DeepL support.
14
-
15
- **AI Agent (Claude/GPT)** -- The AI agent itself handles literary nuance, sacred text translation, and cultural adaptation that machine translation APIs miss. It applies your voice profile, maintains glossary compliance, and can do formal/dynamic equivalence translation. This is Scriveno's default for literary content -- every unit is translated by the translator agent with your STYLE-GUIDE.md loaded.
11
+ DeepL and Google Cloud Translation are documented as possible future integration targets, not current behavior. Scriveno does not call either service today; if an automated machine-translation path is added later, this guide will describe how it plugs in.
16
12
 
17
13
  The translator agent works unit by unit in fresh context (just like the drafter), ensuring consistent quality and glossary compliance across the entire manuscript.
18
14
 
@@ -171,7 +167,7 @@ The TMX export produces industry-standard Translation Memory eXchange format com
171
167
 
172
168
  ## Cultural Adaptation
173
169
 
174
- Machine translation handles words. Cultural adaptation handles meaning. Scriveno flags culturally sensitive content that needs human attention beyond what translation APIs catch.
170
+ Translation handles words. Cultural adaptation handles meaning. Scriveno flags culturally sensitive content that needs deliberate attention beyond a faithful unit-by-unit rendering.
175
171
 
176
172
  ```
177
173
  /scr:cultural-adaptation fr
@@ -247,8 +243,8 @@ Scriveno handles right-to-left and CJK (Chinese, Japanese, Korean) scripts throu
247
243
 
248
244
  RTL languages (Arabic, Hebrew, Persian, Urdu) receive special handling:
249
245
 
250
- - **Text direction** -- Export commands automatically set `--variable dir=rtl` for Pandoc and `text-dir` for Typst
251
- - **Template adjustments** -- The Typst book template reverses inside/outside margins for RTL binding
246
+ - **Text direction** -- Export commands pass the Pandoc `dir` variable (`dir=rtl`); the Typst interior templates read that `dir` variable to orient text
247
+ - **Template adjustments** -- The Typst interior templates honor RTL: the book template reverses inside/outside margins for RTL binding, and the stageplay template flips its binding margin and page-number alignment. The chapbook and picturebook templates set text direction from the `dir` variable.
252
248
  - **Font requirements** -- RTL exports need fonts with Arabic/Hebrew glyph support. Scriveno uses system-available fonts by default; specify custom fonts in `.manuscript/config.json`
253
249
  - **Punctuation** -- Quotation marks use the appropriate convention (e.g., French-style guillemets for Arabic)
254
250
 
package/docs/voice-dna.md CHANGED
@@ -138,7 +138,7 @@ This section governs the speed and flow of narrative.
138
138
  - **Between chapters** -- Cliffhangers, echoes, or clean breaks
139
139
  - **Time jumps** -- How they're signaled, how frequent, how handled
140
140
 
141
- ### Part 7: Reference Influences
141
+ ### Part 8: Reference Influences
142
142
 
143
143
  This section captures the authors, works, and passages that anchor your voice.
144
144
 
@@ -210,7 +210,7 @@ The 10 registers are:
210
210
  | **Parabolic** | Allegorical, story-within-story | "The kingdom of heaven is like..." concrete daily-life imagery |
211
211
  | **Didactic** | Instructional, systematic, expository | Topic-by-topic structure, teacher-student dynamic, Q&A format |
212
212
 
213
- Each unit's plan file specifies which register to use. Your STYLE-GUIDE.md Part 8 (Sacred Voice Registers) describes how YOU handle each register -- the drafter always defers to your personalized register style over the generic descriptions.
213
+ Each unit's plan file specifies which register to use. Your STYLE-GUIDE.md "Sacred voice registers" part (Part 8 in the shipped template) describes how YOU handle each register -- the drafter always defers to your personalized register style over the generic descriptions.
214
214
 
215
215
  If no register is specified in a plan file, the drafter defaults to narrative-historical.
216
216
 
@@ -276,7 +276,7 @@ See [docs/drafter-quality.md](drafter-quality.md) for the full system, including
276
276
  ### Too many metaphors / not enough metaphors
277
277
 
278
278
  **Symptom:** Prose is either overwritten or too bare.
279
- **Fix:** Adjust metaphor density in STYLE-GUIDE.md Part 4 (Figurative Language). "Sparse" means one metaphor per page at most. "Dense" means multiple per paragraph. Find your natural density by looking at your existing writing.
279
+ **Fix:** Adjust metaphor density in STYLE-GUIDE.md Part 3 (vocabulary and figurative language). "Sparse" means one metaphor per page at most. "Dense" means multiple per paragraph. Find your natural density by looking at your existing writing.
280
280
 
281
281
  ### AI-sounding hedging
282
282
 
@@ -293,5 +293,5 @@ See [docs/drafter-quality.md](drafter-quality.md) for the full system, including
293
293
  - [Proof Artifacts](proof-artifacts.md) -- inspect the Voice DNA before/after bundle first if you want the fastest concrete evidence
294
294
  - [Getting Started](getting-started.md) -- Install Scriveno and write your first draft
295
295
  - [Drafter Quality](drafter-quality.md) -- the three rule layers, the `draft` config block, and model-tier recommendations
296
- - [Command Reference](command-reference.md) -- Full list of all 112 commands with usage and examples
296
+ - [Command Reference](command-reference.md) -- Full list of all 113 commands with usage and examples
297
297
  - [Work Types Guide](work-types.md) -- How work types adapt Scriveno's vocabulary and commands
@@ -335,5 +335,5 @@ Your work type is stored in `.manuscript/config.json` and can be changed later b
335
335
  ## See Also
336
336
 
337
337
  - [Getting Started](getting-started.md) -- Install Scriveno and write your first draft
338
- - [Command Reference](command-reference.md) -- Full list of all 112 commands with usage and examples
338
+ - [Command Reference](command-reference.md) -- Full list of all 113 commands with usage and examples
339
339
  - [Voice DNA Guide](voice-dna.md) -- How Scriveno profiles and preserves your writing voice
@@ -0,0 +1,72 @@
1
+ // lib/track-safety.js
2
+ // Canonical, dependency-free slug + branch derivation for /scr:track (D-01).
3
+ //
4
+ // The track.md prompt instructs the agent to slugify a writer-provided track
5
+ // label before it ever touches a git or shell command. This module is the
6
+ // single source of truth for that algorithm. The installer copies lib/ into the
7
+ // writer's data dir, so it ships as <data-dir>/lib/track-safety.js and a runtime
8
+ // can derive a guaranteed-safe slug deterministically instead of relying on the
9
+ // model to apply the rules by hand:
10
+ //
11
+ // node <data-dir>/lib/track-safety.js "Editor's Suggestions"
12
+ // -> {"slug":"editors-suggestions","branch":"track/editors-suggestions"}
13
+ //
14
+ // Safety property: a sanitized slug contains only [a-z0-9-]. It can never carry
15
+ // a shell metacharacter, quote, whitespace, path separator, or command
16
+ // substitution, so interpolating `track/<slug>` into a git command line is safe.
17
+
18
+ 'use strict';
19
+
20
+ // A slug is shell-safe iff it is a non-empty run of lowercase alphanumerics and
21
+ // hyphens with no leading/trailing hyphen.
22
+ const SLUG_SAFE = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
23
+ const FALLBACK_SLUG = 'untitled';
24
+
25
+ // Apply the D-01 rules: lowercase, whitespace/underscores to hyphen, strip
26
+ // everything that is not [a-z0-9-], collapse hyphen runs, trim edge hyphens.
27
+ // Returns FALLBACK_SLUG when the label has no usable characters (e.g. "***",
28
+ // "日本", "") so the caller never produces an empty branch name.
29
+ function sanitizeTrackSlug(label) {
30
+ const slug = String(label == null ? '' : label)
31
+ .toLowerCase()
32
+ .replace(/[\s_]+/g, '-')
33
+ .replace(/[^a-z0-9-]+/g, '')
34
+ .replace(/-+/g, '-')
35
+ .replace(/^-+|-+$/g, '');
36
+ return slug.length > 0 ? slug : FALLBACK_SLUG;
37
+ }
38
+
39
+ function isShellSafeSlug(slug) {
40
+ return typeof slug === 'string' && SLUG_SAFE.test(slug);
41
+ }
42
+
43
+ // Resolve a collision-free branch name. `existingBranches` is the set of branch
44
+ // names already present in the repo (e.g. parsed from `git branch`). Mirrors
45
+ // track.md create-step 6: append -2, -3, ... to the slug until the branch name
46
+ // is free.
47
+ function resolveTrackBranch(label, existingBranches = []) {
48
+ const taken = new Set(existingBranches);
49
+ const baseSlug = sanitizeTrackSlug(label);
50
+ let slug = baseSlug;
51
+ let n = 2;
52
+ while (taken.has(`track/${slug}`)) {
53
+ slug = `${baseSlug}-${n}`;
54
+ n += 1;
55
+ }
56
+ return { slug, branch: `track/${slug}` };
57
+ }
58
+
59
+ module.exports = {
60
+ sanitizeTrackSlug,
61
+ isShellSafeSlug,
62
+ resolveTrackBranch,
63
+ FALLBACK_SLUG,
64
+ };
65
+
66
+ if (require.main === module) {
67
+ const label = process.argv[2] || '';
68
+ const existing = process.argv[3]
69
+ ? process.argv[3].split(',').map((s) => s.trim()).filter(Boolean)
70
+ : [];
71
+ process.stdout.write(JSON.stringify(resolveTrackBranch(label, existing)) + '\n');
72
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scriveno",
3
- "version": "2.0.12",
3
+ "version": "2.6.0",
4
4
  "description": "Spec-driven creative writing, publishing, and translation pipeline for AI coding agents. From blank page to published book.",
5
5
  "bin": {
6
6
  "scriveno": "bin/install.js"
@@ -1,5 +1,5 @@
1
1
  {
2
- "scriveno_version": "2.0.12",
2
+ "scriveno_version": "2.6.0",
3
3
  "work_type": "",
4
4
  "group": "",
5
5
  "command_unit": "",