scriveno 2.5.0 → 2.7.1
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 -4
- package/agents/voice-checker.md +10 -0
- package/commands/scr/autopilot-publish.md +1 -1
- package/commands/scr/autopilot-translate.md +5 -6
- package/commands/scr/autopilot.md +10 -6
- package/commands/scr/beta-reader.md +6 -3
- package/commands/scr/build-ebook.md +1 -1
- package/commands/scr/build-print.md +2 -2
- package/commands/scr/continuity-check.md +1 -0
- package/commands/scr/copy-edit.md +1 -0
- package/commands/scr/dialogue-audit.md +1 -0
- package/commands/scr/discussion-questions.md +1 -0
- package/commands/scr/draft.md +5 -4
- package/commands/scr/editor-review.md +1 -0
- package/commands/scr/export.md +1 -1
- package/commands/scr/help.md +1 -1
- package/commands/scr/line-edit.md +1 -0
- package/commands/scr/manuscript-stats.md +7 -7
- package/commands/scr/map-manuscript.md +1 -0
- package/commands/scr/multi-publish.md +3 -2
- package/commands/scr/new-character.md +1 -0
- package/commands/scr/new-work.md +1 -1
- package/commands/scr/next.md +1 -0
- package/commands/scr/originality-check.md +1 -0
- package/commands/scr/outline.md +2 -2
- package/commands/scr/pacing-analysis.md +1 -0
- package/commands/scr/pause-work.md +1 -1
- package/commands/scr/polish.md +1 -0
- package/commands/scr/progress.md +15 -10
- package/commands/scr/quick-write.md +4 -1
- package/commands/scr/resume-work.md +1 -1
- package/commands/scr/save.md +7 -4
- package/commands/scr/scan.md +17 -3
- package/commands/scr/sensitivity-review.md +1 -0
- package/commands/scr/submit.md +2 -1
- package/commands/scr/synopsis.md +1 -0
- package/commands/scr/theme-tracker.md +1 -0
- package/commands/scr/timeline.md +1 -0
- package/commands/scr/track.md +2 -0
- package/commands/scr/translate.md +1 -1
- package/commands/scr/voice-check.md +1 -0
- package/data/CONSTRAINTS.json +6 -1
- package/data/export-templates/scriveno-book.typst +2 -2
- package/data/export-templates/scriveno-chapbook.typst +1 -1
- package/data/export-templates/scriveno-picturebook.typst +9 -0
- package/data/export-templates/scriveno-stageplay.typst +14 -4
- package/docs/architecture.md +6 -3
- package/docs/auto-invoke-policy.md +4 -3
- package/docs/command-reference.md +29 -24
- package/docs/configuration.md +28 -3
- package/docs/context-protocol.md +2 -1
- package/docs/contributing.md +2 -2
- package/docs/creative-context.md +1 -1
- package/docs/drafter-quality.md +1 -1
- package/docs/history-protocol.md +1 -1
- package/docs/progress-protocol.md +132 -0
- package/docs/release-notes.md +54 -0
- package/docs/route-graph.md +1 -1
- package/docs/shipped-assets.md +4 -2
- package/docs/translation.md +7 -11
- package/docs/voice-dna.md +3 -3
- package/lib/auto-invoke-engine.js +95 -0
- package/lib/track-safety.js +72 -0
- package/package.json +1 -1
- package/templates/PROGRESS.md +56 -0
- package/templates/config.json +1 -1
package/commands/scr/scan.md
CHANGED
|
@@ -5,7 +5,7 @@ argument-hint: "[--fix] [--quiet]"
|
|
|
5
5
|
|
|
6
6
|
# /scr:scan -- Context Drift Scanner
|
|
7
7
|
|
|
8
|
-
You are the project's drift detector. Trust nothing. Compare what `.manuscript/STATE.md`, `OUTLINE.md`, `RECORD.md`, `config.json`, and the various structural files **claim** against what the filesystem actually contains, and report every mismatch.
|
|
8
|
+
You are the project's drift detector. Trust nothing. Compare what `.manuscript/STATE.md`, `OUTLINE.md`, `RECORD.md`, `PROGRESS.md`, `config.json`, and the various structural files **claim** against what the filesystem actually contains, and report every mismatch.
|
|
9
9
|
|
|
10
10
|
Follow the auto-invoke policy. In the source repository it is documented at `docs/auto-invoke-policy.md`. `/scr:scan` does not spawn agents. It may run deterministic local checks and, under `--fix` after confirmation, deterministic local repairs.
|
|
11
11
|
|
|
@@ -23,7 +23,7 @@ This complements `/scr:health` (which fixes structural issues like missing direc
|
|
|
23
23
|
|
|
24
24
|
## Instruction
|
|
25
25
|
|
|
26
|
-
Load `.manuscript/config.json`, `.manuscript/STATE.md`, `.manuscript/OUTLINE.md`, and `.manuscript/
|
|
26
|
+
Load `.manuscript/config.json`, `.manuscript/STATE.md`, `.manuscript/OUTLINE.md`, `.manuscript/RECORD.md`, and `.manuscript/PROGRESS.md` when present. Each check below produces a finding with one of three severities:
|
|
27
27
|
|
|
28
28
|
- **DRIFT** -- recorded state contradicts disk reality. Trust nothing downstream until resolved.
|
|
29
29
|
- **WARNING** -- an artifact is stale or out of date. Downstream work may be silently using outdated input.
|
|
@@ -206,6 +206,20 @@ Do not over-claim. RECORD.md is an interpretive store, so uncertain findings sho
|
|
|
206
206
|
|
|
207
207
|
---
|
|
208
208
|
|
|
209
|
+
### CHECK 12: PROGRESS.md ledger staleness
|
|
210
|
+
|
|
211
|
+
If `.manuscript/PROGRESS.md` exists, compare its mtime against STATE.md and the newest draft. If PROGRESS.md is older than either, the saved per-unit ledger no longer reflects the work on disk. Emit:
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
WARNING .manuscript/PROGRESS.md is older than the recorded state.
|
|
215
|
+
The saved per-unit ledger may show stale unit status.
|
|
216
|
+
Fix: /scr:save to rebuild it (or /scr:scan --fix).
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Recompute per-unit status from disk per `docs/progress-protocol.md`. If the bucket counts (done / in progress / untouched) disagree with what PROGRESS.md records, emit a DRIFT finding citing both. If PROGRESS.md does not exist, emit INFO with a one-line suggestion to run `/scr:save` once to generate the openable ledger.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
209
223
|
### REPORT
|
|
210
224
|
|
|
211
225
|
Output a single structured report:
|
|
@@ -248,7 +262,7 @@ If `--quiet` was passed and there are zero findings, exit silently with no outpu
|
|
|
248
262
|
|
|
249
263
|
When `--fix` is passed, after the report, group findings by auto-fixability:
|
|
250
264
|
|
|
251
|
-
- **Auto-fixable now** -- finding has a deterministic fix Scriveno can apply (e.g. update STATE.md unit counts to match disk, initialize missing RECORD.md from the installed template, regenerate stale CONTEXT.md, sort orphan drafts into a `_unsorted/` review directory). For each, ask the writer once:
|
|
265
|
+
- **Auto-fixable now** -- finding has a deterministic fix Scriveno can apply (e.g. update STATE.md unit counts to match disk, initialize missing RECORD.md from the installed template, regenerate stale CONTEXT.md, regenerate stale or missing PROGRESS.md from disk per `docs/progress-protocol.md`, sort orphan drafts into a `_unsorted/` review directory). For each, ask the writer once:
|
|
252
266
|
> Apply [N] auto-fixes? (yes / no / show me what each does)
|
|
253
267
|
- **Requires writer decision** -- finding needs a judgment call (e.g. character orphans, scaffold pending, voice drift). List with suggested next command.
|
|
254
268
|
- **Manual** -- finding requires manual cleanup (e.g. malformed HISTORY.log lines).
|
package/commands/scr/submit.md
CHANGED
|
@@ -20,7 +20,8 @@ Load `.manuscript/config.json` for `command_unit`. The runnable command stays `/
|
|
|
20
20
|
1. Load `.manuscript/config.json` for project context
|
|
21
21
|
2. Check that the specified unit has been through editor review. Prefer `.manuscript/reviews/{N}-REVIEW.md`; if it is missing, accept legacy `{N}-EDITOR-NOTES.md`.
|
|
22
22
|
3. Mark the unit as submitted in `STATE.md`
|
|
23
|
-
4.
|
|
23
|
+
4. Refresh `.manuscript/PROGRESS.md` so the ledger shows this unit as done, per `docs/progress-protocol.md`.
|
|
24
|
+
5. Report: "Unit {N} submitted. {remaining} units remaining."
|
|
24
25
|
|
|
25
26
|
## Response Contract
|
|
26
27
|
|
package/commands/scr/synopsis.md
CHANGED
package/commands/scr/timeline.md
CHANGED
package/commands/scr/track.md
CHANGED
|
@@ -48,6 +48,8 @@ Track metadata lives in `.manuscript/tracks.json`. Create this file on first `tr
|
|
|
48
48
|
|
|
49
49
|
**Label-to-branch mapping (D-01):** Writer-friendly labels are stored as-is. The git branch name is derived by slugifying the label: lowercase, replace spaces with hyphens, strip special characters (keep alphanumeric and hyphens only), prefix with `track/`. Example: "Second Draft Attempt" becomes `track/second-draft-attempt`.
|
|
50
50
|
|
|
51
|
+
This slugify step is the one safety boundary that keeps a writer-chosen label out of a shell command, so it is mandatory, never optional. The canonical algorithm ships as `lib/track-safety.js` (installed to `<data-dir>/lib/track-safety.js`). To derive the slug and a collision-free branch deterministically instead of applying the rules by hand, run `node <data-dir>/lib/track-safety.js "<label>"`, which prints `{"slug":"...","branch":"..."}` with collisions already resolved against a comma-separated second argument of existing branch names. A correct slug contains only `[a-z0-9-]`; if it contains anything else, do not pass it to git.
|
|
52
|
+
|
|
51
53
|
**Canon branch metadata:** `canon_branch` stores the real branch name of the canon manuscript. This may be `main`, `master`, `trunk`, or any other branch name the writer uses.
|
|
52
54
|
|
|
53
55
|
## Canon Branch Resolution
|
|
@@ -214,7 +214,7 @@ After all units are translated, show a summary:
|
|
|
214
214
|
> - Build translation memory: `/scr:translation-memory [lang] --build`
|
|
215
215
|
> - Cultural adaptation review: `/scr:cultural-adaptation [lang]`
|
|
216
216
|
> - Back-translate to verify: `/scr:back-translate [lang]`
|
|
217
|
-
> - Export translation: `/scr:
|
|
217
|
+
> - Export translation: `/scr:multi-publish --languages [lang] --format [format]` (the translated-export path; `/scr:export` builds the source-language manuscript only)
|
|
218
218
|
|
|
219
219
|
## Agent and Automation Status
|
|
220
220
|
|
package/data/CONSTRAINTS.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./constraints.schema.json",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.1",
|
|
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."
|
|
@@ -2340,6 +2340,7 @@
|
|
|
2340
2340
|
},
|
|
2341
2341
|
"beta-reader": {
|
|
2342
2342
|
"category": "review",
|
|
2343
|
+
"description": "Simulate a beta reader's experience of the manuscript using a fresh-context reader persona (same model, not a second or external AI).",
|
|
2343
2344
|
"available": [
|
|
2344
2345
|
"all"
|
|
2345
2346
|
],
|
|
@@ -3743,6 +3744,7 @@
|
|
|
3743
3744
|
"default": {
|
|
3744
3745
|
"BRIEF.md": "BRIEF.md",
|
|
3745
3746
|
"RECORD.md": "RECORD.md",
|
|
3747
|
+
"PROGRESS.md": "PROGRESS.md",
|
|
3746
3748
|
"CHARACTERS.md": "CHARACTERS.md",
|
|
3747
3749
|
"RELATIONSHIPS.md": "RELATIONSHIPS.md",
|
|
3748
3750
|
"WORLD.md": "WORLD.md",
|
|
@@ -3752,6 +3754,7 @@
|
|
|
3752
3754
|
"academic": {
|
|
3753
3755
|
"BRIEF.md": "PROPOSAL.md",
|
|
3754
3756
|
"RECORD.md": "RECORD.md",
|
|
3757
|
+
"PROGRESS.md": "PROGRESS.md",
|
|
3755
3758
|
"CHARACTERS.md": "CONCEPTS.md",
|
|
3756
3759
|
"WORLD.md": "CONTEXT.md",
|
|
3757
3760
|
"PLOT-GRAPH.md": "ARGUMENT-MAP.md",
|
|
@@ -3760,6 +3763,7 @@
|
|
|
3760
3763
|
"technical": {
|
|
3761
3764
|
"BRIEF.md": "DOC-BRIEF.md",
|
|
3762
3765
|
"RECORD.md": "RECORD.md",
|
|
3766
|
+
"PROGRESS.md": "PROGRESS.md",
|
|
3763
3767
|
"CHARACTERS.md": "AUDIENCE.md",
|
|
3764
3768
|
"RELATIONSHIPS.md": "DEPENDENCIES.md",
|
|
3765
3769
|
"WORLD.md": "SYSTEM.md",
|
|
@@ -3769,6 +3773,7 @@
|
|
|
3769
3773
|
"sacred": {
|
|
3770
3774
|
"BRIEF.md": "FRAMEWORK.md",
|
|
3771
3775
|
"RECORD.md": "RECORD.md",
|
|
3776
|
+
"PROGRESS.md": "PROGRESS.md",
|
|
3772
3777
|
"CHARACTERS.md": "FIGURES.md",
|
|
3773
3778
|
"RELATIONSHIPS.md": "LINEAGES.md",
|
|
3774
3779
|
"WORLD.md": "COSMOLOGY.md",
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
#let margin-bottom = $if(margin-bottom)$$margin-bottom$$else$0.75in$endif$
|
|
14
14
|
|
|
15
15
|
// Text direction: parameterized for RTL compatibility (Phase 7)
|
|
16
|
-
#let text-dir = $if(
|
|
16
|
+
#let text-dir = $if(dir)$$dir$$else$ltr$endif$
|
|
17
17
|
|
|
18
18
|
// Language code for CJK detection
|
|
19
|
-
#let lang-code = $if(
|
|
19
|
+
#let lang-code = $if(lang)$"$lang$"$else$"en"$endif$
|
|
20
20
|
|
|
21
21
|
// CJK detection helper
|
|
22
22
|
#let is-cjk = lang-code in ("zh", "ja", "ko")
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
#let margin-outside = $if(margin-outside)$$margin-outside$$else$0.625in$endif$
|
|
17
17
|
|
|
18
18
|
// Text direction
|
|
19
|
-
#let text-dir = $if(
|
|
19
|
+
#let text-dir = $if(dir)$$dir$$else$ltr$endif$
|
|
20
20
|
|
|
21
21
|
// Font configuration -- chapbooks default to a clean readable serif
|
|
22
22
|
#let body-font = $if(mainfont)$"$mainfont$"$else$"Libertinus Serif"$endif$
|
|
@@ -20,6 +20,13 @@
|
|
|
20
20
|
// Override with -V margin-top= etc. if custom margins are needed
|
|
21
21
|
#let margin-all = $if(margin-top)$$margin-top$$else$0.375in$endif$
|
|
22
22
|
|
|
23
|
+
// Text direction: parameterized for RTL compatibility (set via --metadata dir=rtl).
|
|
24
|
+
// Margins are symmetric and body text is centered, so only the base text
|
|
25
|
+
// direction needs to flip for right-to-left scripts.
|
|
26
|
+
#let text-dir = $if(dir)$$dir$$else$ltr$endif$
|
|
27
|
+
#let is-rtl = text-dir == rtl
|
|
28
|
+
#let lang-code = $if(lang)$"$lang$"$else$"en"$endif$
|
|
29
|
+
|
|
23
30
|
// Metadata
|
|
24
31
|
#let book-title = $if(title)$"$title$"$else$"Untitled"$endif$
|
|
25
32
|
#let book-author = $if(author)$"$for(author)$$it.name$$sep$, $endfor$"$else$""$endif$
|
|
@@ -46,6 +53,8 @@
|
|
|
46
53
|
#set text(
|
|
47
54
|
font: $if(mainfont)$"$mainfont$"$else$"Helvetica"$endif$,
|
|
48
55
|
size: $if(fontsize)$$fontsize$$else$16pt$endif$,
|
|
56
|
+
dir: text-dir,
|
|
57
|
+
lang: lang-code,
|
|
49
58
|
fallback: true,
|
|
50
59
|
)
|
|
51
60
|
|
|
@@ -17,6 +17,13 @@
|
|
|
17
17
|
#let margin-top = $if(margin-top)$$margin-top$$else$1in$endif$
|
|
18
18
|
#let margin-bottom = $if(margin-bottom)$$margin-bottom$$else$1in$endif$
|
|
19
19
|
|
|
20
|
+
// Text direction: parameterized for RTL compatibility (set via --metadata dir=rtl).
|
|
21
|
+
// For right-to-left scripts the wider binding margin moves to the right edge and
|
|
22
|
+
// the page number flips to the top-left.
|
|
23
|
+
#let text-dir = $if(dir)$$dir$$else$ltr$endif$
|
|
24
|
+
#let is-rtl = text-dir == rtl
|
|
25
|
+
#let lang-code = $if(lang)$"$lang$"$else$"en"$endif$
|
|
26
|
+
|
|
20
27
|
// Metadata
|
|
21
28
|
#let play-title = $if(title)$"$title$"$else$"Untitled"$endif$
|
|
22
29
|
#let play-author = $if(author)$"$for(author)$$it.name$$sep$, $endfor$"$else$""$endif$
|
|
@@ -30,16 +37,17 @@
|
|
|
30
37
|
width: page-width,
|
|
31
38
|
height: page-height,
|
|
32
39
|
margin: (
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
// The 1.5in binding margin sits on the left for LTR and flips to the right for RTL.
|
|
41
|
+
left: if is-rtl { margin-right } else { margin-left },
|
|
42
|
+
right: if is-rtl { margin-left } else { margin-right },
|
|
35
43
|
top: margin-top,
|
|
36
44
|
bottom: margin-bottom,
|
|
37
45
|
),
|
|
38
|
-
// Page numbering: top-right,
|
|
46
|
+
// Page numbering: top-right for LTR scripts, top-left for RTL
|
|
39
47
|
header: context {
|
|
40
48
|
let page-num = counter(page).get().first()
|
|
41
49
|
if page-num > 1 {
|
|
42
|
-
align(right, text(size: 10pt)[#str(page-num).])
|
|
50
|
+
align(if is-rtl { left } else { right }, text(size: 10pt)[#str(page-num).])
|
|
43
51
|
}
|
|
44
52
|
},
|
|
45
53
|
)
|
|
@@ -48,6 +56,8 @@
|
|
|
48
56
|
#set text(
|
|
49
57
|
font: $if(mainfont)$"$mainfont$"$else$"Courier New"$endif$,
|
|
50
58
|
size: $if(fontsize)$$fontsize$$else$12pt$endif$,
|
|
59
|
+
dir: text-dir,
|
|
60
|
+
lang: lang-code,
|
|
51
61
|
fallback: true,
|
|
52
62
|
)
|
|
53
63
|
|
package/docs/architecture.md
CHANGED
|
@@ -164,7 +164,8 @@ scriveno/
|
|
|
164
164
|
scriveno-book.typst Book interior PDF
|
|
165
165
|
scriveno-epub.css EPUB styling
|
|
166
166
|
scriveno-academic.latex Academic paper formatting
|
|
167
|
-
|
|
167
|
+
proof/ Committed proof bundles (voice-dna, runtime-parity)
|
|
168
|
+
templates/ Per-project starting content (repo root, sibling of data/)
|
|
168
169
|
config.json Per-project configuration template
|
|
169
170
|
WORK.md Work overview template
|
|
170
171
|
OUTLINE.md Structural outline template
|
|
@@ -174,6 +175,8 @@ scriveno/
|
|
|
174
175
|
WRITING-RULES.md Universal AI-tell rulebook (1.6.0+)
|
|
175
176
|
THEMES.md Thematic threads template
|
|
176
177
|
STATE.md Progress tracking template
|
|
178
|
+
CONTEXT.md Session bootstrap scaffold (derived, auto-regenerated)
|
|
179
|
+
PROGRESS.md Per-unit progress ledger scaffold (derived, 2.7.0+)
|
|
177
180
|
BRIEF.md Project brief template
|
|
178
181
|
WORLD.md World-building template
|
|
179
182
|
pitfalls/ Per-work-type pitfall packs (1.6.0+)
|
|
@@ -354,7 +357,7 @@ Codex uses a skill-native variation of this strategy. The installer generates on
|
|
|
354
357
|
|
|
355
358
|
Scriveno also ships `lib/auto-invoke-engine.js`, exposed through `scriveno status --project .`, `scriveno status . --json`, `scriveno status --project . --apply-safe`, `scriveno sync --check`, `scriveno smoke`, `scriveno agents`, and `scriveno routes`. The installer copies this library into the shared Scriveno asset directory for global and project installs, so command surfaces can call a single status and audit engine before falling back to embedded markdown logic.
|
|
356
359
|
|
|
357
|
-
The engine checks disk evidence only: project presence, required project files, STATE.md, CONTEXT.md freshness, plan files, draft files, review coverage, unresolved notes, revision-track proposals, translation work, publishing prerequisites, exports, history, and save signals. It recommends the next command, but it does not mutate files and does not spawn agents by itself. That boundary keeps proactive behavior portable across Claude Code, Codex, Cursor, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, Antigravity, Manus, Perplexity Desktop, and the generic fallback.
|
|
360
|
+
The engine checks disk evidence only: project presence, required project files, STATE.md, CONTEXT.md freshness, plan files, draft files, review coverage, unresolved notes, revision-track proposals, translation work, publishing prerequisites, exports, history, and save signals. It also computes the per-unit progress ledger (done / in progress / untouched) through `computeProgressLedger`, which `/scr:progress` and `.manuscript/PROGRESS.md` build on. It recommends the next command, but it does not mutate files and does not spawn agents by itself. That boundary keeps proactive behavior portable across Claude Code, Codex, Cursor, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, Antigravity, Manus, Perplexity Desktop, and the generic fallback.
|
|
358
361
|
|
|
359
362
|
The engine now reports three automation lanes:
|
|
360
363
|
|
|
@@ -422,7 +425,7 @@ The voice-checker agent (`agents/voice-checker.md`) compares drafted prose again
|
|
|
422
425
|
- Specific issues organized by category (structural voice, lexical voice, character voice, AI-slop indicators)
|
|
423
426
|
- Severity ratings (drift vs critical violation)
|
|
424
427
|
|
|
425
|
-
The voice-checker is invoked after every drafted unit.
|
|
428
|
+
The voice-checker is invoked after every drafted unit and returns an Overall score (0-100). Normalized drift is `drift = (100 - score) / 100`, so the default `config.json` threshold of 0.3 means the writer is offered a re-draft when the voice score falls below 70. See the "Normalized drift" section of `agents/voice-checker.md` for the single definition callers share.
|
|
426
429
|
|
|
427
430
|
### Calibration
|
|
428
431
|
|
|
@@ -63,7 +63,7 @@ Use `Automation status:` for command chains and `Sync status:` for runtime insta
|
|
|
63
63
|
| Level | Behavior | Default | Examples |
|
|
64
64
|
|-------|----------|---------|----------|
|
|
65
65
|
| 1 | Read-only suggestion | Run by default | `/scr:next` route, progress sweep, review queue surfacing |
|
|
66
|
-
| 2 | Safe local helper | Run when directly triggered | `CONTEXT.md` regeneration, `HISTORY.log` append, scan report, stats count |
|
|
66
|
+
| 2 | Safe local helper | Run when directly triggered | `CONTEXT.md` regeneration, `PROGRESS.md` ledger regeneration, `HISTORY.log` append, scan report, stats count |
|
|
67
67
|
| 3 | Scoped agent | Spawn when the command implies it or evidence is bounded | drafter, plan-checker, voice-checker, continuity-checker, translator, beta-reader |
|
|
68
68
|
| 4 | Writer-owned action | Require confirmation | publishing, destructive edits, merge decisions, accepting review findings |
|
|
69
69
|
|
|
@@ -81,6 +81,7 @@ Run these read-only checks in `/scr:next`, `/scr:progress`, and closeouts for ma
|
|
|
81
81
|
- If front matter, back matter, blurb, or cover handoff assets are missing, surface the specific publishing prerequisite before packaging.
|
|
82
82
|
- If export outputs are older than source files, suggest `/scr:export` or `/scr:publish`.
|
|
83
83
|
- If no save exists after recent manuscript changes, suggest `/scr:save`.
|
|
84
|
+
- Surface deliverable progress (units done / in progress / untouched) and point at the per-unit ledger `.manuscript/PROGRESS.md`; if it is stale, suggest `/scr:save` to refresh it.
|
|
84
85
|
|
|
85
86
|
These checks must not mutate files.
|
|
86
87
|
|
|
@@ -88,10 +89,10 @@ These checks must not mutate files.
|
|
|
88
89
|
|
|
89
90
|
Run these only when the current command directly owns the file operation:
|
|
90
91
|
|
|
91
|
-
- `/scr:save` regenerates `.manuscript/CONTEXT.md
|
|
92
|
+
- `/scr:save` regenerates `.manuscript/CONTEXT.md` and `.manuscript/PROGRESS.md` (the per-unit ledger), appends `HISTORY.log`, and commits `.manuscript/`.
|
|
92
93
|
- `/scr:scan --fix` applies deterministic state repairs after confirmation and appends `HISTORY.log`.
|
|
93
94
|
- `/scr:resume-work` may regenerate `CONTEXT.md` from disk state.
|
|
94
|
-
- `/scr:progress` may count drafts, submitted units, open record threads, and stale reports, but does not write.
|
|
95
|
+
- `/scr:progress` may count drafts, submitted units, open record threads, and stale reports and render the per-unit ledger live, but does not write. The saved `.manuscript/PROGRESS.md` is refreshed by `/scr:save`, `/scr:draft`, `/scr:autopilot`, and `/scr:scan --fix`.
|
|
95
96
|
- Runtime `/scr:sync --apply` runs the installer and verifies installed command, skill, and agent surfaces.
|
|
96
97
|
|
|
97
98
|
Report these as local operations, not spawned agents.
|
|
@@ -245,7 +245,7 @@ Show the proof-first path, runtime command shapes, demo sequence, proof artifact
|
|
|
245
245
|
|
|
246
246
|
### `/scr:next`
|
|
247
247
|
|
|
248
|
-
**Description:** Auto-detect what to do next in your workflow and
|
|
248
|
+
**Description:** Auto-detect what to do next in your workflow and run it. The one command a writer can always use.
|
|
249
249
|
|
|
250
250
|
**Usage:** `/scr:next`
|
|
251
251
|
|
|
@@ -277,7 +277,7 @@ Scriveno maps your intent to the right command and runs it.
|
|
|
277
277
|
|
|
278
278
|
### `/scr:help`
|
|
279
279
|
|
|
280
|
-
**Description:** Show Scriveno commands grouped by
|
|
280
|
+
**Description:** Show Scriveno commands grouped by workflow stage, filtered to what's relevant for your current work type and progress.
|
|
281
281
|
|
|
282
282
|
**Usage:** `/scr:help [category or search term]`
|
|
283
283
|
|
|
@@ -293,17 +293,22 @@ Show publishing-related commands available for your work type. Without a categor
|
|
|
293
293
|
|
|
294
294
|
### `/scr:progress`
|
|
295
295
|
|
|
296
|
-
**Description:** Show
|
|
296
|
+
**Description:** Show project progress: a unit progress bar, what's done / in progress / untouched, pipeline position, and a pointer to the per-unit ledger.
|
|
297
297
|
|
|
298
298
|
**Usage:** `/scr:progress`
|
|
299
299
|
|
|
300
300
|
**Prerequisites:** None
|
|
301
301
|
|
|
302
|
+
**Output includes:**
|
|
303
|
+
- A deliverable progress bar over units (done / in progress / untouched) with percent
|
|
304
|
+
- Pipeline position on the writing lifecycle (e.g., "Stage 6 of 10: Drafting")
|
|
305
|
+
- A pointer to `.manuscript/PROGRESS.md`, the openable per-unit ledger you can read any time
|
|
306
|
+
|
|
302
307
|
**Example:**
|
|
303
308
|
```
|
|
304
309
|
/scr:progress
|
|
305
310
|
```
|
|
306
|
-
See "
|
|
311
|
+
See "████████░░ 4/12 chapters done (33%). Pipeline: Stage 6 of 10 (Drafting). Next: discuss chapter 5. Full ledger: .manuscript/PROGRESS.md."
|
|
307
312
|
|
|
308
313
|
---
|
|
309
314
|
|
|
@@ -350,7 +355,7 @@ Import an existing Word document and split it into chapters, scenes, and context
|
|
|
350
355
|
|
|
351
356
|
**Description:** Spawn parallel analysis agents to understand an existing manuscript's voice, structure, characters, and themes.
|
|
352
357
|
|
|
353
|
-
**Usage:** `/scr:map-manuscript`
|
|
358
|
+
**Usage:** `/scr:map-manuscript [area]`
|
|
354
359
|
|
|
355
360
|
**Prerequisites:** None
|
|
356
361
|
|
|
@@ -564,7 +569,7 @@ Visualize your novel's structure mapped to the hero's journey.
|
|
|
564
569
|
|
|
565
570
|
**Description:** Generate a chronological event timeline from the outline.
|
|
566
571
|
|
|
567
|
-
**Usage:** `/scr:timeline`
|
|
572
|
+
**Usage:** `/scr:timeline [--story-order] [--chronological]`
|
|
568
573
|
|
|
569
574
|
**Prerequisites:** OUTLINE.md must exist
|
|
570
575
|
|
|
@@ -584,7 +589,7 @@ See events in chronological order, even if your narrative is non-linear.
|
|
|
584
589
|
|
|
585
590
|
**Description:** Track thematic threads across the work with auto-detection suggestions.
|
|
586
591
|
|
|
587
|
-
**Usage:** `/scr:theme-tracker`
|
|
592
|
+
**Usage:** `/scr:theme-tracker [--detect]`
|
|
588
593
|
|
|
589
594
|
**Prerequisites:** THEMES.md must exist
|
|
590
595
|
|
|
@@ -780,7 +785,7 @@ Commands for creating and managing characters, relationships, and world-building
|
|
|
780
785
|
|
|
781
786
|
**Description:** Build a complete character profile through guided interactive interview.
|
|
782
787
|
|
|
783
|
-
**Usage:** `/scr:new-character
|
|
788
|
+
**Usage:** `/scr:new-character <name>`
|
|
784
789
|
|
|
785
790
|
**Prerequisites:** WORK.md must exist
|
|
786
791
|
|
|
@@ -962,7 +967,7 @@ Scriveno drafts a sample passage using your voice profile. If it doesn't sound r
|
|
|
962
967
|
|
|
963
968
|
**Description:** Perform a line-level prose quality pass with inline annotations.
|
|
964
969
|
|
|
965
|
-
**Usage:** `/scr:line-edit`
|
|
970
|
+
**Usage:** `/scr:line-edit [N]`
|
|
966
971
|
|
|
967
972
|
**Prerequisites:** Draft must exist
|
|
968
973
|
|
|
@@ -980,7 +985,7 @@ Scriveno reads your prose line by line, flagging weak verbs, passive voice, redu
|
|
|
980
985
|
|
|
981
986
|
**Description:** Perform a correctness pass for grammar, spelling, punctuation, and consistency.
|
|
982
987
|
|
|
983
|
-
**Usage:** `/scr:copy-edit`
|
|
988
|
+
**Usage:** `/scr:copy-edit [N]`
|
|
984
989
|
|
|
985
990
|
**Prerequisites:** Draft must exist
|
|
986
991
|
|
|
@@ -998,7 +1003,7 @@ Catch typos, grammar issues, and consistency problems (character name spellings,
|
|
|
998
1003
|
|
|
999
1004
|
**Description:** Chain line-edit, copy-edit, and voice-check for comprehensive prose polish.
|
|
1000
1005
|
|
|
1001
|
-
**Usage:** `/scr:polish`
|
|
1006
|
+
**Usage:** `/scr:polish [N]`
|
|
1002
1007
|
|
|
1003
1008
|
**Prerequisites:** Draft and STYLE-GUIDE.md must exist
|
|
1004
1009
|
|
|
@@ -1016,7 +1021,7 @@ Run all three quality passes in sequence. The comprehensive final polish before
|
|
|
1016
1021
|
|
|
1017
1022
|
**Description:** Write a scene, passage, or chapter outside the full planning workflow.
|
|
1018
1023
|
|
|
1019
|
-
**Usage:** `/scr:quick-write`
|
|
1024
|
+
**Usage:** `/scr:quick-write [--discuss] [--research] [--full]`
|
|
1020
1025
|
|
|
1021
1026
|
**Prerequisites:** None
|
|
1022
1027
|
|
|
@@ -1038,7 +1043,7 @@ Commands for reviewing your manuscript from different angles -- continuity, voic
|
|
|
1038
1043
|
|
|
1039
1044
|
**Description:** Automated continuity verification to scan for narrative contradictions across the manuscript.
|
|
1040
1045
|
|
|
1041
|
-
**Usage:** `/scr:continuity-check`
|
|
1046
|
+
**Usage:** `/scr:continuity-check [N]`
|
|
1042
1047
|
|
|
1043
1048
|
**Prerequisites:** Draft must exist
|
|
1044
1049
|
|
|
@@ -1059,7 +1064,7 @@ Find contradictions: "In Chapter 3 Maria has brown eyes, but in Chapter 7 they'r
|
|
|
1059
1064
|
|
|
1060
1065
|
**Description:** Compare drafted prose against STYLE-GUIDE.md to detect voice drift.
|
|
1061
1066
|
|
|
1062
|
-
**Usage:** `/scr:voice-check`
|
|
1067
|
+
**Usage:** `/scr:voice-check [N]`
|
|
1063
1068
|
|
|
1064
1069
|
**Prerequisites:** Draft and STYLE-GUIDE.md must exist
|
|
1065
1070
|
|
|
@@ -1080,7 +1085,7 @@ Detect where your drafted prose drifts from your established voice profile.
|
|
|
1080
1085
|
|
|
1081
1086
|
**Description:** Flag potential sensitivity issues with context, suggest alternatives, and note intentional craft.
|
|
1082
1087
|
|
|
1083
|
-
**Usage:** `/scr:sensitivity-review`
|
|
1088
|
+
**Usage:** `/scr:sensitivity-review [N]`
|
|
1084
1089
|
|
|
1085
1090
|
**Prerequisites:** Draft must exist
|
|
1086
1091
|
|
|
@@ -1102,7 +1107,7 @@ Flag content that could be unintentionally harmful, with context-aware suggestio
|
|
|
1102
1107
|
|
|
1103
1108
|
**Description:** Generate a structure-aware pacing report analyzing scene tempo and narrative flow.
|
|
1104
1109
|
|
|
1105
|
-
**Usage:** `/scr:pacing-analysis`
|
|
1110
|
+
**Usage:** `/scr:pacing-analysis [N]`
|
|
1106
1111
|
|
|
1107
1112
|
**Prerequisites:** Draft must exist
|
|
1108
1113
|
|
|
@@ -1120,7 +1125,7 @@ See where your story drags or rushes. Scriveno maps scene length, tension, and t
|
|
|
1120
1125
|
|
|
1121
1126
|
**Description:** Audit dialogue for character voice differentiation, attribution clarity, and talking-head detection.
|
|
1122
1127
|
|
|
1123
|
-
**Usage:** `/scr:dialogue-audit`
|
|
1128
|
+
**Usage:** `/scr:dialogue-audit [N]`
|
|
1124
1129
|
|
|
1125
1130
|
**Prerequisites:** Draft must exist with dialogue
|
|
1126
1131
|
|
|
@@ -1139,9 +1144,9 @@ Check that each character sounds distinct, dialogue tags are clear, and scenes a
|
|
|
1139
1144
|
|
|
1140
1145
|
### `/scr:beta-reader`
|
|
1141
1146
|
|
|
1142
|
-
**Description:** Simulate a beta reader's experience of the manuscript
|
|
1147
|
+
**Description:** Simulate a beta reader's experience of the manuscript using a fresh-context reader persona (same model, not a second or external AI).
|
|
1143
1148
|
|
|
1144
|
-
**Usage:** `/scr:beta-reader`
|
|
1149
|
+
**Usage:** `/scr:beta-reader [N] [--focus <area>]`
|
|
1145
1150
|
|
|
1146
1151
|
**Prerequisites:** Draft must exist
|
|
1147
1152
|
|
|
@@ -1163,7 +1168,7 @@ Get a simulated reader's reaction: what hooked them, where they got confused, wh
|
|
|
1163
1168
|
|
|
1164
1169
|
**Description:** Scan drafted prose for AI-generated patterns and unintentional similarity to published works.
|
|
1165
1170
|
|
|
1166
|
-
**Usage:** `/scr:originality-check`
|
|
1171
|
+
**Usage:** `/scr:originality-check [N]`
|
|
1167
1172
|
|
|
1168
1173
|
**Prerequisites:** Draft must exist
|
|
1169
1174
|
|
|
@@ -1259,7 +1264,7 @@ Get three blurb variations: punchy (Amazon listing), standard (back cover), exte
|
|
|
1259
1264
|
|
|
1260
1265
|
**Description:** Generate plot synopsis at specified length for query and submission packages.
|
|
1261
1266
|
|
|
1262
|
-
**Usage:** `/scr:synopsis`
|
|
1267
|
+
**Usage:** `/scr:synopsis [--length <1p|2p|5p>]`
|
|
1263
1268
|
|
|
1264
1269
|
**Prerequisites:** Complete draft must exist
|
|
1265
1270
|
|
|
@@ -1313,7 +1318,7 @@ Generate a full book proposal: overview, market analysis, chapter summaries, aut
|
|
|
1313
1318
|
|
|
1314
1319
|
**Description:** Generate reading group discussion questions exploring themes, characters, and craft.
|
|
1315
1320
|
|
|
1316
|
-
**Usage:** `/scr:discussion-questions`
|
|
1321
|
+
**Usage:** `/scr:discussion-questions [--count <N>]`
|
|
1317
1322
|
|
|
1318
1323
|
**Prerequisites:** Complete draft must exist
|
|
1319
1324
|
|
|
@@ -1478,7 +1483,7 @@ Build a poetry-submission DOCX for journal or contest submission using the poetr
|
|
|
1478
1483
|
|
|
1479
1484
|
**Description:** Run full publishing pipeline unattended with quality gate (voice-check + continuity-check).
|
|
1480
1485
|
|
|
1481
|
-
**Usage:** `/scr:autopilot-publish --preset <preset
|
|
1486
|
+
**Usage:** `/scr:autopilot-publish --preset <preset> [--front-level <minimum|balanced|maximum|skip>] [--back-level <minimum|balanced|maximum|skip>]`
|
|
1482
1487
|
|
|
1483
1488
|
**Prerequisites:** Complete draft must exist
|
|
1484
1489
|
|
|
@@ -1513,7 +1518,7 @@ Commands for generating cover art, scene illustrations, character references, ma
|
|
|
1513
1518
|
- `--trim <size>` -- Preferred trim shorthand for prompt framing
|
|
1514
1519
|
- `--kdp <trim_size>` -- Legacy alias for `--trim`
|
|
1515
1520
|
- `--series` -- Generate series-consistent cover
|
|
1516
|
-
- `--prompt-only` -- Generate prompts without
|
|
1521
|
+
- `--prompt-only` -- Generate prompts without packaging reminders
|
|
1517
1522
|
- `--element` -- Generate specific cover element
|
|
1518
1523
|
|
|
1519
1524
|
**Example:**
|
package/docs/configuration.md
CHANGED
|
@@ -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.
|
|
60
|
+
"scriveno_version": "2.7.1",
|
|
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
|
|
package/docs/context-protocol.md
CHANGED
|
@@ -6,6 +6,7 @@ It is part of the trust layer:
|
|
|
6
6
|
- `STATE.md` -- structured snapshot (data)
|
|
7
7
|
- `RECORD.md` -- compact established-content store
|
|
8
8
|
- `.manuscript/CONTEXT.md` -- one-page narrative bootstrap (synthesis)
|
|
9
|
+
- `.manuscript/PROGRESS.md` -- per-unit progress ledger (derived; see `docs/progress-protocol.md`)
|
|
9
10
|
- `.manuscript/HISTORY.log` -- append-only audit trail
|
|
10
11
|
|
|
11
12
|
## The rule
|
|
@@ -71,7 +72,7 @@ Filesystem mtime is a cheap, durable signal that does not require parsing the fi
|
|
|
71
72
|
- **Drafter agents** (drafter.md, voice-checker.md, etc.) -- they need the full source files for fidelity.
|
|
72
73
|
- **Read-only data display commands** (`/scr:progress`, `/scr:session-report`) -- already cheap; no orientation files to skip.
|
|
73
74
|
- **First-write commands** (`/scr:new-work`, `/scr:import`) -- no CONTEXT.md exists yet.
|
|
74
|
-
- **The CONTEXT.md regenerators themselves** (`/scr:save`, `/scr:pause-work`, `/scr:resume-work`) -- they MUST load the raw files to rebuild CONTEXT.md correctly. They are the *writers* of
|
|
75
|
+
- **The CONTEXT.md and PROGRESS.md regenerators themselves** (`/scr:save`, `/scr:pause-work`, `/scr:resume-work`) -- they MUST load the raw files to rebuild CONTEXT.md and the per-unit PROGRESS.md ledger correctly. They are the *writers* of those derived files, not consumers.
|
|
75
76
|
- **`/scr:scan`** -- its job is to detect drift, so it must read the raw files to compare against CONTEXT.md.
|
|
76
77
|
|
|
77
78
|
## Expected savings
|
package/docs/contributing.md
CHANGED
|
@@ -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 (
|
|
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 `"
|
|
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
|
|
package/docs/creative-context.md
CHANGED
|
@@ -56,7 +56,7 @@ Do not turn `.manuscript/CONTEXT.md` into a glossary. It is an auto-regenerated
|
|
|
56
56
|
| `cast` | `CHARACTERS.md`, `FIGURES.md` | Character state, voice anchors, relationships, figure continuity |
|
|
57
57
|
| `world` | `WORLD.md`, `COSMOLOGY.md`, `SYSTEM.md` | Setting, constraints, environment, cosmology, operating rules |
|
|
58
58
|
| `themes` | `THEMES.md`, `DOCTRINES.md`, `QUESTIONS.md` | Motifs, doctrine, argument, inquiry, recurring meaning |
|
|
59
|
-
| `continuity` | `STATE.md`, `CONTEXT.md`, `HISTORY.log` | Current position, recent activity, open items, disk truth |
|
|
59
|
+
| `continuity` | `STATE.md`, `CONTEXT.md`, `PROGRESS.md`, `HISTORY.log` | Current position, recent activity, per-unit progress ledger, open items, disk truth |
|
|
60
60
|
| `publication` | front matter, back matter, build files | Export and publishing intent |
|
|
61
61
|
| `translation` | glossary, translation memory, language config | Term consistency and cultural adaptation |
|
|
62
62
|
| `art` | cover, illustration, storyboard assets | Visual continuity and image direction |
|