snipara-companion 4.2.3 → 4.2.4

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,10 @@
2
2
 
3
3
  Release notes for `snipara-companion`, newest first.
4
4
 
5
+ ## 4.2.4
6
+
7
+ - Keep routine Team Sync handoffs and status reads continuity-only, preventing repeated handoffs from adding durable pending memories. Preserve explicit durable Why Capture and phase/final decisions.
8
+
5
9
  ## 4.2.3
6
10
 
7
11
  - Skip hosted routing-policy discovery for ordinary LITE workflows; preserve explicit routing, active local policy and Orchestrator handoff requests.
package/dist/index.js CHANGED
@@ -19675,25 +19675,6 @@ function readStandaloneCommitEvidence(cwd, commitSha, additionalFiles = []) {
19675
19675
  );
19676
19676
  return { commitSha, summary, files };
19677
19677
  }
19678
- function readLatestWorkflowCommands(cwd) {
19679
- try {
19680
- const state = JSON.parse(
19681
- fs22.readFileSync(path21.join(cwd, ".snipara", "workflow", "current.json"), "utf8")
19682
- );
19683
- const bindings = state.runtime?.sandbox?.bindings ?? [];
19684
- for (let index = bindings.length - 1; index >= 0; index -= 1) {
19685
- const commands = bindings[index]?.lastCheckpoint?.commands;
19686
- if (Array.isArray(commands)) {
19687
- return boundedUnique(
19688
- commands.filter((command2) => typeof command2 === "string"),
19689
- 20
19690
- );
19691
- }
19692
- }
19693
- } catch {
19694
- }
19695
- return [];
19696
- }
19697
19678
  async function captureStandaloneCommitWhy(input) {
19698
19679
  const baseReceipt = {
19699
19680
  sourceKind: "commit",
@@ -19780,6 +19761,9 @@ async function captureCompanionWhy(input) {
19780
19761
  failed: [],
19781
19762
  ...commitSha ? { commitSha } : {}
19782
19763
  };
19764
+ if (input.sourceKind === "handoff" && !input.why?.trim()) {
19765
+ return { ...baseReceipt, status: "skipped", error: "continuity_only" };
19766
+ }
19783
19767
  if (!loadConfig({ cwd }).apiKey) {
19784
19768
  return { ...baseReceipt, status: "skipped" };
19785
19769
  }
@@ -26430,8 +26414,7 @@ async function createTeamSyncHandoffPayload(rootDir, options) {
26430
26414
  sourceSessionId: record9.id,
26431
26415
  task: summary.latestActiveWork?.summary ?? record9.summary,
26432
26416
  summary: [record9.summary, record9.next ? `Next: ${record9.next}` : void 0].filter(Boolean).join("\n"),
26433
- files: record9.files,
26434
- commands: readLatestWorkflowCommands(rootDir)
26417
+ files: record9.files
26435
26418
  });
26436
26419
  appendActivityEvent({
26437
26420
  cwd: rootDir,
@@ -7,20 +7,24 @@ behavior and make no mandatory context calls.
7
7
  ```json
8
8
  {
9
9
  "goal": "Implement a bounded change",
10
- "steps": [{
11
- "id": "implementation",
12
- "tasks": [{
13
- "id": "update-service",
14
- "query": "Implement the reviewed service contract",
15
- "files": ["src/service.ts"],
16
- "contextRequest": {
17
- "queries": ["service contract error behavior"],
18
- "maxTokens": 4000,
19
- "maxChunks": 8,
20
- "timeoutMs": 30000
21
- }
22
- }]
23
- }]
10
+ "steps": [
11
+ {
12
+ "id": "implementation",
13
+ "tasks": [
14
+ {
15
+ "id": "update-service",
16
+ "query": "Implement the reviewed service contract",
17
+ "files": ["src/service.ts"],
18
+ "contextRequest": {
19
+ "queries": ["service contract error behavior"],
20
+ "maxTokens": 4000,
21
+ "maxChunks": 8,
22
+ "timeoutMs": 30000
23
+ }
24
+ }
25
+ ]
26
+ }
27
+ ]
24
28
  }
25
29
  ```
26
30
 
@@ -93,3 +97,49 @@ This is not a cross-process lock or an atomic compare-and-swap guarantee.
93
97
  Controller/native-runtime injection, independently authenticated reviewers,
94
98
  complete objective acceptance and the consolidated evidence dossier remain
95
99
  separate contracts and qualification steps.
100
+
101
+ ## English procedural questions and bounded recovery
102
+
103
+ Use the original task plus two to four concrete English facets for maintained
104
+ English documentation. Preserve exact client names, identifiers, paths and
105
+ versions. The existing `context_query` operation carries those facets within one
106
+ context budget; it does not require a new planner or translation service:
107
+
108
+ ```json
109
+ {
110
+ "contextRequest": {
111
+ "maxTokens": 4000,
112
+ "maxChunks": 8,
113
+ "timeoutMs": 30000,
114
+ "operation": {
115
+ "action": "context_query",
116
+ "params": {
117
+ "query": "What current backup procedure applies to this project?",
118
+ "retrieval_queries": [
119
+ "current backup destinations reviewed owner decision",
120
+ "backup prerequisites retention restore verification constraints"
121
+ ],
122
+ "auto_decompose": false,
123
+ "include_all_tiers": false
124
+ },
125
+ "bindings": {}
126
+ }
127
+ }
128
+ }
129
+ ```
130
+
131
+ The task loader already fetches exact cited chunks and rejects missing,
132
+ truncated, mismatched or over-budget material. It does not secretly retry or
133
+ weaken that contract. An assistant can perform one narrow keyword recovery
134
+ before freezing a request, or explicitly revise a failed request for a fresh
135
+ attempt. Use three to eight terms, `max_tokens=800`, references enabled,
136
+ `search_mode="keyword"`, `auto_decompose=false` and `include_all_tiers=false`.
137
+ No repeated fanout until a favorable answer appears.
138
+
139
+ Retirement banners, canonical replacements, negative constraints and missing
140
+ prerequisites remain relevant even when a child section looks complete. Source
141
+ quality is not evidence that a procedure applies to an unknown client. Preserve
142
+ insufficient-evidence results rather than assigning generic project hosting to
143
+ that client. Journal storage is continuity; task-summary proposals await review.
144
+ A previously saved PASS describes its original source and receipt identity,
145
+ not the current checkout. State which checks actually ran and which are planned.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snipara-companion",
3
- "version": "4.2.3",
3
+ "version": "4.2.4",
4
4
  "description": "Local-first CLI that asks your repo what breaks before an AI coding agent edits it.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {