diff --git a/docs/release-control/control_plane.json b/docs/release-control/control_plane.json
index 9ee346e35..f8bb48af4 100644
--- a/docs/release-control/control_plane.json
+++ b/docs/release-control/control_plane.json
@@ -55,7 +55,7 @@
"profile_id": "v6",
"kind": "release",
"status": "active",
- "summary": "Execute Pulse v6 GA from the RC7 soak candidate unless telemetry or newly reported RC7 issues expose a release blocker; readiness gates are already cleared, so remaining work is release-day execution, public cutover approval, and final artifact publication rather than another default RC.",
+ "summary": "Prepare Pulse v6 GA from the current pulse/v6-release branch after accumulated post-RC7 fixes and final current-branch validation. Do not promote the published RC7 candidate unchanged, and do not plan another RC by default; remaining release-day execution and public cutover approval require fresh current-branch proof, while newly reported RC7 issues stay regression signals unless a release-owner decision changes direction.",
"completion_rule": "manual",
"proof_scope": "none"
},
diff --git a/docs/release-control/internal/CONTROL_PLANE.md b/docs/release-control/internal/CONTROL_PLANE.md
index 32afe4a03..d9c90623c 100644
--- a/docs/release-control/internal/CONTROL_PLANE.md
+++ b/docs/release-control/internal/CONTROL_PLANE.md
@@ -237,17 +237,18 @@ user language should update the control plane.
1. v6 is the current active release profile.
2. `v6-ga-promotion` is the current active engineering target.
- The shipped RC line has already reached `release_ready`, so the target is
- now a human-held GA launch-execution target: RC7 is the final soak candidate
- unless telemetry or newly reported RC7 issues expose a blocker, and the next
- public release is GA rather than another default RC.
+ The next public v6 release target is GA from the current
+ `pulse/v6-release` branch after accumulated post-RC7 fixes and final
+ current-branch validation. The published RC7 candidate must not be promoted
+ unchanged, and another RC is not planned by default unless a release-owner
+ decision changes that.
3. `v6-product-lane-expansion` remains planned behind the GA launch target.
Its candidate-lane surface remains available in the linked
`candidate_lanes` and `coverage_gaps`, but it should not displace release
execution while GA is the current objective.
-4. The GA readiness gates are passed because the shipped RC line reached
- `release_ready` with exercised prerelease-to-GA promotion proof, rollback
- clarity, and the written v5 maintenance-only policy in place.
+4. The older RC line reached the historical `release_ready` floor, but the
+ current GA target now requires fresh current-branch validation because the
+ release will include accumulated fixes and changes after RC7.
5. `v6-rc-stabilization` is completed after the shipped RCs established the
current monitored-first floor and the active objective moved to stable
promotion.
diff --git a/docs/release-control/v6/internal/records/current-branch-ga-release-policy-2026-07-01.md b/docs/release-control/v6/internal/records/current-branch-ga-release-policy-2026-07-01.md
new file mode 100644
index 000000000..6513d9185
--- /dev/null
+++ b/docs/release-control/v6/internal/records/current-branch-ga-release-policy-2026-07-01.md
@@ -0,0 +1,20 @@
+# Current Branch GA Release Policy
+
+## Direction
+
+The next public Pulse v6 release target is GA from the current
+`pulse/v6-release` branch after accumulated post-RC7 fixes and final
+current-branch validation.
+
+The published RC7 candidate must not be promoted unchanged. Another RC is not
+planned by default; seven RC releases are enough unless the release owner
+explicitly changes direction.
+
+## Release-control impact
+
+The historical RC7 readiness evidence remains useful as prerelease lineage
+evidence, but it no longer proves the final GA candidate by itself because the
+current branch intentionally contains additional fixes and changes after RC7.
+
+The GA promotion readiness gate therefore stays pending until the current
+branch has final GA validation and publication approval.
diff --git a/docs/release-control/v6/internal/status.json b/docs/release-control/v6/internal/status.json
index 25beb83d5..9d9e0e06f 100644
--- a/docs/release-control/v6/internal/status.json
+++ b/docs/release-control/v6/internal/status.json
@@ -6597,11 +6597,11 @@
},
{
"id": "rc-to-ga-promotion-readiness",
- "summary": "Confirm stable or GA promotion is coming from an exercised RC with live release-pipeline proof, rollback instructions, and a written v5 maintenance-only policy.",
+ "summary": "Confirm Pulse v6 GA promotion is coming from the current pulse/v6-release branch after accumulated post-RC7 fixes, final current-branch validation, rollback instructions, and a written v5 maintenance-only policy.",
"owner": "project-owner",
"blocking_level": "release-ready",
"minimum_evidence_tier": "real-external-e2e",
- "status": "passed",
+ "status": "pending",
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
"lane_ids": [
"L1",
@@ -6610,6 +6610,12 @@
"L12"
],
"evidence": [
+ {
+ "repo": "pulse",
+ "path": "docs/release-control/v6/internal/records/current-branch-ga-release-policy-2026-07-01.md",
+ "kind": "file",
+ "evidence_tier": "local-rehearsal"
+ },
{
"repo": "pulse",
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-03-13.md",
@@ -8160,6 +8166,20 @@
"lane_ids": [
"L6"
]
+ },
+ {
+ "id": "current-branch-ga-no-rc8-default",
+ "summary": "The next public v6 release target is GA from current pulse/v6-release after accumulated post-RC7 fixes and final validation. Do not promote RC7 unchanged, and do not plan RC8 by default unless the release owner changes direction.",
+ "kind": "release-policy",
+ "decided_at": "2026-07-01",
+ "subsystem_ids": [],
+ "lane_ids": [
+ "L1",
+ "L2",
+ "L5",
+ "L9",
+ "L12"
+ ]
}
]
}
diff --git a/frontend-modern/src/__tests__/AppLayout.test.tsx b/frontend-modern/src/__tests__/AppLayout.test.tsx
index 99134ec0b..b4611000a 100644
--- a/frontend-modern/src/__tests__/AppLayout.test.tsx
+++ b/frontend-modern/src/__tests__/AppLayout.test.tsx
@@ -1,5 +1,5 @@
import { cleanup, fireEvent, render, screen, waitFor, within } from '@solidjs/testing-library';
-import { Route, Router } from '@solidjs/router';
+import { Route, Router, useNavigate } from '@solidjs/router';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import type { State } from '@/types/api';
import type { Resource } from '@/types/resource';
@@ -56,6 +56,17 @@ describe('AppLayout navigation icons', () => {
const renderLayout = (resources: Resource[] = [], initialPath = '/settings/infrastructure') => {
window.history.replaceState({}, '', initialPath);
+ const RouteStateProbe = () => {
+ const navigate = useNavigate();
+ return (
+
+ );
+ };
const LayoutRoute = () => (
({
@@ -91,6 +102,7 @@ describe('AppLayout navigation icons', () => {
onSwitchOrg={() => {}}
>