docs(33-14): complete the tests, gate and release plan
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
---
|
||||
phase: 33-seo-output-audit-and-content
|
||||
plan: 14
|
||||
subsystem: release
|
||||
tags: [tests, gate, release, tags, changelog, deploy, seo, sitemap, journal, nuxt-layers, nodynamic]
|
||||
status: complete
|
||||
|
||||
requires:
|
||||
- phase: 33-01..33-13
|
||||
provides: the phase's framework seams, plugins, layers, app patches and the release checkpoint
|
||||
- phase: 33-15, 33-16, quick-261104-xae
|
||||
provides: the gap closure re-verified in 33-VERIFICATION.md (human_needed, no gaps)
|
||||
provides:
|
||||
- "Unit tests for all new phase 33 code (SC-4) and the full check-phase33.sh gate (Tasks 1-2)"
|
||||
- "Tags: summercms v0.6.1; sm-journal-plugin v0.4.0; sm-sitemap-plugin v0.2.0; sm-seo-plugin v0.2.0 (requires sitemap v0.2.0); vue-seo-layer v0.2.0; vue-journal-layer v0.8.0 and v0.8.1; vue-menu-layer v0.5.0 and v0.5.1; vue-faq-layer v0.5.0 and v0.5.1"
|
||||
- "Content layers declare vue-seo-layer as a ^0.2.0 peer dependency plus a git devDependency (v0.8.1 / v0.5.1); apps list vue-seo-layer#v0.2.0 directly"
|
||||
- "Apps pinned to the tags and patched: sm-demo-app (Polish under /pl/), sm-summercmsio-app, sm-grzybyfunkcjonalne-app; static release binaries with -tags nodynamic"
|
||||
- "Changelog posts for the framework and the three Go plugins"
|
||||
- "Deploys: summercms.io, demo.summercms.io, bm.jakubzych.com, grzybyfunkcjonalne.pl (production)"
|
||||
affects: [phase-34, v0.6.2-backlog]
|
||||
|
||||
actuals:
|
||||
tokens: 40000
|
||||
tasks: 4
|
||||
commits: 7
|
||||
plan_head_before: 9c11b70
|
||||
plan_head_after: 6875627
|
||||
plan_heads_task4:
|
||||
summercms.go: { before: 9c11b70, after: 6875627, commits: 7, note: "6d14f71 style: gofmt plus six planning-doc commits; this SUMMARY and the ROADMAP commit follow" }
|
||||
sm-journal-plugin: { before: cf13c60, after: 6823dcc, commits: 2 }
|
||||
sm-sitemap-plugin: { before: b2b3a1d, after: fdbe593, commits: 1 }
|
||||
sm-seo-plugin: { before: c71b58e, after: 22f108b, commits: 1 }
|
||||
vue-journal-layer: { before: 761c7fc, after: f5dc9b2, commits: 2 }
|
||||
vue-menu-layer: { before: a7602c9, after: dc38f79, commits: 2 }
|
||||
vue-faq-layer: { before: 5e5950a, after: a092363, commits: 2 }
|
||||
sm-summercmsio-app: { before: ca06049, after: 395ed78, commits: 5 }
|
||||
vue-summercmsio-app: { before: f36cbf1, after: 16ab519, commits: 1 }
|
||||
sm-demo-app: { before: da481c9, after: da03c06, commits: 9 }
|
||||
vue-demo-app: { before: 9a12701, after: fe5d38d, commits: 1 }
|
||||
sm-grzybyfunkcjonalne-app: { before: 35d3664, after: 0554f3e, commits: 10 }
|
||||
vue-grzybyfunkcjonalne-app: { before: e45ffe8, after: 0771c14, commits: 1 }
|
||||
sm-bm-app: { before: bd7ee84, after: 43f2fc9, commits: 1, note: "push also carried 552cdce, c2a7823, 9dd0fe4 of other sessions (approved)" }
|
||||
jz.bm: { before: 0dd0185, after: a27a162, commits: 1 }
|
||||
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns:
|
||||
- "A Nuxt layer that builds on another git-installed layer declares it as a semver peer dependency and a git devDependency; the app lists both (pnpm 12 refuses git subdependencies by default, blockExoticSubdeps)"
|
||||
- "Apps that mount the Journal build their release binary with -tags nodynamic, so gen2brain/webp does not link glibc through purego"
|
||||
- "Smoke expectations that run against production check only the fixed parts of data-dependent text"
|
||||
|
||||
key-files:
|
||||
created:
|
||||
- .planning/phases/33-seo-output-audit-and-content/33-14-SUMMARY.md
|
||||
modified:
|
||||
- .planning/phases/33-seo-output-audit-and-content/33-release-log.md
|
||||
- .planning/phases/33-seo-output-audit-and-content/33-13-deploy-log.md
|
||||
- .planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-journal-layer-v0.8.0.md
|
||||
- .planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-menu-layer-v0.5.0.md
|
||||
- .planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-faq-layer-v0.5.0.md
|
||||
- ../vue-journal-layer/scripts/check-git-install.sh
|
||||
- ../vue-journal-layer/package.json
|
||||
- ../vue-menu-layer/package.json
|
||||
- ../vue-faq-layer/package.json
|
||||
- ../sm-grzybyfunkcjonalne-app/scripts/urls.txt
|
||||
- ../sm-grzybyfunkcjonalne-app/scripts/check-deploy.sh
|
||||
|
||||
decisions:
|
||||
- "Content layers v0.8.1 / v0.5.1 take vue-seo-layer as a ^0.2.0 peer dependency (Jakub, option B); v0.8.0 and v0.5.0 stay published but do not install with pnpm 12 defaults"
|
||||
- "WebP build option B: every app mounting the Journal builds static with -tags nodynamic"
|
||||
- "The demo keeps /subscriptions as an Additional address; the route report's noindex list leaves it out (G1 confirmed live)"
|
||||
- "grzybyfunkcjonalne.pl step 12: keep the deploy and fix the fixture-bound /autor/admin expectation (Jakub, option A)"
|
||||
- "W5 production SQL length check skipped (Jakub: no production fonoteka)"
|
||||
---
|
||||
|
||||
# Phase 33 Plan 14: Unit tests, the phase gate and the release Summary
|
||||
|
||||
**Phase 33 shipped: SummerCMS v0.6.1 with sm-journal-plugin v0.4.0, sm-sitemap-plugin v0.2.0, sm-seo-plugin v0.2.0 and the four SEO-aware Nuxt layers (installable as v0.2.0 / v0.8.1 / v0.5.1 / v0.5.1). Four changelog posts are live. The demo, summercms.io, bm and production grzybyfunkcjonalne.pl run the tagged, statically linked builds, and every smoke ends ok.**
|
||||
|
||||
## Performance
|
||||
|
||||
- Tasks: 4 of 4. Tasks 1 and 2 (unit tests, gate, VALIDATION) and the Task 3 checkpoint ran earlier. Task 4 (the release) ran on 2026-11-05, about 00:30–01:35 UTC, with two checkpoints in between: the layer dependency and the grzyby smoke.
|
||||
- Task 4 commits: 7 in summercms.go before this SUMMARY, plus the per-repository commits listed in the frontmatter.
|
||||
|
||||
## Accomplishments
|
||||
|
||||
Every step is in 33-release-log.md, steps 0 to 10 (TAG lines for all 11 tags).
|
||||
|
||||
1. **Pre-checks.**
|
||||
- gofmt fixes: framework 6d14f71 (15 files, several unformatted since v0.6.0) and sm-journal-plugin b8d98ce.
|
||||
- `check-phase33.sh --all` green with Docker.
|
||||
- Every repository is on its default branch, and the patches apply.
|
||||
2. **Framework v0.6.1** (tag 5db8c61 on 6d14f71), master and tag pushed.
|
||||
3. **Go plugins.** Each got the framework bump, a regenerated plugin.yaml, its README dependency lines, a GOWORK=off build, vet and `test -short`, then a commit, a tag and a push:
|
||||
- journal v0.4.0;
|
||||
- sitemap v0.2.0;
|
||||
- seo v0.2.0, which also requires sitemap v0.2.0.
|
||||
4. **Layers.**
|
||||
- vue-seo-layer v0.2.0.
|
||||
- journal v0.8.0, menu v0.5.0 and faq v0.5.0 after the link: swap.
|
||||
- `check-git-install.sh v0.8.0` then failed with ERR_PNPM_EXOTIC_SUBDEP (checkpoint). Under option B the patch releases v0.8.1, v0.5.1 and v0.5.1 make vue-seo-layer a peer dependency.
|
||||
- `check-git-install.sh v0.8.1` passes, and a scratch app on pnpm defaults installs and builds with the menu and FAQ tags too.
|
||||
5. **Changelog posts.**
|
||||
- summercms-0-6-1 (id 66);
|
||||
- sm-sitemap-plugin-0-2-0 (67);
|
||||
- sm-seo-plugin-0-2-0 (68);
|
||||
- sm-journal-plugin-0-4-0 (69).
|
||||
- All four answer 200, and the plugin posts are listed on /changelog/plugins.
|
||||
6. **Apps.**
|
||||
- **sm-summercmsio-app:** framework and journal bumps, the 33-12 changelog patch with the layer pins, and nodynamic. Built in a clean worktree: release v0.6.1, static. Smoke ok.
|
||||
- **sm-demo-app:** three plugin bumps, the 33-12 patches, then the 33-14 locale patches (Polish under /pl/), nodynamic, and a roadmap sync. Docker tests and check-pins passed; the release build is static; smoke ok.
|
||||
- **sm-grzybyfunkcjonalne-app:** three plugin bumps and the 33-13 patches, with the Binary row saying "static". nodynamic and a check-deploy fix. Full rehearsal `smoke: ok (128 urls)`, later 129.
|
||||
- **sm-bm-app:** the frontend build with the robots meta and robots.txt went into jz.bm, then the pointer bump, then the push.
|
||||
7. **Deploys.**
|
||||
- **summercms.io:** pg_dump; Journal migrations (2); `journal:image-variants`; public checks ok.
|
||||
- **Demo:**
|
||||
- pg_dump; the SEO tokens added without printing them; 15 migrations; the vhost reinstalled after `nginx -t`.
|
||||
- The "After" block with `/subscriptions` kept. G1 confirmed live: it is left out as noindex.
|
||||
- `journal:image-variants`, then `check-live` ok and strict `smoke-seo` ok.
|
||||
- **bm:** pg_dump, binary swap, and the X-Robots-Tag on the live vhost, `/pliki/` included. Verified.
|
||||
- **grzybyfunkcjonalne.pl:** DEPLOY steps 1 to 12.
|
||||
- Backups first, then 15 migrations.
|
||||
- `en` was already disabled.
|
||||
- seo-settings: 3 changed.
|
||||
- Route report: 4 routes and 1 noindex path.
|
||||
- New vhost installed.
|
||||
- Pages renamed, CSV imported, Additional addresses emptied.
|
||||
- Rebuild: 74 addresses. 285 WebP variants written.
|
||||
- Production smoke `ok (149 urls)` after the urls.txt fix; `smoke-seo` ok.
|
||||
- The smoke's 14 entries in the 404 log removed.
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Auto-fixed issues
|
||||
|
||||
1. **[Rule 1 - Bug] Content layers could not be installed (ERR_PNPM_EXOTIC_SUBDEP).** I stopped at the checkpoint, and Jakub chose B: v0.8.1, v0.5.1 and v0.5.1 declare vue-seo-layer as a peer dependency. check-git-install's scratch app now lists vue-seo-layer at the tag's dev pin.
|
||||
2. **[Rule 3 - Blocking] grzyby check-deploy.sh looked for the old exact build tag list.** It now requires `summercms_mcp,nodynamic` (75736b4).
|
||||
3. **[Rule 1 - Bug] grzyby urls.txt `/autor/admin` expected the rehearsal author's name.** Production failed 1 of 148 lines. I stopped without rolling back, and Jakub chose A. The line now checks only the fixed parts of the title (0554f3e). The production rerun is ok.
|
||||
4. **[Rule 3 - Blocking] The sm-summercmsio-app live checkout carries another session's untracked binary,** which `require_clean` refuses. The release build ran in a clean worktree instead. The journal changelog post was published from a clean worktree at v0.4.0 for the same reason (an untracked go.work.sum).
|
||||
5. **[Rule 2 - Missing] bm's live vhost location `^~ /pliki/` sets its own add_header.** The header was added there as well, not only in the topics location.
|
||||
6. **Grzyby Nuxt upload.** The build went to `.output.new` and was swapped at the restart instead of being rsynced over the running `.output`.
|
||||
7. **Demo DEPLOY "After" block.** It no longer removes `/subscriptions` by hand (G1), per Jakub's instruction.
|
||||
8. **33-13 patch.** The `plugins/grzyby/go.mod` hunk conflicted only with the v0.6.1 bump and was applied by hand (sitemap require and replace).
|
||||
|
||||
### Known follow-ups (not fixed here)
|
||||
|
||||
- **`check-phase33.sh --consumers` needs a post-release mode.** It checks the release patches against unpatched app HEADs, so after the release it refuses (`33-12-sm-demo-app.patch does not apply`). Compat passes, and the apps' builds, tests and smokes ran directly.
|
||||
- **Posts now send `X-Robots-Tag: index, follow`.** vue-seo-layer sends the CMS robots value as a header. The 2026-10-31 cutover check expected no X-Robots-Tag on a post. This is harmless, but the DEPLOY "Verify" line should be updated.
|
||||
- **The G2 journal-tag drift warning still appears at every Nuxt start** on the demo and on grzyby. It is deferred to v0.6.2.
|
||||
- **Some gofmt fixes landed in the framework** without a docs change. The docs checker passes.
|
||||
|
||||
## Human checks still open (33-VERIFICATION.md)
|
||||
|
||||
1. Production grzybyfunkcjonalne.pl, from the 33-13-deploy-log.md check list:
|
||||
- item 3: SEO › Pages in /gfadmin;
|
||||
- item 5: a crawl from SEO › Site audit;
|
||||
- item 6: the visual check on desktop and mobile;
|
||||
- item 7: resubmit the sitemap in Search Console.
|
||||
2. SC3 live MCP workflow: a crawl, then dry run and apply from a real client.
|
||||
3. D-46: Google's Rich Results Test for a post, a category and an FAQ page.
|
||||
4. Visual checks:
|
||||
- grzyby;
|
||||
- the demo on /pl/: the LanguageSwitcher, /pl/mapa-strony and /sitemap, the footer link;
|
||||
- the new admin screens;
|
||||
- the Blog Editor outline at 360px (J2).
|
||||
5. W5 (33-14-risk-max.sql) was skipped by decision.
|
||||
|
||||
## For the orchestrator
|
||||
|
||||
- **g15office:** post a comment on the phase 33 task. Text: "Phase 33 released: SummerCMS v0.6.1, journal v0.4.0, sitemap v0.2.0, seo v0.2.0, layers seo v0.2.0 / journal v0.8.1 / menu v0.5.1 / faq v0.5.1; demo, summercms.io, bm and grzybyfunkcjonalne.pl deployed; open: human checks listed in 33-14-SUMMARY". Close g15office task w8kupqi3 if it is still open.
|
||||
- **STATE.md:** updated through the handlers only and not committed. The grzyby blocker is resolved.
|
||||
|
||||
## Self-Check: PASSED
|
||||
|
||||
- Files: 33-release-log.md, 33-13-deploy-log.md and this SUMMARY exist.
|
||||
- Tags: all 11 are on their origins (the plan's verify loop printed "tags-ok").
|
||||
- Package files: no content layer package.json has `link:`.
|
||||
- Commits:
|
||||
- summercms.go: 6d14f71, 8edc869, 143b4db, ef164dd, 211687f, 201fd0f and 6875627 are present.
|
||||
- Every repository: HEAD equals its origin default branch after the pushes. The exception is summercms.go, whose planning-doc commits after the v0.6.1 push are local (6 before this SUMMARY), and it is not pushed.
|
||||
- Changelog: the four post URLs answer 200.
|
||||
Reference in New Issue
Block a user