snipara-companion 3.2.30 → 3.2.31

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
@@ -2,6 +2,18 @@
2
2
 
3
3
  Release notes for `snipara-companion`, newest first.
4
4
 
5
+ ## New In 3.2.31
6
+
7
+ - Sends phase commits, final commits, and Team Sync handoffs to project-scoped
8
+ Why Capture with the existing goal, summary, files, verification commands,
9
+ session reference, and commit SHA.
10
+ - Preserves reviewed-memory governance with an automatic read-only preview
11
+ followed by confirmation only when durable rationale candidates exist; filed
12
+ candidates remain `PENDING` in the review queue.
13
+ - Keeps capture best-effort and observable in JSON receipts and the activity
14
+ timeline, so a Why Capture outage never rolls back a completed workflow or
15
+ handoff and never introduces a documentation prompt.
16
+
5
17
  ## New In 3.2.30
6
18
 
7
19
  - Persists an explicit `--ack-review-only` as a 15-minute, one-use
package/README.md CHANGED
@@ -359,3 +359,9 @@ Launch assets, demo scripts, and post drafts live in
359
359
  [docs/launch/LAUNCH_KIT.md](./docs/launch/LAUNCH_KIT.md).
360
360
 
361
361
  Release notes live in [CHANGELOG.md](./CHANGELOG.md).
362
+ When project auth is configured, `workflow phase-commit`, `final-commit`, and
363
+ `team-sync handoff` also run reviewed Why Capture. The Companion first sends a
364
+ read-only preview and confirms only when the server detects durable rationale.
365
+ Confirmed candidates enter the pending review queue; capture failures remain
366
+ visible but do not block the primary workflow command. No documentation prompt
367
+ is shown.
package/dist/index.d.ts CHANGED
@@ -441,6 +441,27 @@ interface SessionPersistResult {
441
441
  session_id: string;
442
442
  files_tracked: number;
443
443
  }
444
+ type WhyCaptureSourceKind = "phase_commit" | "final_commit" | "handoff";
445
+ interface WhyCaptureInput {
446
+ decision?: string;
447
+ why?: string;
448
+ rationale?: string;
449
+ sourceText?: string;
450
+ sourceKind: WhyCaptureSourceKind;
451
+ sourceSessionId?: string;
452
+ task?: string;
453
+ changedFiles?: string[];
454
+ commands?: string[];
455
+ commitSha?: string;
456
+ confirmed?: boolean;
457
+ previewOnly?: boolean;
458
+ }
459
+ interface WhyCaptureResult {
460
+ previewOnly: boolean;
461
+ confirmed: boolean;
462
+ candidateCount: number;
463
+ capturedCount?: number;
464
+ }
444
465
  interface JournalAppendResult {
445
466
  success?: boolean;
446
467
  date?: string;
@@ -1273,6 +1294,7 @@ declare class RLMClient {
1273
1294
  payload?: Record<string, unknown>;
1274
1295
  }): Promise<EmitEventResult>;
1275
1296
  recordAdvisorInfluenceReceipt(input: RecordAdvisorInfluenceReceiptInput): Promise<RecordAdvisorInfluenceReceiptResult>;
1297
+ captureWhy(input: WhyCaptureInput): Promise<WhyCaptureResult>;
1276
1298
  getAutomationEvents(args?: {
1277
1299
  sessionId?: string;
1278
1300
  limit?: number;