diff --git a/projects/business/memory/bugs.md b/projects/business/memory/bugs.md index b13d071..2bbd1c7 100644 --- a/projects/business/memory/bugs.md +++ b/projects/business/memory/bugs.md @@ -1,3 +1,11 @@ +## BUG-102: Convert/demo routes ignore sanitized PDF options from validator +- **Date:** 2026-03-05 +- **Severity:** MEDIUM +- **Issue:** `validatePdfOptions()` returns `{ valid: true, sanitized: {...} }` with normalized values (e.g., format `"a4"` → `"A4"`). But all convert routes (html, markdown, url) and demo routes pass raw `body.*` values to `renderPdf()` instead of `validation.sanitized.*`. Format normalization never takes effect. +- **Impact:** Users sending lowercase format like `"a4"` get it passed raw to Puppeteer. Puppeteer may reject or silently handle it, but the validator's normalization is wasted work. +- **Fix:** Use `validation.sanitized` for PDF options in all convert and demo routes. +- **Status:** ✅ FIXED — commit ba2e542. All 5 routes (3 convert + 2 demo) now use `validation.sanitized` from `validatePdfOptions()`. 5 TDD tests added (convert-sanitized.test.ts). 473 tests total, all passing. Pushed to main (staging auto-deploy pending CI runner). + ## BUG-101: Body size limits on demo and convert routes are ineffective — global parser runs first - **Date:** 2026-03-04 - **Severity:** MEDIUM diff --git a/projects/business/memory/sessions.md b/projects/business/memory/sessions.md index b979ce2..e2be22e 100644 --- a/projects/business/memory/sessions.md +++ b/projects/business/memory/sessions.md @@ -1,5 +1,21 @@ # Session Log +## Session 128 — 2026-03-05 07:00 UTC (Thursday Morning) +- **Production:** v0.5.1 ✅ healthy, 2 replicas, 0 restarts, ~7.5d uptime +- **Staging:** v0.5.2 ✅ commit ba2e542 (36 commits ahead of prod) +- **K8s cluster:** All 3 nodes Ready +- **Support:** Zero tickets +- **Completed:** + 1. **BUG-102 discovery & fix (TDD)** — Found that `validatePdfOptions()` returns sanitized values (e.g., format `"a4"` → `"A4"`) but all 5 routes (3 convert + 2 demo) ignored `validation.sanitized` and passed raw `body.*` to `renderPdf()`. Format normalization never took effect. Sub-agent fixed all routes to spread `validation.sanitized` into render options. 5 TDD tests added (convert-sanitized.test.ts). Commit ba2e542. + 2. **Infrastructure health check** — All 3 K8s nodes Ready, both prod replicas healthy (0 restarts, ~7.5d uptime), DB connected (PostgreSQL 17.4), browser pool 15/15. Production demo endpoint confirmed working. + 3. **Noted:** Sonnet 4 512k sub-agents still failing instantly (model availability). Used Opus successfully. + 4. **Noted:** Graceful shutdown timeout (10s) vs PDF timeout (30s) mismatch is LOW priority — real-world PDFs complete in <2s. +- **Total tests:** 473 (all passing), 30 test files +- **Open bugs:** ZERO 🎉 +- **CI runner:** Still absent. Managed by Cloonar — needs investor action. +- **Investor test:** Staging not rebuilt (no CI runner) but code pushed and tested locally. +- **Recommendation:** Staging v0.5.2 is production-ready with ZERO open bugs, 473 tests, 36 commits ahead. Request investor approval for production tag. + ## Session 127 — 2026-03-04 19:00 UTC (Wednesday Evening) - **Production:** v0.5.1 ✅ healthy, 2 replicas, 0 restarts, ~7d uptime - **Staging:** v0.5.2 ✅ commit c03f217 (35 commits ahead of prod) diff --git a/projects/business/memory/state.json b/projects/business/memory/state.json index fede1c3..8399354 100644 --- a/projects/business/memory/state.json +++ b/projects/business/memory/state.json @@ -3,7 +3,7 @@ "phaseLabel": "Build Production-Grade Product", "status": "launch-ready", "product": "DocFast — HTML/Markdown to PDF API", - "currentPriority": "Production on v0.5.1. Staging v0.5.2 (35 commits ahead, commit c03f217). CI runner still DOWN. npm audit 0 vulns. 468 tests passing (29 files). ZERO open bugs. Fixed BUG-101 (body size limits bypassed). Ready for production tag when investor approves.", + "currentPriority": "Production on v0.5.1. Staging v0.5.2 (36 commits ahead, commit ba2e542). CI runner still DOWN. npm audit 0 vulns. 473 tests passing (30 files). ZERO open bugs. Fixed BUG-102 (sanitized PDF options ignored). Ready for production tag when investor approves.", "ownerDirectives_PRIORITY": "Process these IN ORDER. Do not skip. Remove items marked ✅ DONE/FIXED during housekeeping.", "ownerDirectives": [ "Stripe Product ID for DocFast: prod_TygeG8tQPtEAdE — webhook handler must filter by this product_id to ignore events from other projects on the same Stripe account." @@ -81,9 +81,9 @@ "HIGH": [], "MEDIUM": [], "LOW": [], - "note": "All bugs resolved. BUG-099 (provisionedSessions memory leak) fixed in commit 5f776db. BUG-098 (request interceptor leak) fixed in 024fa00. BUG-095/097 fixed 6290c3e. BUG-096 false positive." + "note": "All bugs resolved. BUG-102 (sanitized options ignored) fixed ba2e542. BUG-101 (body limits) fixed c03f217. BUG-100 (flush poisoning) fixed d2f819d. BUG-099 (memory leak) fixed 5f776db. BUG-098 (interceptor leak) fixed 024fa00." }, - "sessionCount": 127 + "sessionCount": 128 }, "blockers": [], "startDate": "2026-02-14"