scriveno 2.0.8 → 2.0.10
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 +21 -7
- package/bin/install.js +137 -3
- package/commands/scr/health.md +6 -0
- package/commands/scr/new-work.md +1 -1
- package/commands/scr/next.md +6 -0
- package/commands/scr/progress.md +6 -0
- package/commands/scr/save.md +6 -0
- package/commands/scr/scan.md +6 -0
- package/commands/scr/session-report.md +6 -0
- package/commands/scr/sync.md +4 -2
- package/data/CONSTRAINTS.json +3082 -701
- package/docs/architecture.md +23 -5
- package/docs/auto-invoke-policy.md +30 -0
- package/docs/configuration.md +1 -1
- package/docs/getting-started.md +5 -1
- package/docs/release-notes.md +67 -0
- package/docs/route-graph.md +51 -0
- package/docs/runtime-support.md +23 -1
- package/docs/shipped-assets.md +1 -0
- package/docs/testing.md +10 -0
- package/lib/auto-invoke-engine.js +889 -2
- package/package.json +1 -1
- package/templates/config.json +1 -10
package/README.md
CHANGED
|
@@ -2,10 +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
|
+
[](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)
|
|
9
12
|
|
|
10
13
|
**[scriveno on npm](https://www.npmjs.com/package/scriveno)**
|
|
11
14
|
|
|
@@ -22,6 +25,7 @@ npx scriveno@latest
|
|
|
22
25
|
|
|
23
26
|
# Optional project status check
|
|
24
27
|
scriveno status --project .
|
|
28
|
+
scriveno sync --check
|
|
25
29
|
```
|
|
26
30
|
|
|
27
31
|
---
|
|
@@ -79,9 +83,18 @@ Scriveno ships a shared read-only status engine for every installer target. The
|
|
|
79
83
|
```bash
|
|
80
84
|
scriveno status --project .
|
|
81
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
|
|
82
91
|
```
|
|
83
92
|
|
|
84
|
-
It inspects disk evidence such as `.manuscript/`, `STATE.md`, `CONTEXT.md`,
|
|
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).
|
|
94
|
+
|
|
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.
|
|
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.
|
|
85
98
|
|
|
86
99
|
---
|
|
87
100
|
|
|
@@ -188,7 +201,8 @@ Scriveno is built on five principles:
|
|
|
188
201
|
- [Contributing](docs/contributing.md) -- How to add commands, agents, work types, and templates
|
|
189
202
|
- [Architecture](docs/architecture.md) -- How Scriveno works under the hood
|
|
190
203
|
- [Configuration](docs/configuration.md) -- Package, installer, constraints, and `.manuscript/config.json` surfaces
|
|
191
|
-
- [Auto-Invoke Policy](docs/auto-invoke-policy.md) -- Shared status engine, visible automation status, and agent-spawn boundaries
|
|
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
|
|
192
206
|
- [Development](docs/development.md) -- Contributor workflow for changing commands, templates, installer logic, and docs
|
|
193
207
|
- [Testing](docs/testing.md) -- What the test suite covers and which checks to run before shipping
|
|
194
208
|
- [Release Notes](docs/release-notes.md) -- Public summary of what changed between package releases
|
|
@@ -213,7 +227,7 @@ Scriveno currently ships installer targets for these AI tooling environments:
|
|
|
213
227
|
- **Perplexity Desktop** (guided local-MCP setup)
|
|
214
228
|
- **Generic (SKILL.md)** fallback
|
|
215
229
|
|
|
216
|
-
**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.
|
|
217
231
|
|
|
218
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.
|
|
219
233
|
|
|
@@ -221,11 +235,11 @@ Scriveno currently ships installer targets for these AI tooling environments:
|
|
|
221
235
|
|
|
222
236
|
## Status
|
|
223
237
|
|
|
224
|
-
**Version:** 2.0.
|
|
238
|
+
**Version:** 2.0.10
|
|
225
239
|
|
|
226
|
-
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,
|
|
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, and route graph audits through `2.0.10`. See [Shipped Assets](docs/shipped-assets.md) for the canonical asset inventory and [Runtime Support](docs/runtime-support.md) for the runtime compatibility matrix.
|
|
227
241
|
|
|
228
|
-
Version `2.0.
|
|
242
|
+
Version `2.0.10` 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.
|
|
229
243
|
|
|
230
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).
|
|
231
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/health.md
CHANGED
|
@@ -96,9 +96,15 @@ Automation status:
|
|
|
96
96
|
Trigger: /scr:health {flags}
|
|
97
97
|
Spawned agents:
|
|
98
98
|
- none
|
|
99
|
+
Candidate agents:
|
|
100
|
+
- none
|
|
99
101
|
Local operations:
|
|
100
102
|
- health checks run: {count}
|
|
101
103
|
- repairs applied: {count}
|
|
104
|
+
Candidate local helpers:
|
|
105
|
+
- /scr:scan or /scr:save when health detects repairable drift
|
|
106
|
+
Manual gates:
|
|
107
|
+
- repairs that require writer confirmation
|
|
102
108
|
Auto-invoked:
|
|
103
109
|
- none
|
|
104
110
|
Why: health uses deterministic local checks; non-deterministic repairs stay manual
|
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.10",
|
|
73
73
|
"work_type": "<chosen>",
|
|
74
74
|
"group": "<group>",
|
|
75
75
|
"command_unit": "<unit>",
|
package/commands/scr/next.md
CHANGED
|
@@ -134,9 +134,15 @@ Automation status:
|
|
|
134
134
|
Trigger: /scr:next
|
|
135
135
|
Spawned agents:
|
|
136
136
|
- none
|
|
137
|
+
Candidate agents:
|
|
138
|
+
- <recommended agent route or none>
|
|
137
139
|
Local operations:
|
|
138
140
|
- proactive sweep: read-only
|
|
139
141
|
- state route computed: yes/no
|
|
142
|
+
Candidate local helpers:
|
|
143
|
+
- <recommended helper or none>
|
|
144
|
+
Manual gates:
|
|
145
|
+
- <writer-owned route or none>
|
|
140
146
|
Auto-invoked:
|
|
141
147
|
- <recommended command>: yes/no
|
|
142
148
|
Why: /scr:next routes from disk state; it only runs follow-up commands under autopilot or explicit writer intent
|
package/commands/scr/progress.md
CHANGED
|
@@ -51,9 +51,15 @@ Automation status:
|
|
|
51
51
|
Trigger: /scr:progress
|
|
52
52
|
Spawned agents:
|
|
53
53
|
- none
|
|
54
|
+
Candidate agents:
|
|
55
|
+
- <recommended agent route or none>
|
|
54
56
|
Local operations:
|
|
55
57
|
- progress counts computed: yes/no
|
|
56
58
|
- proactive sweep: read-only
|
|
59
|
+
Candidate local helpers:
|
|
60
|
+
- <recommended helper or none>
|
|
61
|
+
Manual gates:
|
|
62
|
+
- <writer-owned route or none>
|
|
57
63
|
Auto-invoked:
|
|
58
64
|
- none
|
|
59
65
|
Why: progress is read-only; it recommends next commands without mutating files
|
package/commands/scr/save.md
CHANGED
|
@@ -80,11 +80,17 @@ Automation status:
|
|
|
80
80
|
Trigger: /scr:save
|
|
81
81
|
Spawned agents:
|
|
82
82
|
- none
|
|
83
|
+
Candidate agents:
|
|
84
|
+
- none
|
|
83
85
|
Local operations:
|
|
84
86
|
- STATE.md updated: yes/no
|
|
85
87
|
- CONTEXT.md regenerated: yes/no
|
|
86
88
|
- HISTORY.log appended: yes/no
|
|
87
89
|
- manuscript files saved: yes/no
|
|
90
|
+
Candidate local helpers:
|
|
91
|
+
- /scr:scan if saved state and disk still disagree
|
|
92
|
+
Manual gates:
|
|
93
|
+
- none
|
|
88
94
|
Auto-invoked:
|
|
89
95
|
- /scr:next route computed for CONTEXT.md: yes/no
|
|
90
96
|
Why: save uses deterministic local bookkeeping, not a spawned agent
|
package/commands/scr/scan.md
CHANGED
|
@@ -272,10 +272,16 @@ Automation status:
|
|
|
272
272
|
Trigger: /scr:scan {flags}
|
|
273
273
|
Spawned agents:
|
|
274
274
|
- none
|
|
275
|
+
Candidate agents:
|
|
276
|
+
- none
|
|
275
277
|
Local operations:
|
|
276
278
|
- drift checks run: {count}
|
|
277
279
|
- auto-fixes applied: {count}
|
|
278
280
|
- HISTORY.log appended: yes/no
|
|
281
|
+
Candidate local helpers:
|
|
282
|
+
- /scr:save if scan repairs changed state
|
|
283
|
+
Manual gates:
|
|
284
|
+
- fixes that require writer confirmation
|
|
279
285
|
Auto-invoked:
|
|
280
286
|
- none
|
|
281
287
|
Why: scan compares disk state locally; fixes require writer confirmation
|
|
@@ -66,9 +66,15 @@ Automation status:
|
|
|
66
66
|
Trigger: /scr:session-report
|
|
67
67
|
Spawned agents:
|
|
68
68
|
- none
|
|
69
|
+
Candidate agents:
|
|
70
|
+
- <recommended agent route or none>
|
|
69
71
|
Local operations:
|
|
70
72
|
- session metrics computed: yes/no
|
|
71
73
|
- quality pass summary computed: yes/no
|
|
74
|
+
Candidate local helpers:
|
|
75
|
+
- <recommended helper or none>
|
|
76
|
+
Manual gates:
|
|
77
|
+
- <writer-owned route or none>
|
|
72
78
|
Auto-invoked:
|
|
73
79
|
- none
|
|
74
80
|
Why: session-report summarizes disk state without mutating files
|
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:
|