sortie-dogs 0.13.5 → 0.13.6

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 CHANGED
@@ -35,10 +35,10 @@ implementation, validation, review, and model routing.
35
35
  Guides: [日本語](docs/guide-ja.md) · [简体中文](docs/guide-zh-CN.md) ·
36
36
  [Testing](docs/testing.md) · [CLI testing](docs/cli-testing.md)
37
37
 
38
- **Current release: [v0.13.5](https://github.com/zufall-upon/Sortie-dogs/releases/tag/v0.13.5)**
39
- ([release notes](docs/release-v0.13.5.md)). The default Mission runtime retains the `v010`
38
+ **Current release: [v0.13.6](https://github.com/zufall-upon/Sortie-dogs/releases/tag/v0.13.6)**
39
+ ([release notes](docs/release-v0.13.6.md)). The default Mission runtime retains the `v010`
40
40
  profile, command and configuration names for compatibility; these names do not mean v0.10 is installed.
41
- The current asset marker is `0.13.5-live-state-v1`.
41
+ The current asset marker is `0.13.6-acceptance-reuse-v1`.
42
42
 
43
43
  ## SWE-bench Lite: 170/300 (56.67%)
44
44
 
@@ -48,7 +48,7 @@ The fixed **Sortie-dogs v0.12.24** harness resolved **170 of 300 SWE-bench Lite
48
48
 
49
49
  The single official 300-instance report and frozen predictions are hash-bound in the report. Confirmed inference expense was **$162.99**; a separate **$34.60** of usage has unknown pricing and is held against the campaign cap, **not** counted as known expense. Leaderboard registration and maintainer acceptance are separate from this official local evaluation.
50
50
 
51
- Historical scores below belong to their fixed candidates, not v0.13.5. SWE-bench is a separate,
51
+ Historical scores below belong to their fixed candidates, not v0.13.6. SWE-bench is a separate,
52
52
  optional measurement rather than a mandatory release gate.
53
53
 
54
54
  > **Beta:** v0.13.x is still stabilizing. Runtime behavior,
@@ -93,7 +93,18 @@ existing local bridge loads enforcement and model routing. OpenCode can reload w
93
93
  but replacing an installed dependency may require a full restart. A new chat session alone does not
94
94
  prove the newly installed plugin is loaded.
95
95
 
96
- ## v0.13.5 runtime updates
96
+ ## v0.13.6 runtime updates
97
+
98
+ PR #156 references recorded formal PASS evidence in acceptance summaries instead of fetching
99
+ the same successful unit's native history again for display. Missing/failed proof retains history
100
+ diagnostics; historical evidence is not current freshness or acceptance. Identical external artifact
101
+ inventories are shared only inside one snapshot refresh, never across later calls. Operator guidance
102
+ proceeds to acceptance when current evidence covers the request and no concrete gap remains.
103
+ Existing freshness/review guards, provider/model selection and cache-prefix machinery remain unchanged.
104
+ No end-to-end speedup or live token/cache-hit improvement was measured. Release receipts:
105
+ `_testenv/releases/0.13.6/`; see [release notes](docs/release-v0.13.6.md).
106
+
107
+ ## v0.13.5 runtime updates (retained)
97
108
 
98
109
  PR #154 preserves stable model instructions and appends changed host state at native history
99
110
  boundaries, with complete current-state reconstruction after compaction. Genuine Reviewer tools
@@ -413,7 +424,7 @@ register stable and `v010` from the same package installation path in one host.
413
424
  Project-local installation is recommended. To expose the current Mission assets globally:
414
425
 
415
426
  ```sh
416
- npm install --global sortie-dogs@0.13.5
427
+ npm install --global sortie-dogs@0.13.6
417
428
  sortie-dogs init --global --profile v010
418
429
  ```
419
430
 
@@ -425,7 +436,7 @@ can resolve a **separate dependency** under that config root. Updating npm-globa
425
436
  it. For that layout, also install the same release at the actual config root, then rerun global init:
426
437
 
427
438
  ```sh
428
- npm install --prefix "$HOME/.config/opencode" sortie-dogs@0.13.5
439
+ npm install --prefix "$HOME/.config/opencode" sortie-dogs@0.13.6
429
440
  sortie-dogs init --global --profile v010
430
441
  ```
431
442
 
@@ -448,7 +459,7 @@ version, preserves user configuration, and stops safely on unknown ownership or
448
459
  conflicting files.
449
460
 
450
461
  Align any exact version pin or separate bridge dependency with the intended release too. An installed
451
- marker of `0.13.5-live-state-v1` identifies the assets; it does not prove an already-running
462
+ marker of `0.13.6-acceptance-reuse-v1` identifies the assets; it does not prove an already-running
452
463
  OpenCode process has reloaded the plugin.
453
464
 
454
465
  There is no supported uninstall command. Remove the npm dependency separately,
@@ -3,5 +3,5 @@
3
3
  * installed project marker without importing every asset body.
4
4
  */
5
5
  export declare const RUNTIME_ASSET_VERSION = "0.3.89-completion-proof-v1";
6
- export declare const V010_RUNTIME_ASSET_VERSION = "0.13.5-live-state-v1";
6
+ export declare const V010_RUNTIME_ASSET_VERSION = "0.13.6-acceptance-reuse-v1";
7
7
  export type RuntimeAssetVersion = typeof RUNTIME_ASSET_VERSION | typeof V010_RUNTIME_ASSET_VERSION;
@@ -3,4 +3,4 @@
3
3
  * installed project marker without importing every asset body.
4
4
  */
5
5
  export const RUNTIME_ASSET_VERSION = "0.3.89-completion-proof-v1";
6
- export const V010_RUNTIME_ASSET_VERSION = "0.13.5-live-state-v1";
6
+ export const V010_RUNTIME_ASSET_VERSION = "0.13.6-acceptance-reuse-v1";
@@ -534,6 +534,15 @@ export async function missionAcceptanceSummary(mission, run, operators, observe)
534
534
  const provenance = { run_id: item.state.runID, unit_id: unit.unit.id, worker_session_id: unit.childSessionID,
535
535
  state_archive_path: item.path, handoff_path: unit.handoffPath, historical: item.historical,
536
536
  authority: "native declared-command observations; not additional formal evidence or current freshness" };
537
+ // Settled proof already records these commands. Do not fetch the same native
538
+ // history again merely to render acceptance; freshness is checked separately.
539
+ const proofs = unit.evidence ?? [];
540
+ if (unit.status === "succeeded" && unit.unit.validation.every(command => proofs.some(proof => proof.execution.exit_code === 0 && proof.execution.outcome === "pass" &&
541
+ proof.execution.command.includes(command)))) {
542
+ return { ...provenance, status: "recorded-formal-evidence",
543
+ evidence_ids: proofs.map(proof => proof.evidence_id),
544
+ details_ref: { field: "formal_validation", run_id: item.state.runID, unit_id: unit.unit.id } };
545
+ }
537
546
  try {
538
547
  if (!observe || !unit.childSessionID)
539
548
  throw new Error("native-worker-history-unavailable");
@@ -164,13 +164,19 @@ function outside(projectRoot, path) {
164
164
  const scoped = relative(projectRoot, path).replaceAll("\\", "/");
165
165
  return scoped === ".." || scoped.startsWith("../") || isAbsolute(scoped);
166
166
  }
167
- async function declaredScopeDigest(projectRoot, paths, manifestHash, source, excluded = [], binding, candidatePolicy) {
167
+ async function declaredScopeDigest(projectRoot, paths, manifestHash, source, excluded = [], binding, candidatePolicy, artifactsMemo) {
168
168
  const local = paths.filter(path => !outside(projectRoot, path));
169
169
  const external = paths.filter(path => outside(projectRoot, path));
170
170
  const project = await protectedScopeDigest(projectRoot, local, manifestHash, source ? "project-files-v1" : undefined, excluded, binding, candidatePolicy);
171
171
  if (project === undefined)
172
172
  return undefined;
173
- const artifacts = await declaredArtifacts(external).catch(() => undefined);
173
+ const key = JSON.stringify(external);
174
+ let pending = artifactsMemo?.get(key);
175
+ if (!pending) {
176
+ pending = declaredArtifacts(external);
177
+ artifactsMemo?.set(key, pending);
178
+ }
179
+ const artifacts = await pending.catch(() => undefined);
174
180
  return artifacts && goalFingerprint({ project, external: artifacts.entries.filter(([path]) => !excluded.some(root => !outside(root, path))) });
175
181
  }
176
182
  /** An existing operation may create its declared outputs. Compare its other inputs during execution;
@@ -274,8 +280,11 @@ export async function refreshProtectedSnapshot(projectRoot, binding) {
274
280
  }
275
281
  }
276
282
  if (binding.source_policy === "declared-paths-v1") {
277
- const source = await declaredScopeDigest(projectRoot, sourcePaths, manifestHash, true, [], binding);
278
- const candidate = await declaredScopeDigest(projectRoot, candidatePaths, manifestHash, false, [], binding, binding.candidate_policy);
283
+ // Reuse identical external inventories only inside this read-only refresh.
284
+ // A later status/completion call always observes filesystem changes anew.
285
+ const artifactsMemo = new Map();
286
+ const source = await declaredScopeDigest(projectRoot, sourcePaths, manifestHash, true, [], binding, undefined, artifactsMemo);
287
+ const candidate = await declaredScopeDigest(projectRoot, candidatePaths, manifestHash, false, [], binding, binding.candidate_policy, artifactsMemo);
279
288
  return source === undefined || candidate === undefined ? undefined : { source, candidate };
280
289
  }
281
290
  // Legacy evidence retains its original recipe; a new policy cannot relabel stale proof as fresh.
@@ -162,8 +162,8 @@ quality threshold and explicit model/budget choice. Follow AGENTS.md and use the
162
162
  For a Coordinator ready candidate, use operator_status's acceptance_summary: verbatim original
163
163
  requests, anchored cumulative formal validation, current review disposition (author self-recheck
164
164
  is not independent approval) and recorded delivery state.
165
- Historical results are references, not current freshness PASS. Inspect source or evidence only for
166
- concrete unresolved gaps; do not routinely search run archives or reread every source/test file.
165
+ If current evidence covers the request and no concrete gap remains, proceed to acceptance.
166
+ Historical results are not current freshness PASS; read source or artifacts only to resolve a gap.
167
167
  Existing validation freshness and Review guards still apply; this summary does not accept the mission.
168
168
  One compact status check can lead directly to review_mission and its returned Reviewer Task; original
169
169
  requests, diff and checks are supplied automatically. Add traces only for concrete extra information.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sortie-dogs",
3
- "version": "0.13.5",
3
+ "version": "0.13.6",
4
4
  "description": "Bounded agent harness and validated orchestration loop plugin for OpenCode",
5
5
  "keywords": [
6
6
  "opencode",