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 CHANGED
@@ -2,11 +2,13 @@
2
2
 
3
3
  [![CI](https://github.com/aihxp/scriveno/actions/workflows/ci.yml/badge.svg)](https://github.com/aihxp/scriveno/actions/workflows/ci.yml)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
5
- [![Version](https://img.shields.io/badge/version-2.0.9-blue)](CHANGELOG.md)
5
+ [![Version](https://img.shields.io/badge/version-2.0.11-blue)](CHANGELOG.md)
6
6
  [![npm](https://img.shields.io/npm/v/scriveno.svg)](https://www.npmjs.com/package/scriveno)
7
7
  [![Downloads](https://img.shields.io/npm/dm/scriveno.svg)](https://www.npmjs.com/package/scriveno)
8
8
  [![Status CLI](https://img.shields.io/badge/status%20CLI-scriveno%20status-blue)](docs/runtime-support.md#shared-auto-invoke-engine)
9
9
  [![Route Intelligence](https://img.shields.io/badge/route%20intelligence-agent%20lanes-blue)](docs/auto-invoke-policy.md)
10
+ [![Runtime Smoke](https://img.shields.io/badge/runtime%20smoke-install%20checks-blue)](docs/runtime-support.md#runtime-smoke-and-agent-checks)
11
+ [![Safe Apply](https://img.shields.io/badge/safe%20apply-visible%20gates-blue)](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`, and `scriveno status --project .`. 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.
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.9
238
+ **Version:** 2.0.11
228
239
 
229
- 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, and route-intelligence lanes through `2.0.9`. See [Shipped Assets](docs/shipped-assets.md) for the canonical asset inventory and [Runtime Support](docs/runtime-support.md) for the runtime compatibility matrix.
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
- Version `2.0.9` 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.
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 analysis;
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,
@@ -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.9",
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-verse-numbering -- Tradition Verse Numbering Reference
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-verse-numbering [--example <text>]
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.
@@ -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 it for read-only project status and next-command reasoning. Use `bin/install.js` for runtime file synchronization.
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:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./constraints.schema.json",
3
- "version": "2.0.9",
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-scene 5.*
52
+ *This is a planning document. Draft with /scr:draft 5.*
@@ -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 .` and `scriveno status . --json`. The installer copies this library into the shared Scriveno asset directory for global and project installs, so command surfaces can call a single read-only status engine before falling back to embedded markdown logic.
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
@@ -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.9",
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)
@@ -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. Publish only after the docs and package metadata tell the same story
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
 
@@ -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. review trust-sensitive docs for runtime, asset, and support claims
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)
@@ -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
@@ -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
@@ -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