sortie-dogs 0.13.7 → 0.13.8
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 +20 -8
- package/dist/asset-version.d.ts +1 -1
- package/dist/asset-version.js +1 -1
- package/dist/plugin/protected-snapshot.js +13 -10
- package/package.json +1 -1
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.
|
|
39
|
-
([release notes](docs/release-v0.13.
|
|
38
|
+
**Current release: [v0.13.8](https://github.com/zufall-upon/Sortie-dogs/releases/tag/v0.13.8)**
|
|
39
|
+
([release notes](docs/release-v0.13.8.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.
|
|
41
|
+
The current asset marker is `0.13.8-native-binding-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.
|
|
51
|
+
Historical scores below belong to their fixed candidates, not v0.13.8. 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,19 @@ 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.
|
|
96
|
+
## v0.13.8 runtime updates
|
|
97
|
+
|
|
98
|
+
PR #161 captures native validation bindings through the readable resolved target of a Windows
|
|
99
|
+
directory junction instead of enumerating its failing logical alias. Logical evidence labels,
|
|
100
|
+
link identity and complete target bytes remain bound; unchanged readable junctions retain their
|
|
101
|
+
evidence identity. External-link/cycle handling, actual source/output freshness and Review remain
|
|
102
|
+
unchanged. No new approval, permissions or model changes. The PR's isolated native Windows fixture
|
|
103
|
+
reached independent Review PASS and accepted completion after resuming the same Mission, without
|
|
104
|
+
rerunning its successful check; this does not claim original product recovery or uninterrupted
|
|
105
|
+
single-turn completion. Release receipts: `_testenv/releases/0.13.8/`;
|
|
106
|
+
see [release notes](docs/release-v0.13.8.md).
|
|
107
|
+
|
|
108
|
+
## v0.13.7 runtime updates (retained)
|
|
97
109
|
|
|
98
110
|
PRs #158/#159 prevent late write-only reports from falsely invalidating bound non-generating
|
|
99
111
|
native checks, while preserving actual source/output freshness, failed checks and legacy recipes.
|
|
@@ -436,7 +448,7 @@ register stable and `v010` from the same package installation path in one host.
|
|
|
436
448
|
Project-local installation is recommended. To expose the current Mission assets globally:
|
|
437
449
|
|
|
438
450
|
```sh
|
|
439
|
-
npm install --global sortie-dogs@0.13.
|
|
451
|
+
npm install --global sortie-dogs@0.13.8
|
|
440
452
|
sortie-dogs init --global --profile v010
|
|
441
453
|
```
|
|
442
454
|
|
|
@@ -448,7 +460,7 @@ can resolve a **separate dependency** under that config root. Updating npm-globa
|
|
|
448
460
|
it. For that layout, also install the same release at the actual config root, then rerun global init:
|
|
449
461
|
|
|
450
462
|
```sh
|
|
451
|
-
npm install --prefix "$HOME/.config/opencode" sortie-dogs@0.13.
|
|
463
|
+
npm install --prefix "$HOME/.config/opencode" sortie-dogs@0.13.8
|
|
452
464
|
sortie-dogs init --global --profile v010
|
|
453
465
|
```
|
|
454
466
|
|
|
@@ -471,7 +483,7 @@ version, preserves user configuration, and stops safely on unknown ownership or
|
|
|
471
483
|
conflicting files.
|
|
472
484
|
|
|
473
485
|
Align any exact version pin or separate bridge dependency with the intended release too. An installed
|
|
474
|
-
marker of `0.13.
|
|
486
|
+
marker of `0.13.8-native-binding-v1` identifies the assets; it does not prove an already-running
|
|
475
487
|
OpenCode process has reloaded the plugin.
|
|
476
488
|
|
|
477
489
|
There is no supported uninstall command. Remove the npm dependency separately,
|
package/dist/asset-version.d.ts
CHANGED
|
@@ -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.
|
|
6
|
+
export declare const V010_RUNTIME_ASSET_VERSION = "0.13.8-native-binding-v1";
|
|
7
7
|
export type RuntimeAssetVersion = typeof RUNTIME_ASSET_VERSION | typeof V010_RUNTIME_ASSET_VERSION;
|
package/dist/asset-version.js
CHANGED
|
@@ -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.
|
|
6
|
+
export const V010_RUNTIME_ASSET_VERSION = "0.13.8-native-binding-v1";
|
|
@@ -92,7 +92,7 @@ async function protectedScopeDigest(projectRoot, paths, manifestHash, sourcePoli
|
|
|
92
92
|
const entries = [];
|
|
93
93
|
const canonicalRoot = await realpath(projectRoot);
|
|
94
94
|
const scratchExcluded = binding ? snapshotScratchExclusion(binding) : () => false;
|
|
95
|
-
const visit = async (absolute, ancestors = new Set(), projectArtifacts = false) => {
|
|
95
|
+
const visit = async (absolute, ancestors = new Set(), projectArtifacts = false, physical = absolute) => {
|
|
96
96
|
if (excluded.some(root => !outside(root, absolute)))
|
|
97
97
|
return true;
|
|
98
98
|
if (scratchExcluded(absolute))
|
|
@@ -102,7 +102,7 @@ async function protectedScopeDigest(projectRoot, paths, manifestHash, sourcePoli
|
|
|
102
102
|
return false;
|
|
103
103
|
if ((sourcePolicy === "project-files-v1" || projectArtifacts) && isRuntimeControlPath(scoped))
|
|
104
104
|
return true;
|
|
105
|
-
const metadata = await lstat(
|
|
105
|
+
const metadata = await lstat(physical).catch((error) => {
|
|
106
106
|
if (error.code === "ENOENT")
|
|
107
107
|
return undefined;
|
|
108
108
|
throw error;
|
|
@@ -112,7 +112,7 @@ async function protectedScopeDigest(projectRoot, paths, manifestHash, sourcePoli
|
|
|
112
112
|
return true;
|
|
113
113
|
}
|
|
114
114
|
if (metadata.isSymbolicLink()) {
|
|
115
|
-
const target = await realpath(
|
|
115
|
+
const target = await realpath(physical).catch(() => undefined);
|
|
116
116
|
if (target === undefined)
|
|
117
117
|
return false;
|
|
118
118
|
const relativeTarget = relative(canonicalRoot, target);
|
|
@@ -120,13 +120,16 @@ async function protectedScopeDigest(projectRoot, paths, manifestHash, sourcePoli
|
|
|
120
120
|
ancestors.has(target))
|
|
121
121
|
return false;
|
|
122
122
|
const targetMetadata = await stat(target);
|
|
123
|
-
const link = await readlink(
|
|
123
|
+
const link = await readlink(physical);
|
|
124
124
|
if (targetMetadata.isDirectory()) {
|
|
125
125
|
// Keep the logical scope path and link target in the digest; do not follow external links or cycles.
|
|
126
126
|
entries.push([scoped, `symlink:${link}`]);
|
|
127
127
|
const next = new Set([...ancestors, target]);
|
|
128
|
-
|
|
129
|
-
|
|
128
|
+
// Windows compatibility junctions can deny enumeration through the alias while
|
|
129
|
+
// their resolved directory remains readable. Traverse the already resolved target.
|
|
130
|
+
// Retain logical entry labels so unchanged existing evidence keeps its identity.
|
|
131
|
+
for (const child of (await readdir(target)).sort())
|
|
132
|
+
if (!await visit(join(absolute, child), next, projectArtifacts, join(target, child)))
|
|
130
133
|
return false;
|
|
131
134
|
return true;
|
|
132
135
|
}
|
|
@@ -136,19 +139,19 @@ async function protectedScopeDigest(projectRoot, paths, manifestHash, sourcePoli
|
|
|
136
139
|
return true;
|
|
137
140
|
}
|
|
138
141
|
if (metadata.isDirectory()) {
|
|
139
|
-
const real = await realpath(
|
|
142
|
+
const real = await realpath(physical);
|
|
140
143
|
if (ancestors.has(real))
|
|
141
144
|
return false;
|
|
142
145
|
entries.push([scoped, "directory"]);
|
|
143
146
|
const next = new Set([...ancestors, real]);
|
|
144
|
-
for (const child of (await readdir(
|
|
145
|
-
if (!await visit(join(absolute, child), next, projectArtifacts))
|
|
147
|
+
for (const child of (await readdir(physical)).sort())
|
|
148
|
+
if (!await visit(join(absolute, child), next, projectArtifacts, join(physical, child)))
|
|
146
149
|
return false;
|
|
147
150
|
return true;
|
|
148
151
|
}
|
|
149
152
|
if (!metadata.isFile())
|
|
150
153
|
return false;
|
|
151
|
-
entries.push([scoped, "file", createHash("sha256").update(await readFile(
|
|
154
|
+
entries.push([scoped, "file", createHash("sha256").update(await readFile(physical)).digest("hex")]);
|
|
152
155
|
return true;
|
|
153
156
|
};
|
|
154
157
|
for (const path of [...new Set(paths)].sort()) {
|