mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-07-09 16:00:59 +00:00
parent
df67c01a64
commit
c63533790c
5 changed files with 86 additions and 11 deletions
|
|
@ -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"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => navigate('/proxmox/overview?status=running', { replace: true })}
|
||||
>
|
||||
Set Proxmox running filter
|
||||
</button>
|
||||
);
|
||||
};
|
||||
const LayoutRoute = () => (
|
||||
<AppLayout
|
||||
connectionStatus={() => ({
|
||||
|
|
@ -91,6 +102,7 @@ describe('AppLayout navigation icons', () => {
|
|||
onSwitchOrg={() => {}}
|
||||
>
|
||||
<div>Infrastructure body</div>
|
||||
<RouteStateProbe />
|
||||
</AppLayout>
|
||||
);
|
||||
return render(() => (
|
||||
|
|
@ -229,6 +241,28 @@ describe('AppLayout navigation icons', () => {
|
|||
});
|
||||
});
|
||||
|
||||
it('restores Proxmox route state changed after the page has loaded', async () => {
|
||||
renderLayout(platformResources(), '/proxmox/overview');
|
||||
|
||||
await fireEvent.click(screen.getByRole('button', { name: 'Set Proxmox running filter' }));
|
||||
await waitFor(() => {
|
||||
expect(window.location.pathname).toBe('/proxmox/overview');
|
||||
expect(window.location.search).toBe('?status=running');
|
||||
});
|
||||
|
||||
await fireEvent.click(getInfrastructureTab('Docker'));
|
||||
await waitFor(() => {
|
||||
expect(window.location.pathname).toBe('/docker/overview');
|
||||
expect(window.location.search).toBe('');
|
||||
});
|
||||
|
||||
await fireEvent.click(getInfrastructureTab('Proxmox'));
|
||||
await waitFor(() => {
|
||||
expect(window.location.pathname).toBe('/proxmox/overview');
|
||||
expect(window.location.search).toBe('?status=running');
|
||||
});
|
||||
});
|
||||
|
||||
it('keeps remembered route state scoped to the platform tab that owns it', async () => {
|
||||
renderLayout(platformResources(), '/docker/overview?host=docker-1');
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue