8.3 KiB
phase, plan, subsystem, status, tags, requires, provides, affects, tech-stack, key-files, decisions, metrics, actuals, plan_head_before, plan_head_after, commits
| phase | plan | subsystem | status | tags | requires | provides | affects | tech-stack | key-files | decisions | metrics | actuals | plan_head_before | plan_head_after | commits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| quick-260928-lf2 | 01 | docs | complete |
|
|
|
|
|
|
|
|
cc584e906e |
fafb12ff02 |
5 |
Phase quick-260928-lf2 Plan 01: Module READMEs, Generic Root README and Documentation Rule Summary
The 18 module READMEs were rewritten from each package's real exported API. The root README is now a generic framework README whose quick start was verified against a real Postgres. CLAUDE.md now requires module README updates in the same change as any module API, config, CLI or dependency change.
Commits
| Task | Commit | Subject |
|---|---|---|
| 1 (batch A) | 1bd3494 |
docs(modules): rewrite cabana, wire, towel, festival, compass, backpack READMEs |
| 1 (batch B) | 3142aeb |
docs(modules): rewrite lagoon, tide, pact, party, boardwalk, fetchguard READMEs |
| 1 (batch C) | aaa892f |
docs(modules): rewrite wristband, bouncer, surf, bonfire, phrasebook, postcard READMEs |
| 2 | 70d3c39 |
docs: generic root README |
| 3 | fafb12f |
docs(claude): require module README updates |
No commit carries a co-author or other attribution trailer.
What was done
- Task 1 (done earlier, three batch commits): 18 module READMEs follow the locked template and name no consuming application. Every package-qualified identifier resolves through go doc.
- Task 2: The root
README.mdcovers the nine outline items: what SummerCMS is, key concepts, requirements, a quick start onexamples/hello, the repository layout, the modules table, module path plus local replace, development commands, and design notes. The modules table has 18 rows, and each purpose cell matches that module README's summary sentence exactly (checked by script). The notes section links only the four app-neutral notes. - Task 3:
## Documentationsits between## Commit rulesand the first<!-- GSD:project-start -->marker. It has four bullets: the same-change README update rule, the standard structure plus a modules-table row for new modules, no consuming-application names, and go doc identifier checks. The change only adds lines (7 insertions, 0 deletions).
Quick start verification
Every command in the quick start was confirmed before it was written:
go run ./cmd/summer --helpand./bin/hello --helplist the quoted commands.summer buildinexamples/helloproducesbin/hello.greeter:helloandkey:generaterun without a database.- A throwaway
postgres:16-alpinecontainer, with a database created with ICUpl-PL, was used for the rest. WithSUMMER_DATABASE__DSN,SUMMER_APP__KEYandSUMMER_STORAGE__UPLOADS__BUCKET_URL=mem://set, and a temporaryconfig/http.yamlholding the body limits, these all succeeded:migrate,migrate:status,route:list, andserve --addr(GET /items/1returned{"id":1}).
Afterwards the temporary config file was removed, the regenerated main.go was restored and the container was stopped. git status --porcelain examples/ is empty.
Checks
| Check | Result |
|---|---|
| Forbidden-name grep over README.md and modules/*/README.md | NAMES OK |
| Root README content (TABLE/MISSING/LAYOUT) | ROOT OK |
| Relative links in README.md and all module READMEs | LINKS OK |
| Module README structure (title, import, section order) | STRUCTURE OK |
| Package-qualified identifiers resolve via go doc | IDENTS OK |
scripts/check-phase10.2.sh --readmes and --status |
pass |
git status --porcelain examples/ empty |
pass |
| CLAUDE.md section placement, additions only | CLAUDE OK |
go vet ./..., go test ./..., no .go changes since cc584e9, no co-author trailer |
SANITY OK |
The Task 1 executors reported that the plain ]( link check gives false positives on Go generics inside code blocks. The plan's check excludes (, # and whitespace from the target, and it reported no false positives on the final files.
Deviations from Plan
- Quick start content. The plan outline puts
serveandmigrateright aftersummer build. In practice they also needapp.key, an uploads bucket URL, numerichttp.body_limitsvalues from a config file and an ICUpl-PLdatabase. The README states these requirements and adds a Known issues subsection rather than leaving out steps. No Go code or example config was changed. - Commits on master. They were made on
master. The project config usesbranching_strategy: noneand no worktrees, and Task 1 and the orchestrator instructions follow the same practice.
Known Stubs
None.
Follow-ups (not fixed; docs-only task)
examples/hellolackshttp.body_limitsconfig. surf fails at boot withsurf: config http.body_limits.default_bytes is required, which breaksserve,route:listand the example'sTestTypedItemRoute(confirmed:cd examples/hello && go test ./...fails there). The rootgo test ./...does not cover the example module, so it stays green. Fix: addexamples/hello/config/http.yamlwithdefault_bytes/upload_bytes, then drop step 2 and the first Known issues bullet from the root README.- The
SUMMER_env overlay cannot set numeric keys that surf reads.SUMMER_HTTP__BODY_LIMITS__DEFAULT_BYTES=1048576is rejected withmust be numeric, got string. Either compass should coerce these values or surf should parse numeric strings. - surf validates
http.body_limits.upload_bytesbut never applies it. - lagoon hardcodes an application locale:
lagoon.CheckLocalerequires ICUpl-PL(requiredICULocaleinmodules/lagoon/connection.go). This should be configurable, withpl-PLas the application's setting. - wristband hardcodes application values:
wristband.DefaultOptions().Resourceis an application URL, and the scopes and/oauth/mcp/*paths are fixed. These should come from options or config. - The committed
examples/hello/main.gois stale. It predates the generator'ssurf.RouteListCommandandcabana.RuntimeCommandswiring, sosummer buildand the example'sTestBuiltBinary*tests leave it modified. Fix: regenerate and commit it. key:generateprints a✓prefix before the key, soexport SUMMER_APP__KEY=$(./bin/hello key:generate)produces an invalid key. The README tells readers to copy the value. Consider printing the bare key to stdout.- Application repository README: the removed application-specific run steps (database setup, admin path, cutover status) should be checked against the application repository's own README. It was not edited here, per the plan.