docs(examples): close saas tutorial boundary

Promote examples/saas from skeleton wording to the canonical tutorial app and record the v1 release decision that local persistence plus provider-explicit recipes is the supported production boundary for CI-friendly docs.

req: examples/001

req: auth/001

req: laws/004

req: public_api/005
This commit is contained in:
slhx agent
2026-06-05 10:06:46 +02:00
parent 78aff362ff
commit a428097e0e
4 changed files with 32 additions and 36 deletions
+4 -5
View File
@@ -6,10 +6,9 @@ commands; ordinary server-first apps do not need a frontend framework,
handwritten UI JavaScript, selector targeting, or raw runtime primitives. req: pitch/001 req: canonical_authoring/001
Status: the repository currently has a strong v0 example/API path, a compile-tested
SaaS tutorial skeleton, an advanced Kanban milestone sketch, and a full techdemo.
The polished v1 product story is still being filled out through docs, recipes,
diagnostics, and stability guidance. See `docs/v1-readiness.md` for the current
close-gap audit.
SaaS tutorial app, an advanced Kanban milestone sketch, and a full techdemo.
The v1 story now has tutorial, recipe, diagnostics, and stability docs; see
`docs/v1-readiness.md` for the remaining close-gap audit.
## The normal path
@@ -120,7 +119,7 @@ See `docs/versioning.md`.
- `examples/v0`: canonical beginner path covering counter, typed todo CRUD,
form wizard, auth action, page swaps, SSE notifications, and keyed list
updates. Start here.
- `examples/saas`: compile-tested v1 tutorial skeleton covering auth/session,
- `examples/saas`: compile-tested v1 tutorial app covering auth/session,
CSRF-safe mutation, local persistence, generated swaps, page/push shape, plain
CSS, and one explicit island without provider-heavy platform scope. Read the
walkthrough in `docs/tutorial-saas.md`; the SQLx persistence recipe in
+18 -22
View File
@@ -8,11 +8,11 @@ or v1 tag. req: examples/001 req: public_api/001
### Canonical tutorial app
Status: partially satisfied; not enough for GOAL_DONE.
Status: satisfied pending final closure verification.
Evidence:
- `examples/saas` is a compile-tested tutorial skeleton with typed domain values,
- `examples/saas` is a compile-tested tutorial app with typed domain values,
`#[hemx::form("new_project")]`, auth/session-shaped `AppContext`, CSRF-safe
mutation, local persistence adapter, generated keyed row/form/summary/page/live
effects, SSE/polling shape, plain CSS, one explicit metrics island, and tests.
@@ -21,14 +21,16 @@ Evidence:
- `docs/recipes/sqlx-persistence.md` shows how to replace `LocalProjectStore`
with an app-owned SQLx adapter without moving SQLx into core.
Release decision:
- The supported v1 production boundary is the compile-tested local persistence
adapter plus provider-explicit recipes. SQLx/auth/observability/deploy/PWA stay
app integrations rather than required workspace dependencies, so the tutorial
remains runnable in CI without credentials or external services.
Remaining before GOAL_DONE:
- Turn `examples/saas` from a skeleton into the canonical v1 close artifact: either
add one checked production adapter path/profile, or make an explicit release
decision that local persistence plus provider recipes is the supported v1
production boundary.
- If the release must prove a real DB provider in CI, add a feature-gated or
companion SQLx-backed test instead of only a recipe.
- Run the final closure audit and full gates on a clean tree.
### Beginner API stability
@@ -58,8 +60,8 @@ Evidence:
- `README.md`, `docs/versioning.md`, and `docs/diagnostics.md` identify raw
effects, ids, render/target construction, manual registries, runtime hooks,
SSE internals, and island internals as advanced.
- Public examples label `v0` as beginner, `examples/saas` as the tutorial
skeleton, `kanban` as advanced/north-star, and `techdemo` as advanced.
- Public examples label `v0` as beginner, `examples/saas` as the tutorial app,
`kanban` as advanced/north-star, and `techdemo` as advanced.
Remaining before GOAL_DONE:
@@ -120,9 +122,8 @@ Evidence:
Remaining before GOAL_DONE:
- Confirm whether SQLx/auth/observability/deploy/PWA recipes are sufficient as
recipe-only production guidance or whether one provider path must be exercised
by the tutorial crate before v1.
- Run the final recipe scan and confirm links from the tutorial and README remain
complete.
### Public examples
@@ -131,7 +132,7 @@ Status: satisfied pending final scan.
Evidence:
- `examples/v0/README.md` is the beginner entry.
- `examples/saas/README.md` identifies the production-shaped tutorial skeleton.
- `examples/saas/README.md` identifies the production-shaped tutorial app.
- `examples/kanban/README.md` identifies Kanban as advanced/north-star.
- `examples/techdemo/README.md` identifies Techdemo as advanced.
- Contract tests guard against browser JavaScript and low-level resource plumbing
@@ -175,11 +176,6 @@ Remaining before GOAL_DONE:
## Recommended next waypoint
Make the production-shaped SaaS path closure decision concrete. The smallest
implementation path is a bounded, checked provider slice for `examples/saas`
(such as a feature-gated SQLx adapter test) if v1 must prove a real provider in
CI; the smallest docs path is an explicit release decision that the local adapter
plus provider recipes is the v1 production boundary.
After that, run the closure audit with the full gates from the active goal,
including `cargo run -p hemx-xtask -- test` and the full diagnostics scan.
Run the closure audit with the full gates from the active goal, including
`cargo run -p hemx-xtask -- test`, the full diagnostics scan, forbidden
normal-path scans, and a final critic review before any GOAL_DONE claim.
+9 -8
View File
@@ -1,8 +1,8 @@
# hemx SaaS tutorial skeleton
# hemx SaaS tutorial app
This is the compile-tested skeleton for the v1 production-shaped tutorial app. It is intentionally provider-light: auth/session, CSRF, persistence, deploy, metrics, and islands are explicit app boundaries, not hemx core services. Read the walkthrough in `../../docs/tutorial-saas.md`. req: examples/001 req: auth/001
This is the compile-tested v1 production-shaped tutorial app. It intentionally uses an equivalent local persistence adapter and provider recipes as the supported v1 production boundary: auth/session, CSRF, SQLx persistence, deploy, metrics, flags, offline behavior, and islands are explicit app integrations, not hemx core services. Read the walkthrough in `../../docs/tutorial-saas.md`. req: examples/001 req: auth/001
What it proves today:
What it proves:
- typed form/newtype inputs for project creation
- auth/session context passed through normal Rust state
@@ -14,12 +14,13 @@ What it proves today:
For provider-explicit boundaries, see `../../docs/recipes/sqlx-persistence.md`, `../../docs/recipes/auth-session-csrf.md`, `../../docs/recipes/observability-flags.md`, `../../docs/recipes/deploy-versioning.md`, and `../../docs/recipes/pwa-offline.md`.
What it deliberately does not claim yet:
What it deliberately keeps out of the tutorial crate:
- a checked-in SQLx migration crate or database pool
- production cookie/session middleware
- a deploy target, flags, analytics, billing, or offline sync
- browser automation for the metrics island
- a vendored SQL/auth/metrics/flags/deploy provider dependency
- provider credentials, external services, migrations, or browser automation
- billing, account administration, or other SaaS platform scope
Those production concerns belong in app adapters and recipes so the tutorial remains runnable in CI without external side effects.
Run:
+1 -1
View File
@@ -320,7 +320,7 @@ mod tests {
}
#[test]
fn home_page_documents_the_production_skeleton_boundaries() {
fn home_page_documents_the_production_app_boundaries() {
// req: examples/001 req: auth/001 req: auth/004 req: interop/003
let ctx = AppContext::demo();
let html = home_page(&ctx);