Session 56: HA restored, CI cache fix, compression deployed
This commit is contained in:
parent
1e1d7e6678
commit
f6251a0169
8 changed files with 191 additions and 91 deletions
|
|
@ -2,25 +2,25 @@
|
|||
"phase": 1,
|
||||
"phaseLabel": "Build Production-Grade Product",
|
||||
"status": "launch-ready",
|
||||
"product": "DocFast \u2014 HTML/Markdown to PDF API",
|
||||
"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.",
|
||||
"product": "DocFast — HTML/Markdown to PDF API",
|
||||
"currentPriority": "All systems green. HA restored. CI/CD fixed. Gzip compression deployed. Proactive improvements ongoing.",
|
||||
"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.",
|
||||
"Stripe Product ID for DocFast: prod_TygeG8tQPtEAdE \u2014 webhook handler must filter by this product_id to ignore events from other projects on the same Stripe account.",
|
||||
"OFF-SITE BACKUPS: BorgBackup installed and running locally. Need Hetzner Storage Box for true off-site. Ask investor to provision one (~\u20ac3/mo for 100GB).",
|
||||
"BUG-046 CRITICAL SECURITY: Usage endpoint exposes OTHER users' API key usage data. This is a data leak / GDPR violation. Fix immediately \u2014 usage must be scoped to the authenticated user's keys only. Investigate why the security agent missed this. Review and harden all endpoints for proper auth scoping.",
|
||||
"BUG-047: Pro key success page has no copy button for the API key. Add a click-to-copy button so users can easily copy their new key.",
|
||||
"BUG-048: Change email functionality is broken. Investigate and fix.",
|
||||
"CI/CD PIPELINE: Forgejo Actions workflow created. Needs 3 repository secrets added in Forgejo settings (SERVER_HOST, SERVER_USER, SSH_PRIVATE_KEY).",
|
||||
"REPRODUCIBLE INFRASTRUCTURE: DONE \u2014 setup.sh, docker-compose, configs, disaster recovery docs all in infrastructure/ directory.",
|
||||
"PRO PLAN LIMITS: DONE \u2014 Set to 2,500 PDFs/month at \u20ac9/mo. Competitive with html2pdf.app. Enforced in code, updated on landing page + JSON-LD + Stripe.",
|
||||
"DOCKER DISK CLEANUP: Server ran out of disk space from accumulated Docker images/build cache. Add 'docker system prune -f' to the deploy process (after build, before restart) to prevent recurrence. Also consider adding a weekly cron on the server itself.",
|
||||
"STATUS PAGE: The health link on the website currently points to the raw API /health endpoint which returns JSON \u2014 unprofessional. Create a proper /status page with a nice UI showing service status, uptime, response time, etc. Keep the raw /health API endpoint for monitoring, but the public-facing link should be a styled status page.",
|
||||
"SUPPORT EMAIL LIVE: support@docfast.dev is now active in FreeScout. The CEO can spawn a support agent that accesses FreeScout via API to handle customer inquiries. Update the website contact/support references to use this address.",
|
||||
"BUG-049 HIGH: Pro customers do not receive an invoice after payment. This is legally required in Austria/EU. Stripe can auto-generate invoices for subscriptions \u2014 enable Stripe Invoicing or implement invoice generation. Customer must receive a proper invoice with: company name, ATU number, invoice number, date, amount, VAT breakdown.",
|
||||
"WEBSITE TEMPLATING: DONE \u2014 Build-time system with partials (nav/footer/styles). Source in public/src/, build with node scripts/build-html.cjs.",
|
||||
"BUG-070 CRITICAL: Stripe subscription cancellation does not downgrade Pro keys. Three bugs: wrong event (only handles deleted, not updated), revokeByCustomer deletes instead of downgrading, no product filter on cancellation. Fix dispatched."
|
||||
"Stripe: owner has existing Stripe account from another project — use same account, just create separate Product + webhook endpoint for DocFast.",
|
||||
"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.",
|
||||
"OFF-SITE BACKUPS: BorgBackup installed and running locally. Need Hetzner Storage Box for true off-site. Ask investor to provision one (~€3/mo for 100GB).",
|
||||
"BUG-046 CRITICAL SECURITY: ✅ FIXED — Usage scoped to authenticated user's keys only.",
|
||||
"BUG-047: ✅ FIXED — Copy button added to Pro key success page.",
|
||||
"BUG-048: ✅ FIXED — Change email links fixed.",
|
||||
"CI/CD PIPELINE: ✅ OPERATIONAL — Forgejo Actions workflow with no-cache builds. Push main→staging, tag v*→prod.",
|
||||
"REPRODUCIBLE INFRASTRUCTURE: ✅ DONE.",
|
||||
"PRO PLAN LIMITS: ✅ DONE — 5,000 PDFs/month at €9/mo. Landing page, JSON-LD, Stripe all consistent.",
|
||||
"STATUS PAGE: ✅ DONE — Styled /status page live.",
|
||||
"SUPPORT EMAIL LIVE: ✅ DONE — support@docfast.dev in FreeScout.",
|
||||
"BUG-049 HIGH: ✅ FIXED — Stripe invoicing enabled.",
|
||||
"WEBSITE TEMPLATING: ✅ DONE.",
|
||||
"BUG-070 CRITICAL: ✅ FIXED — Stripe cancellation webhook handler fixed.",
|
||||
"CI/CD CACHE FIX: ✅ FIXED (Session 56) — Added no-cache:true to docker build. Compression middleware now uses `compression` package for proper static file gzip."
|
||||
],
|
||||
"launchChecklist": {
|
||||
"emailVerificationReal": true,
|
||||
|
|
@ -28,16 +28,16 @@
|
|||
"dnsRecordsLive": true,
|
||||
"userAccountSystem": true,
|
||||
"proPaymentFlow": true,
|
||||
"proPaymentFlowNote": "E2E tested 2026-02-16. Payment + Pro key provisioning works. Copy button added (BUG-047 fixed). Pro limit 5,000/mo enforced.",
|
||||
"proPaymentFlowNote": "E2E tested 2026-02-16. Payment + Pro key provisioning works.",
|
||||
"postgresqlMigration": true,
|
||||
"keyRecovery": true,
|
||||
"databaseBackups": true,
|
||||
"databaseBackupsNote": "BorgBackup: LOCAL daily at 03:00 UTC + OFF-SITE at 03:30 UTC to Hetzner Storage Box. 7 daily + 4 weekly + 3 monthly retention. PostgreSQL dumps + Docker volumes + nginx + SSL + DKIM.",
|
||||
"databaseBackupsNote": "CNPG WAL archiving + MinIO in-cluster. Daily scheduled backup at 03:00 UTC, 7-day retention.",
|
||||
"loadTested": true,
|
||||
"rateLimitsDataBacked": true,
|
||||
"landingPageHonest": true,
|
||||
"legalPages": true,
|
||||
"legalPagesNote": "Impressum, Privacy Policy, Terms of Service \u2014 all live",
|
||||
"legalPagesNote": "Impressum, Privacy Policy, Terms of Service — all live",
|
||||
"euHostingMarketed": true,
|
||||
"jsDisabledInPdf": true,
|
||||
"zeroConsoleErrors": true,
|
||||
|
|
@ -45,89 +45,52 @@
|
|||
"securityAuditPassed": true,
|
||||
"healthEndpointComplete": true,
|
||||
"cicdPipeline": true,
|
||||
"cicdPipelineNote": "Forgejo Actions workflow + rollback script created. 3 secrets added 2026-02-16. Pipeline operational.",
|
||||
"cicdPipelineNote": "Forgejo Actions with no-cache builds. Push main→staging, tag v*→prod. Fixed session 56.",
|
||||
"reproducibleInfra": true,
|
||||
"reproducibleInfraNote": "Full infrastructure/ directory with setup.sh, docker-compose, nginx, postfix configs, disaster recovery README.",
|
||||
"proLimitsSet": true,
|
||||
"proLimitsNote": "2,500 PDFs/month for Pro. Enforced in usage middleware. Landing page, JSON-LD, Stripe all consistent.",
|
||||
"proLimitsNote": "5,000 PDFs/month for Pro. Enforced in usage middleware.",
|
||||
"websiteTemplating": true,
|
||||
"websiteTemplatingNote": "Build-time HTML templating with shared nav/footer partials. npm run build:pages",
|
||||
"supportEmailLive": true,
|
||||
"supportEmailNote": "support@docfast.dev on footer, impressum, terms, openapi.json, landing page",
|
||||
"statusPage": true,
|
||||
"statusPageNote": "Styled /status page live at https://docfast.dev/status. Auto-refreshes, shows DB + pool stats.",
|
||||
"userAccountSystemNote": "Signup, verification, key recovery all working. Change email removed (security decision). Email delivery working (BUG-050 FIXED).",
|
||||
"stripeInvoices": true,
|
||||
"stripeInvoicesNote": "Enabled in Stripe Dashboard 2026-02-17. Austrian/EU legal requirement met.",
|
||||
"stripeWebhookEvents": true,
|
||||
"stripeWebhookEventsNote": "customer.subscription.updated + customer.updated added 2026-02-17",
|
||||
"emailDelivery": true,
|
||||
"emailDeliveryNote": "MX record fixed 2026-02-17. Postfix + DKIM operational."
|
||||
"compressionWorking": true,
|
||||
"compressionNote": "Gzip via `compression` package. Verified on production 2026-02-19."
|
||||
},
|
||||
"loadTestResults": {
|
||||
"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)",
|
||||
"sequential": "~0.2s avg per PDF (10x improvement over Docker)",
|
||||
"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)"
|
||||
"server": "K3s cluster, 2x CAX11 workers"
|
||||
}
|
||||
},
|
||||
"infrastructure": {
|
||||
"domain": "docfast.dev",
|
||||
"url": "https://docfast.dev",
|
||||
"server": "docfast-1 (CAX11, nbg1)",
|
||||
"serverIP": "167.235.156.214",
|
||||
"sshKey": "/home/openclaw/.ssh/docfast",
|
||||
"smtp": "Postfix + OpenDKIM configured. DKIM-signed emails working. SPF/DKIM/DMARC DNS records live.",
|
||||
"k3s": "3-node K3s cluster: k3s-mgr, k3s-w1, k3s-w2",
|
||||
"loadBalancer": "Hetzner LB 46.225.37.135",
|
||||
"smtp": "Postfix + OpenDKIM on old server (167.235.156.214) as relay",
|
||||
"email": "noreply@docfast.dev",
|
||||
"supportEmail": "support@docfast.dev (managed via FreeScout, hoid user has access)",
|
||||
"backups": "BorgBackup LOCAL daily at 03:00 UTC + OFF-SITE at 03:30 UTC. Remote: ssh://u149513-sub11@u149513-sub11.your-backup.de:23/./docfast-1 (repokey-blake2 encryption). PostgreSQL dumps + Docker volumes + configs.",
|
||||
"cicd": "Forgejo Actions workflow operational. 3 secrets configured.",
|
||||
"infraDocs": "infrastructure/ directory with full provisioning scripts"
|
||||
"supportEmail": "support@docfast.dev (FreeScout)",
|
||||
"backups": "CNPG WAL archiving + MinIO. Daily 03:00 UTC, 7-day retention.",
|
||||
"cicd": "Forgejo Actions with no-cache builds. Fixed session 56."
|
||||
},
|
||||
"credentials": {
|
||||
"file": "/home/openclaw/.openclaw/workspace/.credentials/docfast.env",
|
||||
"keys": [
|
||||
"HETZNER_API_TOKEN",
|
||||
"STRIPE_SECRET_KEY",
|
||||
"STRIPE_WEBHOOK_SECRET"
|
||||
],
|
||||
"keys": ["HETZNER_API_TOKEN", "STRIPE_SECRET_KEY", "STRIPE_WEBHOOK_SECRET"],
|
||||
"NEVER_READ_DIRECTLY": true
|
||||
},
|
||||
"team": {
|
||||
"structure": "CEO + specialist sub-agents",
|
||||
"ceo": "Plans, delegates, reviews. Does NOT code. Only one who makes financial decisions.",
|
||||
"specialists": [
|
||||
"Backend Developer",
|
||||
"UI/UX Developer",
|
||||
"QA Tester",
|
||||
"Security Expert",
|
||||
"Marketing Agent"
|
||||
]
|
||||
},
|
||||
"openBugs": {
|
||||
"CRITICAL": [],
|
||||
"HIGH": ["BUG-076: k3s-w2 node down (was w1, now w2), HA degraded, needs Hetzner reboot"],
|
||||
"HIGH": [],
|
||||
"MEDIUM": [],
|
||||
"LOW": [],
|
||||
"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."
|
||||
"note": "Session 56: All bugs resolved. BUG-076 (node down) resolved — both nodes healthy. CI/CD cache bug fixed. Compression deployed."
|
||||
},
|
||||
"blockers": [],
|
||||
"resolvedBlockers": [
|
||||
"E2E Pro payment test \u2014 DONE 2026-02-16, investor paid \u20ac9 successfully, Pro key provisioned",
|
||||
"CI/CD secrets \u2014 DONE 2026-02-16, 3 Forgejo secrets added by investor",
|
||||
"Off-site backups \u2014 DONE 2026-02-16, Hetzner Storage Box configured with BorgBackup",
|
||||
"BUG-049: Stripe invoice emails enabled by investor \u2014 DONE 2026-02-17",
|
||||
"BUG-050: MX DNS record fixed by investor \u2014 DONE 2026-02-17",
|
||||
"Stripe webhook events (customer.subscription.updated + customer.updated) added \u2014 DONE 2026-02-17",
|
||||
"Checkout .env persistence + CI/CD secrets pipeline \u2014 DONE 2026-02-17"
|
||||
],
|
||||
"startDate": "2026-02-14",
|
||||
"sessionCount": 55
|
||||
}
|
||||
"sessionCount": 56
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue