Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR begins the architectural replacement of Coil's presentation layer with Fission and packages the work as a reviewable migration branch. It establishes Fission as the application/UI runtime, replaces the documentation website with a Fission static site, moves Gitly's production presentation onto Fission SSR, introduces a Fission-native Shoppr storefront and protected Web admin shell, and connects Shoppr catalogue/cart rendering to PostgreSQL-backed typed jobs.
This PR is intentionally opened as a draft. The branch contains substantial, useful migration work, but the Shoppr serve entrypoint still starts the legacy HttpServerHost. Search and booking cannot yet receive their request-scoped initial data because Fission has no typed SSR-to-island initialization path. The Fission authority audit confirmed that these bounded islands need seeded data plus local reducers, not browser execution of ServerJobRegistry; queued server jobs already settle before final SSR. A separate confirmed HTML-first gap means submitted form control values cannot yet become typed server-action reducer input. These limitations are documented below rather than hidden behind passing component tests.
Size and review shape
main, kept as small logical changes rather than squashed.Architectural contract
The accepted design is recorded in
docs/design/100-fission-native-application-architecture.md.The important decisions are:
Detailed changes
Fission integration layer
coil-fissioncrate as the narrow product/framework boundary.CoilRequestScope,SiteDefinition, andSiteRegistryfor server-derived site, market, locale, origin, route, and session identity.RouteDecisionauthorization selector used by protected routes.Documentation and marketing website
website/.website/fission.tomlwith the explicitcoil_website::siteentrypoint required byfission site serve.website/src/site.css.website/DESIGN.md.scripts/check-website-serve.sh, which launches the installed Fission CLI, probes real HTTP routes, verifies a real 404, captures evidence, and cleans up the complete server process group.Shoppr visual/product surface
Shoppr Fission storefront
shoppr-fissioncrate with target-gatedsiteandwebfeatures.RouteDecisionselector and lazyProtectedRoutebranches.PostgreSQL catalogue and cart authority
PostgresCatalogRepositoryfor published catalogue, collection, search, product, cart read, and cart mutation queries.ShopprJobErrorwithout leaking connection/schema diagnostics.Real Fission cart action path
/cartroute that declares a cart read resource and renders empty, pending, failure, line-item, and subtotal states with built-in Fission widgets.shoppr-cartWASM island implementation and its route declarations so the code no longer advertises a local-only simulation as a durable cart.Gitly Fission migration
gitly-fissioncrate with Gitly state, models, localization, retained widgets, responsive navigation, search island, and theme-aware UI.serve_from_envproduction entrypoint tocoil::fission::server::serve.Domain/runtime support work
Validation and evidence
Completed
Real Fission website serve boundary
The website was exercised through the installed CLI rather than only its Rust renderer tests.
01M1XCCNC6XEEW5H5PZY39TVGEbash scripts/check-website-serve.sh/returned 200./docs/intro/returned 200./architecture/100-fission-native-application-architecture/returned 200./img/favicon.svgreturned 200./not-a-real-coil-routereturned 404./home/zcourts/projects/projects/releases/coil/site-serve-scriptAn earlier direct reproduction/verification job (
01M1XBEDFD85QFW84KDAER3344) also completed with exit code 0 after the missing site entrypoint was fixed.Static/integrity checks during wrap-up
git diff --check origin/main...HEADpasses.cargo metadata --locked --manifest-path apps/shoppr/Cargo.toml --no-depspasses.cargo metadata --locked --manifest-path apps/gitly/Cargo.toml --no-depspasses.Added but not executed before this wrap-up
Shoppr now contains focused tests for:
A serialized one-thread runner job (
01M1XEHFAWTGJ35A6B0EJMAWB0) was submitted for these tests but remained queued behind higher-priority shared-VM release work. It was cancelled while still queued when the user requested immediate wrap-up. Therefore these new Shoppr tests are not claimed as executed in this PR description.Known gaps and blockers
Shoppr production cutover is not complete
ShopprBootstrap::serve_from_envstill invokes the legacy customer runtime/HttpServerHost. The Fission server app and production PostgreSQL job registry exist, but switching the public entrypoint now would remove checkout, account, operational, and other still-unmigrated production routes. This PR deliberately does not trade route loss for a superficial cutover claim.The legacy router, template renderer, and frontend files therefore remain because they still have production callers. They should be deleted only after those callers move.
Search and booking islands need typed initialization
The Fission authority audit against Fission commit efe53a12 on the gaming branch confirmed one incomplete initialization pipeline: the browser bridge and WorkerBoot understand properties, but ProgressiveWorker and WasmIsland expose no request-scoped source from which the route manifest can populate them. Shoppr search and booking are correctly shaped as bounded islands that consume seeded server data and then filter or select through local synchronous reducers.
BrowserIslandApp deliberately rejects queued effects. That is not a demonstrated blocker for these two islands and does not imply that ServerJobRegistry should run in the browser. Catalogue, cart, booking, and database authority stays in SSR actions, reducers, and server jobs. The branch will not add a DOM-data or handwritten JavaScript side channel; request-scoped data remains authoritative through route_widget_with_state until Fission provides the typed initialization path.
HTML-first submitted values need typed action binding
The authority audit also confirmed a major framework gap for stateful HTML forms. Signed server-action tokens contain the render-time ActionEnvelope, while the form decoder currently reads the token but does not bind submitted successful controls into typed reducer input. Fixed render-time actions such as Add-to-bag with a known product handle work; search fields, quantities, authentication fields, checkout addresses, and administrative edits that depend on current input do not yet have a Fission-native typed submission path.
This branch does not bypass Fission signing, origin checks, or one-shot replay protection with ad hoc hidden payloads. Fission owns the typed binding design.
Other Fission authority findings
Admin/operations are a shell, not a finished operator product
The protected Fission Web admin shell, routing, pending/denied branches, and typed session/snapshot job contracts exist. It is not yet packaged and mounted as the production operator application with every existing CMS, commerce, event, media, membership, and ops workflow migrated and independently authorized.
Full regression qualification remains outstanding
No full workspace build, Shoppr database-backed live server E2E, browser island interaction run, or production-container qualification is claimed for the final commit. The shared Debian VM was running higher-priority release work, and Coil's explicit allowance was one serialized job/thread. This PR should remain draft until the focused Shoppr tests and an official CLI/server/database workflow have run on the exact candidate commit.
Security, persistence, and operational impact
Local files intentionally excluded from publication
These untracked workspace files were not staged, committed, pushed, or included in this PR:
showcase-coil-intro-chat.txtshowcase-data-entity-map.pngshowcase-event-lifecycle.pngshowcase-platform-vision.pngshowcase-system-summary.pngCommit sequence
The branch intentionally preserves the logical history. In order:
Recommended review order
docs/design/100-fission-native-application-architecture.mdcrates/coil-fission/website/,scripts/check-website-serve.sh, and workflow changesapps/gitly/crates/gitly-fission/plus Gitly server integrationapps/shoppr/crates/shoppr-fission/Before marking ready for merge
serveboundary to Fission only after route parity.