4.7 KiB
4.7 KiB
Blockers
Updated: 2026-08-15
Stripe billing
- Blocked: Activating roadmap item 7.5 in production.
- Why: Hosted Checkout, customer-portal sessions, signed subscription webhooks, persisted billing state, and Premium-role provisioning are implemented. The Stripe product, recurring price, portal, webhook registration, and production credentials must be created outside the repository.
- Required: Configure the Premium recurring price, enable the Stripe customer portal, register
/api/billing/webhookforcustomer.subscription.created,customer.subscription.updated, andcustomer.subscription.deleted, then supplySTRIPE_SECRET_KEY,STRIPE_PRICE_PREMIUM, andSTRIPE_WEBHOOK_SECRETthrough the deployment environment. Do not place secret values in source control or chat. - Recommended: One monthly Premium price first; add annual billing only after the monthly flow is operating.
- Current access check: Production has test-mode secret and webhook values, but
STRIPE_PRICE_PREMIUMcurrently contains aprod_...Product ID. Checkout requires the recurringprice_...Price ID. The publishable key is not used by hosted Checkout. - Runbook: Follow
docs/operations/stripe-activation.md, completing test mode before creating or installing live-mode values.
Public registration verification
- Blocked: Completing a real-browser production signup check.
- Why: The 2026-07-31 anonymous production check confirms
allowRegistration=true,turnstileEnabled=true, and Google sign-in enabled. Completing Turnstile and creating a disposable account requires an interactive production browser session. - Required: Register one disposable account through Turnstile, verify email/sign-in/rate-limit behavior, then remove the account if it is not needed.
- Recommended: Monitor Turnstile and rate-limit failures during the first public rollout; keep email verification required.
- Current status: Production returns
allowRegistration=true,turnstileEnabled=true,googleEnabled=true, andmicrosoftEnabled=false. A registration request without a Turnstile token is rejected with HTTP 400. SMTP is configured and enabled. The operator reportsAUTH_REQUIRE_EMAIL_VERIFICATIONis now enabled; the disposable interactive signup is still required to prove the deployed behavior end to end.
Production verification and deployment
- Blocked: Authenticated production smoke tests, backup restore verification against real data, OAuth-provider checks, and deployment.
- Why: These require production access, real credentials, and operator authorization.
- Required: After the current pull request passes CI and is approved, follow
docs/release-candidate-review.mdanddocs/release-checklist.mdon the production host. Confirm the admin-only version badge matches the deployed commit, then run the authenticated application workspace, Career, CV, attachment, email-verification and rollback checks. - Recommended: Verify backup/restore before deployment, then exercise login, existing application counts, Career Workspace, public CV refresh/download, AI, and attachments in order.
- Current access check: Read-only SSH access is confirmed to the LAN production host as both
rootandpiusing the existingid_ed25519identity. All four containers are healthy and the host has 44 GB free. No production change or deployment was attempted. - Current status: Anonymous production checks confirm the frontend and
/api/auth/configreturn HTTP 200. The public/healthpath currently returns the SPA HTML shell; the release branch proxies that exact path to the backend and includes a regression test. Gitea PR 28 exists and an earlier complete PR gate passed; the new local commits still need their remote CI run after push. React Router is now 7.18.2 and the recorded local dependency audit is clean, so the superseded router/runner blockers were removed.
Legacy job/application column cutover
- Blocked: Removing the opportunity columns duplicated between
JobApplicationandJob. - Why: The compatibility dual-write protects existing production rows and older clients. The release branch now backfills missing opportunities on startup, synchronizes both creation paths, and leaves all legacy columns intact. Dropping columns still requires production validation and an observation release.
- Required: After deployment, run the read-only report in
docs/operations/job-opportunity-cutover.mdagainst production and a restored backup, then confirm that backward API compatibility is no longer required. - Recommended: Use an expand/contract release: first stop legacy reads after a verified backfill, observe one release, then drop the duplicate columns in the following migration.