Resolution notes:
- Inspectron.Epson.Tests was added on both sides. Took the master version
wholesale (POS895, CompositeDiscoveryService, SprtDiscoveryService,
BitImagePrinting, PrinterRegistration tests). This drops the
Configuration/, Sanity/ and Telemetry/ tests that existed only on main,
and the test project's reference to EpsonPrintService.
- CLAUDE.md, PrintServerBootstrapper.cs and Inspectron.Epson.slnx
auto-merged; verified the composite discovery binding and the Insin
telemetry bindings both survive in the bootstrapper.
Solution builds with 0 errors; unit tests 33/33 pass on the merged tree.
Claude-Session: https://claude.ai/code/session_01KyCpB2jH3urYByRG5t98gz
1. Strengthen POS895 IsCut test: add RecordingEpsonPrinter.CallOrder so
the test can assert feeds happen BEFORE the cut, plus a LineFeedBytes
count assertion. The prior test could not detect the FeedAsync call
being deleted from the IsCut branch (verified: test now fails when
that line is removed, passes when restored).
2. CompositeDiscoveryService: distinguish "some children failed" from
"every child failed". Per-child failures are still absorbed, but if
every discovery service throws, the composite now rethrows instead
of silently returning an empty list. Previously a total discovery
failure (e.g. a routeless interface) looked like "discovery
succeeded, found nothing" to PrinterDiscoveryBackgroundTask, which
would expire and unregister every known printer after the retention
window, discarding their queued jobs. Also corrected a doc comment
that overstated Task.WhenAll's timeout guarantee.
3. Update CLAUDE.md to describe the POS895/POS896 work as shipped
rather than future work: added the Inspectron.Epson.Tests and
Pos895Test projects, a dotnet test command, SprtDiscoveryService/
CompositeDiscoveryService/POS895 in the architecture sections, the
0x20 printer-ID note, and the established SPRT hardware facts.
Claude-Session: https://claude.ai/code/session_01E6N3P4nSZLtp4BC2LXVref
Study-only writeup of what supporting the SPRT-derived POS895/POS896
ESC/POS clones would take: no vendor SDK linking, a 576-dot IPrinter
adapter, non-ENPC discovery, a sturdier printer-ID probe, and the
hardware checks still open.
Claude-Session: https://claude.ai/code/session_01WAG8xogHxq9hDJScu386Jf