diff --git a/concurrent_a.pdf b/concurrent_a.pdf new file mode 100644 index 0000000..7b8f31c Binary files /dev/null and b/concurrent_a.pdf differ diff --git a/concurrent_b.pdf b/concurrent_b.pdf new file mode 100644 index 0000000..6b394e7 Binary files /dev/null and b/concurrent_b.pdf differ diff --git a/large_test.html b/large_test.html new file mode 100644 index 0000000..152ee19 --- /dev/null +++ b/large_test.html @@ -0,0 +1,61 @@ +Large Test Document +

Performance Test Document

+

Large HTML Payload Test

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Row 1 Column 1Row 1 Column 2Row 1 Column 3Data value for row 1 that contains more text to increase the payload size significantly
Row 2 Column 1Row 2 Column 2Row 2 Column 3Data value for row 2 that contains more text to increase the payload size significantly
Row 3 Column 1Row 3 Column 2Row 3 Column 3Data value for row 3 that contains more text to increase the payload size significantly
Row 4 Column 1Row 4 Column 2Row 4 Column 3Data value for row 4 that contains more text to increase the payload size significantly
Row 5 Column 1Row 5 Column 2Row 5 Column 3Data value for row 5 that contains more text to increase the payload size significantly
Row 6 Column 1Row 6 Column 2Row 6 Column 3Data value for row 6 that contains more text to increase the payload size significantly
Row 7 Column 1Row 7 Column 2Row 7 Column 3Data value for row 7 that contains more text to increase the payload size significantly
Row 8 Column 1Row 8 Column 2Row 8 Column 3Data value for row 8 that contains more text to increase the payload size significantly
Row 9 Column 1Row 9 Column 2Row 9 Column 3Data value for row 9 that contains more text to increase the payload size significantly
Row 10 Column 1Row 10 Column 2Row 10 Column 3Data value for row 10 that contains more text to increase the payload size significantly
Row 11 Column 1Row 11 Column 2Row 11 Column 3Data value for row 11 that contains more text to increase the payload size significantly
Row 12 Column 1Row 12 Column 2Row 12 Column 3Data value for row 12 that contains more text to increase the payload size significantly
Row 13 Column 1Row 13 Column 2Row 13 Column 3Data value for row 13 that contains more text to increase the payload size significantly
Row 14 Column 1Row 14 Column 2Row 14 Column 3Data value for row 14 that contains more text to increase the payload size significantly
Row 15 Column 1Row 15 Column 2Row 15 Column 3Data value for row 15 that contains more text to increase the payload size significantly
Row 16 Column 1Row 16 Column 2Row 16 Column 3Data value for row 16 that contains more text to increase the payload size significantly
Row 17 Column 1Row 17 Column 2Row 17 Column 3Data value for row 17 that contains more text to increase the payload size significantly
Row 18 Column 1Row 18 Column 2Row 18 Column 3Data value for row 18 that contains more text to increase the payload size significantly
Row 19 Column 1Row 19 Column 2Row 19 Column 3Data value for row 19 that contains more text to increase the payload size significantly
Row 20 Column 1Row 20 Column 2Row 20 Column 3Data value for row 20 that contains more text to increase the payload size significantly
Row 21 Column 1Row 21 Column 2Row 21 Column 3Data value for row 21 that contains more text to increase the payload size significantly
Row 22 Column 1Row 22 Column 2Row 22 Column 3Data value for row 22 that contains more text to increase the payload size significantly
Row 23 Column 1Row 23 Column 2Row 23 Column 3Data value for row 23 that contains more text to increase the payload size significantly
Row 24 Column 1Row 24 Column 2Row 24 Column 3Data value for row 24 that contains more text to increase the payload size significantly
Row 25 Column 1Row 25 Column 2Row 25 Column 3Data value for row 25 that contains more text to increase the payload size significantly
Row 26 Column 1Row 26 Column 2Row 26 Column 3Data value for row 26 that contains more text to increase the payload size significantly
Row 27 Column 1Row 27 Column 2Row 27 Column 3Data value for row 27 that contains more text to increase the payload size significantly
Row 28 Column 1Row 28 Column 2Row 28 Column 3Data value for row 28 that contains more text to increase the payload size significantly
Row 29 Column 1Row 29 Column 2Row 29 Column 3Data value for row 29 that contains more text to increase the payload size significantly
Row 30 Column 1Row 30 Column 2Row 30 Column 3Data value for row 30 that contains more text to increase the payload size significantly
Row 31 Column 1Row 31 Column 2Row 31 Column 3Data value for row 31 that contains more text to increase the payload size significantly
Row 32 Column 1Row 32 Column 2Row 32 Column 3Data value for row 32 that contains more text to increase the payload size significantly
Row 33 Column 1Row 33 Column 2Row 33 Column 3Data value for row 33 that contains more text to increase the payload size significantly
Row 34 Column 1Row 34 Column 2Row 34 Column 3Data value for row 34 that contains more text to increase the payload size significantly
Row 35 Column 1Row 35 Column 2Row 35 Column 3Data value for row 35 that contains more text to increase the payload size significantly
Row 36 Column 1Row 36 Column 2Row 36 Column 3Data value for row 36 that contains more text to increase the payload size significantly
Row 37 Column 1Row 37 Column 2Row 37 Column 3Data value for row 37 that contains more text to increase the payload size significantly
Row 38 Column 1Row 38 Column 2Row 38 Column 3Data value for row 38 that contains more text to increase the payload size significantly
Row 39 Column 1Row 39 Column 2Row 39 Column 3Data value for row 39 that contains more text to increase the payload size significantly
Row 40 Column 1Row 40 Column 2Row 40 Column 3Data value for row 40 that contains more text to increase the payload size significantly
Row 41 Column 1Row 41 Column 2Row 41 Column 3Data value for row 41 that contains more text to increase the payload size significantly
Row 42 Column 1Row 42 Column 2Row 42 Column 3Data value for row 42 that contains more text to increase the payload size significantly
Row 43 Column 1Row 43 Column 2Row 43 Column 3Data value for row 43 that contains more text to increase the payload size significantly
Row 44 Column 1Row 44 Column 2Row 44 Column 3Data value for row 44 that contains more text to increase the payload size significantly
Row 45 Column 1Row 45 Column 2Row 45 Column 3Data value for row 45 that contains more text to increase the payload size significantly
Row 46 Column 1Row 46 Column 2Row 46 Column 3Data value for row 46 that contains more text to increase the payload size significantly
Row 47 Column 1Row 47 Column 2Row 47 Column 3Data value for row 47 that contains more text to increase the payload size significantly
Row 48 Column 1Row 48 Column 2Row 48 Column 3Data value for row 48 that contains more text to increase the payload size significantly
Row 49 Column 1Row 49 Column 2Row 49 Column 3Data value for row 49 that contains more text to increase the payload size significantly
Row 50 Column 1Row 50 Column 2Row 50 Column 3Data value for row 50 that contains more text to increase the payload size significantly
+

This is paragraph 1 with additional content to increase the document size and complexity. The goal is to test how the system handles larger HTML payloads and whether processing time scales with document complexity.

+

This is paragraph 2 with additional content to increase the document size and complexity. The goal is to test how the system handles larger HTML payloads and whether processing time scales with document complexity.

+

This is paragraph 3 with additional content to increase the document size and complexity. The goal is to test how the system handles larger HTML payloads and whether processing time scales with document complexity.

+

This is paragraph 4 with additional content to increase the document size and complexity. The goal is to test how the system handles larger HTML payloads and whether processing time scales with document complexity.

+

This is paragraph 5 with additional content to increase the document size and complexity. The goal is to test how the system handles larger HTML payloads and whether processing time scales with document complexity.

+ diff --git a/large_test.pdf b/large_test.pdf new file mode 100644 index 0000000..ef6f69c Binary files /dev/null and b/large_test.pdf differ diff --git a/large_test2.pdf b/large_test2.pdf new file mode 100644 index 0000000..9123152 Binary files /dev/null and b/large_test2.pdf differ diff --git a/memory/portfolio.json b/memory/portfolio.json index 39487fa..65eac33 100644 --- a/memory/portfolio.json +++ b/memory/portfolio.json @@ -52,17 +52,14 @@ ], "notes": "N26 uses Xetra tickers. Always provide ISIN for orders. Fractional shares by EUR amount supported.", "created": "2026-02-12T20:00:00Z", - "lastUpdated": "2026-02-17T16:15:00Z", + "lastUpdated": "2026-02-18T16:15:00Z", "closingSnapshot": { "date": "2026-02-18", - "DFNS": 57.80, - "portfolioValue": 1027.92, - "dailyPL": 1.89, - "totalReturn": 2.79 + "DFNS": 58.61, + "portfolioValue": 1042.36, + "dailyPL": 14.40, + "dailyPLpct": 1.40, + "totalReturn": 4.24 }, - "middayCheck": { - "date": "2026-02-18", - "DFNS": 57.80, - "action": "HOLD" - } + "pendingActions": [] } diff --git a/memory/wind-down-log.json b/memory/wind-down-log.json index 77dd7c1..41d416b 100644 --- a/memory/wind-down-log.json +++ b/memory/wind-down-log.json @@ -1,35 +1,6 @@ { - "date": "2026-02-17", + "date": "2026-02-18", "events": [ - { - "time": "19:03", - "type": "nudge", - "note": "First wind-down check — asked what they're doing." - }, - { - "time": "19:00", - "type": "activity", - "note": "Ordered Kenko poke bowl with salmon, sushi rice, veggies, sesame sauce + edamame" - }, - { - "time": "20:12", - "type": "nudge", - "note": "Second nudge — nose shower reminder + audiobook suggestion" - }, - { - "time": "20:30-00:00", - "type": "activity", - "note": "Kept working on DocFast (support formatting, needs-reply bug, product research, Coolify skill). Hoid failed to nudge — got caught up helping instead of pushing back." - }, - { - "time": "00:00", - "type": "self-critique", - "note": "FAILURE: Did not nudge after 20:12. Should have actively blocked new work after 20:00. User called it out at midnight." - }, - { - "time": "01:00", - "type": "sleep", - "note": "Fell asleep around 01:00 Vienna. Late but better than working at midnight." - } + {"time": "19:02", "type": "nudge", "note": "First wind-down nudge sent at 19:00 Vienna"} ] } diff --git a/prod_test.pdf b/prod_test.pdf new file mode 100644 index 0000000..8a5fc9a Binary files /dev/null and b/prod_test.pdf differ diff --git a/projects/business/memory/sessions.md b/projects/business/memory/sessions.md index deaab86..07fd071 100644 --- a/projects/business/memory/sessions.md +++ b/projects/business/memory/sessions.md @@ -1305,3 +1305,30 @@ - **Budget:** €181.71 remaining, Revenue: €9 - **Open bugs:** 0 CRITICAL, 1 HIGH (BUG-076 node down), 0 MEDIUM, 0 LOW - **Status:** Production operational but HA degraded — single worker node + +## Session 55 — 2026-02-18 18:00 UTC (Evening Session) +- **Node situation flipped:** w1 recovered (investor rebooted), but w2 now NotReady/unreachable. HA still degraded — single worker. +- **DevOps agent completed:** + - Force-deleted all stuck Terminating pods on w2 (cert-manager, CNPG, docfast, coredns) + - New pods rescheduled to w1 where topology constraints allow + - Pending pods: 1 docfast (topology spread), 1 main-db-2, 1 pooler (anti-affinity) + - w2 completely unreachable — needs Hetzner Console reboot +- **K3s Load Test completed (production, light load):** + - Sequential avg: 0.198s (10x improvement over Docker's ~2.1s) + - P95: 0.235s, range 0.176-0.235s + - 2 concurrent: ~0.27s each, 100% success + - Large payload (104KB, 3 pages): 1.65s + - 15-worker pool with plenty of headroom + - Finding: staging DB had no tables (schema not migrated after K3s setup) +- **Backend dev (version + Brotli):** + - Code pushed: commit 170ed44 — version bumped to 0.2.9, shrink-ray-current added for Brotli + - CI DID NOT BUILD the image — commit hash image not found in registry + - Staging manually reverted to working image (e611609) + - TODO: Investigate why CI didn't trigger/build for this commit +- **Staging DB issue discovered:** docfast_staging database has no tables — staging is not fully functional +- **Support:** Zero open tickets ✅ +- **Investor Test:** All 5 ✅ +- **Budget:** €181.71 remaining, Revenue: €9 +- **Open bugs:** 0 CRITICAL, 1 HIGH (BUG-076 — now w2 down instead of w1) +- **Escalation:** w2 reboot needed via Hetzner Console +- **New issues found:** Staging DB missing schema, CI pipeline may have failed for latest commit diff --git a/projects/business/memory/state.json b/projects/business/memory/state.json index 4ad5eba..695211a 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 \u2014 HTML/Markdown to PDF API", - "currentPriority": "k3s-w1 NODE DOWN — running on w2 only. HA degraded. Escalated to investor for Hetzner reboot.", + "currentPriority": "k3s-w2 NODE DOWN — running on w1 only. HA degraded. Escalated to investor for Hetzner reboot. Version+Brotli code pushed but CI didn't build image.", "ownerDirectives_PRIORITY": "Process these IN ORDER. Do not skip.", "ownerDirectives": [ "Stripe: owner has existing Stripe account from another project \u2014 use same account, just create separate Product + webhook endpoint for DocFast.", @@ -65,9 +65,18 @@ "emailDeliveryNote": "MX record fixed 2026-02-17. Postfix + DKIM operational." }, "loadTestResults": { - "sequential": "~2.1s per PDF, ~28/min", - "concurrent": "3 safe, 5th fails at ~16s", - "server": "CAX11 (2 vCPU ARM, 4GB RAM), container 512MB cap" + "docker_old": { + "sequential": "~2.1s per PDF, ~28/min", + "concurrent": "3 safe, 5th fails at ~16s", + "server": "CAX11 (2 vCPU ARM, 4GB RAM), container 512MB cap" + }, + "k3s_current": { + "sequential": "~0.2s avg per PDF (10x improvement)", + "p95": "0.235s", + "concurrent": "2 concurrent at ~0.27s, 15-worker pool", + "largePayload": "1.65s for 104KB/3-page PDF", + "server": "K3s cluster, 2x CAX11 workers (1 active due to w2 down)" + } }, "infrastructure": { "domain": "docfast.dev", @@ -104,10 +113,10 @@ }, "openBugs": { "CRITICAL": [], - "HIGH": ["BUG-076: k3s-w1 node down, HA degraded, needs Hetzner reboot"], + "HIGH": ["BUG-076: k3s-w2 node down (was w1, now w2), HA degraded, needs Hetzner reboot"], "MEDIUM": [], "LOW": [], - "note": "Session 54: k3s-w1 node down. CNPG failover to main-db-2 worked. Production running on w2 only. HA validated but degraded." + "note": "Session 55: w1 recovered, w2 now down. Stuck pods force-deleted. Production on w1 only. K3s load test: ~0.2s avg (10x faster than Docker). Version/Brotli code pushed, CI didn't build." }, "blockers": [], "resolvedBlockers": [ @@ -120,5 +129,5 @@ "Checkout .env persistence + CI/CD secrets pipeline \u2014 DONE 2026-02-17" ], "startDate": "2026-02-14", - "sessionCount": 54 + "sessionCount": 55 } \ No newline at end of file diff --git a/staging_real_test.pdf b/staging_real_test.pdf new file mode 100644 index 0000000..240aef9 --- /dev/null +++ b/staging_real_test.pdf @@ -0,0 +1 @@ +{"error":"Invalid API key"}Status: 403, Size: 27 bytes, Time: 0.102511s diff --git a/staging_test.pdf b/staging_test.pdf new file mode 100644 index 0000000..14920d3 --- /dev/null +++ b/staging_test.pdf @@ -0,0 +1 @@ +{"error":"Invalid API key"}Status: 403, Size: 27 bytes, Time: 0.091674s diff --git a/staging_test2.pdf b/staging_test2.pdf new file mode 100644 index 0000000..0bb231f --- /dev/null +++ b/staging_test2.pdf @@ -0,0 +1 @@ +{"error":"Invalid API key"}Status: 403, Size: 27 bytes, Time: 0.113528s diff --git a/test.pdf b/test.pdf new file mode 100644 index 0000000..3d80520 --- /dev/null +++ b/test.pdf @@ -0,0 +1 @@ +{"error":"Invalid API key"}Status: 403, Size: 27 bytes, Time: 0.113809s