scriveno 2.0.9 → 2.0.11
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 +16 -5
- package/bin/install.js +137 -3
- package/commands/scr/new-work.md +1 -1
- package/commands/scr/sacred-numbering-format.md +2 -2
- package/commands/scr/sync.md +4 -2
- package/data/CONSTRAINTS.json +1 -1
- package/data/demo/.manuscript/plans/5-the-reunion-PLAN.md +1 -1
- package/docs/architecture.md +10 -2
- package/docs/auto-invoke-policy.md +16 -0
- package/docs/command-reference.md +2 -0
- package/docs/configuration.md +10 -1
- package/docs/contributing.md +5 -1
- package/docs/development.md +23 -1
- package/docs/getting-started.md +5 -0
- package/docs/proof-artifacts.md +2 -0
- package/docs/release-notes.md +72 -0
- package/docs/route-graph.md +51 -0
- package/docs/runtime-support.md +20 -0
- package/docs/sacred-texts.md +1 -1
- package/docs/shipped-assets.md +1 -0
- package/docs/testing.md +10 -0
- package/lib/auto-invoke-engine.js +501 -0
- package/package.json +1 -1
- package/templates/config.json +1 -1
- package/templates/sacred/DOCTRINES.md +1 -1
- package/templates/sacred/LINEAGES.md +1 -1
package/README.md
CHANGED
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/aihxp/scriveno/actions/workflows/ci.yml)
|
|
4
4
|
[](LICENSE)
|
|
5
|
-
[](CHANGELOG.md)
|
|
6
6
|
[](https://www.npmjs.com/package/scriveno)
|
|
7
7
|
[](https://www.npmjs.com/package/scriveno)
|
|
8
8
|
[](docs/runtime-support.md#shared-auto-invoke-engine)
|
|
9
9
|
[](docs/auto-invoke-policy.md)
|
|
10
|
+
[](docs/runtime-support.md#runtime-smoke-and-agent-checks)
|
|
11
|
+
[](docs/auto-invoke-policy.md#safe-apply-and-audit-commands)
|
|
10
12
|
|
|
11
13
|
**[scriveno on npm](https://www.npmjs.com/package/scriveno)**
|
|
12
14
|
|
|
@@ -23,6 +25,7 @@ npx scriveno@latest
|
|
|
23
25
|
|
|
24
26
|
# Optional project status check
|
|
25
27
|
scriveno status --project .
|
|
28
|
+
scriveno sync --check
|
|
26
29
|
```
|
|
27
30
|
|
|
28
31
|
---
|
|
@@ -80,12 +83,19 @@ Scriveno ships a shared read-only status engine for every installer target. The
|
|
|
80
83
|
```bash
|
|
81
84
|
scriveno status --project .
|
|
82
85
|
scriveno status . --json
|
|
86
|
+
scriveno status --project . --apply-safe
|
|
87
|
+
scriveno sync --check
|
|
88
|
+
scriveno smoke --json
|
|
89
|
+
scriveno agents --json
|
|
90
|
+
scriveno routes --json
|
|
83
91
|
```
|
|
84
92
|
|
|
85
93
|
It inspects disk evidence such as `.manuscript/`, `STATE.md`, `CONTEXT.md`, plan files, drafts, review coverage, notes, revision proposals, translation work, publishing prerequisites, exports, and history, then recommends the safest next command. The engine does not mutate files and does not spawn agents by itself. Command surfaces such as `/scr-next`, `/scr:next`, `/scr:progress`, `/scr:session-report`, and `/scr:sync` call it when local command execution is available, then fall back to embedded markdown logic when a host cannot run Node. See [Auto-Invoke Policy](docs/auto-invoke-policy.md) and [Runtime Support](docs/runtime-support.md#shared-auto-invoke-engine).
|
|
86
94
|
|
|
87
95
|
The status report separates `Candidate agents`, `Candidate local helpers`, and `Manual gates`. That means Scriveno can say when a route is ready for a drafter, voice-checker, translator, continuity-checker, or review worker, when a deterministic helper such as save or scan is enough, and when writer approval is required for publishing, export overwrites, track merges, or undo.
|
|
88
96
|
|
|
97
|
+
`--apply-safe` runs only read-only checks and reports write-gated helpers instead of touching manuscript files. `sync --check`, `smoke`, `agents`, and `routes` expose the same cross-runtime audit layer for Claude Code, Codex, Cursor, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, Antigravity, Manus, Perplexity Desktop, and the generic skill fallback.
|
|
98
|
+
|
|
89
99
|
---
|
|
90
100
|
|
|
91
101
|
## The Voice DNA system
|
|
@@ -192,6 +202,7 @@ Scriveno is built on five principles:
|
|
|
192
202
|
- [Architecture](docs/architecture.md) -- How Scriveno works under the hood
|
|
193
203
|
- [Configuration](docs/configuration.md) -- Package, installer, constraints, and `.manuscript/config.json` surfaces
|
|
194
204
|
- [Auto-Invoke Policy](docs/auto-invoke-policy.md) -- Shared status engine, route intelligence lanes, visible automation status, and agent-spawn boundaries
|
|
205
|
+
- [Route Graph Audit](docs/route-graph.md) -- Generated route graph, automation lanes, and priority fixtures
|
|
195
206
|
- [Development](docs/development.md) -- Contributor workflow for changing commands, templates, installer logic, and docs
|
|
196
207
|
- [Testing](docs/testing.md) -- What the test suite covers and which checks to run before shipping
|
|
197
208
|
- [Release Notes](docs/release-notes.md) -- Public summary of what changed between package releases
|
|
@@ -216,7 +227,7 @@ Scriveno currently ships installer targets for these AI tooling environments:
|
|
|
216
227
|
- **Perplexity Desktop** (guided local-MCP setup)
|
|
217
228
|
- **Generic (SKILL.md)** fallback
|
|
218
229
|
|
|
219
|
-
**Installer baseline:** `Node.js >=20.0.0` for `npx scriveno@latest`, `bin/install.js`,
|
|
230
|
+
**Installer baseline:** `Node.js >=20.0.0` for `npx scriveno@latest`, `bin/install.js`, `scriveno status --project .`, and the proactive audit commands. For new installs, use a currently supported LTS such as Node.js 24; Node.js 20 is now a compatibility floor, not the recommended fresh-install target.
|
|
220
231
|
|
|
221
232
|
**Support note:** Claude Code is the primary reference runtime and now installs a flat `/scr-*` command surface. The environments listed above are installer targets, not a claim that every host runtime has verified parity today. Codex currently installs a skill-native `$scr-*` surface, while Perplexity Desktop is a guided local-MCP target rather than a writable command runtime. See the [runtime compatibility matrix](docs/runtime-support.md) for install type, support level, and verification status.
|
|
222
233
|
|
|
@@ -224,11 +235,11 @@ Scriveno currently ships installer targets for these AI tooling environments:
|
|
|
224
235
|
|
|
225
236
|
## Status
|
|
226
237
|
|
|
227
|
-
**Version:** 2.0.
|
|
238
|
+
**Version:** 2.0.11
|
|
228
239
|
|
|
229
|
-
|
|
240
|
+
Scriveno's core command surface is stable across 112 commands, 50 work types, and 11 installer targets. The current repo baseline includes shipped planning milestones through `v2.0 Publishing Cover Packaging`, plus the creative-context, record-store, branching-next, runtime-sync, adaptive concierge, human-first writing-safeguard, authenticity-diagnostic, domain-grilling, installer-marker cleanup, cross-runtime agent metadata, visible automation status, the shared `scriveno status --project .` auto-invoke engine, route-intelligence lanes, safe apply reporting, runtime smoke checks, agent availability checks, route graph audits, and the full audit repair pass through `2.0.11`. See [Shipped Assets](docs/shipped-assets.md) for the canonical asset inventory and [Runtime Support](docs/runtime-support.md) for the runtime compatibility matrix.
|
|
230
241
|
|
|
231
|
-
|
|
242
|
+
Version `2.0.11` publishes Scriveno under the package name `scriveno`, so the current install command is `npx scriveno@latest`. The older `scriveno-cli` package name is historical and was unpublished during the rename, so npm cannot attach a deprecation notice to it while it has no active registry record. The older `scriven-cli` package remains on npm only as a deprecated legacy name that points users to `scriveno`. Do not treat either legacy package name as active unless a deliberate compatibility shim is republished. See [CHANGELOG](CHANGELOG.md) for the full list and [docs/release-notes.md](docs/release-notes.md) for the public-facing summary.
|
|
232
243
|
|
|
233
244
|
Package history is tracked in [CHANGELOG.md](CHANGELOG.md), and the public-facing summary for this release is in [docs/release-notes.md](docs/release-notes.md).
|
|
234
245
|
|
package/bin/install.js
CHANGED
|
@@ -823,6 +823,11 @@ function printHelp() {
|
|
|
823
823
|
scriveno
|
|
824
824
|
scriveno status --project .
|
|
825
825
|
scriveno status . --json
|
|
826
|
+
scriveno status --project . --apply-safe
|
|
827
|
+
scriveno sync --check
|
|
828
|
+
scriveno smoke --json
|
|
829
|
+
scriveno agents --json
|
|
830
|
+
scriveno routes --json
|
|
826
831
|
scriveno --runtimes codex,claude-code --global --writer --silent
|
|
827
832
|
|
|
828
833
|
Options:
|
|
@@ -841,8 +846,15 @@ Status options:
|
|
|
841
846
|
status Inspect a project and recommend the next command
|
|
842
847
|
--project <path> Project root to inspect (default: current directory)
|
|
843
848
|
--trigger <name> Status trigger label (default: scriveno status)
|
|
849
|
+
--apply-safe Run read-only checks and report write-gated helpers
|
|
844
850
|
--json Print machine-readable status JSON
|
|
845
851
|
|
|
852
|
+
Audit commands:
|
|
853
|
+
sync --check Check shared sync, runtime, and agent surfaces
|
|
854
|
+
smoke Smoke-test installed runtime surfaces
|
|
855
|
+
agents Inspect installed agent prompts and metadata
|
|
856
|
+
routes Audit route graph and automation lanes
|
|
857
|
+
|
|
846
858
|
Runtime keys:
|
|
847
859
|
${Object.keys(RUNTIMES).join(', ')}
|
|
848
860
|
`);
|
|
@@ -861,6 +873,9 @@ function parseArgs(argv) {
|
|
|
861
873
|
statusProjectRoot: process.cwd(),
|
|
862
874
|
statusTrigger: 'scriveno status',
|
|
863
875
|
statusJson: false,
|
|
876
|
+
statusApplySafe: false,
|
|
877
|
+
auditJson: false,
|
|
878
|
+
syncCheck: false,
|
|
864
879
|
};
|
|
865
880
|
|
|
866
881
|
if (argv[0] === 'status') {
|
|
@@ -873,6 +888,8 @@ function parseArgs(argv) {
|
|
|
873
888
|
options.showVersion = true;
|
|
874
889
|
} else if (arg === '--json') {
|
|
875
890
|
options.statusJson = true;
|
|
891
|
+
} else if (arg === '--apply-safe') {
|
|
892
|
+
options.statusApplySafe = true;
|
|
876
893
|
} else if (arg === '--project') {
|
|
877
894
|
const value = argv[i + 1];
|
|
878
895
|
if (!value) throw new Error('--project requires a value for status');
|
|
@@ -896,6 +913,36 @@ function parseArgs(argv) {
|
|
|
896
913
|
return options;
|
|
897
914
|
}
|
|
898
915
|
|
|
916
|
+
if (['sync', 'smoke', 'agents', 'routes'].includes(argv[0])) {
|
|
917
|
+
options.command = argv[0];
|
|
918
|
+
for (let i = 1; i < argv.length; i++) {
|
|
919
|
+
const arg = argv[i];
|
|
920
|
+
if (arg === '--help' || arg === '-h') {
|
|
921
|
+
options.showHelp = true;
|
|
922
|
+
} else if (arg === '--version' || arg === '-v') {
|
|
923
|
+
options.showVersion = true;
|
|
924
|
+
} else if (arg === '--json') {
|
|
925
|
+
options.auditJson = true;
|
|
926
|
+
} else if (arg === '--check' && argv[0] === 'sync') {
|
|
927
|
+
options.syncCheck = true;
|
|
928
|
+
} else if (arg === '--project') {
|
|
929
|
+
const value = argv[i + 1];
|
|
930
|
+
if (!value) throw new Error('--project requires a value');
|
|
931
|
+
options.statusProjectRoot = value;
|
|
932
|
+
i++;
|
|
933
|
+
} else if (arg.startsWith('--project=')) {
|
|
934
|
+
options.statusProjectRoot = arg.slice('--project='.length);
|
|
935
|
+
} else if (arg.startsWith('-')) {
|
|
936
|
+
throw new Error(`Unknown ${argv[0]} argument "${arg}"`);
|
|
937
|
+
} else if (argv[0] === 'sync') {
|
|
938
|
+
options.statusProjectRoot = arg;
|
|
939
|
+
} else {
|
|
940
|
+
throw new Error(`Unknown ${argv[0]} argument "${arg}"`);
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
return options;
|
|
944
|
+
}
|
|
945
|
+
|
|
899
946
|
function addRuntimeList(value) {
|
|
900
947
|
for (const key of String(value).split(',').map((item) => item.trim()).filter(Boolean)) {
|
|
901
948
|
if (!Object.prototype.hasOwnProperty.call(RUNTIMES, key)) {
|
|
@@ -947,14 +994,73 @@ function parseArgs(argv) {
|
|
|
947
994
|
return options;
|
|
948
995
|
}
|
|
949
996
|
|
|
950
|
-
function runStatus({ projectRoot, trigger, json }) {
|
|
997
|
+
function runStatus({ projectRoot, trigger, json, applySafe }) {
|
|
951
998
|
const analysis = autoInvokeEngine.analyzeProject(projectRoot);
|
|
999
|
+
const safeApply = applySafe
|
|
1000
|
+
? autoInvokeEngine.collectSafeApplyActions(projectRoot, { analysis, trigger })
|
|
1001
|
+
: null;
|
|
952
1002
|
if (json) {
|
|
953
|
-
console.log(JSON.stringify(analysis, null, 2));
|
|
1003
|
+
console.log(JSON.stringify(safeApply ? { analysis, safeApply } : analysis, null, 2));
|
|
954
1004
|
} else {
|
|
955
1005
|
console.log(autoInvokeEngine.formatReport(analysis, { trigger }));
|
|
1006
|
+
if (safeApply) {
|
|
1007
|
+
console.log('');
|
|
1008
|
+
console.log(autoInvokeEngine.formatSafeApplyReport(safeApply));
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
return safeApply ? { analysis, safeApply } : analysis;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
function runSyncCheck({ projectRoot, json }) {
|
|
1015
|
+
const analysis = autoInvokeEngine.analyzeProject(projectRoot);
|
|
1016
|
+
const safeApply = autoInvokeEngine.collectSafeApplyActions(projectRoot, { analysis, trigger: 'scriveno sync --check' });
|
|
1017
|
+
const agents = autoInvokeEngine.inspectAgentAvailability();
|
|
1018
|
+
const smoke = autoInvokeEngine.inspectRuntimeSmoke();
|
|
1019
|
+
const result = { analysis, safeApply, agents, smoke };
|
|
1020
|
+
if (json) {
|
|
1021
|
+
console.log(JSON.stringify(result, null, 2));
|
|
1022
|
+
} else {
|
|
1023
|
+
console.log('Sync status:');
|
|
1024
|
+
console.log(`Project: ${analysis.projectRoot}`);
|
|
1025
|
+
console.log(`Recommendation: ${analysis.recommendation.command}`);
|
|
1026
|
+
console.log('');
|
|
1027
|
+
console.log(autoInvokeEngine.formatSafeApplyReport(safeApply));
|
|
1028
|
+
console.log('');
|
|
1029
|
+
console.log(autoInvokeEngine.formatAgentAvailabilityReport(agents));
|
|
1030
|
+
console.log('');
|
|
1031
|
+
console.log(autoInvokeEngine.formatRuntimeSmokeReport(smoke));
|
|
1032
|
+
}
|
|
1033
|
+
return result;
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
function runRuntimeSmoke({ json }) {
|
|
1037
|
+
const result = autoInvokeEngine.inspectRuntimeSmoke();
|
|
1038
|
+
if (json) {
|
|
1039
|
+
console.log(JSON.stringify(result, null, 2));
|
|
1040
|
+
} else {
|
|
1041
|
+
console.log(autoInvokeEngine.formatRuntimeSmokeReport(result));
|
|
1042
|
+
}
|
|
1043
|
+
return result;
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
function runAgentAvailability({ json }) {
|
|
1047
|
+
const result = autoInvokeEngine.inspectAgentAvailability();
|
|
1048
|
+
if (json) {
|
|
1049
|
+
console.log(JSON.stringify(result, null, 2));
|
|
1050
|
+
} else {
|
|
1051
|
+
console.log(autoInvokeEngine.formatAgentAvailabilityReport(result));
|
|
956
1052
|
}
|
|
957
|
-
return
|
|
1053
|
+
return result;
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
function runRouteAudit({ json }) {
|
|
1057
|
+
const result = autoInvokeEngine.buildRouteGraph();
|
|
1058
|
+
if (json) {
|
|
1059
|
+
console.log(JSON.stringify(result, null, 2));
|
|
1060
|
+
} else {
|
|
1061
|
+
console.log(autoInvokeEngine.formatRouteGraphReport(result));
|
|
1062
|
+
}
|
|
1063
|
+
return result;
|
|
958
1064
|
}
|
|
959
1065
|
|
|
960
1066
|
function resolveInstallRequest(parsed, detectedRuntimeKeys, { isTTY }) {
|
|
@@ -1385,10 +1491,34 @@ async function main() {
|
|
|
1385
1491
|
projectRoot: parsed.statusProjectRoot,
|
|
1386
1492
|
trigger: parsed.statusTrigger,
|
|
1387
1493
|
json: parsed.statusJson,
|
|
1494
|
+
applySafe: parsed.statusApplySafe,
|
|
1495
|
+
});
|
|
1496
|
+
return;
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
if (parsed.command === 'sync') {
|
|
1500
|
+
runSyncCheck({
|
|
1501
|
+
projectRoot: parsed.statusProjectRoot,
|
|
1502
|
+
json: parsed.auditJson,
|
|
1388
1503
|
});
|
|
1389
1504
|
return;
|
|
1390
1505
|
}
|
|
1391
1506
|
|
|
1507
|
+
if (parsed.command === 'smoke') {
|
|
1508
|
+
runRuntimeSmoke({ json: parsed.auditJson });
|
|
1509
|
+
return;
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1512
|
+
if (parsed.command === 'agents') {
|
|
1513
|
+
runAgentAvailability({ json: parsed.auditJson });
|
|
1514
|
+
return;
|
|
1515
|
+
}
|
|
1516
|
+
|
|
1517
|
+
if (parsed.command === 'routes') {
|
|
1518
|
+
runRouteAudit({ json: parsed.auditJson });
|
|
1519
|
+
return;
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1392
1522
|
const detectedRuntimeKeys = Object.entries(RUNTIMES).filter(([, runtime]) => runtime.detect()).map(([key]) => key);
|
|
1393
1523
|
const installRequest = resolveInstallRequest(parsed, detectedRuntimeKeys, { isTTY: Boolean(process.stdin.isTTY) });
|
|
1394
1524
|
|
|
@@ -1774,6 +1904,10 @@ module.exports = {
|
|
|
1774
1904
|
parseArgs,
|
|
1775
1905
|
resolveInstallRequest,
|
|
1776
1906
|
runStatus,
|
|
1907
|
+
runSyncCheck,
|
|
1908
|
+
runRuntimeSmoke,
|
|
1909
|
+
runAgentAvailability,
|
|
1910
|
+
runRouteAudit,
|
|
1777
1911
|
collectCommandEntries,
|
|
1778
1912
|
collectAgentEntries,
|
|
1779
1913
|
assertNoSkillNameCollisions,
|
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.0.
|
|
72
|
+
"scriveno_version": "2.0.11",
|
|
73
73
|
"work_type": "<chosen>",
|
|
74
74
|
"group": "<group>",
|
|
75
75
|
"command_unit": "<unit>",
|
|
@@ -3,14 +3,14 @@ description: "Show verse numbering format for the active sacred tradition."
|
|
|
3
3
|
argument-hint: "[--example <text>]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# /scr:sacred-
|
|
6
|
+
# /scr:sacred-numbering-format -- Tradition Verse Numbering Reference
|
|
7
7
|
|
|
8
8
|
Show the verse numbering format for the active sacred tradition. Reads the tradition profile from the project's config and displays the numbering system with example citations.
|
|
9
9
|
|
|
10
10
|
## Usage
|
|
11
11
|
|
|
12
12
|
```
|
|
13
|
-
/scr:sacred-
|
|
13
|
+
/scr:sacred-numbering-format [--example <text>]
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
If `--example <text>` is provided, format the given text as a citation in the tradition's numbering system.
|
package/commands/scr/sync.md
CHANGED
|
@@ -14,13 +14,15 @@ This is not a package upgrade command. Do not fetch a newer Scriveno release, do
|
|
|
14
14
|
The auto-invoke status engine is a shared runtime asset. It is copied for every install target and can be checked with one of these paths:
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
+
scriveno sync --check
|
|
17
18
|
scriveno status --project "$PWD" --trigger /scr:sync
|
|
19
|
+
scriveno status --project "$PWD" --apply-safe --trigger /scr:sync
|
|
18
20
|
node lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:sync
|
|
19
21
|
node "$HOME/.scriveno/lib/auto-invoke-engine.js" --project "$PWD" --trigger /scr:sync
|
|
20
22
|
node .scriveno/lib/auto-invoke-engine.js --project "$PWD" --trigger /scr:sync
|
|
21
23
|
```
|
|
22
24
|
|
|
23
|
-
Use
|
|
25
|
+
Use `scriveno sync --check` for the full read-only sync audit: project status, safe apply, agent availability, and runtime smoke. Use `scriveno status --project "$PWD" --apply-safe` when you only need project routing and safe-helper reporting. Use `bin/install.js` for runtime file synchronization.
|
|
24
26
|
|
|
25
27
|
## Prerequisites
|
|
26
28
|
|
|
@@ -70,7 +72,7 @@ If you cannot find a Scriveno source root, stop and explain that `/scr:sync` nee
|
|
|
70
72
|
- Check that installed Codex commands include current response-contract and source-marker behavior after reinstall.
|
|
71
73
|
- Report each runtime as `current`, `stale`, `missing`, or `unknown`.
|
|
72
74
|
5. Decide mode:
|
|
73
|
-
- `--check`: report only. Do not write files.
|
|
75
|
+
- `--check`: report only. Run `scriveno sync --check` when available. Do not write files.
|
|
74
76
|
- `--apply`: run the installer.
|
|
75
77
|
- No flag: if stale installed Scriveno-owned files are detected, ask the writer before applying. If everything is current, report that no sync is needed.
|
|
76
78
|
6. When applying, run from the source root:
|
package/data/CONSTRAINTS.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./constraints.schema.json",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.11",
|
|
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."
|
|
@@ -49,4 +49,4 @@ Close third (Elias), past tense. Intimate distance. The narrator stays inside El
|
|
|
49
49
|
- Elias's established speech patterns from previous scenes
|
|
50
50
|
|
|
51
51
|
---
|
|
52
|
-
*This is a planning document. Draft with /scr:draft
|
|
52
|
+
*This is a planning document. Draft with /scr:draft 5.*
|
package/docs/architecture.md
CHANGED
|
@@ -351,7 +351,7 @@ Codex uses a skill-native variation of this strategy. The installer generates on
|
|
|
351
351
|
|
|
352
352
|
### Shared status engine
|
|
353
353
|
|
|
354
|
-
Scriveno also ships `lib/auto-invoke-engine.js`, exposed through `scriveno status --project
|
|
354
|
+
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.
|
|
355
355
|
|
|
356
356
|
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.
|
|
357
357
|
|
|
@@ -365,6 +365,14 @@ Every command registry category has an automation lane through `getCommandAutoma
|
|
|
365
365
|
|
|
366
366
|
This turns disconnected side features into visible routes. A plan without a draft recommends `/scr:draft` and lists the drafter route as a candidate agent path. Drafts without reviews recommend `/scr:editor-review` before export. Notes route to `/scr:check-notes`. Revision proposals route to `/scr:editor-review --proposal` or `/scr:track`. Publishing gaps route to `/scr:front-matter`, `/scr:back-matter`, `/scr:blurb`, `/scr:cover-art`, or `/scr:publish` depending on disk evidence.
|
|
367
367
|
|
|
368
|
+
The same engine now exposes:
|
|
369
|
+
|
|
370
|
+
- **Safe apply reporting**: `status --apply-safe` runs read-only checks, identifies safe helpers, lists agent candidates, and marks write-gated actions as skipped.
|
|
371
|
+
- **Sync check**: `sync --check` combines project status, safe apply, agent availability, and runtime smoke into one transcript.
|
|
372
|
+
- **Agent availability**: `agents` verifies prompt fallback readiness for non-Codex runtimes and metadata readiness for Codex.
|
|
373
|
+
- **Runtime smoke**: `smoke` checks installed command, skill, guide, agent, metadata, and shared-engine surfaces.
|
|
374
|
+
- **Route graph audit**: `routes` derives a command graph from constraints, command intents, dependencies, and automation lanes.
|
|
375
|
+
|
|
368
376
|
### Installation modes
|
|
369
377
|
|
|
370
378
|
The installer supports two scopes:
|
|
@@ -376,7 +384,7 @@ The user chooses during installation. Guided local-MCP targets still write their
|
|
|
376
384
|
|
|
377
385
|
### Runtime credibility
|
|
378
386
|
|
|
379
|
-
Scriveno's installer compatibility floor is `Node.js >=20.0.0`. For new installs, prefer a currently supported LTS such as Node.js 24. The compatibility floor applies to `npx scriveno@latest`, `bin/install.js`, `scriveno status --project .`, the shared status engine, and the repo's JavaScript test suite, not to the markdown command system once files are installed.
|
|
387
|
+
Scriveno's installer compatibility floor is `Node.js >=20.0.0`. For new installs, prefer a currently supported LTS such as Node.js 24. The compatibility floor applies to `npx scriveno@latest`, `bin/install.js`, `scriveno status --project .`, the proactive audit commands, the shared status engine, and the repo's JavaScript test suite, not to the markdown command system once files are installed.
|
|
380
388
|
|
|
381
389
|
This architecture doc is intentionally about mechanics: detection rules, install path shapes, `commands` versus `skills` versus `guided-mcp`, and global versus project scope. For the authoritative runtime matrix, support levels, and verification status, see [`docs/runtime-support.md`](runtime-support.md).
|
|
382
390
|
|
|
@@ -8,6 +8,22 @@ The engine reports candidates instead of silently acting. It can identify planne
|
|
|
8
8
|
|
|
9
9
|
The same file exports `getCommandAutomationPolicy()`, which classifies every command registry route into an automation lane. Tests assert that every command category is covered, so newly added routes cannot sit outside the proactive policy by accident.
|
|
10
10
|
|
|
11
|
+
## Safe Apply and Audit Commands
|
|
12
|
+
|
|
13
|
+
Scriveno now exposes the proactive layer as executable checks instead of documentation-only guidance:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
scriveno status --project . --apply-safe
|
|
17
|
+
scriveno sync --check
|
|
18
|
+
scriveno smoke --json
|
|
19
|
+
scriveno agents --json
|
|
20
|
+
scriveno routes --json
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
`--apply-safe` runs the read-only status sweep, reports safe local helpers that are ready, lists agent candidates, and marks writer-owned or write-gated helpers as skipped instead of mutating files. It is intentionally conservative: `/scr:save`, `/scr:scan`, `/scr:sync --apply`, publish packaging, export overwrites, track merges, and undo remain explicit actions.
|
|
24
|
+
|
|
25
|
+
`sync --check` combines four reports: project status, safe apply, agent availability, and runtime smoke. `smoke` checks installed commands, skills, prompts, Codex metadata, and the shared engine path. `agents` checks prompt fallback readiness and Codex metadata readiness. `routes` builds a route graph from `data/CONSTRAINTS.json` and the automation policy so disconnected command flows are visible in one audit.
|
|
26
|
+
|
|
11
27
|
## Cross-Platform Agent Rules
|
|
12
28
|
|
|
13
29
|
Scriveno agent prompts live in `agents/*.md`. Each host runtime exposes them differently:
|
|
@@ -4,6 +4,8 @@ Scriveno has **112 commands** organized into **14 categories**. Commands adapt a
|
|
|
4
4
|
|
|
5
5
|
Commands marked with **adaptive terminology** change how Scriveno talks about your work type's `command_unit` in `.manuscript/config.json`, while keeping the runnable command id stable. Commands marked with **group adaptation** have different labels for specific work type groups (academic, sacred, etc.).
|
|
6
6
|
|
|
7
|
+
This page covers writer-facing `/scr:*` commands. Package-level audit commands live in the `scriveno` CLI: `scriveno status --project . --apply-safe`, `scriveno sync --check`, `scriveno smoke`, `scriveno agents`, and `scriveno routes`. See [Auto-Invoke Policy](auto-invoke-policy.md), [Runtime Support](runtime-support.md), and [Route Graph Audit](route-graph.md) for those surfaces.
|
|
8
|
+
|
|
7
9
|
## Table of Contents
|
|
8
10
|
|
|
9
11
|
1. [Core](#core) -- The main workflow: create, discuss, plan, draft, review, submit
|
package/docs/configuration.md
CHANGED
|
@@ -57,7 +57,7 @@ When a writer runs `/scr:new-work`, Scriveno creates `.manuscript/config.json`.
|
|
|
57
57
|
|
|
58
58
|
```json
|
|
59
59
|
{
|
|
60
|
-
"scriveno_version": "2.0.
|
|
60
|
+
"scriveno_version": "2.0.11",
|
|
61
61
|
"work_type": "<chosen>",
|
|
62
62
|
"group": "<group>",
|
|
63
63
|
"command_unit": "<unit>",
|
|
@@ -217,6 +217,15 @@ And for release-facing changes, also run:
|
|
|
217
217
|
npm run release:check
|
|
218
218
|
```
|
|
219
219
|
|
|
220
|
+
When configuration changes touch runtime paths, route logic, agent prompts, sync behavior, or installed audit surfaces, also run:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
scriveno sync --check
|
|
224
|
+
scriveno smoke --json
|
|
225
|
+
scriveno agents --json
|
|
226
|
+
scriveno routes --json
|
|
227
|
+
```
|
|
228
|
+
|
|
220
229
|
## Related docs
|
|
221
230
|
|
|
222
231
|
- [Getting Started](getting-started.md)
|
package/docs/contributing.md
CHANGED
|
@@ -381,6 +381,9 @@ When a package release changes the public story, update the release docs alongsi
|
|
|
381
381
|
- `README.md` -- current version/status blurb when the release changes the headline positioning
|
|
382
382
|
- `docs/shipped-assets.md` -- canonical inventory when bundled docs, templates, proof assets, or trust-critical files change
|
|
383
383
|
- `docs/command-reference.md` -- command contract reference when command behavior or flags change
|
|
384
|
+
- `docs/auto-invoke-policy.md` -- proactive routing, safe apply, local-helper, and agent-spawn policy
|
|
385
|
+
- `docs/runtime-support.md` -- runtime matrix, install-surface checks, and agent availability claims
|
|
386
|
+
- `docs/route-graph.md` -- route graph, automation lanes, and priority fixtures when route logic changes
|
|
384
387
|
- `templates/*/README.md` and `data/proof/*/README.md` -- shipped profile and proof documentation when those assets change
|
|
385
388
|
- `.planning/` milestone summary files -- only when the release closes out milestone work or changes the archive story
|
|
386
389
|
|
|
@@ -391,7 +394,8 @@ When a package release changes the public story, update the release docs alongsi
|
|
|
391
394
|
3. Update `docs/release-notes.md` with a concise explanation of what changed, why, and how it was verified
|
|
392
395
|
4. Run `npm test`
|
|
393
396
|
5. Run `npm run release:check`
|
|
394
|
-
6.
|
|
397
|
+
6. For runtime, installer, agent, sync, or route-intelligence changes, run `scriveno sync --check`, `scriveno smoke --json`, `scriveno agents --json`, and `scriveno routes --json`
|
|
398
|
+
7. Publish only after the docs and package metadata tell the same story
|
|
395
399
|
|
|
396
400
|
## Code Style
|
|
397
401
|
|
package/docs/development.md
CHANGED
|
@@ -120,6 +120,21 @@ node bin/install.js --runtime codex --global --developer --silent
|
|
|
120
120
|
|
|
121
121
|
The writer-facing form of this maintenance operation is `/scr:sync`.
|
|
122
122
|
|
|
123
|
+
For a full cross-runtime refresh from this checkout, use:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
node bin/install.js --runtimes claude-code,cursor,gemini-cli,codex,opencode,copilot,windsurf,antigravity,manus,perplexity-desktop,generic --global --developer --silent
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
After installation, the shared audit commands should pass:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
scriveno sync --check
|
|
133
|
+
scriveno smoke --json
|
|
134
|
+
scriveno agents --json
|
|
135
|
+
scriveno routes --json
|
|
136
|
+
```
|
|
137
|
+
|
|
123
138
|
## Docs and release workflow
|
|
124
139
|
|
|
125
140
|
Docs are part of the shipped product. If you change visible behavior, update every affected documentation surface in the same pass: root docs, files under `docs/`, proof READMEs, template READMEs, and command markdown that exposes user-facing contracts.
|
|
@@ -131,6 +146,9 @@ For release-oriented documentation surfaces, the main files are:
|
|
|
131
146
|
- `docs/release-notes.md`
|
|
132
147
|
- `docs/shipped-assets.md`
|
|
133
148
|
- `docs/command-reference.md`
|
|
149
|
+
- `docs/auto-invoke-policy.md`
|
|
150
|
+
- `docs/runtime-support.md`
|
|
151
|
+
- `docs/route-graph.md`
|
|
134
152
|
- `templates/*/README.md` when shipped profiles or templates change
|
|
135
153
|
- `.planning/` milestone summaries when you are still using the GSD planning layer
|
|
136
154
|
|
|
@@ -141,7 +159,8 @@ A good pre-ship pass for Scriveno changes is:
|
|
|
141
159
|
1. run the targeted tests for the touched surface
|
|
142
160
|
2. run `npm test`
|
|
143
161
|
3. run `npm run release:check` for package-facing changes
|
|
144
|
-
4.
|
|
162
|
+
4. run the proactive audit commands when routing, runtime, installer, or agent surfaces changed
|
|
163
|
+
5. review trust-sensitive docs for runtime, asset, and support claims
|
|
145
164
|
|
|
146
165
|
## Related docs
|
|
147
166
|
|
|
@@ -149,4 +168,7 @@ A good pre-ship pass for Scriveno changes is:
|
|
|
149
168
|
- [Configuration](configuration.md)
|
|
150
169
|
- [Testing](testing.md)
|
|
151
170
|
- [Contributing](contributing.md)
|
|
171
|
+
- [Auto-Invoke Policy](auto-invoke-policy.md)
|
|
172
|
+
- [Runtime Support](runtime-support.md)
|
|
173
|
+
- [Route Graph Audit](route-graph.md)
|
|
152
174
|
- [Release Notes](release-notes.md)
|
package/docs/getting-started.md
CHANGED
|
@@ -29,10 +29,14 @@ You can also ask Scriveno for a read-only project status from any terminal:
|
|
|
29
29
|
```
|
|
30
30
|
scriveno status --project .
|
|
31
31
|
scriveno status . --json
|
|
32
|
+
scriveno status --project . --apply-safe
|
|
33
|
+
scriveno sync --check
|
|
32
34
|
```
|
|
33
35
|
|
|
34
36
|
That status command is the same shared auto-invoke engine used by `/scr-next`, `/scr:next`, `/scr:progress`, `/scr:session-report`, and `/scr:sync` when local command execution is available. It recommends the next safest command, but does not mutate files or spawn agents by itself. Current status output separates candidate agents, candidate local helpers, and manual gates so you can tell whether Scriveno is pointing at a specialist route, a deterministic file helper, or a writer-owned decision.
|
|
35
37
|
|
|
38
|
+
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
|
+
|
|
36
40
|
## Step 2: Explore the Demo (Optional)
|
|
37
41
|
|
|
38
42
|
Not sure what Scriveno does? Try the demo before starting your own project:
|
|
@@ -206,5 +210,6 @@ If you want the trust surfaces around installation and shipping details, continu
|
|
|
206
210
|
|
|
207
211
|
- [Runtime Support](runtime-support.md) -- installer targets, support levels, and verification status
|
|
208
212
|
- [Auto-Invoke Policy](auto-invoke-policy.md) -- status engine, visible automation, and agent-spawn boundaries
|
|
213
|
+
- [Route Graph Audit](route-graph.md) -- generated route graph, automation lanes, and priority fixtures
|
|
209
214
|
- [Shipped Assets](shipped-assets.md) -- what the npm package actually includes on the trust-critical surface
|
|
210
215
|
- [Release Notes](release-notes.md) -- what changed in the latest package release
|
package/docs/proof-artifacts.md
CHANGED
|
@@ -53,4 +53,6 @@ Read the bundle in order if you want to inspect sentence rhythm, metaphor select
|
|
|
53
53
|
|
|
54
54
|
- [Shipped Assets](shipped-assets.md) -- canonical inventory of the trust-critical files Scriveno actually bundles
|
|
55
55
|
- [Runtime Support](runtime-support.md) -- canonical runtime matrix and installer-baseline framing
|
|
56
|
+
- [Auto-Invoke Policy](auto-invoke-policy.md) -- proactive status, safe apply, local-helper, and agent-spawn boundaries
|
|
57
|
+
- [Route Graph Audit](route-graph.md) -- generated route graph, automation lanes, and priority fixtures
|
|
56
58
|
- [Release Notes](release-notes.md) -- summary of what changed in the latest package release
|
package/docs/release-notes.md
CHANGED
|
@@ -2,6 +2,78 @@
|
|
|
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.0.11 - 2026-05-16
|
|
6
|
+
|
|
7
|
+
### What changed
|
|
8
|
+
|
|
9
|
+
- Scriveno received a full repo audit across 500 tracked files and the latest 242-file package surface.
|
|
10
|
+
- The sacred numbering command now consistently advertises `/scr:sacred-numbering-format` instead of the stale `/scr:sacred-verse-numbering` name.
|
|
11
|
+
- Sacred doctrine and lineage templates now point to `/scr:sacred:doctrinal-check`, matching the shipped command surface.
|
|
12
|
+
- The demo manuscript plan now tells users to run `/scr:draft 5` instead of the removed `/scr:draft-scene 5` command.
|
|
13
|
+
- Archived planning summaries no longer use decorative test-output markers that violate the repository writing policy.
|
|
14
|
+
- README badges, Route Graph, Configuration, changelog, package metadata, constraints metadata, generated config metadata, and release tests are aligned on `2.0.11`.
|
|
15
|
+
|
|
16
|
+
### Why it matters
|
|
17
|
+
|
|
18
|
+
This release tightens the shipped surface after the automation releases. Writers should see current command names in docs, templates, demo files, and installed runtime copies. Developers now have a cleaner package baseline before the next milestone begins.
|
|
19
|
+
|
|
20
|
+
### Affected areas
|
|
21
|
+
|
|
22
|
+
- command documentation
|
|
23
|
+
- sacred project templates
|
|
24
|
+
- demo manuscript assets
|
|
25
|
+
- release metadata
|
|
26
|
+
- planning state
|
|
27
|
+
- README badge and status copy
|
|
28
|
+
- cross-runtime installed surfaces
|
|
29
|
+
- regression tests for release metadata and sacred command naming
|
|
30
|
+
|
|
31
|
+
### Verification
|
|
32
|
+
|
|
33
|
+
- `npm run release:check`
|
|
34
|
+
- `node bin/install.js routes --json`
|
|
35
|
+
- `node bin/install.js agents --json`
|
|
36
|
+
- `node bin/install.js sync --check --json`
|
|
37
|
+
- `node bin/install.js smoke --json`
|
|
38
|
+
- `npm audit --omit=dev --json`
|
|
39
|
+
- `npm pack --dry-run`
|
|
40
|
+
- `git diff --check`
|
|
41
|
+
- repository policy scan for em dashes, en dashes, and decorative emoji-style markers
|
|
42
|
+
|
|
43
|
+
## 2.0.10 - 2026-05-16
|
|
44
|
+
|
|
45
|
+
### What changed
|
|
46
|
+
|
|
47
|
+
- `scriveno status --project . --apply-safe` now runs the read-only proactive checks and reports safe helpers, agent candidates, and write-gated actions.
|
|
48
|
+
- `scriveno sync --check` now produces a read-only sync transcript with project status, safe apply, agent availability, and runtime smoke.
|
|
49
|
+
- `scriveno smoke`, `scriveno agents`, and `scriveno routes` expose installed-surface checks, agent prompt and metadata checks, and generated route graph audits.
|
|
50
|
+
- Runtime checks cover Claude Code, Codex, Cursor, Gemini CLI, OpenCode, GitHub Copilot, Windsurf, Antigravity, Manus, Perplexity Desktop, and the generic skill fallback through the shared engine.
|
|
51
|
+
- README badges, Runtime Support, Auto-Invoke Policy, Architecture, Getting Started, Testing, sync command docs, Route Graph Audit, changelog, and package metadata are aligned on `2.0.10`.
|
|
52
|
+
|
|
53
|
+
### Why it matters
|
|
54
|
+
|
|
55
|
+
The previous releases made proactive routing visible. This release makes the support tooling executable. Users can now ask Scriveno what is safe to run, whether installed agent surfaces are present, whether Codex metadata is ready, and how every route fits into the automation graph without relying on a hidden host-specific behavior.
|
|
56
|
+
|
|
57
|
+
### Affected areas
|
|
58
|
+
|
|
59
|
+
- shared auto-invoke engine
|
|
60
|
+
- public CLI audit commands
|
|
61
|
+
- runtime smoke and agent availability checks
|
|
62
|
+
- route graph audit docs
|
|
63
|
+
- README badges and launch copy
|
|
64
|
+
- architecture, runtime support, auto-invoke policy, getting started, testing, and sync command docs
|
|
65
|
+
- package metadata and generated project examples
|
|
66
|
+
- regression tests for safe apply, runtime smoke, agent availability, and route graph coverage
|
|
67
|
+
|
|
68
|
+
### Verification
|
|
69
|
+
|
|
70
|
+
- `node --test test/auto-invoke-engine.test.js`
|
|
71
|
+
- `node --test test/installer.test.js`
|
|
72
|
+
- `npm test`
|
|
73
|
+
- `npm run release:check`
|
|
74
|
+
- `npm pack --json`
|
|
75
|
+
- `git diff --check`
|
|
76
|
+
|
|
5
77
|
## 2.0.9 - 2026-05-16
|
|
6
78
|
|
|
7
79
|
### What changed
|