← 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

Drew Owens ·ccb1f489f0 ·1mo ago ·parent 0934878
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