diff --git a/projects/business/memory/bugs.md b/projects/business/memory/bugs.md index 53b4e27..12f26ab 100644 --- a/projects/business/memory/bugs.md +++ b/projects/business/memory/bugs.md @@ -1,3 +1,10 @@ +## BUG-092: Footer missing "Change Email" link on landing page +- **Date:** 2026-03-01 +- **Severity:** LOW +- **Issue:** The email change modal exists in the DOM but the footer has no link to trigger it. BUG-090 added the backend routes, but when the free tier was removed, the "Change Email" footer link was also removed (it was part of the old footer layout). Users have no way to reach the email change feature from the landing page. +- **Fix:** Add "Change Email" link back to footer with `class="open-email-change"`. +- **Status:** OPEN + ## BUG-090: Email Change modal calls non-existent backend routes — feature broken - **Date:** 2026-02-27 - **Severity:** HIGH @@ -948,3 +955,36 @@ Container restart appears to have been clean. All services came back online prop - **Issue:** Go example says `go get github.com/docfast/docfast-go` (404 on GitHub). PHP example says `composer require docfast/docfast-php` (doesn't exist on Packagist). SDKs haven't been published yet — blocked on npm/PyPI/Go/Packagist tokens. - **Fix:** Either publish SDKs or change examples to use plain HTTP (curl/fetch) without SDK install instructions until packages are published. - **Status:** ✅ FIXED (commit 1c0c8a3) — replaced with "SDK coming soon" notes, kept HTTP examples + +## BUG-091: Demo endpoint accepts invalid scale value (scale:99) without error +- **Date:** 2026-03-01 +- **Severity:** MEDIUM +- **Issue:** `POST /v1/demo/html` with `{"html":"

test

","options":{"scale":99}}` returns HTTP 200 and generates a PDF instead of returning 400 validation error. Chromium's valid scale range is 0.1–2.0. Scale of 99 should be rejected. +- **Steps to reproduce:** `curl -X POST https://staging.docfast.dev/v1/demo/html -H 'Content-Type: application/json' -d '{"html":"

test

","options":{"scale":99}}'` +- **Expected:** 400 error with validation message about invalid scale +- **Actual:** 200 with a PDF generated (Chromium may silently clamp or ignore) +- **Status:** OPEN + +## BUG-092: Footer missing "Change Email" link +- **Date:** 2026-03-01 +- **Severity:** LOW +- **Issue:** The task spec expects a "Change Email" link in the footer, but it's not present. The change email modal (`emailChangeModal`) exists in the DOM but there's no footer link to trigger it. Users have no discoverable way to access the email change feature from the landing page. +- **Steps to reproduce:** Visit https://staging.docfast.dev/ → scroll to footer → no "Change Email" link +- **Expected:** Footer should include a "Change Email" link +- **Actual:** Footer has: Home, Docs, Examples, API Status, Support, Impressum, Privacy Policy, Terms of Service — no Change Email +- **Status:** OPEN + +## BUG-093: Signup modal removed but "Get Pro API Key" button text is misleading +- **Date:** 2026-03-01 +- **Severity:** LOW +- **Issue:** Free signup was discontinued (API returns 410). The signup modal (`signupModal`) has been removed from the DOM. However, the "Get Pro API Key — €9/mo" button now redirects directly to Stripe checkout, which is correct behavior. Not a bug per se, but the old "signup modal" test case is no longer applicable — documenting for awareness. +- **Status:** NOT A BUG — by design after free tier removal + +## BUG-094: email-change endpoint returns unhelpful error without auth +- **Date:** 2026-03-01 +- **Severity:** LOW +- **Issue:** `POST /v1/email-change` without authentication returns `{"error":"apiKey is required."}` with HTTP 400. Should return 401 for consistency with other auth-required endpoints (`/v1/convert/html` and `/v1/usage` return 401). +- **Steps to reproduce:** `curl -X POST https://staging.docfast.dev/v1/email-change -H 'Content-Type: application/json' -d '{"current_email":"a@b.com","new_email":"c@d.com"}'` +- **Expected:** 401 with consistent "Missing API key" error message +- **Actual:** 400 with "apiKey is required." +- **Status:** OPEN diff --git a/projects/business/memory/sessions.md b/projects/business/memory/sessions.md index fe1807e..c6db4e3 100644 --- a/projects/business/memory/sessions.md +++ b/projects/business/memory/sessions.md @@ -1,5 +1,41 @@ # Session Log +## Session 115 — 2026-03-01 16:00 UTC (Sunday Afternoon) +- **Production:** v0.5.1 ✅ healthy, 2 replicas, 0 restarts, ~92h uptime +- **Staging:** ✅ healthy, running commit 4887e8f (21+ commits ahead of prod) +- **K8s cluster:** All 3 nodes Ready +- **Support:** Zero tickets +- **Proactive improvements completed:** + 1. **Template service tests (TDD)** — 14 new tests covering invoice/receipt edge cases: custom currency, multiple items with varying tax rates, zero tax, missing/all optional fields, empty items arrays, default values. Tests 414 → 428, all passing. Pushed to main. + 2. **Full QA audit of staging** — 20 test areas, ~40 individual checks. All critical paths pass (landing page, nav, footer, examples, checkout, docs, status, health, legal pages, mobile, API auth, demo, sitemap, robots.txt, security headers, link crawl). No CRITICAL/HIGH bugs. +- **QA findings:** + - BUG-091 (MEDIUM): False positive — QA sent `options:{scale:99}` nested, but API uses top-level params. Validation works correctly for `{scale:99}` at body root. + - BUG-092 (LOW): Real — Footer missing "Change Email" link. Modal exists but unreachable. + - BUG-093 (INFO): Expected — Signup modal removed with free tier discontinuation. + - BUG-094 (LOW): False positive — email-change uses key-in-body auth, not header auth. +- **CI runner:** Still completely absent. Ongoing blocker. +- **Investor test:** All 5 checks pass ✅ +- **Recommendation:** Staging is production-ready. Only BUG-092 (LOW) is open. Request investor approval for production tag. + +## Session 114 — 2026-03-01 13:00 UTC (Sunday Afternoon) +- **Production:** v0.5.1 ✅ healthy, 2 replicas, 0 restarts, ~77h uptime +- **Staging:** ✅ **UPDATED** to commit 4887e8f (21 commits ahead of prod) +- **K8s cluster:** All 3 nodes Ready +- **Support:** Zero tickets +- **Proactive improvement completed:** + 1. **Email-change verify edge case tests (TDD)** — `email-change.test.ts` was missing tests for expired code (410) and max attempts (429) responses. Sub-agent added 2 tests. Commit 4887e8f. + 2. **414 tests total** (up from 412 — +2 new), all passing across 26 test files. + 3. **Manual staging deploy** — Built image on k3s-mgr, imported to k3s-mgr + k3s-w2 via `ctr import`. Staging restarted and healthy. +- **Full audit:** + - All 11 production endpoints return 200 ✅ + - All 11 staging endpoints return 200 ✅ + - Security headers clean (no duplicates) ✅ + - Demo endpoint working on prod (51KB PDF, ~4.4s) ✅ + - Production still lacks PDF options validation (v0.5.1 — added post-tag) +- **CI runner:** Still completely absent. No runner pods in any namespace. Ongoing blocker. +- **Sonnet 4.1:** Still unavailable for sub-agents (instant failures). Used Opus. +- **Investor test:** All 5 checks pass ✅ + ## Session 113 — 2026-03-01 10:00 UTC (Sunday Late Morning) - **Production:** v0.5.1 ✅ healthy, 2 replicas, 0 restarts, ~74h uptime - **Staging:** ✅ **UPDATED** to commit 7808d85 (20 commits ahead of prod) diff --git a/projects/business/memory/state.json b/projects/business/memory/state.json index 84a9021..0f887dd 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 updated to 7808d85 (20 commits ahead of prod) via manual build workaround. CI runner still DOWN. npm audit 0 vulns. 412 tests passing (26 files). Staging imagePullPolicy=IfNotPresent + nodeSelector=k3s-w2 (revert both when CI runner fixed). Ready for production tag when investor approves.", + "currentPriority": "Production on v0.5.1. Staging 22+ commits ahead (templates tests pushed). CI runner still DOWN. npm audit 0 vulns. 428 tests passing (26 files). QA audit passed staging — no CRITICAL/HIGH bugs. BUG-092 (LOW: missing Change Email footer link) is the only open issue. 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." @@ -80,10 +80,10 @@ "CRITICAL": [], "HIGH": [], "MEDIUM": [], - "LOW": [], + "LOW": ["BUG-092: Footer missing Change Email link"], "note": "All clear. SMTP is mail.cloonar.com:587 — tested and verified working." }, "blockers": [], "startDate": "2026-02-14", - "sessionCount": 113 + "sessionCount": 115 } diff --git a/projects/snapapi/memory/sessions.md b/projects/snapapi/memory/sessions.md index 123908f..7c1caa6 100644 --- a/projects/snapapi/memory/sessions.md +++ b/projects/snapapi/memory/sessions.md @@ -1,5 +1,68 @@ # SnapAPI Session Log +## Session 43 — 2026-03-01 14:00 UTC (Health Check) + +**Goal:** Sunday afternoon routine health check. + +### What Was Done +- Infrastructure verified: prod 2/2 (w1+w2), staging 1/1 — all running ✅ +- Zero open bugs +- Still awaiting investor approval for v0.6.0 production tag + +### Investor Test +1. Trust with money? **Yes on staging**, prod one version behind +2. Data loss on crash? **No** — PostgreSQL managed cluster +3. Free tier abuse? **Low** — playground IP-limited + watermarked +4. Key recovery? **Yes on staging** +5. Website features? **All working on staging**; prod missing usage dashboard + +### Assessment +No changes needed. 11th consecutive health-check-only session. Product stable. Awaiting v0.6.0 prod deploy approval. + +--- + +## Session 42 — 2026-03-01 12:00 UTC (Health Check) + +**Goal:** Sunday midday routine health check. + +### What Was Done +- Infrastructure verified: prod 2/2 (w1+w2), staging 1/1 — all running ✅ +- Zero open bugs +- Still awaiting investor approval for v0.6.0 production tag + +### Investor Test +1. Trust with money? **Yes on staging**, prod one version behind +2. Data loss on crash? **No** — PostgreSQL managed cluster +3. Free tier abuse? **Low** — playground IP-limited + watermarked +4. Key recovery? **Yes on staging** +5. Website features? **All working on staging**; prod missing usage dashboard + +### Assessment +No changes needed. 10th consecutive health-check-only session. Product stable. Awaiting v0.6.0 prod deploy approval. + +--- + +## Session 41 — 2026-03-01 08:00 UTC (Health Check) + +**Goal:** Sunday morning routine health check. + +### What Was Done +- Infrastructure verified: prod 2/2 (w1+w2), staging 1/1 — all running ✅ +- Zero open bugs +- Still awaiting investor approval for v0.6.0 production tag + +### Investor Test +1. Trust with money? **Yes on staging**, prod one version behind +2. Data loss on crash? **No** — PostgreSQL managed cluster +3. Free tier abuse? **Low** — playground IP-limited + watermarked +4. Key recovery? **Yes on staging** +5. Website features? **All working on staging**; prod missing usage dashboard + +### Assessment +No changes needed. 9th consecutive health-check-only session. Product stable. Awaiting v0.6.0 prod deploy approval. + +--- + ## Session 40 — 2026-02-28 20:00 UTC (Health Check) **Goal:** Routine Saturday evening health check.