Added three new documents with nine Mermaid diagrams to make the strangler
fig strategy visible:
- README: container topology diagram at the start, with the proxy entry point
and three seams labelled
- docs/architecture.md: five diagrams tracing the exact implementation:
- The four seams and who holds authority at each boundary
- How by-id read goes through the resolver, but list-read bypasses it
- Case lifecycle state machine (the strategy in one picture)
- Take-ownership sequence with failure windows annotated
- Write-through error round-trip showing zero validation logic crossed
- docs/playbook.md: how to apply this to a production system:
- Write-path decision tree (five read/write patterns)
- Cutover ordering diagram (side-effects-free first, least recoverable last)
- Seven transferable rules with pointers to the files that demonstrate them
- Scope diagram of what's proven vs. left as your decisions
Resolved all 13 dangling § citations (to an absent spec doc) by linking to
the actual files or dropping them. Replaced portal-frontend/README.md
boilerplate with accurate content. All diagrams parse and link-check clean.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Notes the /portal path, that it's kept alongside new-frontend rather
than replacing it, and updates the container count and click-through
intro accordingly.
Builds the four-seam, three-write-path reference demo backend: case-framework
(seam D stand-in), legacy-backend/frontend (SQL Server, seams A/B/C targets),
and new-backend (Domain/Application/Infrastructure.*/Api implementing the
source resolver, take/release-ownership, write-through translator, and owned
assessment flow), wired together via docker-compose with a plain placeholder
frontend standing in for the Angular portal until Session 2.
All 11 Architecture.Tests pass and scripts/smoke.sh passes end-to-end against
a fresh `docker compose up`, covering acceptance criteria 1-3 and 7-22.
Fixes two real domain bugs found only once the stack ran for real: the BSN
eleven-proof checksum trivially passes all-zero digits, and the adoption
mapper silently treated a partial legacy address as absent instead of failing
loudly. Also fixes several environment-specific integration issues (rootless
Podman/SELinux bind-mount permissions, a buildah NuGet layer-caching bug,
SqlClient's invariant-globalization incompatibility, and an nginx path-prefix
mismatch for the legacy frontend).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>