Each removed assertion holds by construction and can never fail:
- jsonData() compared with itself cannot detect cross-run byte stability;
bindAddress and mode are literal-returning computed properties
- RuleAction/RuleSourceKind allCases assertions pin synthesized enum order
(neither allCases list is used in production); the persisted action tokens
stay pinned by the kept rawValue assertions and source-kind tokens by
fixture decoding through RuleSnapshotStore
- memberwise-constructor echo in RuleSourceIdentity, fixture-guaranteed
name == id rows, a share draft field pair built from one string, and a
local struct compared to its own assignment
- the synthesized-Codable round trip through literal JSONEncoder/JSONDecoder
The duplicate-import assertion becomes a real check: Set of node ids instead
of a count that restated roots.count, which is what its comment claims.
Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
Ancestor groups of the active target now show a hollow bolt beside the
existing filled bolt on the target itself, in the servers tree, the
favorites table and the home target browser; the node detail subtitle
shows "含活动目标". The derivation lives in
CatalogTreeSnapshot.ancestors(of:) so every surface shares one rule
while activeTargetID stays a runtime fact outside the catalog
projection. Groups activated directly keep the filled bolt and leave
their member rows unmarked.
Use native Table row and insertion callbacks instead of an outer drop
receiver. Resolve server rows and insertion lines to their containing
group, and root insertion points to the catalog root.
Verify insertion and server-row targets with regression tests.