docs(32-06): complete the unit tests and v0.5.1 release plan
This commit is contained in:
375
.planning/phases/32-seo-foundation/32-06-SUMMARY.md
Normal file
375
.planning/phases/32-seo-foundation/32-06-SUMMARY.md
Normal file
@@ -0,0 +1,375 @@
|
||||
---
|
||||
phase: 32-seo-foundation
|
||||
plan: 06
|
||||
subsystem: release
|
||||
tags: [release, apisurface, additive-gate, compat-gate, unit-tests, vitest, sm-seo-plugin, sm-journal-plugin, sm-demo-app, changelog]
|
||||
|
||||
requires:
|
||||
- phase: 32-01
|
||||
provides: cross-plugin admin form extensions (pact.AdminFormExtension, cabana compile and save)
|
||||
- phase: 32-02
|
||||
provides: record events (pact.RecordSaved/RecordDeleted, cabana.EmitRecord*), content descriptors (pact.ContentDescriptor, signpost lookups), Journal adoption
|
||||
- phase: 32-03
|
||||
provides: sm-seo-plugin core (entries, rules, settings, resolver, history)
|
||||
- phase: 32-04
|
||||
provides: redirects, 404 log, robots.txt
|
||||
- phase: 32-05
|
||||
provides: management API, MCP tools, batches, undo, CSV, check-phase32.sh, 32-05-demo-mount.patch
|
||||
provides:
|
||||
- "scripts/check-phase32.sh stages additive (scripts/apisurface API-surface comparison with the previous release) and compat (three consumers tested, every other sibling built), with self-tests"
|
||||
- "Framework unit matrices for form extensions, record events and content descriptors"
|
||||
- "sm-seo-plugin unit tests (classes) and 52 vitest element tests; sm-journal-plugin descriptor, journal-tag and translated-slug tests"
|
||||
- "SummerCMS v0.5.1 (patch, strictly additive), sm-journal-plugin v0.2.5, sm-seo-plugin v0.1.0 (first release), all pushed"
|
||||
- "sm-demo-app mounts golem15.seo v0.1.0 (pushed, not deployed)"
|
||||
- "Changelog post https://summercms.io/changelog/summercms-0-5-1"
|
||||
affects: [33, sm-demo-app, sm-grzybyfunkcjonalne-app, sm-summercmsio-app, vue-seo-layer]
|
||||
|
||||
actuals:
|
||||
tokens: 51000
|
||||
tasks: 5
|
||||
commits: 4
|
||||
plan_head_before: 49502e8ccb98e29a067961641dd08e2d39e42f27
|
||||
plan_head_after: a9a7f58eedaf70edd3472b6aebe01b2db4cbb498
|
||||
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns:
|
||||
- "Release gate: the API surface of every changed framework package is compared with the previous release tag (tags containing HEAD skipped); removed or changed elements and methods added to existing interfaces are refused"
|
||||
- "Compat gate reads sibling repositories through temporary-index snapshots or detached worktrees and builds them in a symlinked scratch sibling layout"
|
||||
- "Release steps are logged as they complete (32-06-release-log.md) so a resumed run never re-tags, force-pushes or re-posts"
|
||||
|
||||
key-files:
|
||||
created:
|
||||
- scripts/apisurface/main.go
|
||||
- modules/cabana/form_extensions_test.go
|
||||
- modules/cabana/record_events_test.go
|
||||
- modules/signpost/content_test.go
|
||||
- .planning/phases/32-seo-foundation/32-06-release-log.md
|
||||
- .planning/phases/32-seo-foundation/deferred-items.md
|
||||
- ../sm-seo-plugin/classes/*_test.go (resolver, redirect_graph, normalize, robots_value, robots, templates, csv, owner, issues, helpers)
|
||||
- ../sm-seo-plugin/tests/elements/{text,robots,serp,robotstxt,transfer}.test.ts, tests/elements/css.ts
|
||||
- ../sm-journal-plugin/content_descriptors_test.go
|
||||
- ../sm-demo-app/config/golem15.seo.yaml, seo_mount_test.go, seo_mcp_test.go
|
||||
modified:
|
||||
- scripts/check-phase32.sh
|
||||
- .planning/phases/32-seo-foundation/32-VALIDATION.md
|
||||
- ../sm-seo-plugin/go.mod, README.md, classes/redirect_graph.go, classes/issues.go, classes/robots.go, assets/src/elements/measure.ts, assets/dist/seo.js
|
||||
- ../sm-journal-plugin/go.mod, README.md, menu_item_types_test.go
|
||||
- ../sm-demo-app/go.mod, go.sum, go.work, .gitmodules, summer.yaml, plugins.gen.go, boot_test.go, DEPLOY.md, deploy/nginx/demo.summercms.io.conf, plugins/golem15/journal, plugins/golem15/seo
|
||||
|
||||
key-decisions:
|
||||
- "Release per Jakub's go-ahead: SummerCMS v0.5.1, sm-journal-plugin v0.2.5, sm-seo-plugin v0.1.0, all pushed with their branches; sm-demo-app's three commits pushed; nothing deployed"
|
||||
- "The additive gate compares with the newest tag that does not contain HEAD, so a run on the tagged release commit compares it with the previous release, not with itself"
|
||||
- "The demo Journal bump replaces the other session's uncommitted journal pointer drift on the same path (b129902, an ancestor of v0.2.5) with the v0.2.5 pointer; the oauthserver drift is left untouched"
|
||||
- "check-pins is proven on the committed demo tree (clean detached worktree), because the live tree carries another session's oauthserver drift"
|
||||
- "The optional app Journal bumps and per-plugin changelog posts were not named and are deferred"
|
||||
|
||||
patterns-established:
|
||||
- "Post-release gate runs pick the previous release as the additive baseline (git tag --no-contains HEAD)"
|
||||
|
||||
requirements-completed: [SC-5, SC-1, SC-2, SC-3, SC-4, Q-01, D-106, D-90, D-91, D-92, D-93, D-98, D-22, D-25, D-09]
|
||||
|
||||
coverage:
|
||||
- id: D1
|
||||
description: "Additive and compat gate stages: the v0.5.1 API surface keeps every v0.5.0 element (cabana +2, pact +87, signpost +8 lines, nothing removed or changed, no interface method added); consumers build and test unchanged"
|
||||
requirement: "D-106"
|
||||
verification:
|
||||
- kind: other
|
||||
ref: "bash scripts/check-phase32.sh --additive (release commit 15b0d0d vs v0.5.0); bash scripts/check-phase32.sh --self-test"
|
||||
status: pass
|
||||
- kind: other
|
||||
ref: "bash scripts/check-phase32.sh --all (compat stage: 3 consumers tested, 20 siblings built)"
|
||||
status: pass
|
||||
human_judgment: false
|
||||
- id: D2
|
||||
description: "Framework unit matrices for form extensions, record events and content descriptors"
|
||||
requirement: "SC-5"
|
||||
verification:
|
||||
- kind: unit
|
||||
ref: "go test ./modules/cabana ./modules/signpost (form_extensions_test.go, record_events_test.go, content_test.go)"
|
||||
status: pass
|
||||
human_judgment: false
|
||||
- id: D3
|
||||
description: "sm-seo-plugin class unit tests and element tests; Journal descriptor, journal-tag and translated-slug tests"
|
||||
requirement: "SC-5"
|
||||
verification:
|
||||
- kind: unit
|
||||
ref: "go -C ../sm-seo-plugin test ./... (TestResolverPrecedence, TestRedirectGraph, TestNormalizeMatrix, TestRobotsValueRoundTrip, TestRobotsMatcherGoogleExamples, TestTemplates, TestCSV, TestOwnerResolution, TestIssues)"
|
||||
status: pass
|
||||
- kind: unit
|
||||
ref: "npm --prefix ../sm-seo-plugin run test (52 element tests)"
|
||||
status: pass
|
||||
- kind: unit
|
||||
ref: "go -C ../sm-journal-plugin test ./... (content_descriptors_test.go, menu_item_types_test.go)"
|
||||
status: pass
|
||||
human_judgment: false
|
||||
- id: D4
|
||||
description: "Releases tagged and pushed: SummerCMS v0.5.1, sm-journal-plugin v0.2.5, sm-seo-plugin v0.1.0"
|
||||
requirement: "Q-01"
|
||||
verification:
|
||||
- kind: other
|
||||
ref: "git ls-remote --tags origin v0.5.1 / v0.2.5 / v0.1.0 (aa6e0a5, 16d9326, 9cf0447)"
|
||||
status: pass
|
||||
human_judgment: false
|
||||
- id: D5
|
||||
description: "sm-demo-app mounts golem15.seo v0.1.0 with tagged requires; SEO tab and MCP catalog proven"
|
||||
requirement: "SC-4"
|
||||
verification:
|
||||
- kind: integration
|
||||
ref: "go -C ../sm-demo-app test -count=1 -tags summercms_mcp -run 'TestSEOToolsCatalog|TestGoModRequiresTags|TestSEOTabMounted|TestBootAllPlugins' . (Docker)"
|
||||
status: pass
|
||||
- kind: other
|
||||
ref: "scripts/check-pins.sh in a clean worktree of 9451b31: check-pins: ok (17 modules)"
|
||||
status: pass
|
||||
human_judgment: false
|
||||
- id: D6
|
||||
description: "Full phase gate green with the demo mounted and no skips"
|
||||
requirement: "D-90"
|
||||
verification:
|
||||
- kind: other
|
||||
ref: "bash scripts/check-phase32.sh --all (exit 0, Phase 32 gate passed)"
|
||||
status: pass
|
||||
human_judgment: false
|
||||
- id: D7
|
||||
description: "Changelog post for v0.5.1 on summercms.io reads well and says the right things to users"
|
||||
verification:
|
||||
- kind: other
|
||||
ref: "https://summercms.io/changelog/summercms-0-5-1 answers 200; API shows published at the tag date"
|
||||
status: pass
|
||||
human_judgment: true
|
||||
rationale: "Wording and emphasis of public release notes are an editorial call"
|
||||
|
||||
duration: 1h 25m
|
||||
completed: 2026-10-27
|
||||
status: complete
|
||||
---
|
||||
|
||||
# Phase 32 Plan 06: Unit tests, additive release gate and the v0.5.1 release Summary
|
||||
|
||||
**The phase is proven and released. An API-surface gate shows the framework change is strictly additive against v0.5.0, and a compat gate builds every sibling consumer unchanged. Unit tests cover the framework seams, the SEO plugin (Go and elements) and Journal. SummerCMS v0.5.1, sm-journal-plugin v0.2.5 and sm-seo-plugin v0.1.0 are tagged and pushed. sm-demo-app mounts golem15.seo v0.1.0 and is pushed, not deployed. The changelog post is at https://summercms.io/changelog/summercms-0-5-1.**
|
||||
|
||||
## Performance
|
||||
|
||||
- **Duration:** about 1h 25m in two executor contexts (Tasks 1 to 3, then Task 5 after the Task 4 checkpoint)
|
||||
- **Started:** 2026-10-27T11:51Z (plan base 49502e8)
|
||||
- **Completed:** 2026-10-27T13:20Z
|
||||
- **Tasks:** 5 (4 executed, 1 decision checkpoint)
|
||||
- **Files modified:** 6 in this repository, 23 in sm-seo-plugin, 4 in sm-journal-plugin, 14 in sm-demo-app
|
||||
|
||||
## Task 4 answer (Jakub)
|
||||
|
||||
- **Decision:** release. Versions confirmed: v0.5.1, v0.2.5 and v0.1.0.
|
||||
- **Approved pushes:**
|
||||
- framework master and v0.5.1 (master carried 64 commits, including other sessions' work; accepted)
|
||||
- sm-journal-plugin main and v0.2.5
|
||||
- sm-seo-plugin main (first push) and v0.1.0
|
||||
- sm-demo-app master with three commits
|
||||
- **Changelog:** a post for v0.5.1.
|
||||
- **Not named:** the optional app Journal bumps. **Nothing deployed.**
|
||||
- **Gate:** the full run with the demo mounted and no test skips. The fixture is readable after the chown.
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- `check-phase32.sh` has two new stages:
|
||||
- **additive:** `scripts/apisurface` compares the exported API with the previous release and refuses removed or changed elements and methods added to existing interfaces. The self-test plants each case.
|
||||
- **compat:** sm-sitemap-plugin, sm-journal-plugin and sm-demo-app are tested; every other sibling that requires the framework is built.
|
||||
- **Unit tests:**
|
||||
- framework matrices for form extensions, record events and content descriptors
|
||||
- sm-seo-plugin classes (resolver, redirect graph, normalisation, robots value and matcher, templates, CSV, owner, issues) and 52 vitest element tests
|
||||
- Journal: descriptors, the journal-tag type and translated slugs
|
||||
- **Releases:** v0.5.1, v0.2.5 and v0.1.0 are tagged and pushed. Both plugins require v0.5.1.
|
||||
- **Demo:** sm-demo-app requires v0.5.1, bumps Journal to v0.2.5 and mounts golem15.seo v0.1.0 (the 32-05 patch, the submodule and go.work).
|
||||
- **Changelog:** v0.5.1 is announced.
|
||||
|
||||
## Task Commits
|
||||
|
||||
**summercms.go**
|
||||
1. **Task 1: additive and compat stages** - `2b300ec` (test)
|
||||
2. **Task 2: framework unit matrices** - `8c961f5` (test)
|
||||
3. **Task 3D: validation map** - `15b0d0d` (docs). This is the release commit, tagged v0.5.1.
|
||||
4. **Task 5 fix: additive baseline after tagging** - `a9a7f58` (fix). Local only, after the tag.
|
||||
|
||||
**sm-seo-plugin**
|
||||
- Task 3 fixes and refactors:
|
||||
- `e957c00` refactor: run the redirect simulation over a rule list
|
||||
- `79567b3` fix: a loop through the site's absolute URL lists each address once
|
||||
- `6d54fc7` refactor: build the issue report from loaded data
|
||||
- `9461c74` fix: the result preview truncates at the last word boundary
|
||||
- Task 3A: `9e45ddc` test: unit tests for the SEO classes
|
||||
- Task 3B: `dcfbdc0` test: element backstops
|
||||
- Task 5: `b19cd06` chore: require SummerCMS v0.5.1. Tagged v0.1.0.
|
||||
|
||||
**sm-journal-plugin**
|
||||
- Task 3C: `fea88f8` test: content descriptors, journal-tag type and translated slugs
|
||||
- Task 5: `f5a0394` chore: require SummerCMS v0.5.1. Tagged v0.2.5.
|
||||
|
||||
**sm-demo-app** (Task 5)
|
||||
- `11f64bf` chore: require SummerCMS v0.5.1 (go.mod, go.sum)
|
||||
- `11d485f` chore: bump journal to v0.2.5 (go.mod, go.sum, plugins/golem15/journal)
|
||||
- `9451b31` feat: mount golem15.seo v0.1.0 (13 paths, all from this plan)
|
||||
|
||||
**Plan metadata:** the commit that adds this SUMMARY (docs).
|
||||
|
||||
`commits: 4` is measured in this repository with `git rev-list --count 49502e8..HEAD` before this SUMMARY's commit. Sibling commits are listed above.
|
||||
|
||||
## Release steps (from 32-06-release-log.md)
|
||||
|
||||
- **Pre-checks:**
|
||||
- framework: newest tag v0.5.0; master was 64 ahead of origin/master and 0 behind.
|
||||
- admin/: only `admin/tests/form/FormView.test.ts` changed, so no dist rebuild was needed.
|
||||
- **Step 1, framework:**
|
||||
- `go vet` and `go test -short` green.
|
||||
- Annotated tag v0.5.1: tag object aa6e0a5 on commit 15b0d0d.
|
||||
- `git push origin master`: 223f87e..15b0d0d, fast-forward checked after `git fetch`.
|
||||
- `git push origin v0.5.1`; `ls-remote` confirms it.
|
||||
- **Step 2, sm-journal-plugin:**
|
||||
- `go get summercms@v0.5.1` with `GOWORK=off` and `GOPRIVATE`.
|
||||
- README dependency line updated to v0.5.1 (signpost is now a runtime dependency).
|
||||
- Build, vet and `test -short` green.
|
||||
- Commit f5a0394; tag v0.2.5 (tag object 16d9326).
|
||||
- Pushed main 7fc07d8..f5a0394 and the tag.
|
||||
- **Step 3, sm-seo-plugin:**
|
||||
- The same require, plus the README dependency line "SummerCMS v0.5.1 modules".
|
||||
- Build, vet and `test -short` green.
|
||||
- Commit b19cd06; tag v0.1.0 (tag object 9cf0447).
|
||||
- `git push -u origin main` (a new branch on the empty remote) and the tag.
|
||||
- **Step 4, sm-demo-app:**
|
||||
- Found at the start: ` M plugins/golem15/journal` and ` M plugins/golem15/oauthserver`.
|
||||
- Commit 11f64bf: require v0.5.1.
|
||||
- The journal submodule HEAD (b129902) is an ancestor of v0.2.5, so it was moved to v0.2.5. Commit 11d485f: only the v0.2.5 pointer was staged, and it replaces the foreign journal drift on that path.
|
||||
- Mount:
|
||||
- `git apply` the 32-05 patch
|
||||
- `git submodule add -b main` sm-seo-plugin, checked out at v0.1.0
|
||||
- go.work `use ./plugins/golem15/seo`
|
||||
- `go get sm-seo-plugin@v0.1.0` and `go mod tidy` (GOWORK=off)
|
||||
- `summer build` printed ✓ Built bin/demo
|
||||
- Build (plain and summercms_mcp), vet and `test -short` green. With Docker, TestBootAllPlugins, TestGoModRequiresTags, TestSEOToolsCatalog and TestSEOTabMounted pass.
|
||||
- Commit 9451b31.
|
||||
- check-pins: the live tree fails only on the foreign oauthserver drift. A clean worktree of 9451b31 prints `check-pins: ok (17 modules)`, and `GOWORK=off go build ./...` builds from the published tags (plain and mcp).
|
||||
- Pushed master 8fcdbdd..9451b31. Not deployed.
|
||||
- **Step 5, gate:** `check-phase32.sh --all` passes (details under Gate output).
|
||||
- **Step 6, changelog:**
|
||||
- `changelog-post.py source v0.5.1`, then the notes (## Highlights, ## Added).
|
||||
- `publish` returned post id 45: https://summercms.io/changelog/summercms-0-5-1. It is published at the tag date and the page answers 200.
|
||||
- The script read the token itself; it was never printed.
|
||||
- **Step 7, deferred items:** deferred-items.md is written.
|
||||
|
||||
## Gate output (step 5)
|
||||
|
||||
`bash scripts/check-phase32.sh --all` ran with Docker, the demo mounted, no `PHASE32_*` overrides and no test skips. It exited 0 with "Phase 32 gate passed".
|
||||
|
||||
- **Stages:** PASS for self-test, go, plugins (TestNoTideJournalFixtures included), consumers, admin, docs, marker, additive, compat and docker.
|
||||
- **compat:** sm-sitemap-plugin, sm-journal-plugin and sm-demo-app are tested. fonoteka.go, sm-bm-app, sm-grzybyfunkcjonalne-app and every sibling plugin are built.
|
||||
- **docker:** TestSEOTabMounted and TestSEOToolsCatalog pass in the demo.
|
||||
- **No failure lines:** no FAIL, `refuse:`, NOT MOUNTED or additive refusal.
|
||||
- **Additive baseline:** the additive line of that run compared v0.5.1 with itself, which led to fix a9a7f58. Re-run on the release commit, it compared against v0.5.0: cabana +2, pact +87, signpost +8 lines.
|
||||
|
||||
## Decisions Made
|
||||
|
||||
See `key-decisions` in the frontmatter.
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Auto-fixed Issues
|
||||
|
||||
**1. [Rule 1 - Bug] Behaviour-neutral refactors so TestRedirectGraph and TestIssues run under -short**
|
||||
- **Found during:** Task 3A
|
||||
- **Fix:** the redirect simulation runs over a rule list, and the issue report is built from loaded data.
|
||||
- **Commits:** sm-seo-plugin e957c00, 6d54fc7
|
||||
|
||||
**2. [Rule 1 - Bug] A loop notice listed an address twice**
|
||||
- **Found during:** Task 3A
|
||||
- **Fix:** a loop through the site's absolute URL lists each address once.
|
||||
- **Commit:** sm-seo-plugin 79567b3
|
||||
|
||||
**3. [Rule 1 - Bug] The result preview did not truncate per UI-SPEC E-1**
|
||||
- **Found during:** Task 3B
|
||||
- **Fix:** the preview truncates at the last word boundary plus " …", and the dist bundle was rebuilt.
|
||||
- **Commit:** sm-seo-plugin 9461c74
|
||||
|
||||
**4. [Rule 3 - Blocking] Extra test support files**
|
||||
- **Found during:** Task 3
|
||||
- **Fix:** classes/helpers_test.go and tests/elements/css.ts were added, and gorm.io/driver/postgres became a direct require in sm-seo-plugin's go.mod.
|
||||
- **Commits:** 9e45ddc, dcfbdc0
|
||||
|
||||
**5. [Rule 3 - Blocking] No layout in happy-dom**
|
||||
- **Found during:** Task 3B
|
||||
- **Fix:** the 320 and 360 px element rows check the stylesheet's layout contract.
|
||||
- **Commit:** dcfbdc0
|
||||
|
||||
**6. [Rule 3 - Blocking] The compat stage has to read other repositories without touching their trees**
|
||||
- **Found during:** Task 1
|
||||
- **Fix:** it reads them through temporary-index snapshots or detached worktrees and builds in a symlinked scratch sibling layout. There is a new PHASE32_SKIP_TESTS knob.
|
||||
- **Commit:** 2b300ec
|
||||
|
||||
**7. No separate RED commits**
|
||||
- **Found during:** Tasks 2 and 3
|
||||
- **Reason:** the green-at-every-commit rule in CLAUDE.md.
|
||||
|
||||
**8. Element tests: 52, against the plan's minimum of 20.**
|
||||
|
||||
**9. [Rule 1 - Bug] The additive stage compared the release with itself once HEAD was tagged**
|
||||
- **Found during:** Task 5, step 5
|
||||
- **Issue:** `last_tag` picked the newest tag, which was v0.5.1 on HEAD.
|
||||
- **Fix:** `git tag --sort=-v:refname --no-contains HEAD`. The re-run against v0.5.0 passes, and so does `--self-test`.
|
||||
- **Commit:** a9a7f58 (local; it is after the pushed tag and was not pushed)
|
||||
|
||||
**10. [Rule 3 - Blocking] The live demo tree fails check-pins**
|
||||
- **Found during:** Task 5, step 4
|
||||
- **Issue:** another session's uncommitted oauthserver drift (b6a9586 against v0.1.2, 8bbec72).
|
||||
- **Fix:** none in the live tree; the drift was left alone. check-pins is proven on a clean detached worktree of the pushed commit.
|
||||
|
||||
**11. [Rule 2 - Docs] Journal README dependency line**
|
||||
- **Found during:** Task 5, step 2
|
||||
- **Issue:** the plan named only the sm-seo-plugin README.
|
||||
- **Fix:** the Journal README now names SummerCMS v0.5.1, and signpost moved from "in tests" to a runtime dependency (CLAUDE.md documentation rule).
|
||||
- **Commit:** f5a0394
|
||||
|
||||
**12. [Rule 3 - Blocking] The demo's TestSEO* tests skip under -short (they need Docker)**
|
||||
- **Fix:** they were run without -short with Docker. Both pass, tagged and untagged.
|
||||
|
||||
**13. `go mod tidy` in the demo**
|
||||
- **Why:** to make sm-seo-plugin a direct require.
|
||||
- **Effect:** go.sum gained grobotstxt's test-dependency checksums and dropped the obsolete v0.5.0 and v0.2.3 lines.
|
||||
- **Commit:** 9451b31
|
||||
|
||||
---
|
||||
|
||||
**Total deviations:** 13 (5 Rule 1, 1 Rule 2, 5 Rule 3, 2 notes). **Impact:** the fixes are bugs in plugin code or in the gate, plus test scaffolding. No scope creep and no API change.
|
||||
|
||||
## Issues Encountered
|
||||
|
||||
- **g15office comment not posted.** This executor has no g15office tool. The orchestrator posts the release comment on Phase 32's milestone task `8gldeain` (`.planning/G15OFFICE.md`).
|
||||
- **Retracted dependency in the demo.** sm-demo-app pins `github.com/gabriel-vasile/mimetype v1.4.15`, which upstream has retracted. This was there before the plan; it is recorded in deferred-items.md.
|
||||
|
||||
## Deferred (deferred-items.md)
|
||||
|
||||
- Journal bumps in sm-grzybyfunkcjonalne-app (with `golem15.journal.tag_pages: false`) and sm-summercmsio-app. Not named in the go-ahead.
|
||||
- Changelog posts of their own for sm-journal-plugin v0.2.5 and sm-seo-plugin v0.1.0.
|
||||
- Deploying the demo.
|
||||
- The demo's oauthserver drift (another session's) and the retracted mimetype pin.
|
||||
|
||||
## Known Stubs
|
||||
|
||||
None.
|
||||
|
||||
## User Setup Required
|
||||
|
||||
None.
|
||||
|
||||
## Next Phase Readiness
|
||||
|
||||
- Phase 33 can build on the tagged v0.5.1 seams and on sm-seo-plugin v0.1.0.
|
||||
- The demo is pushed but not deployed. Deploy per `../sm-demo-app/DEPLOY.md` when Jakub says so.
|
||||
- Local commits after the release: a9a7f58 and this SUMMARY's commit. They go out with the next framework push.
|
||||
|
||||
## Self-Check: PASSED
|
||||
|
||||
- Files: scripts/apisurface/main.go, modules/cabana/form_extensions_test.go, modules/cabana/record_events_test.go, modules/signpost/content_test.go, 32-06-release-log.md and deferred-items.md exist.
|
||||
- Commits: 2b300ec, 8c961f5, 15b0d0d and a9a7f58 are in this repository. e957c00, 79567b3, 6d54fc7, 9e45ddc, 9461c74, dcfbdc0 and b19cd06 are in sm-seo-plugin; fea88f8 and f5a0394 in sm-journal-plugin; 11f64bf, 11d485f and 9451b31 in sm-demo-app.
|
||||
- Remote tags: v0.5.1 (aa6e0a5), v0.2.5 (16d9326) and v0.1.0 (9cf0447).
|
||||
- Changelog URL answers 200.
|
||||
|
||||
---
|
||||
*Phase: 32-seo-foundation*
|
||||
*Completed: 2026-10-27*
|
||||
29
.planning/phases/32-seo-foundation/32-06-release-log.md
Normal file
29
.planning/phases/32-seo-foundation/32-06-release-log.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Plan 32-06 release log
|
||||
|
||||
Resume record of Task 5 (one-way). A resumed run confirms each `step <n> done` line and skips it: no tag is created twice, no push is forced, the changelog is posted once.
|
||||
|
||||
## Task 4 answer (Jakub, 2026-10-27)
|
||||
|
||||
- **Decision:** release (full Task 5).
|
||||
- **Versions:** framework `v0.5.1`, sm-journal-plugin `v0.2.5`, sm-seo-plugin `v0.1.0`.
|
||||
- **Pushes approved:** framework master + v0.5.1 (master carries 64 commits incl. other sessions' work, accepted); sm-journal-plugin main + v0.2.5; sm-seo-plugin main (first push, `-u`) + v0.1.0; sm-demo-app master (three commits: framework pin, Journal bump, golem15.seo mount).
|
||||
- **Changelog:** post v0.5.1 on summercms.io.
|
||||
- **Not named:** optional Journal bumps in sm-grzybyfunkcjonalne-app and sm-summercmsio-app (deferred).
|
||||
- **Nothing is deployed.**
|
||||
- **Gate:** full `check-phase32.sh --all` with the demo mounted, no PHASE32_ALLOW_UNMOUNTED, no TestNoTideJournalFixtures skip (fixture readable after the chown).
|
||||
|
||||
## Pre-checks
|
||||
|
||||
- framework: `git fetch --tags origin`; newest tag v0.5.0; master is 64 ahead, 0 behind origin/master (fast-forward).
|
||||
- admin/: only `admin/tests/form/FormView.test.ts` changed since v0.5.0; the embedded dist is unaffected, no rebuild.
|
||||
|
||||
## Steps
|
||||
|
||||
- step 1 done: framework `go vet ./...` + `go test -short ./...` green; annotated tag v0.5.1 (tag object aa6e0a5, commit 15b0d0d) created; `git push origin master` 223f87e..15b0d0d (fast-forward checked after `git fetch origin`); `git push origin v0.5.1` new tag; `git ls-remote --tags origin v0.5.1` prints aa6e0a5.
|
||||
- step 2 done: sm-journal-plugin `GOWORK=off GOPRIVATE=git.golem15.com/* go get git.golem15.com/golem15/summercms@v0.5.1` (v0.5.0 => v0.5.1; go.sum unchanged, the module's replace points at ../summercms.go), README dependency line v0.5.1 (signpost now a runtime dependency); `GOWORK=off go build ./... && go vet ./... && go test -short ./...` green; commit f5a0394 `chore: require SummerCMS v0.5.1` (go.mod, README.md); annotated tag v0.2.5 (tag object 16d9326, commit f5a0394); `git push origin main` 7fc07d8..f5a0394 (fast-forward checked); `git push origin v0.2.5` new tag; ls-remote prints 16d9326.
|
||||
- step 3 done: sm-seo-plugin `GOWORK=off GOPRIVATE=git.golem15.com/* go get git.golem15.com/golem15/summercms@v0.5.1` (v0.5.0 => v0.5.1; go.sum unchanged, replace to ../summercms.go), README dependency line "SummerCMS v0.5.1 modules"; `GOWORK=off go build ./... && go vet ./... && go test -short ./...` green; commit b19cd06 `chore: require SummerCMS v0.5.1` (go.mod, README.md); annotated tag v0.1.0 (tag object 9cf0447, commit b19cd06); `git push -u origin main` new branch (first push, origin was empty); `git push origin v0.1.0` new tag; ls-remote prints main b19cd06 and v0.1.0 9cf0447.
|
||||
- step 4 done: sm-demo-app (pre-existing drift ` M plugins/golem15/journal` (4ab94da recorded, b1299021 checked out) and ` M plugins/golem15/oauthserver` (8bbec72 recorded, b6a9586 checked out) found at start). Commit 11f64bf `chore: require SummerCMS v0.5.1` (go.mod, go.sum; build, mcp build, vet, test -short green). Journal submodule HEAD b129902 confirmed an ancestor of v0.2.5, checked out at v0.2.5 (f5a0394); commit 11d485f `chore: bump journal to v0.2.5` (go.mod, go.sum, plugins/golem15/journal: 4ab94da -> f5a0394; this pointer replaces the other session's journal drift on the same path, only the intended v0.2.5 pointer staged). Mount: `git apply 32-05-demo-mount.patch`, `git submodule add -b main git@git.golem15.com:golem15/sm-seo-plugin.git plugins/golem15/seo` checked out at v0.1.0 (b19cd06), `./plugins/golem15/seo` in go.work, `GOWORK=off go get sm-seo-plugin@v0.1.0` + `GOWORK=off go mod tidy` (seo a direct require), `go run ../summercms.go/cmd/summer build` (✓ Built bin/demo; plugins.gen.go as in the patch, main.go unchanged); `go build ./...`, `go build -tags summercms_mcp ./...`, `go vet ./...`, `go test -short ./...` green; Docker runs: TestBootAllPlugins, TestGoModRequiresTags, TestSEOToolsCatalog, TestSEOTabMounted PASS (tagged), TestBootAllPlugins, TestSEOTabMounted PASS (untagged); commit 9451b31 `feat: mount golem15.seo v0.1.0` (13 paths, this plan's only). `scripts/check-pins.sh` in the live tree fails only on the other session's oauthserver drift; in a detached worktree of 9451b31 with `git submodule update --init plugins/` it prints `check-pins: ok (17 modules)`, and `GOWORK=off go build ./...` (plain and summercms_mcp) builds from the published tags; scratch worktree removed. `git push origin master` 8fcdbdd..9451b31 (fast-forward checked). Not deployed. ` M plugins/golem15/oauthserver` left as found.
|
||||
- step 6a: `scripts/changelog-post.py source v0.5.1` (from ../sm-summercmsio-app) printed the tag message and 64 commit subjects since v0.5.0; user-facing notes written to a scratch file (## Highlights, ## Added; no Changed/Fixed entries in this release).
|
||||
- step 5 done: `bash scripts/check-phase32.sh --all` (no PHASE32_* overrides, Docker, demo mounted at 9451b31, no test skips) exit 0, "Phase 32 gate passed": PASS self-test, go, plugins (TestNoTideJournalFixtures included), consumers, admin, docs, marker, additive, compat (sm-sitemap-plugin, sm-journal-plugin, sm-demo-app tested; every other sibling built), docker (TestSEOTabMounted, TestSEOToolsCatalog in sm-demo-app). No FAIL, refuse:, NOT MOUNTED or additive refusal lines. The additive stage of that run compared v0.5.1 with itself (last_tag picked the tag on HEAD); fixed in a9a7f58 `fix(32-06): the additive stage compares with the previous release once HEAD is tagged` (last_tag uses `--no-contains HEAD`); `check-phase32.sh --additive` on the release commit then compared with v0.5.0: cabana +2, pact +87, signpost +8 lines, nothing removed or changed, no interface method added; `--self-test` passes. a9a7f58 is local (after the tag, not pushed).
|
||||
- step 6 done: `scripts/changelog-post.py publish v0.5.1 <notes> --excerpt "Plugins can extend each other's admin forms, react to record writes and map URLs to records. Strictly additive."` posted id=45, https://summercms.io/changelog/summercms-0-5-1 (title "SummerCMS 0.5.1", published_at 2026-10-27T13:00:42Z, the tag's date). Token read by the script from ~/.config/summercms/journal-token; never printed or copied.
|
||||
- step 7 done: deferred-items.md lists the unnamed app Journal bumps (sm-grzybyfunkcjonalne-app, sm-summercmsio-app), plugin release posts, the deploy, the demo's oauthserver drift and the retracted mimetype pin. Nothing deployed.
|
||||
23
.planning/phases/32-seo-foundation/deferred-items.md
Normal file
23
.planning/phases/32-seo-foundation/deferred-items.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# Phase 32 deferred items
|
||||
|
||||
Work left out of plan 32-06 on purpose, each with its next command.
|
||||
|
||||
## Not named in the release go-ahead (Task 4)
|
||||
|
||||
1. **sm-grzybyfunkcjonalne-app: Journal bump.** The app requires sm-journal-plugin as a pseudo-version (`v0.0.0-00010101000000-000000000000`, through a replace) and SummerCMS v0.4.4. Journal v0.2.5 needs SummerCMS v0.5.1, and its layer has no tag pages, so the bump sets `golem15.journal.tag_pages: false`. Next, after Jakub names it:
|
||||
```sh
|
||||
cd ../sm-grzybyfunkcjonalne-app
|
||||
GOWORK=off GOPRIVATE='git.golem15.com/*' go get git.golem15.com/golem15/summercms@v0.5.1 git.golem15.com/golem15/sm-journal-plugin@v0.2.5
|
||||
git -C plugins/golem15/journal fetch --tags origin && git -C plugins/golem15/journal checkout v0.2.5
|
||||
# config: golem15.journal.tag_pages: false
|
||||
go build ./... && go test -short ./...
|
||||
git add go.mod go.sum plugins/golem15/journal <config file> && git commit -m "chore: bump journal to v0.2.5"
|
||||
```
|
||||
2. **sm-summercmsio-app: Journal bump.** The app requires sm-journal-plugin v0.1.0 and SummerCMS v0.5.0. Next, after Jakub names it: the same `go get` of `summercms@v0.5.1` and `sm-journal-plugin@v0.2.5`, the submodule checkout at v0.2.5, build and tests, commit `chore: bump journal to v0.2.5`. Decide whether the changelog site wants tag pages (`golem15.journal.tag_pages`).
|
||||
3. **Plugin release posts.** summercms.io/changelog also carries posts for plugin releases (for example "sm-sociallogin-plugin 0.1.5"). Only the framework post for v0.5.1 was named; sm-journal-plugin v0.2.5 and sm-seo-plugin v0.1.0 have no post of their own (both are listed under "Released together" in the v0.5.1 post). Next, if wanted: the same Journal API post by hand (`../sm-summercmsio-app/DEPLOY.md`, "Posting to the changelog", step 3).
|
||||
4. **Deploy.** Nothing was deployed. demo.summercms.io runs the previous demo build until a deploy per `../sm-demo-app/DEPLOY.md` (the new `location = /robots.txt` nginx block ships with it).
|
||||
|
||||
## Found during the release, not this plan's
|
||||
|
||||
- sm-demo-app: ` M plugins/golem15/oauthserver` (checked out b6a9586, recorded 8bbec72 = v0.1.2) is another session's uncommitted drift. It makes `scripts/check-pins.sh` fail in the live tree; the committed tree passes (`check-pins: ok (17 modules)` in a clean worktree). Left as found.
|
||||
- sm-demo-app: `github.com/gabriel-vasile/mimetype v1.4.15` (indirect) is retracted upstream; `go get` warns. Pre-existing; next: `GOWORK=off go get github.com/gabriel-vasile/mimetype@latest` in a dependency-bump commit.
|
||||
Reference in New Issue
Block a user