diff --git a/.planning/phases/34-plugin-marketplace/34-02-SUMMARY.md b/.planning/phases/34-plugin-marketplace/34-02-SUMMARY.md new file mode 100644 index 00000000..b91781bc --- /dev/null +++ b/.planning/phases/34-plugin-marketplace/34-02-SUMMARY.md @@ -0,0 +1,243 @@ +--- +phase: 34-plugin-marketplace +plan: 02 +subsystem: plugin-repositories +tags: [kiosk, plugin-yaml, manifest, marketplace, plugin-repos, go-mod, release-ledger] +status: complete + +requires: + - phase: 34-plugin-marketplace (34-01) + provides: "summer plugin:manifest [--check] [--name], kiosk.CheckT, plugin.yaml schema 1, framework release number v0.6.0" + - phase: 34-plugin-marketplace (34-03) + provides: "unpushed sm-summercmsio-plugin 5853cf5 and vue-summercmsio-app 05f1cea commits whose gitlinks sm-summercmsio-app still has to record" + - phase: 34-plugin-marketplace (34-05) + provides: "framework master 13324e7 (kiosk + cabana as compiled by every plugin test through its ../summercms.go replace)" +provides: + - "plugin.yaml generated by summer plugin:manifest in 20 sm-*-plugin repositories (21 plugin packages incl. sm-pgstripe-plugin/subscriptions)" + - "TestPluginManifest (kiosk.CheckT(t, \".\")) in each of the 21 plugin packages: go test fails when plugin.yaml is stale" + - "framework requirement git.golem15.com/golem15/summercms v0.6.0 in all 20 go.mod files (framework minimum v0.6.0 in every manifest)" + - "sm-chatbots/chatchannels/chatvideo: sm-chat-plugin v0.0.0 requirement replaced with v0.1.3 (research F8)" + - "Pending pointer bumps (32 gitlinks in 5 apps) and push blockers recorded for 34-06's release ledger" +affects: [34-03 registry ingester (reads plugin.yaml at tags), 34-04 git-URL installs, 34-06 release ledger (pushes, tags, app pointer bumps)] + +actuals: + tokens: 61672 # chars/4 over the 20 plugin-repo commit diffs (go.sum churn included) + tasks: 5 + commits: 20 # measured: one commit per plugin repo, each the repo's HEAD with the plan subject (git -C log -1); 0 in summercms.go +plan_head_before: 13324e7f018be98c2e9a73557f7a367dd9616c7a +plan_head_after: 13324e7f018be98c2e9a73557f7a367dd9616c7a + +tech-stack: + added: [] + patterns: + - "Generated, test-guarded manifest: plugin.yaml is written only by summer plugin:manifest; manifest_test.go calls kiosk.CheckT(t, \".\") so drift fails go test" + - "Display-name overrides persisted in plugin.yaml overrides.name when the README H1 is the plugin ID (research F7)" + +key-files: + created: + - ../sm-{journal,translate,user,chat,faq,menu,seo,sitemap,mfa,oauthserver,sociallogin,paymentgateway,paymentgatewaysubscriptions,pgstripe,chatchannels,chatvideo,forum,herald,userfriends,chatbots}-plugin/plugin.yaml + - ../sm-{same 20}-plugin/manifest_test.go + - ../sm-pgstripe-plugin/subscriptions/plugin.yaml + - ../sm-pgstripe-plugin/subscriptions/manifest_test.go + modified: + - ../sm-{same 20}-plugin/go.mod + - ../sm-{18 of 20}-plugin/go.sum (no go.sum change in sm-user-plugin and sm-oauthserver-plugin) + +key-decisions: + - "Task 4 answered \"defer\": no app submodule pointer bumps in phase 34; the 32 pending gitlinks move to the release ledger that 34-06 writes" + - "Research F8 applied to all three chat dependants (chatbots, chatchannels, chatvideo): sm-chat-plugin requirement v0.0.0 -> v0.1.3, local replace kept" + - "Display names for ID-titled READMEs: FAQ, Journal, Menu, Multi-factor authentication, OAuth server, Payment gateway, Payment gateway subscriptions, Stripe payments, Stripe subscriptions, SEO, Sitemap, Social login, Translate, User" + +requirements-completed: [SC-1, D-01, D-02, D-03, D-04, D-05] + +duration: ~25min execution (Tasks 1-3 18:24:35Z-18:39:52Z; Task 5 and SUMMARY 19:55Z-20:05Z; checkpoint wait in between) +completed: 2026-10-29 +--- + +# Phase 34 Plan 02: plugin.yaml rollout to the public plugin repositories Summary + +**All 20 public sm-*-plugin repositories (21 plugin packages) now commit a plugin.yaml generated by `summer plugin:manifest`, guarded by a TestPluginManifest that calls kiosk.CheckT, and require framework v0.6.0. None was pushed or tagged. App pointer bumps are deferred to the 34-06 release ledger, as Jakub decided.** + +## Performance + +- **Duration:** about 25 min of execution (Tasks 1-3: 2026-10-29T18:24:35Z to 18:39:52Z; continuation for Task 5 and the SUMMARY: about 19:55Z to 20:05Z) +- **Tasks:** 5/5 (Task 4 was a decision checkpoint, answered "defer") +- **Commits:** 20 plugin-repository commits (one per repo), plus this docs commit and the roadmap progress commit in summercms.go +- **Plugin packages:** 21 + +## Accomplishments + +- Tracer (Task 1): sm-journal-plugin carries a generated, test-guarded plugin.yaml. The drift guard was demonstrated: editing one word of the description made TestPluginManifest fail, and restoring the file made it pass again. +- Task 2: the 13 other tagged repositories, done in dependency order. sm-pgstripe-plugin has two manifests (root and `subscriptions/`) in one commit. +- Task 3: the 6 untagged repositories. The v0.0.0 sm-chat-plugin requirement (research F8) was resolved to v0.1.3, and each repository still builds against the real v0.1.3 module with the replace removed. +- Every manifest says `framework: v0.6.0`, and every go.mod requires `git.golem15.com/golem15/summercms v0.6.0` (it builds locally through the existing `../summercms.go` replace). + +## Per-repository table + +Commit subject in every repository: `feat: plugin.yaml manifest for the SummerCMS marketplace`. Framework minimum: v0.6.0 everywhere. Files per commit: plugin.yaml, manifest_test.go, go.mod, go.sum. sm-pgstripe-plugin also has the `subscriptions/` pair. sm-user-plugin and sm-oauthserver-plugin had no go.sum change. + +| Task | Repository | Branch | Commit | Plugin ID(s) | Name (source) | requires | +|---|---|---|---|---|---|---| +| 1 | sm-journal-plugin | main | 5b38a3b20d784135d171128a75855d087c600b91 | golem15.journal | Journal (override) | golem15.translate v0.1.0 | +| 2 | sm-translate-plugin | main | 7e64224eaf1d7f0800063337ab5d1372569f2646 | golem15.translate | Translate (override) | - | +| 2 | sm-user-plugin | master | 97f83cc2cf7b6159b672a3a84812230a55cc8acf | golem15.user | User (override) | - | +| 2 | sm-chat-plugin | main | b952128440d506c7113e64196185053ff2517780 | golem15.chat | Chat (README) | golem15.user v0.1.2 | +| 2 | sm-faq-plugin | main | 3bf54cd2f2d8c52af0ea42a4b25b3dc5253c4405 | golem15.faq | FAQ (override) | golem15.translate v0.1.0 | +| 2 | sm-menu-plugin | main | 98df4c74bd0a38efbbc6dde3c2155e840e31b708 | golem15.menu | Menu (override) | - | +| 2 | sm-seo-plugin | main | 55f5e5dbb0c1fc50851dd51c9a8f258d265d6024 | golem15.seo | SEO (override) | - | +| 2 | sm-sitemap-plugin | main | 049f3ee270ed9ac2619f357626914b1a8caac780 | golem15.sitemap | Sitemap (override) | - | +| 2 | sm-mfa-plugin | master | 544017ce5622b0016d3393b1c1df34375c556716 | golem15.mfa | Multi-factor authentication (override) | golem15.user v0.1.12 | +| 2 | sm-oauthserver-plugin | master | d600e2c1e8de1223124a111300ac72250f8033fc | golem15.oauthserver | OAuth server (override) | golem15.user v0.1.17 | +| 2 | sm-sociallogin-plugin | master | 47b3bb2f8a3aec2ce0eac796093eebda1545bac9 | golem15.sociallogin | Social login (override) | golem15.user v0.1.12 | +| 2 | sm-paymentgateway-plugin | main | 300bc097d5ecdd091e7cba54a819dce0f95ff08d | golem15.paymentgateway | Payment gateway (override) | golem15.user v0.1.1 | +| 2 | sm-paymentgatewaysubscriptions-plugin | main | c81e38531a82ae795bc0c4b1cbbe1160fc31ebfa | golem15.paymentgatewaysubscriptions | Payment gateway subscriptions (override) | golem15.paymentgateway v0.1.0, golem15.user v0.1.1 | +| 2 | sm-pgstripe-plugin (+ subscriptions/) | main | d61508ffb4d74f9e185cd1744cdaa2ef87de4379 | golem15.pgstripe; golem15.pgstripesubscriptions | Stripe payments; Stripe subscriptions (overrides) | pgstripe: golem15.paymentgateway v0.1.0; subscriptions: golem15.paymentgatewaysubscriptions v0.1.2, golem15.pgstripe "" (same module) | +| 3 | sm-chatchannels-plugin | main | 322629b08730a00dc6f9b61060dd61befaeeeda2 | golem15.chatchannels | ChatChannels (README) | golem15.chat v0.1.3, golem15.user v0.1.2 | +| 3 | sm-chatvideo-plugin | main | 33ff4f50c6ea6fd8adef89b42da2bbf00c41a3b0 | golem15.chatvideo | Chat video (README) | golem15.chat v0.1.3 | +| 3 | sm-forum-plugin | main | 36bd8754dea747d3a7cca2d39b024d71bd6c50f7 | golem15.forum | Forum (README) | golem15.user v0.1.2 | +| 3 | sm-herald-plugin | main | db8a1bb58056a4ba679e83c2e767ff4064e6bb70 | golem15.herald | Herald (README) | - | +| 3 | sm-userfriends-plugin | main | 2f29b263cad09fde5212bd2e54740e2ff415d594 | golem15.userfriends | Friends (README) | golem15.user v0.1.1 | +| 3 | sm-chatbots-plugin | main | 0cd78f2c92ff03a24b3cc4c59e955a4337ade321 | golem15.chatbots | Chat bots (README) | golem15.chat v0.1.3, golem15.user v0.1.2 | + +There are 14 name overrides, exactly the ones planned. Re-verified at continuation: each repository's HEAD is the commit above with the plan subject, and `git tag --points-at HEAD` is empty in all 20. + +## Verification + +- Every repository passes TestPluginManifest, `go vet ./...` and `go test -short ./...`. The one exception is note 1: a pre-existing sm-user-plugin test unrelated to this plan. +- `summer plugin:manifest --check` passes for all 21 plugin packages. +- Anonymous `git ls-remote` over HTTPS works for all 20 repositories (SC-1). +- No tag points at any new commit, and no repository was pushed. +- The drift guard was demonstrated on journal (edit, stale failure, restore, pass). +- The CLI was built from framework 13324e7 into a scratch directory. Jakub's installed `summer` was not overwritten. +- Task 5 (defer): `go build ./...` succeeds in workspace mode for sm-demo-app, sm-grzybyfunkcjonalne-app, sm-bm-app, sm-summercmsio-app and fonoteka.go. No app repository was modified. + +## Task 4 decision + +**"defer"**: no app submodule pointer bumps in this phase. They move to the release ledger that 34-06 writes. The apps stay on their current, released plugin commits until the framework (v0.6.0) and the plugins are pushed and tagged. + +## Pending pointer bumps (for the 34-06 release ledger) + +There are 32 gitlinks across 5 apps. Make each bump only after the target commit is pushed, and commit only the gitlinks with `chore: bump plugin pointers for plugin.yaml`, one commit per app. Do not commit a regenerated main.go or plugins.gen.go in that commit; that regeneration belongs to each app's framework upgrade (research F10). "ff" means the current pointer is an ancestor of the target, checked locally. + +### sm-demo-app (master, in sync with origin) + +| Path | Current | Target | | +|---|---|---|---| +| plugins/golem15/faq | b3cc9784deff25dd408a94322fe025674d95f99f | 3bf54cd2f2d8c52af0ea42a4b25b3dc5253c4405 | ff | +| plugins/golem15/journal | f5a0394d6914a3288f2de8425ee12ec635cd7120 | 5b38a3b20d784135d171128a75855d087c600b91 | ff | +| plugins/golem15/menu | 86564746de01e965e95295c55bc70dc5dbd77ca2 | 98df4c74bd0a38efbbc6dde3c2155e840e31b708 | ff | +| plugins/golem15/mfa | 463c750312cc409b010e636645f9e5ebfa8d2ee1 | 544017ce5622b0016d3393b1c1df34375c556716 | ff | +| plugins/golem15/oauthserver | 8bbec72a04f2b11c6f3c42d5111cbebd80e6886d | d600e2c1e8de1223124a111300ac72250f8033fc | ff | +| plugins/golem15/paymentgateway | e0badb58dc6ea848f3ca44e917f34a8d01e660da | 300bc097d5ecdd091e7cba54a819dce0f95ff08d | ff | +| plugins/golem15/paymentgatewaysubscriptions | 1ec96dfb9b0b9bfb9d7cb40e843e629e06250d75 | c81e38531a82ae795bc0c4b1cbbe1160fc31ebfa | ff | +| plugins/golem15/pgstripe | 6d07d98f6518fcb1e14fae37d2456be0e75f3485 | d61508ffb4d74f9e185cd1744cdaa2ef87de4379 | ff | +| plugins/golem15/seo | b19cd069a5b2925692a1f8bc1fe04b3ef421e456 | 55f5e5dbb0c1fc50851dd51c9a8f258d265d6024 | ff | +| plugins/golem15/sitemap | 96c790df39043e7028203bb572aaaef0de2826dc | 049f3ee270ed9ac2619f357626914b1a8caac780 | ff | +| plugins/golem15/sociallogin | ecfb8a7cbc0cda100778c7c47ea5a29888a942c9 | 47b3bb2f8a3aec2ce0eac796093eebda1545bac9 | ff | +| plugins/golem15/translate | 54cf93bcfe8f9b6ccd4b6c4899d2e4469ed1c82b | 7e64224eaf1d7f0800063337ab5d1372569f2646 | ff | +| plugins/golem15/user | 07196a4bcbfee1f200c17f66cad147a4c091cb26 | 97f83cc2cf7b6159b672a3a84812230a55cc8acf | ff | + +### sm-grzybyfunkcjonalne-app (master, 1 unpushed app commit already) + +| Path | Current | Target | | +|---|---|---|---| +| plugins/golem15/faq | b3cc9784deff25dd408a94322fe025674d95f99f | 3bf54cd2f2d8c52af0ea42a4b25b3dc5253c4405 | ff | +| plugins/golem15/journal | ffa2c8ffb1c894d94f4e412def39fd84c70ac502 | 5b38a3b20d784135d171128a75855d087c600b91 | ff | +| plugins/golem15/menu | 86564746de01e965e95295c55bc70dc5dbd77ca2 | 98df4c74bd0a38efbbc6dde3c2155e840e31b708 | ff | +| plugins/golem15/sitemap | 96c790df39043e7028203bb572aaaef0de2826dc | 049f3ee270ed9ac2619f357626914b1a8caac780 | ff | +| plugins/golem15/translate | 54cf93bcfe8f9b6ccd4b6c4899d2e4469ed1c82b | 7e64224eaf1d7f0800063337ab5d1372569f2646 | ff | +| plugins/golem15/user | bfcfea4ed7d45374e9584557412b88797b051741 | 97f83cc2cf7b6159b672a3a84812230a55cc8acf | ff | + +### sm-bm-app (master, in sync with origin) + +| Path | Current | Target | | +|---|---|---|---| +| plugins/golem15/chat | 51c9e1759508b25e72b440a65edd6b6f37dc336f (= origin/main) | rebased SHA of b952128 (TBD) | NOT ff: rebase first | +| plugins/golem15/chatbots | d0b9fb16f88ffe11b1e0ba415df011aae920e53d (= origin/main) | rebased SHA of 0cd78f2 (TBD) | NOT ff: rebase first | +| plugins/golem15/chatchannels | a30f04a1d82b821d28766780862305da832ee7af (= origin/main) | rebased SHA of 322629b (TBD) | NOT ff: rebase first | +| plugins/golem15/mfa | 463c750312cc409b010e636645f9e5ebfa8d2ee1 | 544017ce5622b0016d3393b1c1df34375c556716 | ff | +| plugins/golem15/oauthserver | df2edddd488ce161bf1bd0c618ab519a0b53e710 | d600e2c1e8de1223124a111300ac72250f8033fc | ff | +| plugins/golem15/sociallogin | ecfb8a7cbc0cda100778c7c47ea5a29888a942c9 | 47b3bb2f8a3aec2ce0eac796093eebda1545bac9 | ff | +| plugins/golem15/user | 66fc107eb9cd6c5b63221308815719c81110c085 | 97f83cc2cf7b6159b672a3a84812230a55cc8acf | ff | + +sm-bm-app already points at the origin/main tips of chat, chatbots and chatchannels, and the local plugin.yaml commits branched off before those tips. Bumping to b952128 / 0cd78f2 / 322629b as they stand would move the app backwards. The bumps have to wait for the rebase described under the push blockers. + +### sm-summercmsio-app (master, 5 unpushed app commits from 34-03) + +| Path | Current | Target | | +|---|---|---|---| +| plugins/golem15/journal | ffa2c8ffb1c894d94f4e412def39fd84c70ac502 | 5b38a3b20d784135d171128a75855d087c600b91 | ff | +| plugins/golem15/translate | 1134dd1e29129d56a6d9cf087a078f0c65298c4c | 7e64224eaf1d7f0800063337ab5d1372569f2646 | ff | +| plugins/golem15/user | 50da92c1fb493f96b27170d1fde97861f1156de6 | 97f83cc2cf7b6159b672a3a84812230a55cc8acf | ff | +| plugins/golem15/summercms (sm-summercmsio-plugin, 34-03) | ca5941540c456cd850cf3b2f50e1d3c2e3ab6ee5 | 5853cf5be0bb681a8751a75c65bcaa90a3b19740 | from 34-03 | +| vue-summercmsio-app (34-03) | b3bfc5da80d020d318e8d6d4b3b60a45c1d84f42 | 05f1cea5ac73ac45e632703a5e406012ac426bd2 | from 34-03 | + +### fonoteka.go (master, 39 unpushed app commits already) + +| Path | Current | Target | | +|---|---|---|---| +| plugins/golem15/user | a1b78b80f55f8569851c858a6c404809449439e0 | 97f83cc2cf7b6159b672a3a84812230a55cc8acf | ff | + +No app mounts sm-chatvideo-plugin, sm-forum-plugin, sm-herald-plugin or sm-userfriends-plugin, so those four need a push and a tag but no pointer bump. + +## Push blockers and push order (for the 34-06 release ledger) + +**Diverged from origin.** Each of these needs a rebase onto origin/main, a regenerated plugin.yaml and a test run, which produces new SHAs. go.mod/go.sum conflicts are likely. +- sm-chat-plugin: 1 ahead, 12 behind (origin/main has 12 commits after v0.1.3; origin tip 51c9e17). +- sm-chatbots-plugin: 1 ahead, 1 behind (origin d0b9fb1 "chore: drop sibling replaces from go.mod"). After the rebase chatbots has no framework replace, so CheckT may only pass once v0.6.0 is tagged. +- sm-chatchannels-plugin: 1 ahead, 1 behind (origin a30f04a "feat: optional HTTP API switch", which touches go.mod). + +**Older unpushed commits a push would carry:** +- sm-journal-plugin: 3 (a6fc7cd, 7a03640, 62c75b1), so it is 4 ahead in total. +- sm-seo-plugin: 21, so it is 22 ahead in total. +- summercms.go master is ahead of origin (23+ commits). + +**Push order:** summercms.go, then translate, user, chat, faq, menu, seo, sitemap, mfa, oauthserver, sociallogin, paymentgateway, paymentgatewaysubscriptions, pgstripe, journal, chatchannels, chatvideo, forum, herald, userfriends and chatbots, then sm-summercmsio-plugin (sm-summercmsio-app/plugins/golem15/summercms, master 5853cf5be0bb681a8751a75c65bcaa90a3b19740) and vue-summercmsio-app (master 05f1cea5ac73ac45e632703a5e406012ac426bd2) from 34-03. Plugin tags follow the framework's v0.6.0 tag (T-34-10). App pointer bumps come last, one commit per app. + +## Notes + +1. sm-user-plugin `TestRegisterCORSPath` (register_test.go:360) fails in a standalone checkout because it walks up the tree looking for an app's `config/http.yaml`. The failure predates this plan and is out of scope (see Deferred items). +2. Research F8 was applied to chatbots, chatchannels and chatvideo: sm-chat-plugin v0.0.0 became v0.1.3 (latest tag), with the local replace kept. Each was verified to build and vet with the replace removed (network fetch of v0.1.3). In chatbots, `go mod tidy` also raised sm-user-plugin from v0.1.1 to v0.1.2, because chat v0.1.3 requires it. +3. `go mod tidy` removed stale indirect requires (charm.land/fang/v2, charmtone, muesli/mango*, muesli/roff), left over after the framework dropped fang in 53c0a65. No direct require was removed or downgraded. translate, userfriends and chatbots gained kiosk's indirect requires. +4. userfriends requires sm-chat-plugin at a pseudo-version, but its Requires() lists only golem15.user, so the manifest raises no pseudo-version warning. +5. Other sessions' edits were left alone: in sm-oauthserver-plugin, an uncommitted go.work edit (user replace pointing to ../sm-demo-app/plugins/golem15/user) stays unstaged; in sm-journal-plugin, the untracked go.work.sum stays untouched. +6. Timing: Tasks 1-3 ran from 2026-10-29T18:24:35Z to 18:39:52Z. The checkpoint was answered "defer", and the continuation ran Task 5 and wrote this SUMMARY. + +## Deviations from Plan + +### Auto-fixed Issues + +**1. [Rule 3 - Blocking] F8 resolution extended from chatbots to chatchannels and chatvideo** +- **Found during:** Task 3 +- **Issue:** The plan described the v0.0.0 sm-chat-plugin requirement for chatbots only. chatchannels and chatvideo carry the same requirement, and Task 3's verify rejects a skip for any repository other than chatbots. +- **Fix:** The same treatment in all three: require sm-chat-plugin v0.1.3, keep the local replace, and verify the build against the real v0.1.3 with the replace removed. +- **Files modified:** ../sm-{chatbots,chatchannels,chatvideo}-plugin/go.mod, go.sum +- **Commits:** 0cd78f2, 322629b, 33ff4f5 + +**2. [Rule 3 - Blocking] Build byproducts removed after Task 5's app build check** +- **Found during:** Task 5 verify +- **Issue:** `go build ./...` writes a binary when the pattern matches a single main package. It left `sm-grzybyfunkcjonalne-app/sm-grzybyfunkcjonalne-app` and `sm-summercmsio-app/sm-summercmsio-app` (untracked, created by this run). +- **Fix:** Removed both files. No tracked file in any app changed. +- **Commit:** none (untracked artifacts) + +## Deferred Issues + +- sm-user-plugin `TestRegisterCORSPath` (register_test.go:360) fails outside an app checkout. It predates this plan and belongs to the plugin's own test setup, not to the manifest rollout. + +## Known Stubs + +None. plugin.yaml files are generated from each repository's go.mod, plugin.go and README. + +## Threat Flags + +None beyond the plan's threat model. T-34-07 and T-34-08 are mitigated by the generated file and TestPluginManifest. T-34-09 is mitigated by the "defer" answer: no pointer references an unpushed commit. T-34-10 is accepted and handled by the push order above. + +## Next Phase Readiness + +- 34-06 owns the release ledger: framework v0.6.0 tag, plugin pushes and first or next tags, the three chat rebases, and the 32 pointer bumps listed above. +- The registry (34-03) lists a plugin only once its plugin.yaml is in a pushed tag. + +## Self-Check: PASSED + +- 20/20 plugin-repo commits found as each repository's HEAD with the plan subject (`git -C log -1`), none tagged. +- All five apps build in workspace mode; no app repository modified.