BilibiliDanmaku validation

dotnet run --project tests/BilibiliDanmaku.Validation -c Release -- --live --package

Default: offline unit/contract tests plus real WPF layout, bindings, commands, paging and source-owned fixtures.
midHash coverage: raw protobuf/XML fields and 64-character bound; independent bitwise CRC32 reference; complete MITM collision sets over UID 1-9,999,999,999; hash case/whitespace/leading-zero normalization; invalid inputs, empty results, UID boundaries and cancellation. The external XUnitConsole algorithm is not referenced or modified. JSON/CSV retain midHash while sender remains unverified; CRC matches and valid public profiles do not establish the sender's identity.
Batch coverage: bounded CPU parallelism, canonical hash deduplication, invalid-field skipping, complete sorted collision sets, progress counts, cancellation retaining completed hashes, and automatic lookup after query/XML import. Profile filtering keeps the raw CRC results available for retry and exposes only candidates whose public card was loaded successfully. Service tests cover global UID deduplication, known-profile reuse, failed/pending classification, caller cancellation, access-restriction stop behavior, HTTP 200 platform/unknown API errors remaining pending and recoverable, and shared concurrency/spacing for filtering and manual refresh.
Profile coverage: mock HTTP public card parsing, canonical homepage links, optional fields, avatar host restrictions, invalid identities, errors/body limits and cancellation. Every offline WPF/runtime fixture injects a synthetic profile client and TimeSpan.Zero for request spacing; successful fixture accounts are explicit and all others fail. Empty avatars avoid image requests, and an invalid local avatar address verifies that avatar decoding failure keeps a successful card. Production keeps at most two requests in flight with a 250 ms interval. Tests exercise filtered collisions, automatic preview without another card request, retry from raw CRC cache, refresh failure removing visibility, cancellation retaining passed cards, and source-data isolation. A controlled late-refresh regression verifies that a client ignoring cancellation cannot replace or remove a newly revalidated card, even when its late response fails or contains the wrong UID. The harness never invokes copy or browser commands.
--live: read-only public Bilibili metadata and complete current segmented comments for BV1xx411c7mD, plus one public UID 2 card request and its avatar download/decoding. Saves profile-live-result.json and profile-live-avatar.png. No login, cookie, browser launch, bulk account lookup or mutation.
--package: generate the code-native Fluent-style icon, invoke ToolProjectRunService.BuildAsync, ZIP/unpack/compile the package, then run an invisible test-owned tool process via the production host compiler.
The runtime fixture contains the exact tool source plus a test Window and injected synthetic clients. It runs query with automatic batch lookup and successful-card filtering, then filter/selection without a manual resolve command, checks automatic homepage preview, candidate detail and export, and exits; the separate live test exercises the actual HTTP/parser path and confirms raw hashes are retained. Live mode validates only the fixed public UID 2 profile and never performs batch real-account lookups.

The harness does not alter the clipboard, open a browser, overwrite user files, install packages into the catalog, or upload anything. It writes only fixtures, screenshots, reports, a package, and the tool's generated icon.
Artifact path may be supplied as the first non-option argument. Use a new path for each package run to avoid overwriting prior evidence.
Do not distribute RuntimeFixture as a real tool. Distribute the generated xfestudio.bilibili-danmaku-1.4.0.xfetool instead.
