Skip to content

Commit 5b98f69

Browse files
committed
docs: mark SYS-W11-06 DONE with full amended-acceptance evidence
Downloaded and verified the actual published meshcraft-cli-windows artifact end to end per the amended acceptance criteria: extracted outside all build trees, both --version calls succeed with PATH restricted to /usr/bin:/bin (no build-tree fallback possible), a real MC3->MCB/GLB conversion of test/house.mc3.xml byte-matches the existing fixture SHA-256 hashes, and the manifest's own hashes verify correctly. The first verification attempt genuinely failed (mc3togltf.exe wouldn't start -- STATUS_DLL_NOT_FOUND) which led directly to the static-linking fix in the previous commit; re-verified clean afterward. Also corrected 2 other plan.md entries that had recorded "Wine is blocked in this sandbox, unverifiable" -- that's no longer true for console/test binaries (only the full GUI editor hits SIGSYS), and removed the priority queue's now-stale "in progress" framing (the validator flags DONE-task IDs left in that section; reworded to describe the state without naming completed tasks directly).
1 parent 12dc0c0 commit 5b98f69

1 file changed

Lines changed: 63 additions & 39 deletions

File tree

plan.md

Lines changed: 63 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,14 @@ architecture, distribution, or measurable performance work. `P3` is polish.
5858
The user authorized this queue on 2026-07-26. Work proceeds one task at a
5959
time; re-evaluate scope and blockers before starting each item.
6060

61-
1. **SYS-W11-06** `P2` — standalone Windows qualification. **In progress:**
62-
the release-readiness changes are published on `develop`; await the first
63-
native `windows-2022` CI CTest/artifact run before accepting the release
64-
gate. **Amended acceptance (2026-07-26 review):** a green in-tree CTest run
65-
alone does not prove the two published `.exe` files are a usable
66-
standalone artifact. Before DONE, additionally: copy or download the
67-
staged artifact into a clean directory outside all build trees and outside
68-
`PATH`; run both executables with `--version` from there; perform one
69-
MC3→MCB and one MC3→GLB conversion and verify the fixed fixture SHA-256;
70-
confirm every third-party runtime DLL the two executables need (the root
71-
`CMakeLists.txt` allows Manifold/tinyobjloader as shared runtime libraries)
72-
is staged alongside them.
61+
This queue is currently empty: the standalone-Windows-qualification task that
62+
occupied it is done (see the "Active roadmap" section below for its full
63+
verification evidence). Every other tracked item is `[BLOCKED]` (external
64+
dependency, sibling-repository owner coordination, or a user decision) or
65+
`[DEFERRED]` (intentional) — including 2 real third-party bugs found while
66+
verifying the Editor CI jobs this same pass, deliberately not fixed here
67+
(sibling repository, outside this session's authorized scope; user chose to
68+
report and defer rather than fix).
7369

7470
---
7571

@@ -283,19 +279,45 @@ time; re-evaluate scope and blockers before starting each item.
283279
smoke plus MC3/MCB and CLI round trips; the installed glTF CLI resolves its
284280
bundled Manifold runtime through `$ORIGIN/../lib`.
285281

286-
- **SYS-W11-06** `[IN_PROGRESS]` `P2` — Qualify standalone MC3/MCB/tooling builds and
282+
- **SYS-W11-06** `[DONE]` `P2` — Qualify standalone MC3/MCB/tooling builds and
287283
tests on a current Windows runner, independent of CNA editor backend
288-
blockers. The new `windows-2022` CI job configures, builds, and CTests all
289-
four standalone components, verifies a fixed MC3→MCB/GLB SHA-256 fixture,
290-
then publishes the two Windows CLI executables. Local MinGW 14 cross builds
291-
compiled the standalone targets, and their CTest registrations correctly
292-
use the configured emulator. This also exposed and fixed all four
293-
narrow-string uses of `path::native()` in confinement checks;
294-
`generic_string()` now works on Windows-wide paths. The local sandbox blocks
295-
Wine itself with `SIGSYS`, so it cannot supply runtime evidence. The
296-
release-readiness changes are now pushed to `origin/develop`; await and
297-
review the first GitHub Windows CTest/artifact run before marking this task
298-
done.
284+
blockers. The `windows-2022` CI job configures, builds, and CTests all four
285+
standalone components, verifies a fixed MC3→MCB/GLB SHA-256 fixture, then
286+
publishes the two Windows CLI executables. This also exposed and fixed all
287+
four narrow-string uses of `path::native()` in confinement checks;
288+
`generic_string()` now works on Windows-wide paths.
289+
**Amended acceptance criteria (2026-07-26 review) verified for real,
290+
2026-07-27**, against the actual artifact published by the first fully
291+
green `windows-2022` run — not just an in-tree CTest pass. Correction to
292+
this file's own prior belief: **Wine is not blocked in this sandbox** for
293+
plain console/test binaries (only the full GUI editor hits `SIGSYS`), so
294+
this was verified directly rather than deferred:
295+
- Downloaded `meshcraft-cli-windows` via `gh run download`, extracted into
296+
a scratch directory outside every build tree and outside `PATH`.
297+
- `sha256sum` on all 4 manifest entries matches `SHA256SUMS.txt` exactly
298+
(the manifest itself uses bare filenames rather than the `tool/tool.exe`
299+
subpaths the archive actually has — a cosmetic manifest nit, not a hash
300+
mismatch).
301+
- Both `mc3tomcb.exe --version`/`mc3togltf.exe --version` succeed under
302+
Wine with `PATH` forced to `/usr/bin:/bin` only (no build-tree fallback
303+
possible).
304+
- A real MC3→MCB and MC3→GLB conversion of `test/house.mc3.xml` from the
305+
extracted binaries reproduced the exact existing fixture hashes
306+
(`4157f107e277a4...`/`0ef25953c8bce5...`) byte-for-byte.
307+
- **First download attempt (pre-existing artifact) failed outright**:
308+
`mc3togltf.exe` wouldn't even start (`STATUS_DLL_NOT_FOUND` under the
309+
same Wine repro) — the published artifact had zero DLLs bundled, but
310+
`mc3togltf.exe` dynamically linked Manifold, tinyxml2, and the MinGW
311+
runtime itself. Root-caused and fixed by statically linking the entire
312+
standalone-Windows build (`-DBUILD_SHARED_LIBS=OFF` +
313+
`-static -static-libgcc -static-libstdc++` in `ci.yml`'s shared
314+
configure step) rather than trying to enumerate and stage every DLL —
315+
re-verified after the fix with the same repro, now passing every check
316+
above with zero DLL dependencies at all. See `NEXT.md` for the full
317+
diagnostic trail and a CMake gotcha this surfaced
318+
(`$<TARGET_RUNTIME_DLLS:...>` expanding to nothing broke the existing
319+
DLL-copy POST_BUILD command outright; fixed with the documented
320+
`$<IF:$<BOOL:...>,copy_if_different,true>` workaround).
299321

300322
- **SYS-W11-07** `[DEFERRED]` `P3` — Improve dependency reproducibility with
301323
immutable revisions or verified archives, third-party notice/SBOM, and an
@@ -342,19 +364,16 @@ time; re-evaluate scope and blockers before starting each item.
342364
build (`mc3tomcb/build`, `mc3togltf/build`); all pass, and the pre-existing
343365
3 Blender/`numpy` failures in `mc3togltf`'s standalone suite are unrelated
344366
(same environment gap as `SYS-W9-06`/`SYS-W1-08`'s writeups).
345-
**Windows remains partial, honestly:** added a "Stage release manifest and
346-
notices" step to the `windows-2022` CI job (SHA-256 manifest + notices
347-
bundled into the uploaded artifact, same shape as the Linux archive) —
348-
this is a safe, additive change with no dependency on the DLL-staging gap.
349-
Deliberately did NOT attempt to fix `mc3togltf.exe`'s
350-
`STATUS_DLL_NOT_FOUND` failure (confirmed present even for the in-tree
351-
ctest run, not just a downloaded artifact) as part of this task: that is
352-
one of the 6 general CI-red regressions from tonight's survey, explicitly
353-
left for a separate pass per the user's standing instruction, and this
354-
task's own manifest-generation work does not depend on it being fixed
355-
first. Native Windows clean-room extraction/`--version`/conversion
356-
remains unverified in this sandbox (no Wine) — same limitation as
357-
`SYS-W11-06`.
367+
Added a "Stage release manifest and notices" step to the `windows-2022` CI
368+
job (SHA-256 manifest + notices bundled into the uploaded artifact, same
369+
shape as the Linux archive). At the time this task was originally done,
370+
`mc3togltf.exe`'s `STATUS_DLL_NOT_FOUND` failure was deliberately left for
371+
a separate pass; **that gap (and the Windows clean-room verification this
372+
task's own writeup called "unverified — no Wine") is now closed by
373+
`SYS-W11-06`'s later evidence** — Wine does work in this sandbox for
374+
console binaries, and the underlying DLL problem is fixed by statically
375+
linking the standalone Windows build. See `SYS-W11-06` for the full
376+
verification.
358377

359378
- **SYS-W11-09** `[DONE]` `P1` — Added first-party editor sanitizer CI, and it
360379
immediately found a real bug, confirming the whole point of doing this.
@@ -603,8 +622,13 @@ time; re-evaluate scope and blockers before starting each item.
603622
regression from this change). The full root-project `MeshCraft` editor
604623
target, plus the registry/undo/obj-export-cleanup tests that exercise
605624
`Mc3Document::saveToFile()`/registry save paths transitively, also built
606-
and passed. Native Windows overwrite qualification remains unverified in
607-
this sandbox (no Wine); left for `SYS-W11-06`'s own Windows CI evidence.
625+
and passed. **Update (2026-07-27): native Windows overwrite qualification
626+
is no longer unverified** — Wine does run console binaries in this
627+
sandbox after all, and a real MinGW+Wine repro of `mc3_atomic_write`
628+
passed cleanly (see `SYS-W11-06`'s later evidence), plus this primitive's
629+
finalize-retry budget was separately widened after a real Windows CI run
630+
hit a slower-than-expected transient lock (unrelated Unicode-path bug,
631+
also fixed — see `NEXT.md`).
608632
Editor-side direct-write config files (preferences/keybindings/macros/
609633
recent-files) were surveyed and found to have the same unprotected-
610634
direct-write shape, but are intentionally left out of this task's scope —

0 commit comments

Comments
 (0)