MIZAN.md's phase-numbered implementation order, PRODUCT_ARCHITECTURE's "Deferred until Render revenue funds it" and "Shipped in", PSR_VS_EDGE's current-state section, and the READMEs' passing-test counts were all reporting where the work stood rather than what the system is. OWED_SURFACE keeps its subject — surface that is specified but unbuilt — stated as the shape each unit owes. The channel sections follow the renamed slots: Params / ClientMessage / ServerMessage, and Channel as the base class on both backends. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2.1 KiB
Product Architecture
Mizan's surface splits into a free framework and two paid products. The split is drawn along one line: what runs on the developer's own infrastructure versus what Mizan operates for them.
Mizan Render — paid
$20/seat/month.
Protocol-aware Edge caching + PSR delivery via Cloudflare + render Workers + TS backend hosting via Workers for Platforms.
The developer's stack is their backend + database. Cloudflare handles read traffic, rendering, and caching. The compliance surface is entirely Cloudflare Workers plus a management API (Django/Postgres):
- GDPR DPA + privacy policy + subprocessor list — ~$500–1K legal
- DMCA — $6
- No NIS2, no gVisor, no KMS
Mizan Deploy — paid, IaaS-shaped
Django hosting is a different product because it is a different compliance surface: gVisor, KMS, NIS2, multi-state privacy, ~$5–8K legal. Hosting a customer's Python process is IaaS; serving cached HTML from a CDN is not.
TS "Deploy" is the Workers-for-Platforms case, which carries no additional compliance cost — it falls inside Render's surface rather than Deploy's.
Origin-side cache (mizan.cache) — free
mizan_core.cache (re-exported as mizan.cache from the Django
adapter) implements the full cache protocol locally — the same
HMAC key derivation and purge semantics as Edge.
Two backends behind a CacheBackend protocol:
MemoryCache— in-memory dict (testing)RedisCache— production
This carries two consequences: the free framework is complete on its own (PSR + typed hooks + invalidation + caching at zero cost), and every cache mechanic is unit-testable without Cloudflare in the loop.
Spec surface
@client(cache=False)— uncacheable; emitsCache-Control: no-store.- Cache ABI (
mizan.cache):cache_get(secret, backend, context, params),cache_put(...),cache_purge(backend, context, params=…, secret=…).
Invariant
The paid surface is Cloudflare-shaped and the free surface depends on nothing Cloudflare provides. The origin cache implements the protocol in full locally, so Edge is an accelerator over a complete framework, never a missing piece of one.