v1.36.0 — GraphUID re-key (#182), lockfile currency (#185), manifest sweep completion (#179/#183)
LatestFour pieces of work merged since v1.35.0, none behavior-breaking for tool callers.
Re-keyed SelectionRegistry on BRepGraph.GraphUID (#182, closes phase 5 of the fleet-wide picking consolidation, ecosystem#43). Before this, the registry held three parallel dictionaries all keyed by the same selectionId string (anchors, snapshots, graphUIDs), with nothing enforcing that graphUIDs's keys stayed a subset of anchors's; two real call sites (RemapTools.refreshAfterHistoryRemap, CorrespondenceTools.mintUID) could mint an orphan uid with no matching anchor behind it. uid is now a field on TopologyAnchor itself, written by the same record() call as the rest of the anchor, so that state is no longer representable at all. Net +1 test (219 total). Deliberately does NOT adopt OCCTSwiftInteraction's new SubShapeRef/SubShape/InteractiveObject types wholesale: SubShapeRef.shape is a live OCCT handle this actor has always avoided holding long-term, and SubShape is built around a live-viewport InteractiveObject that doesn't fit OCCTMCP's restart-surviving, bodyId-keyed body model. Full write-up in CLAUDE.md's SelectionRegistry.swift bullet.
Repinned OCCTSwiftTools/OCCTSwiftAIS onto OCCTSwiftInteraction (ecosystem#42/#43): the three repos merged into one package. import lines are unchanged everywhere in this repo; only the package: label on each product moved, plus the OCCTSwiftScripts floor bumped to 1.6.3 (the release that migrated occtkit's own dependency onto the same package, closing OCCTSwiftScripts#122, a real blocker: SwiftPM enforces target-name uniqueness across the whole transitive graph, so a graph containing both OCCTSwiftScripts's old pins and a direct OCCTSwiftInteraction dependency failed outright).
Fixed Package.resolved drift (#185): the checked-in lockfile still pinned OCCTSwift at 1.17.0 despite Package.swift's floor moving to 3.0.0 since #175/#176, surfaced only when resolving against the real published graph rather than the local-sibling-checkout shortcut. Regenerated, and added a "Check Package.resolved is current" CI step so this class of drift is caught explicitly before build going forward, rather than relying on SwiftPM's own silent mid-build re-resolution to paper over it.
Completed the code-style manifest rollout (#179/#181, #183/#184): the gradual swift-format/swiftlint exemption manifest (scripts/style-manifest-swift.txt) started at 56 files and is now empty. The first 19 (the OCCTSwift 3.0.0 migration's carve-out files) and the remaining 37 are both fully swept into --strict compliance, including roughly 80 hand-written doc-comment one-line summaries swift-format format can't generate on its own.
Verified against the real published dependency graph (OCCTMCP_FORCE_REMOTE_DEPS=1, not the local-sibling shortcut):
swift build Build complete!
swift build --build-tests Build complete!
swift test 219 tests, 38 suites, all pass
swift-format lint --strict and swiftlint lint --strict (both scoped to Sources/, matching CI): 0 violations across all 56 files. check-style-manifest.py: clean, manifest empty.