From 6a2ee9d2f91612c7cdd06b848c65ff6a413b73c9 Mon Sep 17 00:00:00 2001 From: Jakub Zych Date: Thu, 1 Oct 2026 20:25:24 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20capture=20todo=20-=20Benchmark=20P?= =?UTF-8?q?=C5=82ytarium=20on=20WinterCMS=20vs=20SummerCMS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .planning/STATE.md | 17 ++++++++++++++++- ...e-application-on-wintercms-vs-summercms.md | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 .planning/todos/pending/2026-10-01-benchmark-the-application-on-wintercms-vs-summercms.md diff --git a/.planning/STATE.md b/.planning/STATE.md index db713d3..af42933 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -429,7 +429,22 @@ Recent decisions affecting current work: ### Pending Todos -None yet. +- [2026-10-01] [docs] Benchmark Płytarium on WinterCMS vs SummerCMS and publish a measured table — [todo file](.planning/todos/pending/2026-10-01-benchmark-the-application-on-wintercms-vs-summercms.md) +- [unknown] [summercms.go admin auth] Backend admin personal API tokens (deferred Apparatus PersonalApiToken) — [todo file](.planning/todos/pending/backend-admin-api-tokens.md) +- [unknown] [summercms.go bonfire] Reject duplicate console command names in bonfire.NewRoot — [todo file](.planning/todos/pending/bonfire-duplicate-command-names.md) +- [unknown] [summercms.go/fetchguard] Extend fetchguard into a guarded outbound http.Client (replaces Apparatus RequestSender) — [todo file](.planning/todos/pending/fetchguard-guarded-http-client.md) +- [unknown] [summercms.go lagoon] lagoon README registers an after-commit GORM callback that can sort after the flush — [todo file](.planning/todos/pending/lagoon-readme-after-commit-callback-order.md) +- [unknown] [summercms.go lagoon] lagoon.Validate reports every numeric range failure with the max message — [todo file](.planning/todos/pending/lagoon-validate-min-message.md) +- [unknown] [summercms.go] Nest framework packages under modules/ — same beach names — [todo file](.planning/todos/pending/nest-framework-packages-under-modules.md) +- [unknown] [summercms.go/modules] Short README.md per modules/* after the nest — [todo file](.planning/todos/pending/per-module-readmes-after-nest.md) +- [unknown] [summercms.go/modules/*/README.md, internal/docsite] Convert module README Go code blocks to compiled src= references — [todo file](.planning/todos/pending/readme-go-fences-src.md) +- [unknown] [summercms.go logging] Framework slog handler that redacts credentials (port RedactCredentialsTap) — [todo file](.planning/todos/pending/redacting-slog-handler.md) +- [unknown] [../fonoteka.go/README.md] Refresh fonoteka.go README — short status plus migrate/serve/login — [todo file](.planning/todos/pending/refresh-fonoteka-readme.md) +- [unknown] [summercms.go/README.md] Rewrite summercms.go README — onboard, recreate login, honest cutover — [todo file](.planning/todos/pending/rewrite-summercms-readme.md) +- [unknown] [summercms.go internal/build] make:admin-controller output does not boot and names the model after the controller — [todo file](.planning/todos/pending/scaffold-admin-controller-incomplete.md) +- [unknown] [summercms.go internal/build] Scaffolded files carry a DO NOT EDIT header, and make:command cannot reach the application — [todo file](.planning/todos/pending/scaffold-generated-header-and-command-deps.md) +- [unknown] [summercms.go internal/build] make:model and make:migration in the same second produce migrations that run out of order — [todo file](.planning/todos/pending/scaffold-same-second-migration-order.md) +- [unknown] [summercms.go wristband] Neutral default resource URL in wristband.DefaultOptions — [todo file](.planning/todos/pending/wristband-neutral-resource-default.md) ### Blockers/Concerns diff --git a/.planning/todos/pending/2026-10-01-benchmark-the-application-on-wintercms-vs-summercms.md b/.planning/todos/pending/2026-10-01-benchmark-the-application-on-wintercms-vs-summercms.md new file mode 100644 index 0000000..36af992 --- /dev/null +++ b/.planning/todos/pending/2026-10-01-benchmark-the-application-on-wintercms-vs-summercms.md @@ -0,0 +1,19 @@ +--- +created: 2026-10-01T18:25:06.041Z +title: Benchmark Płytarium on WinterCMS vs SummerCMS and publish a measured table +area: docs +severity: minor +files: + - docs/architecture/performance-and-scaling.md +--- + +## Problem + +`docs/architecture/performance-and-scaling.md` (quick task 261001-qoa) only gives typical PHP-FPM vs Go ranges, explicitly marked as not measurements of SummerCMS. The user expected a more detailed comparison and wants real numbers from Płytarium, measured on both stacks. + +## Solution + +1. Baseline now: measure Płytarium on WinterCMS (PHP-FPM, `/media/nvme/dev/golem15/fonoteka`) before the port finishes, so the PHP numbers exist independently of the Go side. +2. Once its API is ported (Phase 12+), measure Płytarium on SummerCMS (`fonoteka.go`). +3. Method: record request fixtures with tide (`summer parity:record`), replay them under load with vegeta or k6 against both backends on identical hardware and the same Postgres data. Collect per-route p50/p99 latency, req/s at a fixed concurrency, max sustainable concurrency before p99 degrades, and RSS / total memory (all FPM workers vs one Go process). Group routes by shape (trivial/cached, typical CRUD, DB-heavy). +4. Add the measured table to the performance page next to the typical-ranges table. Framework docs must not name the application: describe it as "a ported production application" and state the hardware, dataset size and tool versions.