@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 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 close-session --root .compass --session auth-flow --title "Auth Flow" --completed "Built auth" --next-step "Review"
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
- # Architecture docs review
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibecompass/vibecompass",
3
- "version": "0.10.5",
3
+ "version": "0.10.7",
4
4
  "description": "Local-first project-memory core for VibeCompass",
5
5
  "type": "module",
6
6
  "bin": {
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> --next-step <text> [options]',
1518
- ' vibecompass end-session --title <text> --completed <text> --next-step <text> [options] # alias',
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
  '',