Skip to main content
Sheetbase Docs
Reference

Release Governance

How Sheetbase classifies, audits, and promotes beta changes into production.

Release Governance

Sheetbase uses a two-branch release model:

BranchDomainRole
mainhttps://sheetbase.flonest.appProduction
betahttps://beta.sheetbase.flonest.appStaging and trusted beta usage

main must be treated as production-sensitive. beta can contain broader product work, but a broad beta to main merge is not the normal production path.

Production Rule

Production releases must be candidate-based.

Create a narrow candidate branch from origin/main, apply only the approved release slice, audit that candidate, and open a PR to main.

Do not promote the full beta branch to main. A wholesale beta candidate is a break-glass exception only, requiring explicit human approval, a documented reason, and --allow-wholesale.

Risk Classes

Every candidate is classified before release. --intent is the purpose declared by the releasing agent; path buckets are derived from the files changed.

ClassExamplesProduction posture
read-onlyinspection/search/recon toolsUsually safe after tests, build, and path audit
diagnosticbetter blocked-write messages, safer previewsUsually safe if successful behavior is unchanged
mutatorwrite behavior, snapshots, cachesNeeds focused tests and beta confidence
destructiverow/column delete, move, insert, raw batchUpdateNeeds explicit approval and live test-sheet verification
mcp-readread/search/inspect tool behaviorUsually safe after docs/skills sync and tests
mcp-writewrite guards, rows/columns, safety helpersBlocks production unless explicitly waived after beta verification
uilanding, auth, dashboard, design systemNeeds visual QA and auth smoke
packagedependency, lockfile, build configNeeds install, audit, tests, lint, build
authlogin, OAuth, session, proxy, Better Auth codeProduction-impacting because beta and production share auth infrastructure
dbmigrations, shared data model, direct database accessProduction-impacting because beta and production share one Supabase database
infraNext.js, TypeScript, lint, build, deploy configNeeds install, tests, lint, build, and deployment review
skillspublished agent skills or skill bundle sourceNeeds npm run skills:check and source/mirror consistency review
docspublic docs and agent-facing docsNeeds docs build and consistency review
release-governanceaudit scripts, release docsNeeds local audit tests and repo hygiene checks

Local Audit

Run the release audit before opening or merging release PRs:

npm run release:audit -- \
  --target main \
  --intent diagnostic \
  --base origin/main \
  --candidate HEAD

For beta work:

npm run release:audit -- \
  --target beta \
  --intent release-governance \
  --base origin/beta \
  --candidate HEAD

The audit is local-only. It does not call GitHub, Vercel, or external services. It checks:

  • clean worktree unless --allow-dirty is passed
  • origin/main is already contained in origin/beta for production preparation
  • candidate includes the selected base ref
  • production candidates are not wholesale origin/beta or branches created from an ahead origin/beta
  • changed files are bucketed by risk class
  • production-blocking path classes are surfaced
  • added write/destructive mutator signals are detected
  • MCP tool changes are paired with docs/skill updates or an explicit waiver

Use JSON output for CI or handoff packets:

npm run release:audit -- \
  --target main \
  --intent read-only \
  --base origin/main \
  --candidate HEAD \
  --format json

Required Verification

Minimum verification for any release candidate:

npm test
npm run lint
npm audit --audit-level=moderate
npm run build
git diff --check

Package or build-system candidates also require a clean install:

npm ci

Skill changes require:

npm run skills:check

Production Promotion

Merging to main creates a production build in Vercel, but serving users still requires explicit approval.

After a main PR merges:

  1. Verify Vercel reports the deployment ready for the merged commit.
  2. Run basic HTTP smoke checks on the staged deployment.
  3. Ask for explicit approval.
  4. Promote with npx vercel promote <deployment-url> --yes.

Do not silently promote production. Do not use vercel alias set or Preview promotion as the normal production path.

Beta Reconciliation

After every main release, reconcile main back into beta.

The beta reconciliation PR should be ancestry-focused. If conflicts appear, preserve beta behavior and only apply the production release fix where beta still needs it.

The expected graph after reconciliation:

git rev-list --left-right --count origin/main...origin/beta
# expected: 0 <beta-only-count>

That means main is an ancestor of beta, and future release audits do not have to reason about duplicate production commits.

Known Maintenance Warnings

These warnings do not block every release, but they must remain visible:

  • local Vercel CLI may be behind the latest version
  • docs build may emit Fumadocs/Webpack cache warnings
  • standalone tsc can require generated Fumadocs source first
  • npm ci may report node-domexception deprecation

If a release candidate touches the related area, promote the warning from parked maintenance to active review.

On this page