app
SOLIDWORKS Bridge
Public Made by Adomby adom
Launch, model and quit SOLIDWORKS from any Adom container. Nothing is ever lost.
← Commit history
docs: 0.6.1/0.6.2 — lineage by identity, re-attribution wired, one title rule for both close-by-title verbs; roadmap corrected
2 files changed
+49−2
README.md+43−1@@ -347,7 +347,49 @@ not. ## Roadmap -- v0.5.9 (this): **the write gate's own unanswerable question.** The destination+- v0.6.2 (this): **two one-liners that were not one-liners.** Pass 14 found the+ lineage proofs matching a bare pid NUMBER: Windows never validates a parent id,+ and our launcher chain always exits once SOLIDWORKS is up — so a process whose+ parent had merely REUSED that number would have satisfied the walk. Lineage now+ carries (pid, creation time) and matches through `ProcInfo::same_process`, the+ same identity rule as every other claim in the crate, and the parent must still+ be alive to be matched at all. And the case-insensitive uniqueness guard was+ real but incomplete: there are TWO verbs that close a pathless document BY+ TITLE — the registry drain and `swx_reset_workspace` — and the rule was in one+ of them. It is now one function used by both, with a test for each that puts the+ bridge's untitled `Part1.SLDPRT` beside the user's saved `part1.SLDPRT` and+ requires both verbs to refuse and say so. 282 tests.+- v0.6.1: **three hardenings from adversary pass 13, which found no+ defects.** The registry drain judged a title-only document unique with a+ case-SENSITIVE `==` and then closed it by name — and `CloseDoc` resolves+ case-insensitively on Windows, so the bridge's untitled `Part1.SLDPRT` beside a+ user's saved `part1.SLDPRT` looked unique to the guard and ambiguous to the act.+ A guard must ask the question the way the act will answer it. An unlistable+ open-document set is now "not unique" rather than silently skipped+ (`ownedUnsavedSweepBlind`, and `done` cannot be true). Re-attribution after a+ sign-in now requires POSITIVE LINEAGE — a parent walk from `sldworks.exe` that+ reaches our own chain, or a launcher log a thread of our chain wrote — because+ "no foreign chain was seen" is the absence of an observation, and a chain that+ started and finished between two censuses was never seen at all. Adopting a+ document after a timed-out import now requires all four of: unsaved, title stem+ matches, not open before the call, and the session gained EXACTLY one document;+ anything less adopts nothing and says what it could not establish. 279 tests.+- v0.6.0: **a sign-in wait is not a stall, and a title is not an identity.** The+ first live gate run proved the attributable world — `shellExecute` handed back a+ real handle for the Platform shortcut (CATSTART pid 131272) and that chain+ reached `Run Begin` — and found the launch machine killing its OWN chain while+ Drew was at the 3DEXPERIENCE ID sign-in, because the sldworks deadline fired on+ a wait that was not a stall. The sign-in window is now recognised by class and+ owner pid, every deadline pauses while it is up (an unreadable window census+ pauses too), nothing is killed or escalated, the user is toasted, and a session+ that attaches afterwards is re-attributed instead of being recorded as somebody+ else's. Separately: a fresh import has NO path live, so two imports of one file+ shared a title and neither could be named by any verb — every bridge-created+ document is now given a file of its own at birth (`documentIdentity`,+ `keepUnsaved:true` to opt out), the drain recognises bridge-owned unsaved+ imports by registry and names the ones it cannot address, and a mutating call+ that fails AFTER creating a document still owns it. 275 tests.+- v0.5.9: **the write gate's own unanswerable question.** The destination test was `Path::exists()`, which is false both for "nothing is there" and for "I could not look" — a parent it cannot traverse, a UNC share it has no token for, a device not ready, an over-length path — and the gate read the second as "free"
SKILL.md+6−1@@ -382,7 +382,12 @@ adom-bridge --ai-thread "<thread>" swx_save_as '{"outputPath":"C:\\parts\\bracke `titleCollisionsCheckedOver` says how many documents the collision check actually covered — a same-titled document beyond the window is not in that list. Call it again until `done:true`.-- **The drain never closes a document whose title another open one shares.** It+- **The drain never closes a document whose title another open one shares** —+ compared the way `CloseDoc` resolves a name, which on Windows is+ case-insensitively. If the open set cannot be enumerated it does not attempt the+ registry sweep at all (`ownedUnsavedSweepBlind:true`, `done:false`): it cannot+ tell whether a title is shared, and a title-only document can only be closed by+ name. It closes by full path and verifies each close, but `CloseDoc` resolves by name — so a shared title is refused and reported in `titleCollisions` (with every path that shares it) rather than letting SOLIDWORKS pick. The user decides: close it