scriveno 2.0.11 → 2.5.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 +17 -8
- package/bin/install.js +91 -2
- package/commands/scr/demo.md +1 -0
- package/commands/scr/first-run.md +128 -0
- package/commands/scr/help.md +1 -0
- package/commands/scr/new-work.md +1 -1
- package/data/CONSTRAINTS.json +10 -1
- package/data/proof/first-run/README.md +96 -0
- package/data/proof/runtime-parity/README.md +48 -0
- package/docs/architecture.md +3 -1
- package/docs/command-reference.md +17 -1
- package/docs/configuration.md +1 -1
- package/docs/contributing.md +7 -2
- package/docs/development.md +15 -3
- package/docs/getting-started.md +9 -4
- package/docs/proof-artifacts.md +16 -0
- package/docs/quick-proof.md +195 -0
- package/docs/release-checklist.md +117 -0
- package/docs/release-notes.md +72 -0
- package/docs/route-graph.md +2 -2
- package/docs/runtime-support.md +14 -0
- package/docs/sacred-texts.md +1 -1
- package/docs/shipped-assets.md +5 -0
- package/docs/starter-sets.md +82 -0
- package/docs/testing.md +18 -3
- package/docs/voice-dna.md +1 -1
- package/docs/work-types.md +1 -1
- package/package.json +4 -2
- package/scripts/check-writing-policy.js +86 -0
- package/templates/config.json +1 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Starter Sets
|
|
2
|
+
|
|
3
|
+
Scriveno has a large command surface because it covers many kinds of writing. Starter sets give each writer a short path instead of asking them to learn every command up front.
|
|
4
|
+
|
|
5
|
+
Each set is intentionally small. Use `/scr-next`, `/scr:next`, or `$scr-next` whenever you are unsure which command should come next.
|
|
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
|
+
|
|
15
|
+
## Draft A Book
|
|
16
|
+
|
|
17
|
+
- `/scr:new-work` creates the project and work-type context.
|
|
18
|
+
- `/scr:profile-writer` turns the style guide into a real Voice DNA profile.
|
|
19
|
+
- `/scr:discuss` shapes the next unit with a few targeted questions.
|
|
20
|
+
- `/scr:plan` writes the next unit plan.
|
|
21
|
+
- `/scr:draft` drafts the planned unit in fresh context.
|
|
22
|
+
- `/scr:editor-review` reviews the draft for revision.
|
|
23
|
+
- `/scr:next` chooses the safest next move from project state.
|
|
24
|
+
|
|
25
|
+
## Polish A Manuscript
|
|
26
|
+
|
|
27
|
+
- `/scr:import` brings existing material into a Scriveno project.
|
|
28
|
+
- `/scr:profile-writer` calibrates the voice profile against your actual prose.
|
|
29
|
+
- `/scr:continuity-check` finds contradictions and timeline drift.
|
|
30
|
+
- `/scr:voice-check` compares drafts against Voice DNA.
|
|
31
|
+
- `/scr:line-edit` improves sentence-level flow.
|
|
32
|
+
- `/scr:copy-edit` catches grammar, clarity, and consistency issues.
|
|
33
|
+
- `/scr:polish` chains the revision passes when the manuscript is ready.
|
|
34
|
+
|
|
35
|
+
## Publish An Ebook
|
|
36
|
+
|
|
37
|
+
- `/scr:publish` starts the publication workflow.
|
|
38
|
+
- `/scr:front-matter` prepares title-page, copyright, and dedication pages.
|
|
39
|
+
- `/scr:back-matter` prepares author notes, acknowledgments, and reader materials.
|
|
40
|
+
- `/scr:blurb` drafts store-facing description copy.
|
|
41
|
+
- `/scr:cover-art` prepares cover direction or cover assets.
|
|
42
|
+
- `/scr:build-ebook` builds the ebook package.
|
|
43
|
+
- `/scr:export` writes the selected export format.
|
|
44
|
+
|
|
45
|
+
## Translate A Work
|
|
46
|
+
|
|
47
|
+
- `/scr:translation-glossary` defines recurring terms, names, and voice rules.
|
|
48
|
+
- `/scr:translation-memory` records approved translation decisions.
|
|
49
|
+
- `/scr:translate` translates the selected unit or manuscript segment.
|
|
50
|
+
- `/scr:cultural-adaptation` flags idioms and culture-specific phrasing.
|
|
51
|
+
- `/scr:back-translate` checks whether meaning survived translation.
|
|
52
|
+
- `/scr:multi-publish` prepares parallel translated editions.
|
|
53
|
+
|
|
54
|
+
## Build Sacred Commentary
|
|
55
|
+
|
|
56
|
+
- `/scr:new-work` creates a commentary, devotional, homiletic, or scripture project.
|
|
57
|
+
- `/scr:sacred:source-tracking` records primary and secondary source anchors.
|
|
58
|
+
- `/scr:sacred:concordance` builds searchable term and passage links.
|
|
59
|
+
- `/scr:sacred:cross-reference` maps related passages and interpretive connections.
|
|
60
|
+
- `/scr:sacred:doctrinal-check` verifies internal consistency and tradition constraints.
|
|
61
|
+
- `/scr:draft` writes the next commentary or sacred text unit.
|
|
62
|
+
- `/scr:editor-review` reviews the unit without flattening the tradition-native vocabulary.
|
|
63
|
+
|
|
64
|
+
## Repair And Resume
|
|
65
|
+
|
|
66
|
+
- `/scr:health` diagnoses missing files, stale state, and broken project assumptions.
|
|
67
|
+
- `/scr:sync` checks installed command, agent, and helper surfaces.
|
|
68
|
+
- `/scr:scan` refreshes project inventory.
|
|
69
|
+
- `/scr:check-notes` surfaces open notes and unresolved reminders.
|
|
70
|
+
- `/scr:resume-work` restores the paused thread or project state.
|
|
71
|
+
- `/scr:next` chooses the next safe command.
|
|
72
|
+
|
|
73
|
+
## Command Shape By Runtime
|
|
74
|
+
|
|
75
|
+
The starter sets use `/scr:*` because that is the shared command id format in Scriveno docs. Host surfaces differ:
|
|
76
|
+
|
|
77
|
+
- Claude Code uses flat commands such as `/scr-draft`.
|
|
78
|
+
- Standard command-directory runtimes currently keep `/scr:draft`.
|
|
79
|
+
- Codex uses generated skills such as `$scr-draft`.
|
|
80
|
+
- Guided targets such as Perplexity Desktop follow their generated setup instructions.
|
|
81
|
+
|
|
82
|
+
See [Runtime Support](runtime-support.md) for the canonical runtime matrix.
|
package/docs/testing.md
CHANGED
|
@@ -10,7 +10,8 @@ The root `package.json` defines:
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"test": "node --test test/*.test.js",
|
|
12
12
|
"pack:check": "npm pack --dry-run",
|
|
13
|
-
"
|
|
13
|
+
"policy:check": "node scripts/check-writing-policy.js",
|
|
14
|
+
"release:check": "npm test && npm run policy:check && npm run pack:check",
|
|
14
15
|
"prepublishOnly": "npm run release:check"
|
|
15
16
|
}
|
|
16
17
|
```
|
|
@@ -19,7 +20,8 @@ That means:
|
|
|
19
20
|
|
|
20
21
|
- `npm test` runs the whole test suite
|
|
21
22
|
- `npm run pack:check` verifies the package contents that would ship
|
|
22
|
-
- `npm run
|
|
23
|
+
- `npm run policy:check` scans tracked text files for the repo writing policy
|
|
24
|
+
- `npm run release:check` runs tests, policy checks, and package checks
|
|
23
25
|
- publishing is guarded by `release:check` through `prepublishOnly`
|
|
24
26
|
|
|
25
27
|
## Run the suite
|
|
@@ -95,8 +97,10 @@ Use these when changing README, docs, shipped-assets claims, or milestone trust
|
|
|
95
97
|
|
|
96
98
|
- `test/phase13-launch-surface-integrity.test.js`
|
|
97
99
|
- `test/phase15-proof-artifacts-positioning.test.js`
|
|
100
|
+
- `test/first-run-proof-surface.test.js`
|
|
98
101
|
- `test/phase19-verification-trust-surface-updates.test.js`
|
|
99
102
|
- `test/repository-policy.test.js`
|
|
103
|
+
- `npm run policy:check`
|
|
100
104
|
|
|
101
105
|
### Feature-family regression tests
|
|
102
106
|
|
|
@@ -136,6 +140,12 @@ For the standard release gate, prefer:
|
|
|
136
140
|
npm run release:check
|
|
137
141
|
```
|
|
138
142
|
|
|
143
|
+
For docs, prompt, command markdown, and release-note changes, run:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
npm run policy:check
|
|
147
|
+
```
|
|
148
|
+
|
|
139
149
|
When changing proactive routing, runtime install paths, or agent surfaces, also run:
|
|
140
150
|
|
|
141
151
|
```bash
|
|
@@ -148,6 +158,8 @@ scriveno routes --json
|
|
|
148
158
|
|
|
149
159
|
Use those for release prep so you can inspect what would ship without mutating the registry.
|
|
150
160
|
|
|
161
|
+
For the full publish path, including clearing local installs, packing, publishing, pushing, creating the GitHub release, and verifying `scriveno@latest`, use [Release Checklist](release-checklist.md).
|
|
162
|
+
|
|
151
163
|
## Practical workflow
|
|
152
164
|
|
|
153
165
|
For most changes:
|
|
@@ -156,11 +168,14 @@ For most changes:
|
|
|
156
168
|
2. make the fix
|
|
157
169
|
3. rerun the targeted files
|
|
158
170
|
4. run `npm test`
|
|
159
|
-
5. if
|
|
171
|
+
5. if docs, prompts, commands, or release notes changed, run `npm run policy:check`
|
|
172
|
+
6. if packaging or release docs changed, run `npm run release:check`
|
|
160
173
|
|
|
161
174
|
## Related docs
|
|
162
175
|
|
|
163
176
|
- [Development](development.md)
|
|
164
177
|
- [Configuration](configuration.md)
|
|
165
178
|
- [Contributing](contributing.md)
|
|
179
|
+
- [Quick Proof](quick-proof.md)
|
|
180
|
+
- [Release Checklist](release-checklist.md)
|
|
166
181
|
- [Release Notes](release-notes.md)
|
package/docs/voice-dna.md
CHANGED
|
@@ -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
|
|
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
|
package/docs/work-types.md
CHANGED
|
@@ -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
|
|
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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scriveno",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.5.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"
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"start": "node bin/install.js",
|
|
10
10
|
"test": "node --test test/*.test.js",
|
|
11
11
|
"pack:check": "npm pack --dry-run",
|
|
12
|
-
"
|
|
12
|
+
"policy:check": "node scripts/check-writing-policy.js",
|
|
13
|
+
"release:check": "npm test && npm run policy:check && npm run pack:check",
|
|
13
14
|
"prepublishOnly": "npm run release:check"
|
|
14
15
|
},
|
|
15
16
|
"publishConfig": {
|
|
@@ -47,6 +48,7 @@
|
|
|
47
48
|
"commands/",
|
|
48
49
|
"agents/",
|
|
49
50
|
"templates/",
|
|
51
|
+
"scripts/",
|
|
50
52
|
"docs/",
|
|
51
53
|
"README.md",
|
|
52
54
|
"LICENSE"
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('node:fs');
|
|
4
|
+
const path = require('node:path');
|
|
5
|
+
const { execSync } = require('node:child_process');
|
|
6
|
+
|
|
7
|
+
const ROOT = path.join(__dirname, '..');
|
|
8
|
+
const BINARY_EXTENSIONS = new Set([
|
|
9
|
+
'.docx',
|
|
10
|
+
'.gif',
|
|
11
|
+
'.ico',
|
|
12
|
+
'.jpeg',
|
|
13
|
+
'.jpg',
|
|
14
|
+
'.pdf',
|
|
15
|
+
'.png',
|
|
16
|
+
'.tgz',
|
|
17
|
+
'.zip',
|
|
18
|
+
]);
|
|
19
|
+
|
|
20
|
+
function trackedFiles() {
|
|
21
|
+
const output = execSync('git ls-files', { cwd: ROOT, encoding: 'utf8' }).trim();
|
|
22
|
+
return output ? output.split(/\n/) : [];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function isBinaryPath(relativePath) {
|
|
26
|
+
return BINARY_EXTENSIONS.has(path.extname(relativePath).toLowerCase());
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function lineNumberFor(source, index) {
|
|
30
|
+
return source.slice(0, index).split('\n').length;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function shouldFlag(codePoint, char) {
|
|
34
|
+
return codePoint === 0x2013
|
|
35
|
+
|| codePoint === 0x2014
|
|
36
|
+
|| /\p{Extended_Pictographic}/u.test(char);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function scan() {
|
|
40
|
+
const findings = [];
|
|
41
|
+
|
|
42
|
+
for (const relativePath of trackedFiles()) {
|
|
43
|
+
if (isBinaryPath(relativePath)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const absolutePath = path.join(ROOT, relativePath);
|
|
48
|
+
const buffer = fs.readFileSync(absolutePath);
|
|
49
|
+
if (buffer.includes(0)) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const source = buffer.toString('utf8');
|
|
54
|
+
for (let index = 0; index < source.length; index += 1) {
|
|
55
|
+
const codePoint = source.codePointAt(index);
|
|
56
|
+
const char = String.fromCodePoint(codePoint);
|
|
57
|
+
if (shouldFlag(codePoint, char)) {
|
|
58
|
+
findings.push({
|
|
59
|
+
codePoint,
|
|
60
|
+
line: lineNumberFor(source, index),
|
|
61
|
+
relativePath,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (codePoint > 0xffff) {
|
|
66
|
+
index += 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return findings;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const findings = scan();
|
|
75
|
+
|
|
76
|
+
for (const finding of findings) {
|
|
77
|
+
const hex = finding.codePoint.toString(16).toUpperCase().padStart(4, '0');
|
|
78
|
+
console.error(`${finding.relativePath}:${finding.line}: forbidden U+${hex}`);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (findings.length > 0) {
|
|
82
|
+
console.error(`Writing policy scan failed: ${findings.length} forbidden marker(s).`);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
console.log('Writing policy scan passed.');
|
package/templates/config.json
CHANGED