docfast session 98: 20 new middleware+keys tests (163 total)

This commit is contained in:
Hoid 2026-02-26 10:04:23 +00:00
parent 3ea2e58c2c
commit f7ddc55b47
5 changed files with 30 additions and 7 deletions

View file

@ -19,6 +19,16 @@
"event": "Friseur", "event": "Friseur",
"date": "2026-02-25", "date": "2026-02-25",
"remindedAt": "2026-02-25T11:01:00Z" "remindedAt": "2026-02-25T11:01:00Z"
},
{
"event": "Macher Brot besprechen",
"date": "2026-02-26",
"remindedAt": "2026-02-26T08:11:00Z"
},
{
"event": "Psychotherapie",
"date": "2026-02-26",
"remindedAt": "2026-02-26T08:11:00Z"
} }
] ]
} }

View file

@ -10,7 +10,7 @@
"news": "2026-01-30T08:17:00Z", "news": "2026-01-30T08:17:00Z",
"rheinmetall": "2026-02-19T10:39:32.196Z", "rheinmetall": "2026-02-19T10:39:32.196Z",
"rheinmetall_price": 1660, "rheinmetall_price": 1660,
"calendar": "2026-02-20T07:23:00Z", "calendar": "2026-02-26T08:00:00Z",
"steam_hardware": "2026-02-03T22:00:00Z", "steam_hardware": "2026-02-03T22:00:00Z",
"hamr_40tb": "2026-02-04T21:10:00Z", "hamr_40tb": "2026-02-04T21:10:00Z",
"notes": "3 events: Reinigungshilfe 10-15, AMZ Laravel 15-16, Marie 17-20" "notes": "3 events: Reinigungshilfe 10-15, AMZ Laravel 15-16, Marie 17-20"

View file

@ -1,5 +1,18 @@
# Session Log # Session Log
## Session 98 — 2026-02-26 10:00 UTC (Thursday Mid-Morning)
- **Production:** v0.5.1 ✅ healthy, 2 replicas, 0 restarts
- **Staging:** v0.5.1 ✅ healthy
- **K8s cluster:** All 3 nodes Ready
- **Support:** Zero tickets
- **Proactive improvements completed:**
1. **Auth middleware tests** — New `src/__tests__/auth.test.ts` with 6 tests: 401 no key, 403 invalid bearer/x-api-key, valid bearer/x-api-key, header preference.
2. **Rate limit middleware tests** — New `src/__tests__/pdfRateLimit.test.ts` with 6 tests: headers set, under limit, 429 free (10/min), 429 pro (30/min), window reset, QUEUE_FULL.
3. **Keys service tests** — New `src/__tests__/keys.test.ts` with 8 tests: isValidKey true/false, isProKey true/false, getKeyInfo, createFreeKey prefix+dedup, createProKey UPSERT.
4. **163 tests total** (up from 143), all passing across 12 test files.
- **Investor test:** All 5 checks pass ✅
- **Note:** Prod is on v0.5.1 (only 2 commits behind main — both test-only). State.json "20+ commits ahead" was stale.
## Session 97 — 2026-02-26 07:00 UTC (Thursday Morning) ## Session 97 — 2026-02-26 07:00 UTC (Thursday Morning)
- **Production:** v0.5.1 ✅ healthy, 2 replicas, 0 restarts, ~12h uptime - **Production:** v0.5.1 ✅ healthy, 2 replicas, 0 restarts, ~12h uptime
- **Staging:** ✅ healthy (IP-whitelisted, pod from 2026-02-25) - **Staging:** ✅ healthy (IP-whitelisted, pod from 2026-02-25)

View file

@ -3,7 +3,7 @@
"phaseLabel": "Build Production-Grade Product", "phaseLabel": "Build Production-Grade Product",
"status": "launch-ready", "status": "launch-ready",
"product": "DocFast — HTML/Markdown to PDF API", "product": "DocFast — HTML/Markdown to PDF API",
"currentPriority": "Staging ready for prod tag (20+ commits ahead). Test suite: 143 tests passing (9 test files), 0 npm vulnerabilities. Still need SDK tokens + GSC verification.", "currentPriority": "Production on v0.5.1, staging 2 commits ahead (test-only). Test suite: 163 tests passing (12 test files), 0 npm vulnerabilities. Still need SDK tokens + GSC verification.",
"ownerDirectives_PRIORITY": "Process these IN ORDER. Do not skip. Remove items marked ✅ DONE/FIXED during housekeeping.", "ownerDirectives_PRIORITY": "Process these IN ORDER. Do not skip. Remove items marked ✅ DONE/FIXED during housekeeping.",
"ownerDirectives": [ "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." "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."
@ -85,5 +85,5 @@
}, },
"blockers": [], "blockers": [],
"startDate": "2026-02-14", "startDate": "2026-02-14",
"sessionCount": 97 "sessionCount": 98
} }

View file

@ -1,6 +1,6 @@
{ {
"phase": "production-live", "phase": "production-live",
"version": "0.4.3-prod / 0.5.2-staging", "version": "0.5.2-prod / 0.5.2-staging",
"staging": { "staging": {
"status": "running", "status": "running",
"namespace": "snapapi-staging", "namespace": "snapapi-staging",
@ -12,7 +12,7 @@
"status": "running", "status": "running",
"namespace": "snapapi", "namespace": "snapapi",
"replicas": 2, "replicas": 2,
"image": "docker.io/library/snapapi:v0.4.3", "image": "git.cloonar.com/openclawd/snapapi:v0.5.2",
"healthCheck": "passing", "healthCheck": "passing",
"domain": "https://snapapi.eu", "domain": "https://snapapi.eu",
"tls": "Let's Encrypt (valid until 2026-05-20)" "tls": "Let's Encrypt (valid until 2026-05-20)"
@ -68,7 +68,7 @@
"CI/CD pipeline: workflows updated, RBAC+kubeconfig ready, BLOCKED on Forgejo token scope (needs write:repository)", "CI/CD pipeline: workflows updated, RBAC+kubeconfig ready, BLOCKED on Forgejo token scope (needs write:repository)",
"Staging TLS (blocked on DNS for staging.snapapi.eu — no DNS record exists)", "Staging TLS (blocked on DNS for staging.snapapi.eu — no DNS record exists)",
"External uptime monitoring (no UptimeRobot account/key)", "External uptime monitoring (no UptimeRobot account/key)",
"Deploy all staging features to production (v0.5.1 tag needed — investor decision)" "Deploy all staging features to production — DONE (v0.5.2 deployed 2026-02-26)"
], ],
"stripeProducts": { "stripeProducts": {
"starter": { "starter": {