Commit 7ca3655
committed
fix(stage1): five review defects in identity, classification and PS semantics
Verified each against primary source before touching it; all five were real.
D1 — a relative OWEN_RUST_CORE was accepted by all three independent
implementations. `Path.GetFullPath` reads as "it resolves the path for me",
and it does: against whatever directory Owen happened to run in, so the same
configuration would select different binaries from different places. That is
the ambient resolution D3 exists to forbid. Now rejected up front, exit 2,
naming the requirement. The shell test accepts the absolute forms this surface
actually receives — the MSYS `/d/a/...` CI passes, `C:\...`, `C:/...`, UNC —
because a bare `/*` glob would turn a correct Windows configuration into a
usage error; it converts between none of them, as D3 ratified a locator and
not a path-translation policy. action.yml is not a fourth implementation: it
delegates, and the control proves the forwarding.
D2 — the compare verdict was inferred as `childExitCode is null && py is not
null && rs is not null ? "divergence" : "execution-failure"`. `child_exit_code`
is the D5 RUST-child carrier, so a Python-only bad exit left it null with both
outcomes present and stamped "divergence" onto evidence whose own diagnostic
beside it said "execution failure". The classification is now passed by the
call site, which is the only place that knows. The external vocabulary is
unchanged — agreement / divergence / execution-failure — because a new
serialized value is a contract the project would owe support for forever.
D3 — own-check.ps1 never mapped a spawn failure to exit 2, and its comment
asserted the opposite of D3.1 ("maps to the internal-error path"). A candidate
that never started is on the locator's side of the seam. Both engine paths now
catch it, and the comment says what the code does.
D4 — ps1 agreement replayed through `Get-Content -Raw | Write-Output`, a
decode-and-re-encode, and emitted no stderr at all. It now replays the
reference's raw bytes on both streams, as C# and own-check.sh do. Implemented
for the contract, not for today's statistics: CRLF-vs-LF makes agreement rare
on Windows now, but a replay that is wrong only when it finally runs is worse
than none.
D5 — ps1 named $cmpDir as reproduction evidence and then deleted it in
`finally`. Pointing a reader at a path and shredding it on the way out is
worse than naming nothing. The directory now survives an execution failure,
as it already did a divergence.
A SIXTH defect, found while proving D4 and fixed with it: `Start-Process
-RedirectStandardOutput` is not byte-faithful. Measured on one input, the
Python reference wrote 211 bytes and the redirected file held 210 — a blank
line silently dropped. Compare claims the engines' public BYTES are identical,
so a lossy capture of the reference can manufacture a divergence that does not
exist or hide one that does; an agreement reached over a corrupted capture is
not an agreement. ps1 now drains both pipes as byte streams, concurrently, the
way the C# launcher does. Fixing only the replay would have left the mechanism
broken underneath it.
Evidence. `tests/helpers/stage1_stub.rs` is a committed, controllable native
candidate compiled with plain `rustc` — no cargo crate, so #261's crate-edge
DAG gate is untouched. It replaces the shebang stubs, which were Unix-only and
had forced four compare controls to be declared not-applicable on Windows: that
gap is why three PowerShell defects survived a 16/16 campaign. All seventeen
shared controls now run on both platforms with zero N/A, and
`tests/test_stage1_ps1.py` adds the PowerShell surface to the adversarial set.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYLNQy6tLXqsV1CbuNqsSb1 parent 2d6e43a commit 7ca3655
11 files changed
Lines changed: 1070 additions & 69 deletions
File tree
- .github/workflows
- docs/evidence
- frontend/roslyn/OwnSharp.Cli
- scripts
- tests
- helpers
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
154 | 154 | | |
155 | 155 | | |
156 | 156 | | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
157 | 165 | | |
158 | 166 | | |
159 | 167 | | |
| |||
164 | 172 | | |
165 | 173 | | |
166 | 174 | | |
167 | | - | |
| 175 | + | |
168 | 176 | | |
169 | 177 | | |
170 | 178 | | |
171 | 179 | | |
172 | 180 | | |
173 | 181 | | |
174 | 182 | | |
| 183 | + | |
175 | 184 | | |
176 | 185 | | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
177 | 199 | | |
178 | 200 | | |
179 | 201 | | |
| |||
225 | 247 | | |
226 | 248 | | |
227 | 249 | | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
228 | 319 | | |
229 | 320 | | |
230 | 321 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
126 | 126 | | |
127 | 127 | | |
128 | 128 | | |
129 | | - | |
130 | | - | |
| 129 | + | |
| 130 | + | |
131 | 131 | | |
132 | 132 | | |
133 | 133 | | |
| |||
198 | 198 | | |
199 | 199 | | |
200 | 200 | | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
201 | 234 | | |
202 | 235 | | |
203 | 236 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
0 commit comments