Skip to content

v0.9.0 — launch readiness: docs front door, preview governance, preview access, opt-in dashboard #239

Description

@simpros

Problem

sprout is public today (AGPL-3.0, docs site and marketing page live, v0.8.0 shipped the agent-first docs and the GitHub reusable workflow) and a stranger still cannot get comfortable with it quickly. Four gaps:

  1. The docs are structured badly. Every published page renders as a bare body with no navigation, the generated docs index is a flat list, and the marketing page links straight into leaf pages. There is no sidebar, no reading order, and no index a human can browse. The corpus itself is fine — the shell around it is the problem.
  2. Nothing bounds a preview. There is no TTL, no idle teardown, no cap per repo or per gateway, and no connection budget anywhere in the codebase. Measured on our own instance: ~8 previews holding ~12 idle pool connections each exhausts a 100-slot Postgres with zero traffic (SQLSTATE 53300), and the relief was raising max_connections — headroom, not a bound.
  3. A preview can only be shared by handing out a public hostname. No per-preview credential, no revocation, no scoping. The earlier external forward-auth attempt in front of previews was abandoned: there is no Cloudflare-free path from the preview edge to that service, and every Cloudflare path rewrites X-Forwarded-Host, so the gate authorised everything. A usable gate has to live in the gateway, which already sits on the preview network.
  4. There is no view. What is running right now is sprout list in a terminal. A launch audience judges this kind of tool by a screenshot, and an unauthenticated page listing previews would leak every preview URL — so the view has to be opt-in and read-only.

Decision

  • Rejected: a local one-command stack plus a repo-wiring generator. sprout is infrastructure an operator runs for adopting repositories, not a local development tool; "run it on your laptop in five minutes" is the wrong use case and was dropped (sprout up + sprout init: five-minute path to a first preview on your own box #240 records the reasoning). The friction worth removing is understanding what sprout is and how a preview is wired, which is a documentation problem.
  • v0.9.0 therefore invests in the docs front door and navigation, bounds previews, makes previews shareable, and adds an opt-in read-only view.
  • Every new capability is opt-in: no adopter has to change existing wiring, and no new always-on surface is introduced.

Children

All four are independent (no cross-blocking edges) and are the milestone's frontier.

Acceptance criteria

Out of scope (post-launch, do not smuggle in)

Prod-data snapshot and column masking for seeds, preview evidence (screenshots/console capture in the PR note), forge parity beyond GitHub/GitLab, a remote/Kubernetes app-deployment backend, a metrics exporter, per-user accounts and RBAC, and any local-development stack.

Scope guard

  • Public-tracker hygiene: no internal hostnames, paths, resource names or infrastructure detail in bodies, docs, screenshots or example output — use example.com placeholders and generic descriptions.
  • Every child must leave the default behaviour of an existing deployment unchanged; new behaviour is enabled by manifest key, CLI flag or gateway env, never by upgrading.
  • Operator/infrastructure work (Coolify apps, DNS, certificates, host firewalls) is not product work and stays out of this repo.

Activity

  1. added this to the v0.9.0 milestone on Sep 24, 2026
  2. changed the title [-]v0.9.0 — launch readiness: self-serve first preview, preview governance, preview access, opt-in dashboard[/-] [+]v0.9.0 — launch readiness: docs front door, preview governance, preview access, opt-in dashboard[/+] on Sep 25, 2026
  3. simpros commented on Oct 2, 2026

    @simpros
    OwnerAuthor

    Kickoff (2026-10-02): v0.9.0 work started. Frontline, unblocked and in flight now — #261 (install telemetry), #241 (preview governance), #244 (docs front door). Next in the queue as slots free: #242 (preview access), #243 (dashboard), #249 (ponytail cleanup). #262 (OTLP traces) is the milestone's only dependent ticket — it stays blocked until #261's PR lands. #250 closed as delivered by #263.

  4. simpros commented on Oct 5, 2026

    @simpros
    OwnerAuthor

    Release cut and handed off (maintainer steps done outside this repo):

    • Release prep — Release prep v0.9.0: bump version pins #278 merged as chore(release): bump version pins 0.8.3 -> 0.9.0 (#278) #279; every adopter-facing pin moved 0.8.3 → 0.9.0 (package.json ×4, Dockerfile, deploy/coolify, docs, examples, templates/README.md). git grep for the old pin on main is empty.
    • v0.9.0 tagged on the release-prep merge commit; the release pipeline ran green end to end (image, CLI, component).
    • Artifacts verified, not just the run: ghcr.io/simpros/sprout:0.9.0 pulls and :latest resolves to the same digest; the release carries sprout-linux-x64, sprout-linux-x64-musl and SHA256SUMS.txt, the checksum verifies and sprout-linux-x64 --version prints v0.9.0; the CI component tag v0.9.0 was synced and its templates/preview.yml matches this repo's template with the release sentinel resolved.
    • Consumers moved: the adopting repositories bumped sprout-ci/preview to v0.9.0 in their pipelines (green preview pipelines, preview URLs published), and the operator deployment was updated to the published image and verified against the running container (/healthz 200, pre-existing preview records and issued credentials still present after the restart).
    • Install telemetry ships active in this image; the destination and credential were configured as repository variable + secret before tagging, so the published image reports to the maintainer sink rather than silently doing nothing.

    The rest of this umbrella's acceptance criteria are met by the merged children (#241, #242, #243, #244, #261, #262, #276); closing the umbrella is the maintainer's call.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions