diff --git a/ISSUES.md b/ISSUES.md index 206e61c..4324e94 100644 --- a/ISSUES.md +++ b/ISSUES.md @@ -2,154 +2,99 @@ Identified by domain expert review (Cloudflare, Serverless, Vercel, React Query, Django, Laravel, Vue/Svelte). -## Critical +## Fixed -### C1. Scoped cache purge doesn't pass user_id/rev -**File:** `mizan-django/src/mizan/client/executor.py` — cache_purge call in function_call_view -The scoped purge recomputes the HMAC with `user_id=None, rev=0`, but the entry was stored with the actual user_id and rev. The key never matches. Stale data persists until TTL expires. +- ~~C1~~ Scoped cache purge now passes user_id +- ~~C2~~ initSession retries 3x, resets on failure +- ~~C3~~ SSR backend injects `__MIZAN_SSR_DATA__` script tag +- ~~C4~~ SSR bridge uses _write_lock for stdin +- ~~C5~~ SSR bridge registers atexit handler +- ~~C7~~ View-path mutations now purge origin cache +- ~~H1~~ pendingScoped is Array, not Map (no overwrite) +- ~~H2~~ stableKey() sorts JSON keys (order-independent) +- ~~H3~~ mizanFetch retries 2x on 5xx/network errors +- ~~H4~~ Named contexts skip refetch if SSR data exists +- ~~H6~~ refreshContext uses GET /ctx/ not POST /call/ +- ~~H10~~ _meta always fresh dict +- ~~H11~~ Python normalizes True→"true" for cross-language HMAC +- ~~H13~~ isValid checks all required fields are touched +- ~~M11~~ execute_function return type includes HttpResponseBase +- ~~M18~~ registerContext cleanup uses ?. (no crash) -### C2. initSession swallows errors permanently -**File:** `mizan-runtime/src/index.ts` — initSession() -If the session init fetch fails, the promise resolves (catch swallows). Every subsequent call returns the resolved promise. CSRF is broken for the page lifetime with no recovery. - -### C3. SSR hydration data never written -**File:** `mizan-django/src/mizan/ssr/backend.py` — MizanTemplate.render() -Generated code checks `window.__MIZAN_SSR_DATA__` but nothing injects it. The `