diff --git a/docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md b/docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md index 1050ad3a67..c3a5125997 100644 --- a/docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md +++ b/docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md @@ -45,6 +45,11 @@ Companion drill: `go test ./internal/hosted/... -count=1` `cd frontend-modern && npx vitest run src/pages/__tests__/HostedSignup.test.tsx src/components/Settings/__tests__/BillingAdminPanel.test.tsx` `cd tests/integration && PULSE_E2E_USE_LOCAL_BACKEND=1 PULSE_E2E_SKIP_PLAYWRIGHT_INSTALL=1 npm test -- tests/07-trial-signup-return.spec.ts --project=chromium` + The self-hosted handoff proof must keep the canonical trial-start transport + contract: `POST /api/license/trial/start` returns `409 + trial_signup_required` while the hosted-signup retry burst remains open, + then transitions to `429 trial_rate_limited` plus `Retry-After` backoff once + the limiter actually engages. - Live rehearsal helper: `python3 scripts/release_control/hosted_signup_billing_replay_rehearsal.py --base-url --signup-email --org-name ...` - Manual scenario: diff --git a/docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-04-04.md b/docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-04-04.md index eb0872fd61..4a06863a63 100644 --- a/docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-04-04.md +++ b/docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-04-04.md @@ -7,26 +7,23 @@ ## Blocking Facts 1. No Pulse v6 prerelease has shipped yet. -2. The selected remote ref `origin/pulse/v6-release` is still behind the current - local governed branch state, so `Release Dry Run` would exercise stale remote - control-plane metadata instead of the intended candidate. -3. The governed release profile in `docs/release-control/control_plane.json` +2. The governed release profile in `docs/release-control/control_plane.json` currently declares both `prerelease_branch` and `stable_branch` as `pulse/v6-release`. -4. The active control-plane target is still `v6-rc-stabilization`, not +3. The active control-plane target is still `v6-rc-stabilization`, not `v6-ga-promotion`. -5. The active local `pulse/v6-release` branch currently reports `VERSION=6.0.0-rc.1`, so the +4. The active local `pulse/v6-release` branch currently reports `VERSION=6.0.0-rc.1`, so the working line is still prerelease and there is not yet a governed local stable `6.0.0` candidate. -6. There is still no governed `Prerelease-to-GA Rehearsal Record` proving a successful +5. There is still no governed `Prerelease-to-GA Rehearsal Record` proving a successful non-publish `Release Dry Run` for the eventual stable `6.0.0` candidate. -7. `docs/releases/RELEASE_NOTES_v6.md` and +6. `docs/releases/RELEASE_NOTES_v6.md` and `docs/release-control/v6/internal/V5_MAINTENANCE_SUPPORT_POLICY.md` still leave the GA announcement dates as placeholders because no real prerelease lineage or GA-ready rehearsal has locked them yet: - `v6` GA date placeholder: `[v6-ga-date]` - `v5` end-of-support placeholder: `[v5-eos-date]` -8. There is still no governed `Release Dry Run` artifact or rehearsal record +7. There is still no governed `Release Dry Run` artifact or rehearsal record exercising stable inputs for: - `version=6.0.0` - no governed `promoted_from_tag` exists yet because no prerelease has shipped diff --git a/docs/release-control/v6/internal/subsystems/cloud-paid.md b/docs/release-control/v6/internal/subsystems/cloud-paid.md index a6ea791594..f41f10f483 100644 --- a/docs/release-control/v6/internal/subsystems/cloud-paid.md +++ b/docs/release-control/v6/internal/subsystems/cloud-paid.md @@ -608,7 +608,10 @@ operator-facing docs so it stays inside the discovered set instead of relying on a special-case assertion path. The `trial-signup` entry in `tests/integration/evals/scenarios.json` must now carry those same anchors too, so eval-pack metadata cannot silently drift away from the canonical hosted -handoff contract while the task file stays correct. +handoff contract while the task file stays correct. The release-control +high-risk verification matrix must carry those same anchors for the +`tests/07-trial-signup-return.spec.ts` browser proof, so the RC packet cannot +describe trial-start verification through an unanchored summary path. Hosted tenant organization seeding and hosted handoff role mapping now belong to the same cloud-paid truth too. `internal/cloudcp/stripe/provisioner.go` must seed tenant org members from the shared account-role-to-organization-role diff --git a/scripts/tests/test-trial-signup-docs.sh b/scripts/tests/test-trial-signup-docs.sh index a259ca8d52..656816e877 100755 --- a/scripts/tests/test-trial-signup-docs.sh +++ b/scripts/tests/test-trial-signup-docs.sh @@ -10,6 +10,7 @@ EVAL_TASK_DOC="${ROOT_DIR}/tests/integration/evals/tasks/trial-signup.md" EVAL_SCENARIOS_DOC="${ROOT_DIR}/tests/integration/evals/scenarios.json" SOURCE_OF_TRUTH_DOC="${ROOT_DIR}/docs/release-control/v6/internal/SOURCE_OF_TRUTH.md" MIGRATION_AUDIT_DOC="${ROOT_DIR}/docs/release-control/v6/internal/V5_TO_V6_COMMERCIAL_MIGRATION_AUDIT_2026-03-07.md" +HIGH_RISK_MATRIX_DOC="${ROOT_DIR}/docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md" TRIAL_SIGNUP_REFERENCE_PATTERN='(/api/license/trial/start|trial_signup_required|trial_rate_limited)' @@ -20,6 +21,7 @@ OPERATOR_DOCS=( "${INTEGRATION_README}" "${EVAL_TASK_DOC}" "${EVAL_SCENARIOS_DOC}" + "${HIGH_RISK_MATRIX_DOC}" ) TRACKED_REFERENCE_DOCS=() @@ -112,7 +114,7 @@ assert_forbidden_patterns_absent() { main() { local runbook_output pricing_output upgrade_output integration_output eval_task_output - local eval_scenarios_output + local eval_scenarios_output high_risk_matrix_output local source_of_truth_output migration_audit_output local operator_doc @@ -146,6 +148,9 @@ main() { eval_scenarios_output="$( sed -n '24,34p' "${EVAL_SCENARIOS_DOC}" )" + high_risk_matrix_output="$( + sed -n '44,54p' "${HIGH_RISK_MATRIX_DOC}" + )" source_of_truth_output="$( sed -n '412,420p' "${SOURCE_OF_TRUTH_DOC}" )" @@ -186,6 +191,11 @@ main() { assert_contains "eval scenario documents canonical trial-rate-limited response" "${eval_scenarios_output}" "429 trial_rate_limited" assert_contains "eval scenario documents retry-after metadata" "${eval_scenarios_output}" "Retry-After" + assert_contains "high-risk matrix documents trial-start route" "${high_risk_matrix_output}" "POST /api/license/trial/start" + assert_contains "high-risk matrix documents hosted-signup redirect code" "${high_risk_matrix_output}" "trial_signup_required" + assert_contains "high-risk matrix documents canonical trial-rate-limited response" "${high_risk_matrix_output}" "trial_rate_limited" + assert_contains "high-risk matrix documents retry-after metadata" "${high_risk_matrix_output}" "Retry-After" + assert_contains "source of truth keeps hosted-signup-only contract" "${source_of_truth_output}" "must initiate hosted signup only" assert_contains "source of truth forbids local trial minting" "${source_of_truth_output}" "must not mint local trial"