mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-11 14:00:29 +00:00
Record RC publication judgment packet
This commit is contained in:
@@ -17,6 +17,11 @@ Use this as the final gate before cutting a Pulse v6 pre-release.
|
||||
`rc_ready` is intentionally held false in `status.json` by the open decision
|
||||
`rc-publication-judgment` until the current candidate is explicitly judged
|
||||
ready for a real governed RC.
|
||||
- The latest RC publication judgment packet is
|
||||
`docs/release-control/v6/internal/records/rc-publication-judgment-packet-2026-04-09.md`.
|
||||
It does not clear the open decision: the active-target proof currently blocks
|
||||
on the parallel `pulse-enterprise` approval-handler slice requiring
|
||||
`go mod tidy`.
|
||||
- The active target is back on `v6-rc-cut`, so GA rehearsal remains
|
||||
intentionally out of scope until a real RC has actually shipped and
|
||||
promotion is resumed explicitly.
|
||||
|
||||
+145
@@ -0,0 +1,145 @@
|
||||
# RC Publication Judgment Packet
|
||||
|
||||
- Date: `2026-04-09`
|
||||
- Decision: `rc-publication-judgment`
|
||||
- Active target: `v6-rc-cut`
|
||||
- Active branch: `pulse/v6-release`
|
||||
- Result: `blocked`
|
||||
|
||||
## Scope
|
||||
|
||||
This packet prepares the explicit owner judgment for publishing a governed Pulse
|
||||
v6 RC. It does not make the product approval decision.
|
||||
|
||||
The current release-control target still uses the `rc_ready` completion rule.
|
||||
GA or stable promotion remains out of scope until a real prerelease has shipped
|
||||
and `rc-to-ga-promotion-readiness` is cleared under the later release-ready
|
||||
phase.
|
||||
|
||||
## Governance Snapshot
|
||||
|
||||
Commands run from `/Volumes/Development/pulse/repos/pulse`:
|
||||
|
||||
1. `python3 scripts/release_control/agent_preflight.py --pretty`
|
||||
- Result: pass.
|
||||
- Branch matched `pulse/v6-release`.
|
||||
- Active target was `v6-rc-cut`.
|
||||
2. `python3 scripts/release_control/status_audit.py --pretty`
|
||||
- Result: pass.
|
||||
- `repo_ready=True`.
|
||||
- `rc_ready=False`.
|
||||
- `release_ready=False`.
|
||||
- All 16 lanes were at the target floor.
|
||||
- All rc-ready release gates were recorded as passed.
|
||||
- The only governed rc-ready blocker remained this open decision:
|
||||
`rc-publication-judgment`.
|
||||
3. `python3 scripts/release_control/release_promotion_policy_test.py`
|
||||
- Result: pass.
|
||||
- This only proves the GA promotion policy guardrails; it does not clear
|
||||
stable or GA promotion.
|
||||
|
||||
## Active-Target Proof Run
|
||||
|
||||
Command:
|
||||
|
||||
```bash
|
||||
python3 scripts/release_control/readiness_assertion_guard.py --active-target
|
||||
```
|
||||
|
||||
The first active-target run found a stale `RA16` proof expectation:
|
||||
|
||||
1. `pulse-api-cancellation-boundary`: pass.
|
||||
2. `pulse-v5-recurring-upgrade-migration`: pass.
|
||||
3. `frontend-grandfathered-license-presentation`: fail.
|
||||
4. `pulse-pro-public-checkout-reentry-guard`: pass.
|
||||
|
||||
The failure was an exact presentation snapshot that had not been extended after
|
||||
the self-hosted Pulse Pro billing presentation gained canonical demo-hidden and
|
||||
policy-loading copy. Runtime behavior did not need to change.
|
||||
|
||||
The snapshot was updated in
|
||||
`frontend-modern/src/utils/__tests__/licensePresentation.test.ts`, then the
|
||||
direct proof was rerun:
|
||||
|
||||
```bash
|
||||
python3 scripts/release_control/internal/commercial_cancellation_reactivation_proof.py
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
1. `pulse-api-cancellation-boundary`: pass.
|
||||
2. `pulse-v5-recurring-upgrade-migration`: pass.
|
||||
3. `frontend-grandfathered-license-presentation`: pass.
|
||||
4. `pulse-pro-public-checkout-reentry-guard`: pass.
|
||||
|
||||
## Current Blocker
|
||||
|
||||
After the `RA16` proof repair, the full active-target guard was rerun. It
|
||||
progressed through the earlier RC proof slices and then blocked at `RA17`:
|
||||
|
||||
```text
|
||||
BLOCKED: readiness assertion proof failed for RA17:mobile-relay-auth-approvals-proof (exit 1)
|
||||
```
|
||||
|
||||
The isolated `RA17` proof showed this failing subcheck:
|
||||
|
||||
```text
|
||||
enterprise-approval-handlers
|
||||
cwd: /Volumes/Development/pulse/repos/pulse-enterprise
|
||||
command: go test ./internal/aiautofix -run 'TestHandleListApprovals|TestHandleApproveAndExecuteInvestigationFix|TestHandleApprove' -count=1
|
||||
detail: go mod tidy
|
||||
```
|
||||
|
||||
The same command run directly in `pulse-enterprise` returned:
|
||||
|
||||
```text
|
||||
go: updates to go.mod needed; to update it:
|
||||
go mod tidy
|
||||
```
|
||||
|
||||
The `pulse-enterprise` repo already had unrelated dirty files in
|
||||
`cmd/pulse-enterprise/main.go` and `cmd/pulse-enterprise/main_test.go` before
|
||||
this packet was written. Those changes appear to belong to another parallel
|
||||
slice, so this packet does not run `go mod tidy` or edit `pulse-enterprise`.
|
||||
|
||||
The mobile portions of the `RA17` proof passed:
|
||||
|
||||
1. `mobile-api-client`: pass.
|
||||
2. `mobile-relay-runtime`: pass.
|
||||
3. `mobile-secure-persistence-and-approvals`: pass.
|
||||
4. `mobile-wire-protocol`: pass.
|
||||
|
||||
The relay reconnect/drain proof was run separately:
|
||||
|
||||
```bash
|
||||
python3 scripts/release_control/readiness_assertion_guard.py --assertion RA18
|
||||
```
|
||||
|
||||
Result: pass.
|
||||
|
||||
## Judgment Outcome
|
||||
|
||||
Do not clear `rc-publication-judgment` from this packet.
|
||||
|
||||
The release-control metadata is close to the RC floor, but the current
|
||||
workspace cannot complete the active-target proof while the enterprise approval
|
||||
handler slice requires `go mod tidy`. Publishing an RC from this state would
|
||||
turn a parallel worktree hygiene problem into an ambiguous release decision.
|
||||
|
||||
## Required Unblock Steps
|
||||
|
||||
1. Resolve the `pulse-enterprise` mod-tidy requirement in the owning
|
||||
enterprise slice.
|
||||
2. Return all active repos needed for the RC proof to a clean, intentional
|
||||
state.
|
||||
3. Rerun:
|
||||
|
||||
```bash
|
||||
python3 scripts/release_control/readiness_assertion_guard.py --active-target
|
||||
python3 scripts/release_control/status_audit.py --pretty
|
||||
```
|
||||
|
||||
4. If both commands pass, ask the owner to make the explicit product judgment
|
||||
on `rc-publication-judgment`.
|
||||
5. Keep `rc-to-ga-promotion-readiness` blocked until a real prerelease has
|
||||
shipped and the later GA promotion rehearsal exists.
|
||||
@@ -4225,10 +4225,10 @@
|
||||
"open_decisions": [
|
||||
{
|
||||
"id": "rc-publication-judgment",
|
||||
"summary": "Pulse v6 prerelease publication remains an explicit product judgment: even if the machine-derived RC floor looks close, `rc_ready` stays blocked until the current candidate is explicitly judged ready for a real governed RC and not inferred from accidental `6.0.0-rc.1` lineage or checklist completion.",
|
||||
"summary": "Pulse v6 prerelease publication remains an explicit product judgment: the 2026-04-09 packet records that the current active-target proof is blocked by the parallel pulse-enterprise approval-handler mod-tidy state, so `rc_ready` stays blocked until that proof passes and the owner explicitly approves a real governed RC.",
|
||||
"owner": "project-owner",
|
||||
"blocking_level": "rc-ready",
|
||||
"status": "open",
|
||||
"status": "blocked",
|
||||
"opened_at": "2026-04-04",
|
||||
"lane_ids": [
|
||||
"L1",
|
||||
|
||||
@@ -75,6 +75,14 @@ describe('licensePresentation', () => {
|
||||
planSectionDescription:
|
||||
'Review your active plan, expiry, included limits, and paid capabilities.',
|
||||
usageSectionTitle: 'Usage',
|
||||
hiddenShellTitle: 'Demo mode',
|
||||
hiddenShellDescription: 'Commercial settings are hidden for this session.',
|
||||
hiddenStateTitle: 'License and billing details are hidden',
|
||||
hiddenStateBody:
|
||||
'This public demo uses sample infrastructure data, so Pulse hides license identity, billing state, monitored-system usage, and upgrade actions instead of creating a demo license.',
|
||||
policyLoadingTitle: 'Loading settings access',
|
||||
policyLoadingBody:
|
||||
'Pulse waits for the session presentation policy before showing license, billing, or usage details.',
|
||||
monitoredSystemUpgradeArrivalTitle: 'Need a higher monitored-system cap?',
|
||||
monitoredSystemUpgradeArrivalBody:
|
||||
'Open Pulse Account to compare self-hosted plans, complete checkout, and return here with Pulse Pro activated automatically.',
|
||||
|
||||
Reference in New Issue
Block a user