docs: capture exploration — core plugin port inventory, Horoskopia and Wavepath seeds

This commit is contained in:
Jakub Zych
2026-10-07 20:10:28 +02:00
parent b3ca53cbc1
commit 5429d46751
4 changed files with 160 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
---
title: Golem15 plugin inventory and core plugin port order (Phases 17–19.1)
date: 2026-10-07
context: /gsd-explore session on porting the remaining core plugins after Journal
---
# Golem15 plugin inventory and port order
A survey of every `plugins/golem15/*` copy under `/media/nvme/dev/golem15` and `/media/nvme/dev/jz/wavepath.org` on 2026-10-07. "Live" counts top-level projects. LOC is PHP without tests or vendor, measured on the largest copy.
## Port status
- **Ported:** user, translate, journal, golem, feedback. Apparatus became framework packages (`apparatus-dissolved-into-framework.md`).
- **Not ported, covered by the framework:** websockets. `modules/lighthouse` and its `centrifugo` driver already provide the publisher, the token route, the subscribe proxy and per-namespace `Authorizer`s, which are what Wavepath's code calls (`BroadcastEventJob`, `CentrifugoClient`, `AuthorizerRegistry`, `ChannelAuthorizerInterface`).
- **Not ported:** knobwidget and dualformfield/dualformwidget. They are about 150 LOC of form widgets each, and the admin SPA field types replace them.
## Shared plugins and how much each is worth porting
| Plugin | Live projects | LOC | Decision |
|---|---|---|---|
| paymentgateway + pgstripe | 19 installed, 7 real users | 18.7k + 1.9k | Phase 18 |
| paymentgatewaysubscriptions | 5 | 5.5k | Phase 18.1 if it does not fit in 18 |
| sitemap | 21 | 1.9k | Phase 17 |
| menu | 8 | 1.0k | Phase 17 |
| faq | 16 | 0.5k | Phase 17 |
| chat | 17 installed, Wavepath is the heaviest user | 4.4k | Phase 19 |
| chatchannels | Wavepath | 2.8k | Phase 19 |
| chatbots, chatvideo, forum, herald, userfriends | Wavepath (userfriends also in PHP fonoteka; fonoteka.go has no port) | 0.6k–1.7k each | Phase 19.1 |
| oauthserver | Wavepath | 5.5k | With the Wavepath port, on `wristband` |
| newsletter | horoskopia | 2.3k | Backlog 999.1 |
| github, quote | 16 / 13 | 3.4k / 0.8k | Not scheduled. Quote is cheap because golem and journal are ported |
| seo, sitemanager | 6 | 4.3k / 0.9k | Not scheduled. Phase 16 replaces both with `@nuxtjs/seo` and app content |
| blog, bloghub, ai | 3–4 | 7.5k–9.6k | Not scheduled. This is the older blog line; journal is its successor |
Third-party plugins in many projects: `winter/location` is in 19, `winter/blocks` in 13 and `winter/pages` in 10. Whether paymentgateway shipping or user profiles need `winter/location` is an open question.
## PaymentGateway facts that matter for Phase 18
- **Which projects really use it:** sklep.figs (shop), portal.golem15.com (invoicer), getaround.world (tourism with its own StripeConnect operator, quotify, subscriptions), quotify.pro, drzewo.net, horoskopia.eu and queststream.online. In the others it is installed only because the starter ships it.
- **Drivers:** Stripe is the only real driver. No PayU, Przelewy24, PayPal or Tpay code exists anywhere.
- **Operator registration:** operators extend the abstract `core/Operator` and push their class onto the config key `golem15.paymentgateway.operators` from inside the `paymentgateway.booted` event. In Go this becomes build-time registration through an interface.
- **Webhooks:** one CSRF-exempt notification route, `_paymentgateway/{operator}/{mode?}/{result?}`. pgstripe adds `POST /webhook/stripe/subscriptions` for the subscriptions plugin.
- **State machines and events:**
- Payment: Created, Sent, Accepted, Rejected, Canceled, Refunded.
- Order: 12 states and about 18 transitions, 7 of them refund paths.
- 19 Order events and 5 Payment events drive about 26 mail templates.
- `OrderPaid` is the event consumers listen to most.
- **Acceptance consumer:** Horoskopia. Its `horoscope` plugin (37k LOC, 65 routes, Nuxt 4 frontend `vue-horoskopia-app`) requires PaymentGatewaySubscriptions and PGStripe. It uses `Order`, `OrderFactory`, `Cart`/`Item`/`Details`, `Settings`, `Payment`, `Subscription`, `SubscriptionPlan` and the `SubscriptionGateway` contract.
## Port order decided on 2026-10-07
1. **Phase 17, Blog companions:** sitemap, menu and FAQ, plus a framework menu-item type registry.
2. **Phase 18, Payment Gateway:** paymentgateway and pgstripe. Subscriptions and Stripe add-ons go into 18.1, 18.2 and so on if the Phase 18 discussion splits them out.
3. **Phase 19, Chat and ChatChannels.**
4. **Phase 19.1, Chat satellites:** chatbots, chatvideo, forum, herald and userfriends.
5. **Phase 20, Płytarium cutover.**
6. **After Phase 20:** the Horoskopia port comes first, then the Wavepath port. Neither is planned yet. This stretch is about preparing the shared plugins, not migrating apps, and a stabilization phase may come first. See the seeds for both ports.
## Related
- `core-plugins-own-repos.md`: each shared plugin gets an `sm-<name>-plugin` repo
- `../seeds/keios-port-themes-payments.md`: an earlier seed that also covers paymentgateway