Explain why the service-layer + tenancy-first API made Phase-3 module scoping nearly free
Adds a "Rolling isolation to the other modules (Phase 3)" section to the
isolation page (per-module recipe + why the earlier refactors paid off + the
honest caveat about perimeter reads), and cross-links it from the service-layer
architecture page's company-scope section + Related.
Service-Layer-Architecture: 2 new harness traps (data-wrapper, positional id normalisation) + Watch-out-for #14 (don't add guards the API lacked)
Service-Layer: cmdb (#729) done + 3 new traps (status codes, catch-Exception, companyScope) + normalise-both-shapes pattern
Service-Layer: knowledge (#726) done + opcache/stash harness trap
Service-Layer-Architecture: rename 'knotty issues' -> 'Watch out for...'; add learnings from modules 2-6 (id-collision technique, scoping, UTC exception, side effects)
Service-Layer-Architecture: explain why only writes are refactored
Add Service-Layer architecture + progress pages
- Service-Layer-Architecture: explainer (problem, ports & adapters, the
session-vs-API-key ActorContext insight, the 3 service rules, worked example,
all 8 knotty issues incl. pre-existing UI/API divergence, UTC/timezones,
error ordering, byte-identical proof, Exception::$code collision, delete
idempotency, response-shape fidelity, parity-harness traps) + a "how to build
a new dual UI+API feature correctly" guide.
- Service-Layer-Progress: per-module rollout tracker, honest line-savings
picture, convergence log, deferred display-layer UTC fix.
- Linked both from _Sidebar (under Architecture) and cross-linked from
Architecture.md's API Pattern section.