docs(33-13): grzyby patches for the release
- sm-grzybyfunkcjonalne-app: Journal tag pages off and author pages at /autor/:author, the sitemap and SEO config, nginx without the root-file locations (P33-49), check-deploy, smoke.sh (companions, route report, page names, seo-pages.csv, Additional addresses, rebuild), smoke-seo.sh, urls.txt, pl as the only enabled locale, seo-settings.yaml with the author templates and page suffix, DEPLOY.md release steps, tests - vue-grzybyfunkcjonalne-app: nuxt.config on the SEO layer options without @nuxtjs/seo keys, no page useSeoMeta, footer sitemap link, title template for pages the CMS does not answer, SEO fixtures from the rehearsal - local wiring note and the deferred findings
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
# 33-13 local wiring (P33-46)
|
||||
|
||||
How grzybyfunkcjonalne.pl was run on the phase 33 stack before any tag, on 2026-11-04. Nothing here is committed in the app repositories: the wiring lives only in the scratch worktrees, and the two patches leave it out (P33-47).
|
||||
|
||||
## Directories
|
||||
|
||||
| What | Path |
|
||||
|------|------|
|
||||
| Scratch directory (shared with 33-12) | `/media/nvme/dev/golem15/summercms.io/scratch-33` |
|
||||
| App worktree, detached at `35d3664` | `/media/nvme/dev/golem15/summercms.io/scratch-33/sm-grzybyfunkcjonalne-app` |
|
||||
| Nuxt worktree, detached at `e45ffe8` | `/media/nvme/dev/golem15/summercms.io/scratch-33/sm-grzybyfunkcjonalne-app/vue-grzybyfunkcjonalne-app` |
|
||||
| The plan's name for the Nuxt worktree | `/media/nvme/dev/golem15/summercms.io/scratch-33/vue-grzybyfunkcjonalne-app`, a symlink to the path above |
|
||||
|
||||
vue-grzybyfunkcjonalne-app is not a top-level sibling: it is the submodule `vue-grzybyfunkcjonalne-app` of sm-grzybyfunkcjonalne-app (`git@git.golem15.com:golem15/vue-grzybyfunkcjonalne-app.git`, git dir `sm-grzybyfunkcjonalne-app/.git/modules/vue-grzybyfunkcjonalne-app`). Its worktree sits at the submodule path inside the app worktree, because `scripts/build.sh` builds `$ROOT/vue-grzybyfunkcjonalne-app` and git refuses a symlink at a submodule path (`expected submodule path ... not to be a symbolic link`).
|
||||
|
||||
## Commands
|
||||
|
||||
```sh
|
||||
S=/media/nvme/dev/golem15/summercms.io/summercms
|
||||
SC=/media/nvme/dev/golem15/summercms.io/scratch-33
|
||||
APP=$S/sm-grzybyfunkcjonalne-app
|
||||
W=$SC/sm-grzybyfunkcjonalne-app
|
||||
|
||||
mkdir -p $SC
|
||||
git -C $APP worktree add --detach $W HEAD # 35d3664
|
||||
git -C $APP/vue-grzybyfunkcjonalne-app worktree add --detach $SC/vue-grzybyfunkcjonalne-app HEAD # e45ffe8
|
||||
rmdir $W/vue-grzybyfunkcjonalne-app
|
||||
git -C $APP/vue-grzybyfunkcjonalne-app worktree move $SC/vue-grzybyfunkcjonalne-app $W/vue-grzybyfunkcjonalne-app
|
||||
ln -s $W/vue-grzybyfunkcjonalne-app $SC/vue-grzybyfunkcjonalne-app
|
||||
|
||||
# Go: the sibling plugin checkouts at their committed HEADs, copied into the
|
||||
# (uninitialised) submodule paths; a symlink there breaks git status.
|
||||
for p in faq journal menu seo sitemap translate user; do
|
||||
rmdir $W/plugins/golem15/$p && mkdir $W/plugins/golem15/$p
|
||||
git -C $S/sm-$p-plugin archive HEAD | tar -x -C $W/plugins/golem15/$p
|
||||
done
|
||||
sed -i "s#^replace git.golem15.com/golem15/summercms => ../summercms.go#replace git.golem15.com/golem15/summercms => $S/summercms.go#" $W/go.work
|
||||
# summer build records the copies as local sources (new descriptions, no
|
||||
# versions): plugins.gen.go drifts by wiring only, so build.sh's drift
|
||||
# check is told to look away in this worktree's index. 33-14 regenerates
|
||||
# plugins.gen.go after the real submodule bumps.
|
||||
git -C $W update-index --assume-unchanged plugins.gen.go
|
||||
|
||||
# Nuxt: the four layers linked to the sibling checkouts.
|
||||
cat >> $W/vue-grzybyfunkcjonalne-app/pnpm-workspace.yaml <<EOF
|
||||
overrides:
|
||||
vue-seo-layer: link:$S/vue-seo-layer
|
||||
vue-journal-layer: link:$S/vue-journal-layer
|
||||
vue-menu-layer: link:$S/vue-menu-layer
|
||||
vue-faq-layer: link:$S/vue-faq-layer
|
||||
EOF
|
||||
pnpm -C $W/vue-grzybyfunkcjonalne-app install --no-frozen-lockfile
|
||||
|
||||
# Build, check, rehearse (Docker for Postgres).
|
||||
cd $W
|
||||
SUMMERCMS_FRAMEWORK=$S/summercms.go bash scripts/build.sh
|
||||
bash scripts/check-deploy.sh
|
||||
bash scripts/smoke.sh # default ports 18096 and 13016
|
||||
SMOKE_KEEP=1 SMOKE_GO_PORT=18196 SMOKE_NUXT_PORT=3016 bash scripts/smoke.sh & # held stack for the SEO checks
|
||||
bash scripts/smoke-seo.sh http://127.0.0.1:3016
|
||||
go test ./... ./plugins/grzyby/... && go test -tags summercms_mcp ./...
|
||||
pnpm -C vue-grzybyfunkcjonalne-app test
|
||||
pnpm -C vue-grzybyfunkcjonalne-app smoke:ssr && pnpm -C vue-grzybyfunkcjonalne-app smoke:ga
|
||||
```
|
||||
|
||||
Stop a held rehearsal with SIGTERM to its own `bash scripts/smoke.sh` (the parent of the Go process on its port), never by pattern: 33-12 runs its own smoke at the same time.
|
||||
|
||||
## Inputs at the time
|
||||
|
||||
| Repository | Commit |
|
||||
|------------|--------|
|
||||
| summercms.go | `617e15d` (v0.6.0 plus phase 33) |
|
||||
| sm-seo-plugin | `49cc241` |
|
||||
| sm-sitemap-plugin | `9e5c393` |
|
||||
| sm-journal-plugin | `4f5bd19` |
|
||||
| sm-menu-plugin, sm-faq-plugin, sm-translate-plugin, sm-user-plugin | `98df4c7`, `3bf54cd`, `7e64224`, `97f83cc` (their tags v0.1.2, v0.1.2, v0.1.3, v0.1.19) |
|
||||
| vue-seo-layer, vue-journal-layer, vue-menu-layer, vue-faq-layer | `7af91fc`, `1080a3f`, `8b5da67`, `f7ec4fe` (linked, working trees clean) |
|
||||
|
||||
## Ports
|
||||
|
||||
| Use | Go | Nuxt |
|
||||
|-----|----|------|
|
||||
| `scripts/smoke.sh` defaults | 18096 | 13016 |
|
||||
| Held rehearsal for `smoke-seo.sh` | 18196 | 3016 (the plan's port) |
|
||||
| Baseline of the 2026-10-31 production build | 18296 | 13996 |
|
||||
|
||||
The demo stack of 33-12 used 3020 (Nuxt) and its own Go port at the same time; none of these clash with it or with the other local services (8080, 8120, 3000, 5432).
|
||||
|
||||
## Baseline ("before") run
|
||||
|
||||
To compare the heads with what production serves today, the live checkout's own Oct 31 build (`bin/grzybyfunkcjonalne`, `build/nuxt/.output`) ran in its unchanged rehearsal from a scratchpad copy (`git archive HEAD config deploy scripts`, symlinks to `bin/`, `build/nuxt` and `plugins/grzyby`, a hold loop appended to the copied `smoke.sh`): `smoke: ok (107 urls)`. The live repository was only read.
|
||||
|
||||
## Patches
|
||||
|
||||
```sh
|
||||
cd $W && git add -N config/golem15.journal.yaml config/golem15.sitemap.yaml deploy/seo-pages.csv scripts/smoke-seo.sh
|
||||
git diff --binary -- . ':(exclude)go.work' ':(exclude)vue-grzybyfunkcjonalne-app' ':(exclude)plugins/golem15' ':(exclude)plugins.gen.go' \
|
||||
> $S/summercms.go/.planning/phases/33-seo-output-audit-and-content/33-13-sm-grzybyfunkcjonalne-app.patch
|
||||
cd $W/vue-grzybyfunkcjonalne-app && git add -N tests/fixtures/api/seo
|
||||
git diff --binary -- . ':(exclude)pnpm-lock.yaml' ':(exclude)pnpm-workspace.yaml' \
|
||||
> $S/summercms.go/.planning/phases/33-seo-output-audit-and-content/33-13-vue-grzybyfunkcjonalne-app.patch
|
||||
git -C $APP apply --check <app patch> && git -C $APP/vue-grzybyfunkcjonalne-app apply --check <nuxt patch> # both pass
|
||||
```
|
||||
|
||||
Left out on purpose: `go.work` (framework replace), `plugins.gen.go` (wiring drift), the submodule pointers, `pnpm-lock.yaml` and `pnpm-workspace.yaml` (link overrides). The pin bumps (go.mod requires, submodule pointers, `package.json` layer tags, the lockfile) are 33-14's.
|
||||
|
||||
## Cleanup (after Task 4 or the deferral)
|
||||
|
||||
```sh
|
||||
unlink $SC/vue-grzybyfunkcjonalne-app # the symlink
|
||||
git -C $APP/vue-grzybyfunkcjonalne-app worktree remove --force $W/vue-grzybyfunkcjonalne-app
|
||||
git -C $APP worktree remove --force $W
|
||||
git -C $APP worktree list; git -C $APP/vue-grzybyfunkcjonalne-app worktree list
|
||||
```
|
||||
|
||||
`--force` because both worktrees hold the uncommitted wiring and patch sources; the patches are committed in summercms.go first.
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -128,3 +128,34 @@ Out-of-scope discoveries logged during execution; not fixed in the plan that fou
|
||||
status: open
|
||||
- **Possible fix:** 33-14 decides per app: add `nodynamic` to `scripts/build.sh` (and summer.yaml `build.tags`), or change the DEPLOY.md table to "dynamically linked (glibc)".
|
||||
- **Why deferred:** the linking decision is 33-14's (33-11).
|
||||
|
||||
## From 33-13 (grzybyfunkcjonalne.pl on local links)
|
||||
|
||||
- **An enabled locale without content gives every page an `/en/` hreflang link and sitemap address (sm-seo-plugin, sm-sitemap-plugin).** sm-grzybyfunkcjonalne-app's translate plugin kept its seeded `en` row enabled (migrate.sh only made `pl` the default). Every record then counts as available in `en` through fallback: post pages render `<link rel="alternate" hreflang="en" href="…/en/blog/…">` and `sitemap-posts-1.xml` lists each post twice, with `x-default` on the `/en/` address, all 404 on the Polish-only site. The 33-13 patch makes `pl` the only enabled locale in migrate.sh step 3 and in a DEPLOY.md release step (`UPDATE golem15_translate_locales SET is_enabled = (code = 'pl')`).
|
||||
status: open
|
||||
- **Possible fix:** list a locale's address only when the record has content in it (a translation row, or the default locale), not through fallback.
|
||||
- **Why deferred:** a plugin behaviour change; the site is fixed by its data.
|
||||
- **Saving a registry page through `PUT /_seo/api/v1/pages/{id}` writes `updated_at` in local time (sm-seo-plugin).** In the 33-13 rehearsal (database in UTC, machine in CET), the renamed `/trwaja-prace` got `updated_at` 17:58:54 while the route-reported pages got 16:58:54, so `sitemap-pages-1.xml` and the index carried a lastmod one hour in the future.
|
||||
status: open
|
||||
- **Possible fix:** write UTC (or a `timestamptz` column) on the page update path, as the route report does.
|
||||
- **Why deferred:** a plugin bug outside 33-13's files; the lastmod corrects itself on the next content change.
|
||||
- **`/` as a registry page loses the home title template (sm-seo-plugin).** Once the route report registers `/` ("Strona główna"), its title comes from the record through `title_template` ("Strona główna | Grzyby Funkcjonalne") instead of `home_template` ("Witamy | %site%"). 33-13's `deploy/seo-pages.csv` sets the home title explicitly.
|
||||
status: open
|
||||
- **Possible fix:** the home page keeps `home_template` unless its record sets a title.
|
||||
- **Why deferred:** a resolver precedence question for the plugin.
|
||||
- **The route report names pages without diacritics (sm-seo-plugin).** `/trwaja-prace` becomes "Trwaja prace", shown in the HTML sitemap, the breadcrumbs and the WebPage node. 33-13 renames it in SEO › Pages (DEPLOY.md step).
|
||||
status: open
|
||||
- **Possible fix:** the layer reports each static page's title (its page meta) with the path.
|
||||
- **Why deferred:** a contract change across vue-seo-layer and sm-seo-plugin.
|
||||
- **No personal-token scope covers the SEO or sitemap management API (sm-seo-plugin, sm-sitemap-plugin).** `admin:token:scopes` lists `*`, `admin:read`, `journal` and `journal:read` only, so a script that imports a CSV or edits sitemap settings needs a full-scope token. smoke.sh creates one and revokes it after its steps.
|
||||
status: open
|
||||
- **Possible fix:** declare `seo`, `seo:read`, `sitemap` and `sitemap:read` scopes.
|
||||
- **Why deferred:** a plugin feature.
|
||||
- **`journal:image-variants` cannot run from the generated CLI (framework or sm-journal-plugin).** It stops with `journal: database is not configured`, like `journal:reindex` (which grzyby wraps as `grzyby:reindex`). The one-time backfill of existing featured images that 33-11 names needs a wrapper or a framework fix; new uploads get their variants from the worker in `serve`.
|
||||
status: open
|
||||
- **Possible fix:** the generated CLI opens the database for plugin commands, or the app adds `grzyby:image-variants`.
|
||||
- **Why deferred:** decided with 33-14's release steps.
|
||||
- **The Journal's seeded `uncategorized` category is listed in `sitemap-categories-1.xml` (sm-grzybyfunkcjonalne-app data).** It has no posts and the PHP sitemap never listed it (7 categories), but `/uncategorized` answers 200 and the per-type file lists every published category.
|
||||
status: open
|
||||
- **Possible fix:** delete the empty seeded category on the server, or mark it noindex in its SEO tab.
|
||||
- **Why deferred:** an editorial data decision for Jakub.
|
||||
|
||||
Reference in New Issue
Block a user