@vibecompass/vibecompass 0.10.5 → 0.10.7
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/CHANGELOG.md +16 -0
- package/README.md +7 -2
- package/package.json +1 -1
- package/src/cli.js +104 -2
- package/src/docs-update.js +538 -0
- package/src/index.js +1 -0
- package/src/init.js +9 -2
- package/src/project-memory.js +27 -0
- package/src/scaffold.js +29 -6
- package/src/session.js +134 -0
- package/src/status.js +91 -2
- package/src/workflow.js +1 -0
- package/src/workflows/registry.js +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 0.10.7 - 2026-06-25
|
|
6
|
+
|
|
7
|
+
- Let `connect-hosted` attach hosted sync to existing `local-only` project-memory roots by promoting them to `local-primary`, so local-only users can run the hosted setup command copied from the app without first editing `project.yaml`.
|
|
8
|
+
- Print the mode promotion in CLI output and preserve existing `local-primary` / `hosted-only` behavior.
|
|
9
|
+
- Cover hosted-only passthrough, local-only promotion, and named-target promotion with CLI regression tests.
|
|
10
|
+
|
|
11
|
+
## 0.10.6 - 2026-06-22
|
|
12
|
+
|
|
13
|
+
- Add `docs-update` as a session-delta documentation maintenance planner that maps changed files, lane claims, session repos/features, new decisions, and package-owned generated/state surfaces to targeted architecture/decision/session follow-up.
|
|
14
|
+
- Print the same docs-update plan during `close-session` / `end-session` before the required document-maintenance checkpoint, while keeping semantic document authorship with the closing agent or human.
|
|
15
|
+
- Breaking: `close-session` / `end-session` and the `closeProjectSession` API now require document-maintenance checkpoint statuses for architecture docs, the decision log, and session handoff/scratch maintenance before a lane can be finalized.
|
|
16
|
+
- Surface shared docs-review architecture quality warnings for missing review metadata, evidence, blindspots, retrieval guidance, and repo scope in scanner/status output.
|
|
17
|
+
- Refresh `state/manifest.json.active_sessions` after session start, switch, and close commands so package-managed roots do not keep stale active-lane summaries.
|
|
18
|
+
|
|
3
19
|
## 0.10.5 - 2026-06-20
|
|
4
20
|
|
|
5
21
|
- Include compact docs-review evidence summaries in hosted review submissions, covering coverage score basis, source-inventory totals, documentation-plan totals, reconciliation deltas, producer stamps, and warning provenance.
|
package/README.md
CHANGED
|
@@ -113,6 +113,9 @@ npx -y @vibecompass/vibecompass@latest close-session \
|
|
|
113
113
|
--session feature-lane \
|
|
114
114
|
--title "Feature Lane" \
|
|
115
115
|
--completed "Shipped the slice" \
|
|
116
|
+
--architecture-docs updated \
|
|
117
|
+
--decision-log not-needed \
|
|
118
|
+
--session-maintenance updated \
|
|
116
119
|
--next-step "Review and publish"
|
|
117
120
|
```
|
|
118
121
|
|
|
@@ -127,12 +130,14 @@ npx -y @vibecompass/vibecompass@latest status --root .compass
|
|
|
127
130
|
npx -y @vibecompass/vibecompass@latest start-session --root .compass --id auth-flow --working-on "Auth flow"
|
|
128
131
|
npx -y @vibecompass/vibecompass@latest list-sessions --root .compass
|
|
129
132
|
npx -y @vibecompass/vibecompass@latest switch-session auth-flow --root .compass
|
|
130
|
-
npx -y @vibecompass/vibecompass@latest
|
|
133
|
+
npx -y @vibecompass/vibecompass@latest docs-update --root .compass --session auth-flow
|
|
134
|
+
npx -y @vibecompass/vibecompass@latest close-session --root .compass --session auth-flow --title "Auth Flow" --completed "Built auth" --architecture-docs updated --decision-log not-needed --session-maintenance updated --next-step "Review"
|
|
131
135
|
|
|
132
136
|
# Agent instruction files
|
|
133
137
|
npx -y @vibecompass/vibecompass@latest sync-agents --root .compass
|
|
134
138
|
|
|
135
|
-
#
|
|
139
|
+
# Targeted and comprehensive architecture docs maintenance
|
|
140
|
+
npx -y @vibecompass/vibecompass@latest docs-update --root .compass --session auth-flow --changed app:src/auth/login.ts
|
|
136
141
|
npx -y @vibecompass/vibecompass@latest docs-review --root .compass --guided
|
|
137
142
|
npx -y @vibecompass/vibecompass@latest docs-review --root .compass --guided --source-root app=../app
|
|
138
143
|
npx -y @vibecompass/vibecompass@latest docs-review --root .compass --apply-output
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -4,6 +4,7 @@ import { realpathSync } from 'node:fs';
|
|
|
4
4
|
import { pathToFileURL } from 'node:url';
|
|
5
5
|
import { connectHostedProjectMemory, initializeProjectMemory, setDefaultSyncTarget } from './init.js';
|
|
6
6
|
import { preflightDocsReview } from './docs-review.js';
|
|
7
|
+
import { planDocsUpdate, renderDocsUpdatePlan } from './docs-update.js';
|
|
7
8
|
import { resolveConnectHostedCliOptions, resolveInitCliOptions } from './setup.js';
|
|
8
9
|
import { closeProjectSession, listProjectSessions, startProjectSession, switchProjectSession } from './session.js';
|
|
9
10
|
import { syncAgentInstructionFiles } from './generators/agent-files/index.js';
|
|
@@ -146,6 +147,9 @@ export async function runCli(argv, io = createDefaultIo(), runtime = {}) {
|
|
|
146
147
|
...(runtime.cwd ? { cwd: runtime.cwd } : {}),
|
|
147
148
|
});
|
|
148
149
|
io.stdout.write(`Connected hosted VibeCompass for ${result.mode}\n`);
|
|
150
|
+
if (result.modeChanged) {
|
|
151
|
+
io.stdout.write(`Project mode: ${result.previousMode} -> ${result.mode}\n`);
|
|
152
|
+
}
|
|
149
153
|
io.stdout.write(`Updated ${result.projectFilePath}\n`);
|
|
150
154
|
if (result.syncTarget) {
|
|
151
155
|
io.stdout.write(`Sync target: ${result.syncTarget.name} (default: ${result.syncTarget.defaultTarget})\n`);
|
|
@@ -205,6 +209,20 @@ export async function runCli(argv, io = createDefaultIo(), runtime = {}) {
|
|
|
205
209
|
return 0;
|
|
206
210
|
}
|
|
207
211
|
|
|
212
|
+
if (parsed.command === 'docs-update') {
|
|
213
|
+
await writeCompatibilityPreflightWarnings(io, parsed.options, runtime);
|
|
214
|
+
const result = await planDocsUpdate({
|
|
215
|
+
...parsed.options,
|
|
216
|
+
...(runtime.cwd ? { cwd: runtime.cwd } : {}),
|
|
217
|
+
});
|
|
218
|
+
if (parsed.options.json) {
|
|
219
|
+
io.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
220
|
+
} else {
|
|
221
|
+
io.stdout.write(renderDocsUpdatePlan(result));
|
|
222
|
+
}
|
|
223
|
+
return 0;
|
|
224
|
+
}
|
|
225
|
+
|
|
208
226
|
if (parsed.command === 'close-session' || parsed.command === 'end-session') {
|
|
209
227
|
await writeCompatibilityPreflightWarnings(io, parsed.options, runtime);
|
|
210
228
|
const result = await closeProjectSession({
|
|
@@ -214,12 +232,17 @@ export async function runCli(argv, io = createDefaultIo(), runtime = {}) {
|
|
|
214
232
|
io.stdout.write(`Closed session ${result.sessionDate}-${result.sessionNumber}\n`);
|
|
215
233
|
io.stdout.write(`Wrote ${result.sessionFilePath}\n`);
|
|
216
234
|
io.stdout.write(`Updated ${result.claudePath}\n`);
|
|
235
|
+
if (result.docsUpdatePlan) {
|
|
236
|
+
io.stdout.write(renderDocsUpdatePlan(result.docsUpdatePlan));
|
|
237
|
+
}
|
|
238
|
+
writeDocumentMaintenanceCheckpoint(io, result.documentMaintenance);
|
|
217
239
|
if (result.workflowGuidance.length > 0) {
|
|
218
240
|
io.stdout.write('Workflow guidance:\n');
|
|
219
241
|
for (const item of result.workflowGuidance) {
|
|
220
242
|
io.stdout.write(`- ${item}\n`);
|
|
221
243
|
}
|
|
222
244
|
}
|
|
245
|
+
writeWarnings(io, result.warnings);
|
|
223
246
|
writeAgentFileSyncResult(io, result.agentFileSync);
|
|
224
247
|
return 0;
|
|
225
248
|
}
|
|
@@ -250,6 +273,7 @@ export async function runCli(argv, io = createDefaultIo(), runtime = {}) {
|
|
|
250
273
|
});
|
|
251
274
|
io.stdout.write(`Current session lane: ${result.current}\n`);
|
|
252
275
|
io.stdout.write(`Updated ${result.claudePath}\n`);
|
|
276
|
+
writeWarnings(io, result.warnings);
|
|
253
277
|
writeAgentFileSyncResult(io, result.agentFileSync);
|
|
254
278
|
return 0;
|
|
255
279
|
}
|
|
@@ -457,6 +481,10 @@ export function parseCliArgs(argv) {
|
|
|
457
481
|
return parseRefreshWorkflowArgs(rest);
|
|
458
482
|
}
|
|
459
483
|
|
|
484
|
+
if (command === 'docs-update') {
|
|
485
|
+
return parseDocsUpdateArgs(rest);
|
|
486
|
+
}
|
|
487
|
+
|
|
460
488
|
if (command === 'close-session' || command === 'end-session') {
|
|
461
489
|
return parseCloseSessionArgs(rest);
|
|
462
490
|
}
|
|
@@ -896,6 +924,7 @@ function parseCloseSessionArgs(argv) {
|
|
|
896
924
|
models: [],
|
|
897
925
|
blockers: [],
|
|
898
926
|
nextSteps: [],
|
|
927
|
+
documentMaintenance: {},
|
|
899
928
|
};
|
|
900
929
|
// Repeatable CLI flags stay singular for readability, but map to plural arrays in the JS API.
|
|
901
930
|
|
|
@@ -949,6 +978,15 @@ function parseCloseSessionArgs(argv) {
|
|
|
949
978
|
case '--next-session-should':
|
|
950
979
|
parsed.nextSessionShould = value;
|
|
951
980
|
break;
|
|
981
|
+
case '--architecture-docs':
|
|
982
|
+
parsed.documentMaintenance.architectureDocs = value;
|
|
983
|
+
break;
|
|
984
|
+
case '--decision-log':
|
|
985
|
+
parsed.documentMaintenance.decisionLog = value;
|
|
986
|
+
break;
|
|
987
|
+
case '--session-maintenance':
|
|
988
|
+
parsed.documentMaintenance.sessionMaintenance = value;
|
|
989
|
+
break;
|
|
952
990
|
default:
|
|
953
991
|
throw new Error(`Unknown flag "${token}".`);
|
|
954
992
|
}
|
|
@@ -960,6 +998,49 @@ function parseCloseSessionArgs(argv) {
|
|
|
960
998
|
};
|
|
961
999
|
}
|
|
962
1000
|
|
|
1001
|
+
function parseDocsUpdateArgs(argv) {
|
|
1002
|
+
const parsed = {
|
|
1003
|
+
changedFiles: [],
|
|
1004
|
+
};
|
|
1005
|
+
|
|
1006
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
1007
|
+
const token = argv[index];
|
|
1008
|
+
if (token === '--json') {
|
|
1009
|
+
parsed.json = true;
|
|
1010
|
+
continue;
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
if (!token.startsWith('--')) {
|
|
1014
|
+
throw new Error(`Unexpected argument "${token}".`);
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
const value = argv[index + 1];
|
|
1018
|
+
if (value === undefined) {
|
|
1019
|
+
throw new Error(`Flag "${token}" requires a value.`);
|
|
1020
|
+
}
|
|
1021
|
+
index += 1;
|
|
1022
|
+
|
|
1023
|
+
switch (token) {
|
|
1024
|
+
case '--root':
|
|
1025
|
+
parsed.rootDir = value;
|
|
1026
|
+
break;
|
|
1027
|
+
case '--session':
|
|
1028
|
+
parsed.sessionId = value;
|
|
1029
|
+
break;
|
|
1030
|
+
case '--changed':
|
|
1031
|
+
parsed.changedFiles.push(value);
|
|
1032
|
+
break;
|
|
1033
|
+
default:
|
|
1034
|
+
throw new Error(`Unknown flag "${token}".`);
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
return {
|
|
1039
|
+
command: 'docs-update',
|
|
1040
|
+
options: parsed,
|
|
1041
|
+
};
|
|
1042
|
+
}
|
|
1043
|
+
|
|
963
1044
|
function parseListSessionsArgs(argv) {
|
|
964
1045
|
const parsed = {};
|
|
965
1046
|
|
|
@@ -1464,6 +1545,17 @@ function writeRefreshWorkflowResult(io, result) {
|
|
|
1464
1545
|
writeAgentFileSyncResult(io, result.agentFileSync);
|
|
1465
1546
|
}
|
|
1466
1547
|
|
|
1548
|
+
function writeDocumentMaintenanceCheckpoint(io, documentMaintenance) {
|
|
1549
|
+
if (!documentMaintenance) {
|
|
1550
|
+
return;
|
|
1551
|
+
}
|
|
1552
|
+
|
|
1553
|
+
io.stdout.write('Document maintenance checkpoint:\n');
|
|
1554
|
+
io.stdout.write(`- Architecture docs: ${documentMaintenance.architectureDocs}\n`);
|
|
1555
|
+
io.stdout.write(`- Decision log: ${documentMaintenance.decisionLog}\n`);
|
|
1556
|
+
io.stdout.write(`- Session handoff/scratch: ${documentMaintenance.sessionMaintenance}\n`);
|
|
1557
|
+
}
|
|
1558
|
+
|
|
1467
1559
|
async function writeCompatibilityPreflightWarnings(io, options = {}, runtime = {}) {
|
|
1468
1560
|
const result = await inspectProjectCompatibility({
|
|
1469
1561
|
...options,
|
|
@@ -1513,9 +1605,10 @@ function usageText() {
|
|
|
1513
1605
|
' vibecompass sync-target [<name>] [options]',
|
|
1514
1606
|
' vibecompass status [options]',
|
|
1515
1607
|
' vibecompass refresh-workflow [--dry-run|--apply] [options]',
|
|
1608
|
+
' vibecompass docs-update [--session <lane-id>] [options]',
|
|
1516
1609
|
' vibecompass start-session --id <lane-id> --working-on <text> [options]',
|
|
1517
|
-
' vibecompass close-session --title <text> --completed <text> --
|
|
1518
|
-
' vibecompass end-session --title <text> --completed <text> --
|
|
1610
|
+
' vibecompass close-session --title <text> --completed <text> --architecture-docs <status> --decision-log <status> --session-maintenance <status> [options]',
|
|
1611
|
+
' vibecompass end-session --title <text> --completed <text> --architecture-docs <status> --decision-log <status> --session-maintenance <status> [options] # alias',
|
|
1519
1612
|
' vibecompass list-sessions [options]',
|
|
1520
1613
|
' vibecompass switch-session <id> [options]',
|
|
1521
1614
|
' vibecompass sync-agents [options]',
|
|
@@ -1578,6 +1671,12 @@ function usageText() {
|
|
|
1578
1671
|
' --update-package-stamp Update an existing project.yaml package_version stamp',
|
|
1579
1672
|
' --allow-downgrade-templates Allow applying templates with a CLI older than the root stamp',
|
|
1580
1673
|
'',
|
|
1674
|
+
'Docs-update options:',
|
|
1675
|
+
' --root <path> Project-memory root. Defaults to .compass',
|
|
1676
|
+
' --session <lane-id> Active session lane to inspect; defaults to current lane',
|
|
1677
|
+
' --changed <repo:path|path> Repeatable explicit changed path; defaults to git status when omitted',
|
|
1678
|
+
' --json Print the typed docs-update plan as JSON',
|
|
1679
|
+
'',
|
|
1581
1680
|
'Start-session options:',
|
|
1582
1681
|
' --root <path> Project-memory root. Defaults to .compass',
|
|
1583
1682
|
' --tooling-root <path> Tooling root that contains CLAUDE.md. Defaults to cwd',
|
|
@@ -1602,6 +1701,9 @@ function usageText() {
|
|
|
1602
1701
|
' --model <text> Optional repeatable model contribution entry',
|
|
1603
1702
|
' --blocker <text> Repeatable blocker or open question',
|
|
1604
1703
|
' --next-step <text> Repeatable next-session step',
|
|
1704
|
+
' --architecture-docs <status> Required checkpoint: updated|not-needed|deferred',
|
|
1705
|
+
' --decision-log <status> Required checkpoint: updated|not-needed|deferred',
|
|
1706
|
+
' --session-maintenance <status> Required checkpoint: updated|not-needed|deferred',
|
|
1605
1707
|
' --last-thing-completed <text> Optional override for the CLAUDE.md completed summary',
|
|
1606
1708
|
' --next-session-should <text> Optional override for the CLAUDE.md next-session summary',
|
|
1607
1709
|
'',
|