mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 03:20:11 +00:00
5053 lines
165 KiB
JSON
5053 lines
165 KiB
JSON
{
|
|
"version": "6.0",
|
|
"updated_at": "2026-04-21",
|
|
"scope": {
|
|
"active_repos": [
|
|
"pulse",
|
|
"pulse-enterprise",
|
|
"pulse-mobile",
|
|
"pulse-pro"
|
|
],
|
|
"control_plane_repo": "pulse",
|
|
"ignored_repos": [
|
|
"pulse-5.1.x",
|
|
"pulse-refactor-streams"
|
|
],
|
|
"repo_catalog": [
|
|
{
|
|
"id": "pulse",
|
|
"purpose": "Core desktop/runtime repo and canonical Pulse v6 release-control authority.",
|
|
"visibility": "public"
|
|
},
|
|
{
|
|
"id": "pulse-enterprise",
|
|
"purpose": "Closed-source enterprise and paid runtime features that should not ship as open-source surfaces.",
|
|
"visibility": "private"
|
|
},
|
|
{
|
|
"id": "pulse-mobile",
|
|
"purpose": "Mobile client, mobile relay flows, approval UX, and device-local auth/state handling.",
|
|
"visibility": "private"
|
|
},
|
|
{
|
|
"id": "pulse-pro",
|
|
"purpose": "Financial, operational, checkout, license-server, and relay-server surfaces that back commercial flows.",
|
|
"visibility": "private"
|
|
}
|
|
]
|
|
},
|
|
"source_precedence": [
|
|
"docs/release-control/v6/internal/SOURCE_OF_TRUTH.md",
|
|
"docs/release-control/v6/internal/status.json",
|
|
"docs/release-control/v6/status.schema.json",
|
|
"docs/release-control/v6/internal/CANONICAL_DEVELOPMENT_PROTOCOL.md",
|
|
"docs/release-control/v6/internal/subsystems/registry.json",
|
|
"docs/release-control/v6/internal/subsystems/registry.schema.json"
|
|
],
|
|
"execution_model": "direct-repo-sessions",
|
|
"readiness": {
|
|
"repo_ready_rule": "all lanes target-met and evidence-present plus all repo-ready assertions passed",
|
|
"rc_ready_rule": "repo_ready plus all rc-ready assertions passed plus zero rc-ready open_decisions plus all rc-ready release_gates passed",
|
|
"release_ready_rule": "rc_ready plus all release-ready assertions passed plus zero release-ready open_decisions plus all release-ready release_gates passed"
|
|
},
|
|
"readiness_assertions": [
|
|
{
|
|
"id": "RA1",
|
|
"summary": "Governed surfaces that should use the unified resource model do not keep shipping on legacy equivalents.",
|
|
"kind": "invariant",
|
|
"blocking_level": "repo-ready",
|
|
"proof_type": "automated",
|
|
"lane_ids": [
|
|
"L6",
|
|
"L13"
|
|
],
|
|
"subsystem_ids": [
|
|
"api-contracts",
|
|
"unified-resources"
|
|
],
|
|
"release_gate_ids": [],
|
|
"proof_commands": [
|
|
{
|
|
"id": "ra1-unified-resource-guardrails",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/unifiedresources",
|
|
"-run",
|
|
"TestNoDirectStateAccessForMigratedResources|TestNoLegacyHostResourceTypeSymbol|TestNoLegacyMigrationHintsInRuntimeCode|TestV6AgentRegistrationArtifactsStayCanonical|TestV6BroadLegacyAliasCoverage|TestV6ReleaseFacingAPITestsCoverLegacyHostRejection|TestV6DirectHostAliasValidatorCoverage",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Infrastructure/__tests__/UnifiedResourceTable.workloads-link.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/hooks/__tests__/useUnifiedResources.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/unifiedresources/code_standards_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA2",
|
|
"summary": "New users can complete Pulse Pro Relay signup through paid activation without manual operator intervention or ambiguous provisioning steps.",
|
|
"kind": "journey",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L8",
|
|
"L12"
|
|
],
|
|
"subsystem_ids": [
|
|
"cloud-paid",
|
|
"frontend-primitives"
|
|
],
|
|
"release_gate_ids": [
|
|
"hosted-signup-billing-replay"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "hosted-signup-api-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/api",
|
|
"-run",
|
|
"TestHostedLifecycle|TestHostedSignupSuccess|TestHostedSignupValidationFailures|TestHostedSignupHostedModeGate|TestHostedSignupRateLimit|TestHostedSignupRateLimit_NoProvisioningSideEffects|TestHostedSignupCleanupOnRBACFailure|TestHostedSignupFailsClosedWithoutPublicURL",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "hosted-signup-provisioner-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/hosted",
|
|
"-run",
|
|
"TestProvisionTenantSuccess|TestProvisionTenantIdempotentDuplicateEmail|TestProvisionTenantIdempotentDuplicateEmailCaseInsensitive|TestProvisionTenantValidationFailures|TestProvisionTenantPartialFailureRollback|TestProvisionHostedSignupSuccess",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/hosted-signup-billing-replay-2026-03-12.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/hosted-signup-billing-replay-production-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/hosted-signup-billing-replay-production-fixed-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/BillingAdminPanel.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/hosted_lifecycle_integration_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/hosted_signup_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/hosted/provisioner_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA3",
|
|
"summary": "After first successful entitlement activation, Pulse preserves paid state across supported sessions and upgrades without repeated license entry.",
|
|
"kind": "invariant",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L3",
|
|
"L5",
|
|
"L8"
|
|
],
|
|
"subsystem_ids": [
|
|
"cloud-paid",
|
|
"frontend-primitives"
|
|
],
|
|
"release_gate_ids": [
|
|
"paid-feature-entitlement-gating",
|
|
"upgrade-state-and-entitlement-preservation"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "entitlement-gating-api-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/api",
|
|
"-run",
|
|
"TestHandleActivateLicense_ExchangesLegacyJWTInStrictV6|TestHandleActivateLicense_ClearsCommercialMigrationStateOnNativeActivation|TestHandleActivateLicense_ActivationKeyClearsStaleLegacyPersistence|TestGetTenantComponents_AutoExchangesPersistedLegacyJWT|TestGetTenantComponents_SkipsExchange_WhenActivationStateExists|TestGetTenantComponents_PersistsCommercialMigrationState_WhenAutoExchangeFails|TestRequireLicenseFeature_HostedEntitlementsBlockMissingFeature|TestRequireLicenseFeature_HostedEntitlementsAllowGrantedFeature|TestLicenseGatedEmptyResponse_HostedEntitlementsReturnEmptyArrayWhenLocked",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "upgrade-state-migration-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./tests/migration",
|
|
"-run",
|
|
"TestV5PaidLicenseUpgrade_CommercialMigrationFailureMatrix|TestV5PaidLicenseUpgrade_RealLicenseServerExchange|TestV5DataDir_CSRFLegacyMapFormat|TestV5DataDir_CSRFTokenFileContinuity|TestV5DataDir_SessionLegacyMapFormat|TestV5DataDir_SessionTokenContinuity|TestV5DowngradeSafety|TestV5FullUpgradeScenario",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/upgrade-state-and-entitlement-preservation-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/license_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/licensing_handlers_auto_migrate_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/migration/v5_commercial_migration_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/migration/v5_real_exchange_upgrade_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/migration/v5_session_db_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA4",
|
|
"summary": "Typical end users cannot trivially unlock Pulse Pro features by stripping client-only checks while server and hosted entitlements still deny access.",
|
|
"kind": "trust-gate",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L6",
|
|
"L9",
|
|
"L12"
|
|
],
|
|
"subsystem_ids": [
|
|
"api-contracts",
|
|
"cloud-paid"
|
|
],
|
|
"release_gate_ids": [
|
|
"paid-feature-entitlement-gating"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "entitlement-gating-api-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/api",
|
|
"-run",
|
|
"TestHandleActivateLicense_ExchangesLegacyJWTInStrictV6|TestHandleActivateLicense_ClearsCommercialMigrationStateOnNativeActivation|TestHandleActivateLicense_ActivationKeyClearsStaleLegacyPersistence|TestGetTenantComponents_AutoExchangesPersistedLegacyJWT|TestGetTenantComponents_SkipsExchange_WhenActivationStateExists|TestGetTenantComponents_PersistsCommercialMigrationState_WhenAutoExchangeFails|TestRequireLicenseFeature_HostedEntitlementsBlockMissingFeature|TestRequireLicenseFeature_HostedEntitlementsAllowGrantedFeature|TestLicenseGatedEmptyResponse_HostedEntitlementsReturnEmptyArrayWhenLocked",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/RBACPaywallPanels.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/pages/__tests__/AIIntelligence.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/license_handlers_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA5",
|
|
"summary": "Non-paid users do not see paid-only navigation or pages unless the surface is explicitly promotional.",
|
|
"kind": "invariant",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L8",
|
|
"L9",
|
|
"L12"
|
|
],
|
|
"subsystem_ids": [
|
|
"cloud-paid",
|
|
"frontend-primitives"
|
|
],
|
|
"release_gate_ids": [
|
|
"paid-feature-entitlement-gating"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "frontend-paid-surface-visibility-tests",
|
|
"cwd": "frontend-modern",
|
|
"run": [
|
|
"npm",
|
|
"test",
|
|
"--",
|
|
"--run",
|
|
"src/components/Settings/__tests__/RBACPaywallPanels.test.tsx",
|
|
"src/components/Settings/__tests__/settingsNavigation.integration.test.tsx",
|
|
"src/pages/__tests__/AIIntelligence.test.tsx"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/RBACPaywallPanels.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/settingsNavigation.integration.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/pages/__tests__/AIIntelligence.test.tsx",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA6",
|
|
"summary": "Supported upgrades preserve core state, entitlements, and first-session continuity without manual repair steps.",
|
|
"kind": "journey",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L3",
|
|
"L5",
|
|
"L8"
|
|
],
|
|
"subsystem_ids": [
|
|
"cloud-paid",
|
|
"frontend-primitives"
|
|
],
|
|
"release_gate_ids": [
|
|
"upgrade-state-and-entitlement-preservation"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "csrf-state-migration-api-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/api",
|
|
"-run",
|
|
"TestCSRFTokenStore_Load_CurrentFormat_SkipsNilAndExpired|TestCSRFTokenStore_Load_MigratesLegacyFormat",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "upgrade-state-migration-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./tests/migration",
|
|
"-run",
|
|
"TestV5PaidLicenseUpgrade_CommercialMigrationFailureMatrix|TestV5PaidLicenseUpgrade_RealLicenseServerExchange|TestV5DataDir_CSRFLegacyMapFormat|TestV5DataDir_CSRFTokenFileContinuity|TestV5DataDir_SessionLegacyMapFormat|TestV5DataDir_SessionTokenContinuity|TestV5DowngradeSafety|TestV5FullUpgradeScenario",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/upgrade-state-and-entitlement-preservation-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/csrf_store_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/licensing_handlers_auto_migrate_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/11-first-session.spec.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/migration/v5_full_upgrade_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/migration/v5_real_exchange_upgrade_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/migration/v5_session_db_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA7",
|
|
"summary": "Monitored-system allocation stays coherent across enforcement, entitlements, and UI: counted top-level monitored systems are collection-path agnostic, capped limits stay canonical, and users see the same monitored-system usage that the runtime enforces.",
|
|
"kind": "invariant",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L6",
|
|
"L8",
|
|
"L12",
|
|
"L16"
|
|
],
|
|
"subsystem_ids": [
|
|
"api-contracts",
|
|
"cloud-paid",
|
|
"frontend-primitives"
|
|
],
|
|
"release_gate_ids": [
|
|
"paid-feature-entitlement-gating"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "monitored-system-allocation-backend-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/api",
|
|
"-run",
|
|
"TestMonitoredSystemCountNilMonitor|TestLegacyConnectionCountsFromReadState|TestLegacyConnectionCountsUsesSnapshotFallback|TestDeployReservedCount|TestUnifiedAgentHandlers_HandleReport_EnforcesMaxMonitoredSystemsForNewHostsOnly|TestHandleAddNode_BlocksNewCountedSystemAtLimit|TestHandleAutoRegister_BlocksNewCountedSystemAtLimit|TestDockerAgentHandlers_HandleReport_BlocksNewMonitoredSystemAtLimit|TestKubernetesAgentHandlers_HandleReport_BlocksNewMonitoredSystemAtLimit|TestTrueNASHandlers_HandleAdd_BlocksNewCountedSystemAtLimit|TestBuildEntitlementPayloadWithUsage_CurrentValues",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"cwd": "frontend-modern",
|
|
"id": "monitored-system-allocation-frontend-tests",
|
|
"run": [
|
|
"npm",
|
|
"test",
|
|
"--",
|
|
"--run",
|
|
"src/components/Settings/__tests__/OrganizationBillingPanel.test.tsx",
|
|
"src/components/shared/__tests__/MonitoredSystemLimitWarningBanner.test.tsx"
|
|
]
|
|
},
|
|
{
|
|
"id": "monitored-system-allocation-limit-contract-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./pkg/licensing",
|
|
"-run",
|
|
"TestExceedsMonitoredSystemLimit|TestInstalledUnifiedAgentCount|TestLimitsForCloudPlan_KnownPlans|TestLimitsForCloudPlan_UnknownPlanFailsClosed",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/OrganizationBillingPanel.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/shared/__tests__/MonitoredSystemLimitWarningBanner.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/config_handlers_add_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/config_handlers_auto_register_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/docker_agents_additional_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/entitlement_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/kubernetes_agents_additional_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/monitored_system_limit_enforcement_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/truenas_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/unified_agent_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "pkg/licensing/features_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "pkg/licensing/monitored_system_limit_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA8",
|
|
"summary": "Stable or GA promotion happens only after an exercised RC, live release-pipeline proof, a recorded rollback target, a written v5 maintenance-only support policy, and a coherent self-hosted commercial package.",
|
|
"kind": "trust-gate",
|
|
"blocking_level": "release-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L1",
|
|
"L2",
|
|
"L9",
|
|
"L11",
|
|
"L12",
|
|
"L17"
|
|
],
|
|
"subsystem_ids": [],
|
|
"release_gate_ids": [
|
|
"known-rc-issue-closure-for-ga",
|
|
"rc-to-ga-promotion-readiness",
|
|
"self-hosted-commercial-ga-coherence"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "release-promotion-policy-tests",
|
|
"run": [
|
|
"python3",
|
|
"scripts/release_control/release_promotion_policy_test.py"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": ".github/workflows/release-dry-run.yml",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/PRE_RELEASE_CHECKLIST.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/RC_TO_GA_REHEARSAL_TEMPLATE.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/known-rc-issue-closure-for-ga-blocked-2026-04-21.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-03-26.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-03-28.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-rehearsal-2026-04-20.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-rehearsal-blocked-2026-03-26.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/self-hosted-commercial-ga-coherence-2026-04-20.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/RELEASE_PROMOTION_POLICY.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/V5_MAINTENANCE_SUPPORT_POLICY.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "scripts/release_control/release_promotion_policy_test.py",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA9",
|
|
"summary": "A real v5-installed Pulse Unified Agent upgrades through v6 release assets into one canonical v6 agent identity, preserves one-shot update continuity metadata, keeps legacy persisted host-agent token scopes valid at the v6 canonical agent endpoints, and does not drift agent-count or fallback behavior during the crossover.",
|
|
"kind": "journey",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L11",
|
|
"L12",
|
|
"L16"
|
|
],
|
|
"subsystem_ids": [
|
|
"agent-lifecycle"
|
|
],
|
|
"release_gate_ids": [
|
|
"unified-agent-v5-upgrade-continuity"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "unified-agent-first-report-continuity-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/hostagent",
|
|
"-run",
|
|
"TestNew_CarriesUpdatedFromIntoFirstV6Report|TestAgentSendReport_SetsHeadersAndPostsJSON",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "unified-agent-install-fallback-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/api",
|
|
"-run",
|
|
"TestDownloadUnifiedInstallScript|TestDownloadUnifiedInstallScriptPS|TestProxyInstallScriptFromGitHub|TestContract_InstallScriptReleaseAssetURL|TestDownloadUnifiedAgent|TestUnifiedAgentHandlers_LegacyV5ReportUpgradesToSingleCanonicalUnifiedAgent|TestUnifiedAgentEndpointsAcceptLegacyUnifiedAgentReportScopeAlias|TestNormalizeRequestedScopesCanonicalizesLegacyUnifiedAgentAliases|TestContract_APITokenScopeAliasNormalization",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "unified-agent-update-handoff-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/agentupdate",
|
|
"-run",
|
|
"TestCheckAndUpdateToFirstHostReportCarriesPreviousVersionOnce|TestUpdateToFirstHostReportCarriesPreviousVersionOnce|TestPerformUpdatePersistsPreviousVersionForNextStart",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/unified-agent-v5-upgrade-continuity-2026-03-12.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/agentupdate/coverage_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/agentupdate/update_hostagent_integration_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/security_regression_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/security_tokens_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/unified_agent_more_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/unified_agent_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/unified_agent_upgrade_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/config/api_tokens_coverage_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/hostagent/agent_new_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA10",
|
|
"summary": "Active Pulse v6 guidance reflects the current governed behavior of the codebase, and legacy or historical documentation does not remain part of the active v6 guidance surface.",
|
|
"kind": "invariant",
|
|
"blocking_level": "release-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L9"
|
|
],
|
|
"subsystem_ids": [],
|
|
"release_gate_ids": [
|
|
"documentation-currentness-and-legacy-cleanup"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "documentation-currentness-tests",
|
|
"run": [
|
|
"python3",
|
|
"scripts/release_control/documentation_currentness_test.py"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/control_plane.json",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/internal/CONTROL_PLANE.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/CANONICAL_DEVELOPMENT_PROTOCOL.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/documentation-currentness-and-legacy-cleanup-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/SOURCE_OF_TRUTH.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/status.json",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/README.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "scripts/release_control/documentation_currentness_test.py",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA11",
|
|
"summary": "Pulse Hosted works as a real offered v6 tier: customers can sign up or sign in to a hosted tenant, enter a working hosted runtime, and use hosted billing/admin surfaces without self-hosted fallback paths or broken post-provisioning behavior.",
|
|
"kind": "invariant",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L3",
|
|
"L4",
|
|
"L12",
|
|
"L17"
|
|
],
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"release_gate_ids": [
|
|
"cloud-hosted-tier-runtime-readiness"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "cloud-hosted-tier-runtime-api",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/api",
|
|
"-run",
|
|
"TestHostedLifecycle|TestHostedOrgAdminHandlers|TestHostedSignupSuccess|TestHostedSignupValidationFailures|TestHostedSignupHostedModeGate|TestHostedSignupRateLimit|TestHostedSignupRateLimit_NoProvisioningSideEffects|TestHostedSignupCleanupOnRBACFailure|TestHostedSignupFailsClosedWithoutPublicURL|TestStripeWebhook_",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "cloud-hosted-tier-runtime-frontend",
|
|
"run": [
|
|
"npx",
|
|
"vitest",
|
|
"run",
|
|
"src/pages/__tests__/HostedSignup.test.tsx",
|
|
"src/components/Settings/__tests__/BillingAdminPanel.test.tsx",
|
|
"src/components/Settings/__tests__/OrganizationBillingPanel.test.tsx"
|
|
],
|
|
"cwd": "frontend-modern"
|
|
},
|
|
{
|
|
"id": "cloud-hosted-tier-runtime-go",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/cloudcp/...",
|
|
"./internal/hosted/...",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-production-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-production-fixed-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-production-followup-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-production-recovered-2026-03-26.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-production-remediated-2026-04-24.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-runtime-build-contract-2026-04-24.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-storage-blocker-2026-04-23.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-storage-guardrails-production-2026-04-24.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/cloud-paid.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/BillingAdminPanel.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/OrganizationBillingPanel.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/pages/__tests__/HostedSignup.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/hosted_lifecycle_integration_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/hosted_org_admin_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/hosted_signup_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/cloudcp/stripe/cloud_lifecycle_integration_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/hosted/provisioner_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA12",
|
|
"summary": "Multi-tenant Pulse is sound: tenant isolation, organization membership, RBAC scope, tenant-scoped runtime state, sharing, and migration all fail closed outside the intended tenant boundary instead of partially behaving like a single-tenant system.",
|
|
"kind": "invariant",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L4",
|
|
"L6",
|
|
"L12",
|
|
"L13",
|
|
"L14",
|
|
"L17"
|
|
],
|
|
"subsystem_ids": [
|
|
"api-contracts",
|
|
"monitoring",
|
|
"organization-settings"
|
|
],
|
|
"release_gate_ids": [
|
|
"multi-tenant-runtime-isolation-and-coherence"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "multi-tenant-runtime-api",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/api",
|
|
"-run",
|
|
"TestOrgHandlers|TestMultiTenant|TestResourceHandlers_NonDefaultOrg|TestSetMultiTenantMonitor_WiresHandlers|TestMultiTenantStateProvider|TestMultiTenantAPITokenRemainsScopedToIssuingOrg",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "multi-tenant-runtime-frontend",
|
|
"run": [
|
|
"npx",
|
|
"vitest",
|
|
"run",
|
|
"src/components/Settings/__tests__/OrganizationSharingPanel.test.tsx",
|
|
"src/components/Settings/__tests__/RBACPaywallPanels.test.tsx",
|
|
"src/utils/__tests__/rbacPermissions.test.ts",
|
|
"src/utils/__tests__/rbacPresentation.test.ts",
|
|
"src/utils/__tests__/organizationRolePresentation.test.ts",
|
|
"src/utils/__tests__/organizationSettingsPresentation.test.ts"
|
|
],
|
|
"cwd": "frontend-modern"
|
|
},
|
|
{
|
|
"id": "multi-tenant-runtime-migration",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./tests/migration",
|
|
"-run",
|
|
"TestV5DataDir_MultiTenantMigration",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "multi-tenant-runtime-monitoring",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/monitoring",
|
|
"-run",
|
|
"TestMultiTenantMonitor",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/multi-tenant-runtime-isolation-and-coherence-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/organization-settings.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/OrganizationSharingPanel.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/RBACPaywallPanels.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/organizationRolePresentation.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/organizationSettingsPresentation.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/rbacPermissions.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/rbacPresentation.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/api_token_org_scope_integration_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/org_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/rbac_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/resources_tenant_security_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/router_helpers_more_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/monitoring/multi_tenant_monitor_additional_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/03-multi-tenant.spec.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/migration/v5_to_v6_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA13",
|
|
"summary": "MSP support works as a real v6 product mode: one provider account can onboard, view, and manage multiple client tenants from one control surface with canonical MSP plan handling and without cross-client leakage, scope confusion, or per-client operational drift.",
|
|
"kind": "journey",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L3",
|
|
"L4",
|
|
"L12",
|
|
"L17"
|
|
],
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"release_gate_ids": [
|
|
"msp-provider-tenant-management"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "msp-account-and-registry-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/cloudcp/account",
|
|
"./internal/cloudcp/registry",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "msp-frontend-tests",
|
|
"run": [
|
|
"npx",
|
|
"vitest",
|
|
"run",
|
|
"src/components/Settings/__tests__/OrganizationBillingPanel.test.tsx",
|
|
"src/pages/__tests__/CloudPricing.test.tsx"
|
|
],
|
|
"cwd": "frontend-modern"
|
|
},
|
|
{
|
|
"id": "msp-lifecycle-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/cloudcp/stripe",
|
|
"-run",
|
|
"TestMSPLifecycle_AccountToPortal",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "msp-plan-guardrails",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/cloudcp",
|
|
"./pkg/licensing",
|
|
"-run",
|
|
"TestPublicCloudSignupCheckoutMetadataRejectsMSPPlanForPublicSignup|TestMSPPlanAliasCanonicalizationContract",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/msp-provider-tenant-management-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/msp-provider-tenant-management-production-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/msp-provider-tenant-management-production-fixed-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/msp-provider-tenant-management-production-followup-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/cloud-paid.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/OrganizationBillingPanel.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/pages/__tests__/CloudPricing.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/cloudcp/account/handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/cloudcp/public_cloud_signup_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/cloudcp/registry/registry_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/cloudcp/stripe/msp_lifecycle_integration_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "pkg/licensing/grant_claims_contract_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA14",
|
|
"summary": "API tokens remain least-privilege and correctly scoped: every token stays bound to its intended user, org, and scope, cannot silently widen authority through legacy alias handling, and stops working when revoked.",
|
|
"kind": "invariant",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L1",
|
|
"L6",
|
|
"L11",
|
|
"L14",
|
|
"L16"
|
|
],
|
|
"subsystem_ids": [
|
|
"agent-lifecycle",
|
|
"api-contracts",
|
|
"security-privacy"
|
|
],
|
|
"release_gate_ids": [
|
|
"api-token-scope-and-assignment"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "api-token-scope-backend",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/api",
|
|
"-run",
|
|
"Test(APIToken|SecurityTokens|SystemSettings|MultiTenant)|TestNormalizeRequestedScopesCanonicalizesLegacyUnifiedAgentAliases|TestUnifiedAgentEndpointsRequireAgentReportScope|TestUnifiedAgentEndpointsAcceptLegacyUnifiedAgentReportScopeAlias|TestMultiTenantAPITokenRemainsScopedToIssuingOrg|TestContract_APITokenScopeAliasNormalization",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "api-token-scope-frontend",
|
|
"run": [
|
|
"npx",
|
|
"vitest",
|
|
"run",
|
|
"src/components/Settings/__tests__/APITokenManager.test.tsx",
|
|
"src/utils/__tests__/apiClient.org.test.ts",
|
|
"src/utils/__tests__/apiTokenPresentation.test.ts"
|
|
],
|
|
"cwd": "frontend-modern"
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/api-token-scope-and-assignment-2026-03-12.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/security-privacy.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/api/__tests__/security.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/APITokenManager.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/apiClient.org.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/apiTokenPresentation.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/api_token_org_scope_integration_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/contract_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/security_regression_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/security_status_additional_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/security_tokens_owner_binding_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/security_tokens_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/system_settings_telemetry_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA15",
|
|
"summary": "Assigned user privileges fail closed: a user cannot view, mutate, or destroy anything beyond the permissions granted by their effective organization membership and role, including cross-org and destructive paths.",
|
|
"kind": "invariant",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L4",
|
|
"L6",
|
|
"L12",
|
|
"L14",
|
|
"L17"
|
|
],
|
|
"subsystem_ids": [
|
|
"api-contracts",
|
|
"organization-settings"
|
|
],
|
|
"release_gate_ids": [
|
|
"organization-user-scope-and-rbac"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "user-privilege-backend",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/api",
|
|
"-run",
|
|
"TestOrgHandlersViewerCannotManageOrg|TestOrgHandlersTokenListAllowedButWriteForbidden|TestOrgHandlersCrossOrgIsolation|TestOrgHandlersShareIsolationAcrossOrganizations|TestMultiTenantRBACRoleUpdateChangesPermissions",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "user-privilege-frontend",
|
|
"run": [
|
|
"npx",
|
|
"vitest",
|
|
"run",
|
|
"src/components/Settings/__tests__/OrganizationSharingPanel.test.tsx",
|
|
"src/components/Settings/__tests__/RBACPaywallPanels.test.tsx",
|
|
"src/utils/__tests__/organizationRolePresentation.test.ts",
|
|
"src/utils/__tests__/organizationSettingsPresentation.test.ts",
|
|
"src/utils/__tests__/rbacPermissions.test.ts",
|
|
"src/utils/__tests__/rbacPresentation.test.ts"
|
|
],
|
|
"cwd": "frontend-modern"
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/organization-user-scope-and-rbac-2026-03-12.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/OrganizationSharingPanel.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/RBACPaywallPanels.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/organizationRolePresentation.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/organizationSettingsPresentation.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/rbacPermissions.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/rbacPresentation.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/org_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/rbac_handlers_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA16",
|
|
"summary": "Commercial continuity fails closed across cancellation and re-entry: active grandfathered v5 recurring customers keep their legacy recurring price plus uncapped monitored-system and guest capacity only while the subscription remains continuous, cancellation revokes paid access cleanly, and any later re-entry uses current public v6 pricing and limits rather than reviving grandfathered terms.",
|
|
"kind": "invariant",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L11",
|
|
"L12"
|
|
],
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"release_gate_ids": [
|
|
"commercial-cancellation-reactivation"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "commercial-cancellation-reactivation-proof",
|
|
"run": [
|
|
"python3",
|
|
"scripts/release_control/internal/commercial_cancellation_reactivation_proof.py"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/COMMERCIAL_CANCELLATION_REACTIVATION_E2E_TEST_PLAN.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/commercial-cancellation-reactivation-2026-03-12.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/commercial-cancellation-reactivation-external-e2e-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/ProLicensePanel.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "pkg/licensing/billing_state_normalization_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "scripts/release_control/internal/commercial_cancellation_reactivation_proof.py",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA17",
|
|
"summary": "Pulse Mobile access stays coherent against a real Pulse instance: pairing, secure persistence, relay reconnect, approval flows, and auth or revocation transitions recover cleanly and fail closed instead of leaving stale mobile access behind.",
|
|
"kind": "invariant",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L5",
|
|
"L6",
|
|
"L7",
|
|
"L12"
|
|
],
|
|
"subsystem_ids": [
|
|
"api-contracts",
|
|
"relay-runtime"
|
|
],
|
|
"release_gate_ids": [
|
|
"mobile-relay-auth-approvals"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "mobile-relay-auth-approvals-proof",
|
|
"run": [
|
|
"python3",
|
|
"scripts/release_control/internal/mobile_relay_auth_approvals_proof.py"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/mobile-relay-auth-approvals-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "scripts/release_control/internal/mobile_relay_auth_approvals_proof.py",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-enterprise",
|
|
"path": "internal/aiautofix/handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-mobile",
|
|
"path": "src/__tests__/mobileRelayAuthApprovals.rehearsal.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-mobile",
|
|
"path": "src/hooks/__tests__/useRelayLifecycle.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-mobile",
|
|
"path": "src/stores/__tests__/approvalStore.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-mobile",
|
|
"path": "src/stores/__tests__/authStore.test.ts",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA18",
|
|
"summary": "Relay runtime remains resilient under registration and reconnect pressure: fresh registration, reconnect, stale-session recovery, and disconnect drain all recover predictably without stranding clients in resume loops, dead sessions, or lost inflight work.",
|
|
"kind": "invariant",
|
|
"blocking_level": "rc-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L5",
|
|
"L6",
|
|
"L7",
|
|
"L12"
|
|
],
|
|
"subsystem_ids": [
|
|
"api-contracts",
|
|
"relay-runtime"
|
|
],
|
|
"release_gate_ids": [
|
|
"relay-registration-reconnect-drain"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "relay-registration-reconnect-drain-proof",
|
|
"run": [
|
|
"python3",
|
|
"scripts/release_control/internal/relay_registration_reconnect_drain_proof.py"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/relay-registration-reconnect-drain-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/RelaySettingsPanel.runtime.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/relay/client_managed_runtime_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "scripts/release_control/internal/relay_registration_reconnect_drain_proof.py",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-mobile",
|
|
"path": "src/relay/__tests__/client-hardening.test.ts",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA19",
|
|
"summary": "Comparable Pulse settings surfaces use the canonical settings page-shell contract: shared SettingsPanel framing, consistent header structure, and no ad hoc top-level layout chrome unless explicitly approved.",
|
|
"kind": "invariant",
|
|
"blocking_level": "release-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L8"
|
|
],
|
|
"subsystem_ids": [
|
|
"frontend-primitives"
|
|
],
|
|
"release_gate_ids": [
|
|
"settings-surface-layout-consistency"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "settings-architecture-guardrails",
|
|
"cwd": "frontend-modern",
|
|
"run": [
|
|
"npx",
|
|
"vitest",
|
|
"run",
|
|
"src/components/Settings/__tests__/settingsArchitecture.test.ts"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/settings-surface-layout-consistency-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/SOURCE_OF_TRUTH.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/status.json",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/frontend-primitives.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/settingsArchitecture.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/15-settings-shell-consistency.spec.ts",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA20",
|
|
"summary": "Pulse's TrueNAS support claim is bounded to the current API-first floor: onboarding is through platform connections without requiring unified-agent bootstrap, TrueNAS projects into the canonical resource model and shared infrastructure/workload/storage/recovery/alert surfaces, Assistant support is read-first with bounded app control, and broader TrueNAS administration is not part of the current floor.",
|
|
"kind": "invariant",
|
|
"blocking_level": "release-ready",
|
|
"proof_type": "automated",
|
|
"lane_ids": [
|
|
"L6",
|
|
"L9",
|
|
"L13",
|
|
"L15"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"alerts",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"storage-recovery",
|
|
"unified-resources"
|
|
],
|
|
"release_gate_ids": [],
|
|
"proof_commands": [
|
|
{
|
|
"id": "truenas-api-contract-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/api",
|
|
"-run",
|
|
"TestTrueNASHandlers_",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "truenas-runtime-floor-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/monitoring",
|
|
"./internal/recovery/mapper/truenas",
|
|
"./internal/truenas",
|
|
"-run",
|
|
"TestFeatureFlagDefaultsTrueNASOnUnlessExplicitlyDisabled|TestGetAppLogsUsesRPCSubscription|TestProviderGetAppConfigReturnsCanonicalApp|TestRegistryIngestRecordsTreatsTrueNASAsGenericDataSource|TestStartAndStopAppUseRPCMethods|TestTrueNASDiskRecordsPopulatePhysicalDiskMeta|TestTrueNASPollerGetAppConfigUsesTenantScopedProvider|TestTrueNASResourcesFlowThroughUnifiedTypesWithoutSpecialCasing",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/SOURCE_OF_TRUTH.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/status.json",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/ai-runtime.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/alerts.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/api-contracts.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/monitoring.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/storage-recovery.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/unified-resources.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Recovery/__tests__/Recovery.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Storage/__tests__/DiskList.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Storage/__tests__/Storage.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/hooks/__tests__/useUnifiedResources.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/hooks/__tests__/useWorkloads.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/truenas_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/monitoring/truenas_poller_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/recovery/mapper/truenas/mapper_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/truenas/client_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/truenas/contract_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/truenas/provider_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/evals/tasks/truenas-node-add.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/21-truenas-settings-platform-connections.spec.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/28-truenas-alert-resource-links.spec.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/32-truenas-workloads-resource-deeplink.spec.ts",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA21",
|
|
"summary": "Pulse-owned hosted AI contracts stay vendor-neutral: quickstart runtime and API payloads expose the stable alias `quickstart:pulse-hosted`, while the license server requires explicit upstream model configuration instead of hardcoded vendor defaults.",
|
|
"kind": "invariant",
|
|
"blocking_level": "repo-ready",
|
|
"proof_type": "automated",
|
|
"lane_ids": [
|
|
"L3",
|
|
"L6"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"api-contracts"
|
|
],
|
|
"release_gate_ids": [],
|
|
"proof_commands": [
|
|
{
|
|
"id": "quickstart-model-alias-browser-proof",
|
|
"cwd": "tests/integration",
|
|
"run": [
|
|
"/usr/bin/env",
|
|
"PULSE_E2E_SKIP_DOCKER=1",
|
|
"PULSE_E2E_USE_LOCAL_BACKEND=1",
|
|
"npm",
|
|
"test",
|
|
"--",
|
|
"tests/51-quickstart-cross-surface.spec.ts",
|
|
"--project=chromium"
|
|
]
|
|
},
|
|
{
|
|
"id": "quickstart-model-alias-contract-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/config",
|
|
"./internal/ai",
|
|
"./internal/api",
|
|
"-run",
|
|
"Quickstart|DefaultModelForProvider|HostedAISettings|HostedTenantAISettings|ServiceLoadConfig_PrefersBYOKProviderOverQuickstart|ServiceLoadConfig_TracksQuickstartActivationRequirement|HandleGetPatrolStatus|AISettingsHandler_",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "quickstart-model-alias-frontend-tests",
|
|
"cwd": "frontend-modern",
|
|
"run": [
|
|
"npm",
|
|
"test",
|
|
"--",
|
|
"--run",
|
|
"src/components/Settings/__tests__/AISettings.test.tsx"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/status.json",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/ai-runtime.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/api-contracts.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/AISettings.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/ai/chat/service_explore_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/contract_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/config/ai.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/51-quickstart-cross-surface.spec.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/main.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/quickstart_proxy.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/quickstart_proxy_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/secrets.env.template",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA22",
|
|
"summary": "Pulse does not hardcode vendor BYOK model IDs into setup or runtime defaults: AI settings may submit credentials without a concrete model, and the backend must resolve and persist the effective provider model from the live provider catalog.",
|
|
"kind": "invariant",
|
|
"blocking_level": "repo-ready",
|
|
"proof_type": "automated",
|
|
"lane_ids": [
|
|
"L3",
|
|
"L6"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"api-contracts"
|
|
],
|
|
"release_gate_ids": [],
|
|
"proof_commands": [
|
|
{
|
|
"id": "byok-model-resolution-browser-proof",
|
|
"cwd": "tests/integration",
|
|
"run": [
|
|
"/usr/bin/env",
|
|
"PULSE_E2E_USE_LOCAL_BACKEND=1",
|
|
"npm",
|
|
"test",
|
|
"--",
|
|
"tests/52-ai-settings-provider-setup.spec.ts",
|
|
"--project=chromium"
|
|
]
|
|
},
|
|
{
|
|
"id": "byok-model-resolution-contract-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/config",
|
|
"./internal/ai",
|
|
"./internal/api",
|
|
"-run",
|
|
"DefaultModelForProvider|AIConfig_GetModel|AIConfig_GetPreferredModelForProvider|SelectRecommendedProviderModel|Service_TestConnection_Extended|UpdateSettings_ResolvesProviderModelWhenOmitted|TestConnection_Ollama|TestProvider_Ollama|RouteTestConnection|AITestConnectionRouteWithValidScope|RouteTestProvider|AITestProviderRouteWithValidScope",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "byok-model-resolution-frontend-tests",
|
|
"cwd": "frontend-modern",
|
|
"run": [
|
|
"npm",
|
|
"test",
|
|
"--",
|
|
"--run",
|
|
"src/components/Settings/__tests__/AISettings.test.tsx"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/status.json",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/ai-runtime.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/api-contracts.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/AISettings.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/useAISettingsState.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/ai/model_resolution.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/ai/model_resolution_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/ai_handlers.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/ai_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/config/ai.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/52-ai-settings-provider-setup.spec.ts",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA23",
|
|
"summary": "Patrol quickstart credits are billed per higher-level Patrol execution, not per internal provider turn: the runtime must propagate one stable execution ID across retries, agentic turns, and the evaluation pass, and the license server must treat repeated quickstart proxy calls for that execution as one commercial run.",
|
|
"kind": "invariant",
|
|
"blocking_level": "repo-ready",
|
|
"proof_type": "automated",
|
|
"lane_ids": [
|
|
"L3",
|
|
"L6"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"cloud-paid"
|
|
],
|
|
"release_gate_ids": [],
|
|
"proof_commands": [
|
|
{
|
|
"id": "patrol-quickstart-execution-contract-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/ai/providers",
|
|
"./internal/ai/chat",
|
|
"./internal/ai",
|
|
"-run",
|
|
"Quickstart|ExecutePatrolStream|RunEvaluationPass|RetriesWithProviderDerivedSeedBudget",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/status.json",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/ai-runtime.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/cloud-paid.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/ai/chat/service.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/ai/chat/service_patrol_additional_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/ai/patrol_ai.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/ai/patrol_ai_more_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/ai/providers/quickstart.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/ai/providers/quickstart_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/quickstart_proxy.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/quickstart_proxy_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/quickstart_store.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/v6_schema.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA24",
|
|
"summary": "Docker release builds must keep the embedded frontend's shipped-doc inputs available inside the container build context: `Dockerfile` and `.dockerignore` jointly own staging `docs/**`, `SECURITY.md`, and `TERMS.md` so hosted runtime image builds do not depend on workstation-local files or silently drop public docs from the frontend embed sync.",
|
|
"kind": "invariant",
|
|
"blocking_level": "repo-ready",
|
|
"proof_type": "automated",
|
|
"lane_ids": [
|
|
"L1"
|
|
],
|
|
"subsystem_ids": [
|
|
"deployment-installability"
|
|
],
|
|
"release_gate_ids": [],
|
|
"proof_commands": [
|
|
{
|
|
"id": "docker-release-build-shipped-doc-contract-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./scripts/installtests",
|
|
"-run",
|
|
"TestDocker(AndDemoBuildsUseCanonicalReleaseLdflags|fileStagesShippedDocsForEmbeddedFrontendBuild)",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": ".dockerignore",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "Dockerfile",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/status.json",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/deployment-installability.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "scripts/installtests/build_release_assets_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA25",
|
|
"summary": "Patrol quickstart bootstrap must resolve a real server-verified commercial principal, never synthetic local identity: activated installs use installation tokens, while entitlement-backed trial or hosted runtimes use signed entitlement leases without fabricating installation-scoped activation state.",
|
|
"kind": "invariant",
|
|
"blocking_level": "repo-ready",
|
|
"proof_type": "automated",
|
|
"lane_ids": [
|
|
"L3",
|
|
"L6"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"api-contracts",
|
|
"cloud-paid"
|
|
],
|
|
"release_gate_ids": [],
|
|
"proof_commands": [
|
|
{
|
|
"id": "quickstart-dual-principal-license-server-tests",
|
|
"run": [
|
|
"go",
|
|
"-C",
|
|
"../pulse-pro/license-server",
|
|
"test",
|
|
"-run",
|
|
"TestHandleQuickstartBootstrap_.*HostedEntitlement|TestHandleQuickstartBootstrap_IssuesTokenForVerifiedInstallation|TestHandleQuickstartBootstrap_RequiresAuth",
|
|
"-count=1"
|
|
]
|
|
},
|
|
{
|
|
"id": "quickstart-dual-principal-runtime-tests",
|
|
"run": [
|
|
"go",
|
|
"test",
|
|
"./internal/ai",
|
|
"./internal/api",
|
|
"./pkg/licensing",
|
|
"-run",
|
|
"Quickstart|AISettingsHandler_GetHostedSettings_AutoBootstrapsQuickstart|AISettingsHandler_GetHostedTenantSettings_InheritsDefaultHostedBillingState|AISettingsHandler_UpdateSettings_QuickstartBootstrapBeforeEnableUsesActivationIdentity|ClientBootstrapQuickstart",
|
|
"-count=1"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/status.json",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/ai-runtime.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/api-contracts.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/cloud-paid.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/ai/quickstart.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/ai/quickstart_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/ai_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/config/entitlement_billing_state.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "pkg/licensing/license_server_client.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "pkg/licensing/quickstart_bootstrap.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/quickstart_entitlement.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/quickstart_proxy.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/quickstart_proxy_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/quickstart_store.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "license-server/secrets.env.template",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "RA26",
|
|
"summary": "Infrastructure Settings is a release-critical configuration surface: it must remain a first-class source-management workspace whose first viewport makes adding, discovering, installing agents, and verifying API plus Pulse Agent coverage clear, with stable source grouping and browser-verified layout before release-ready claims.",
|
|
"kind": "journey",
|
|
"blocking_level": "release-ready",
|
|
"proof_type": "hybrid",
|
|
"lane_ids": [
|
|
"L8",
|
|
"L16"
|
|
],
|
|
"subsystem_ids": [
|
|
"agent-lifecycle",
|
|
"frontend-primitives"
|
|
],
|
|
"release_gate_ids": [
|
|
"settings-surface-layout-consistency"
|
|
],
|
|
"proof_commands": [
|
|
{
|
|
"id": "infrastructure-settings-workspace-tests",
|
|
"run": [
|
|
"npm",
|
|
"--prefix",
|
|
"frontend-modern",
|
|
"test",
|
|
"--",
|
|
"src/components/Settings/__tests__/InfrastructureWorkspace.test.tsx",
|
|
"src/components/Settings/__tests__/settingsArchitecture.test.ts",
|
|
"src/utils/__tests__/discoveryPresentation.test.ts"
|
|
]
|
|
}
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/status.json",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/InfrastructureWorkspace.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/DiscoverySettingsForm.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/InfrastructureInstallerSection.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/InfrastructureSourceManager.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/SettingsPageShell.tsx",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"evidence_reference_policy": {
|
|
"format": "repo-qualified-relative-paths",
|
|
"allowed_kinds": [
|
|
"file",
|
|
"dir"
|
|
],
|
|
"absolute_paths_forbidden": true,
|
|
"local_repo": "pulse"
|
|
},
|
|
"priority_engine": {
|
|
"formula": "behind_score = (max(0,target-current)*4) + criticality + staleness + dependency + blocker_bonus",
|
|
"floor_rule": {
|
|
"release_critical_lanes": [
|
|
"L1",
|
|
"L2",
|
|
"L3",
|
|
"L7",
|
|
"L8",
|
|
"L9",
|
|
"L10",
|
|
"L11",
|
|
"L12"
|
|
],
|
|
"minimum_score": 6
|
|
},
|
|
"weights": {
|
|
"gap_multiplier": 4,
|
|
"criticality_range": "0-5",
|
|
"staleness_range": "0-3",
|
|
"dependency_range": "0-3",
|
|
"blocker_bonus": 8
|
|
}
|
|
},
|
|
"lanes": [
|
|
{
|
|
"id": "L1",
|
|
"name": "Self-hosted release confidence",
|
|
"target_score": 9,
|
|
"current_score": 9,
|
|
"status": "partial",
|
|
"completion": {
|
|
"state": "bounded-residual",
|
|
"summary": "Self-hosted RC confidence is at the current floor; the remaining residual is the lane-local self-hosted promotion package follow-up.",
|
|
"tracking": [
|
|
{
|
|
"kind": "lane-followup",
|
|
"id": "self-hosted-ga-promotion-package"
|
|
}
|
|
]
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [
|
|
"deployment-installability"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/deployment-installability.md",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L2",
|
|
"name": "Conversion/commercial readiness",
|
|
"target_score": 9,
|
|
"current_score": 9,
|
|
"status": "partial",
|
|
"completion": {
|
|
"state": "bounded-residual",
|
|
"summary": "Commercial conversion surfaces are now coherent through the preview and app-side rehearsal path, while the production public flip and release-day rollout execution remain a separate promotion-time follow-up.",
|
|
"tracking": [
|
|
{
|
|
"kind": "lane-followup",
|
|
"id": "commercial-ga-promotion-package"
|
|
}
|
|
]
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/COMMERCIAL_CANCELLATION_REACTIVATION_E2E_TEST_PLAN.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-msp-price-audit-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/self-hosted-commercial-ga-coherence-2026-04-20.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/cloud-paid.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "V6_LAUNCH_CHECKLIST.md",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L3",
|
|
"name": "Cloud paid readiness",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "target-met",
|
|
"completion": {
|
|
"state": "complete",
|
|
"summary": "Cloud-paid runtime and billing surfaces are at the current tracked RC floor, including real cancellation/reactivation continuity across checkout, entitlement boundaries, and the shared commercial billing shell/model now used by both self-hosted Pulse Pro and hosted organization billing.",
|
|
"tracking": []
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [
|
|
"cloud-paid"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/cloud-paid.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/BillingAdminPanel.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/BillingAdminPanel.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/CommercialBillingSections.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/commercialBillingModel.ts",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L4",
|
|
"name": "Hosted MSP readiness",
|
|
"target_score": 6,
|
|
"current_score": 6,
|
|
"status": "target-met",
|
|
"completion": {
|
|
"state": "complete",
|
|
"summary": "Hosted MSP support is at the current tracked RC floor, including real tenant-management behavior and the exercised MSP provisioning and replay proof.",
|
|
"tracking": []
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/msp-provider-tenant-management-2026-03-13.md",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L5",
|
|
"name": "Mobile go-live readiness",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "partial",
|
|
"completion": {
|
|
"state": "bounded-residual",
|
|
"summary": "Mobile is technically release-capable at the RC usefulness floor, but product GA is blocked: the current iPad experience does not yet make the normal self-hosted Pulse user value clear enough to justify public rollout. Store-capable work stays draft/TestFlight/internal-only until the mobile product purpose, first-run story, and primary operator jobs are explicit in the app and revalidated on device.",
|
|
"tracking": [
|
|
{
|
|
"kind": "lane-followup",
|
|
"id": "mobile-post-rc-hardening"
|
|
}
|
|
]
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/PRE_RELEASE_CHECKLIST.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/mobile-product-purpose-ga-blocker-2026-04-24.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-mobile",
|
|
"path": "store/listing.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "V6_LAUNCH_CHECKLIST.md",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L6",
|
|
"name": "Architecture coherence",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "partial",
|
|
"completion": {
|
|
"state": "bounded-residual",
|
|
"summary": "Architecture coherence now carries the canonical Connected infrastructure projection and frontend state contract by construction; the remaining residual is limited to later cross-surface cleanup outside those normalized contracts.",
|
|
"tracking": [
|
|
{
|
|
"kind": "lane-followup",
|
|
"id": "architecture-post-rc-canonicalization"
|
|
}
|
|
]
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [
|
|
"ai-runtime",
|
|
"alerts",
|
|
"api-contracts",
|
|
"notifications",
|
|
"patrol-intelligence"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/ai-runtime.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/notifications.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/api/responseUtils.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/api/streaming.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/features/alerts/OverviewTab.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/alertIncidentPresentation.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/alertOverviewPresentation.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/resources.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-enterprise",
|
|
"path": "docs/V6_REPO_REALIGNMENT.md",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L7",
|
|
"name": "Relay infrastructure readiness",
|
|
"target_score": 9,
|
|
"current_score": 9,
|
|
"status": "target-met",
|
|
"completion": {
|
|
"state": "complete",
|
|
"summary": "Relay infrastructure now carries an explicit backend-owned mobile capability boundary: the dedicated Pulse Mobile relay credential is limited to the governed runtime route inventory instead of depending on scattered compatibility gates.",
|
|
"tracking": []
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [
|
|
"relay-runtime"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/RELAY.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/relay_mobile_capability.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/relay",
|
|
"kind": "dir"
|
|
},
|
|
{
|
|
"repo": "pulse-mobile",
|
|
"path": "src/relay",
|
|
"kind": "dir"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "relay-server",
|
|
"kind": "dir"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L8",
|
|
"name": "First-session & UX polish",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "partial",
|
|
"completion": {
|
|
"state": "bounded-residual",
|
|
"summary": "First-session UX reached the RC floor with the runtime wizard reduced to welcome and security, direct handoff into Infrastructure Operations install, and setup completion retained only as a separate preview surface; broader polish and parity work remain intentionally outside the current prerelease target.",
|
|
"tracking": [
|
|
{
|
|
"kind": "lane-followup",
|
|
"id": "first-session-post-rc-polish"
|
|
}
|
|
]
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [
|
|
"frontend-primitives"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/Settings.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/SetupWizard/SetupCompletionPanel.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/SetupWizard/SetupWizard.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/features/dashboardOverview/estateSummaryModel.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/features/dashboardOverview/EstateSummaryPanel.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/pages/Dashboard.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/11-first-session.spec.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/71-dashboard-estate-orientation.spec.ts",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L9",
|
|
"name": "Documentation readiness",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "partial",
|
|
"completion": {
|
|
"state": "bounded-residual",
|
|
"summary": "Documentation is current enough for the RC floor, and the remaining residual is the lane-local GA-facing promotion and release communication follow-up.",
|
|
"tracking": [
|
|
{
|
|
"kind": "lane-followup",
|
|
"id": "documentation-ga-promotion-package"
|
|
}
|
|
]
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs",
|
|
"kind": "dir"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/releases/RELEASE_NOTES_v6.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "README.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "landing-page",
|
|
"kind": "dir"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L10",
|
|
"name": "Performance & scalability",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "partial",
|
|
"completion": {
|
|
"state": "bounded-residual",
|
|
"summary": "Performance is at the current release floor, but additional scalability headroom and non-blocking performance polish remain post-RC follow-up.",
|
|
"tracking": [
|
|
{
|
|
"kind": "lane-followup",
|
|
"id": "performance-post-rc-headroom"
|
|
}
|
|
]
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [
|
|
"performance-and-scalability"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Dashboard/__tests__/Dashboard.performance.contract.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Dashboard/Dashboard.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Dashboard/workloadSelectors.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Infrastructure/__tests__/UnifiedResourceTable.performance.contract.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Infrastructure/infrastructureSelectors.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Infrastructure/resourceDetailMappers.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Infrastructure/UnifiedResourceTable.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/http_metrics.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "pkg/metrics/store.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/02-navigation-perf.spec.ts",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L11",
|
|
"name": "v5-to-v6 migration safety",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "partial",
|
|
"completion": {
|
|
"state": "bounded-residual",
|
|
"summary": "Migration safety is at the RC floor; any remaining same-lane hardening is outside the current release-gate slice.",
|
|
"tracking": [
|
|
{
|
|
"kind": "lane-followup",
|
|
"id": "migration-post-ga-hardening"
|
|
}
|
|
]
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/LEGACY_HOST_CLASSIFICATION_2026-03-05.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/V5_TO_V6_COMMERCIAL_MIGRATION_AUDIT_2026-03-07.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/UPGRADE_v6.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/scripts/sync-embed-dist.mjs",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/frontend_embed_sync_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/12-v5-commercial-migration.spec.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/migration/v5_commercial_migration_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/migration/v5_full_upgrade_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/migration/v5_session_db_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/migration/v5_to_v6_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L12",
|
|
"name": "E2E journey coverage",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "partial",
|
|
"completion": {
|
|
"state": "bounded-residual",
|
|
"summary": "The end-to-end journey suite covers the RC floor; broader same-lane journey expansion remains outside the current release-gate slice.",
|
|
"tracking": [
|
|
{
|
|
"kind": "lane-followup",
|
|
"id": "journey-post-ga-expansion"
|
|
}
|
|
]
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/COMMERCIAL_CANCELLATION_REACTIVATION_E2E_TEST_PLAN.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/commercial-cancellation-reactivation-2026-03-12.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "tests/integration/tests/journeys",
|
|
"kind": "dir"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L13",
|
|
"name": "Core monitoring runtime",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "target-met",
|
|
"completion": {
|
|
"state": "complete",
|
|
"summary": "Core monitoring runtime is at the current tracked floor: discovery, metrics-history, and platform-runtime proof routing now land on explicit governed routes, while broader ReadState convergence remains owned by architecture coherence.",
|
|
"tracking": []
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [
|
|
"monitoring",
|
|
"unified-resources"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/monitoring.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/registry.json",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/unified-resources.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/TRUENAS.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/UNIFIED_RESOURCES.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Infrastructure/UnifiedResourceTable.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/resources.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/monitoring/canonical_guardrails_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/monitoring/metrics_history.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/monitoring/poll_providers.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/unifiedresources/code_standards_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/unifiedresources/metrics_targets.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/unifiedresources/registry.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "scripts/release_control/subsystem_lookup_test.py",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L14",
|
|
"name": "Security, identity, and privacy",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "target-met",
|
|
"completion": {
|
|
"state": "complete",
|
|
"summary": "Security, identity, and privacy is at the current governed floor: privacy disclosures, telemetry controls, RBAC boundaries, and shared token/auth settings surfaces now route through explicit subsystem ownership with exercised proof across the remaining shared token and auth boundaries.",
|
|
"tracking": []
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [
|
|
"organization-settings",
|
|
"security-privacy"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/PRIVACY.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/organization-settings.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/security-privacy.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/api/__tests__/security.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/OrganizationSharingPanel.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/RBACPaywallPanels.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/SecurityPostureSummary.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/organizationRolePresentation.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/utils/__tests__/organizationSettingsPresentation.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/api_token_org_scope_integration_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/org_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/rbac_handlers_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/security_status_additional_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/security_tokens_owner_binding_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/system_settings_telemetry_test.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/telemetry/telemetry.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "SECURITY.md",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L15",
|
|
"name": "Storage and recovery",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "partial",
|
|
"completion": {
|
|
"state": "bounded-residual",
|
|
"summary": "Storage and recovery have reached the governed RC floor. Filter coherence is proven across all four transport surfaces (rollups, points, series, facets), storage URL state now normalizes canonical source/status/node/resource selections, and recovery route-backed query, provider, outcome, and stale-only filters round-trip through shared links while facets still narrow with the selected timeline day. Broader storage health UX polish and additional recovery timeline hardening remain post-RC follow-up.",
|
|
"tracking": [
|
|
{
|
|
"kind": "lane-followup",
|
|
"id": "storage-recovery-post-rc-hardening"
|
|
}
|
|
]
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [
|
|
"storage-recovery"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/RECOVERY.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/storage-recovery.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/STORAGE_ARCHITECTURE.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Recovery/__tests__/Recovery.test.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Recovery/Recovery.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Storage/__tests__/storagePageState.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Storage/Storage.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/recovery/recovery_test.go",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L16",
|
|
"name": "Agent lifecycle and fleet operations",
|
|
"target_score": 8,
|
|
"current_score": 8,
|
|
"status": "target-met",
|
|
"completion": {
|
|
"state": "complete",
|
|
"summary": "Agent lifecycle and fleet operations are at the current governed RC floor: canonical auto-register now converges on one v6 contract, install-command consumers fail closed through shared validated boundaries, profile-management surfaces preserve the canonical malformed-payload and missing-profile resync contract across settings and deploy surfaces, and the runtime-side Unified Agent reporting path now uses the canonical product terminology.",
|
|
"tracking": []
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [
|
|
"agent-lifecycle"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/unified-agent-v5-upgrade-continuity-2026-03-12.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/agent-lifecycle.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/api/agentProfiles.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/api/nodes.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Infrastructure/deploy/ResultsStep.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/AgentProfilesPanel.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/ConnectionEditor/ConnectionEditor.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/ConnectionEditor/CredentialSlots/NodeCredentialSlot.tsx",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/agentupdate/update.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/config_setup_handlers.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/api/unified_agent.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/hostagent/agent.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "scripts/install.sh",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "L17",
|
|
"name": "Customer account portal",
|
|
"target_score": 6,
|
|
"current_score": 6,
|
|
"status": "target-met",
|
|
"completion": {
|
|
"state": "complete",
|
|
"summary": "Pulse Account is now a first-class governed customer-account surface at the current RC floor: hosted accounts land directly in Workspaces, the signed-in shell stays task-first across Workspaces, Access, Billing, and Support, and MSP plus self-serve commercial actions converge on one coherent authenticated account boundary.",
|
|
"tracking": []
|
|
},
|
|
"blockers": [],
|
|
"subsystems": [],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/CUSTOMER_ACCOUNT_PORTAL_SPEC.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-production-recovered-2026-03-26.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/msp-provider-tenant-management-production-followup-2026-03-13.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/organization-user-scope-and-rbac-2026-03-12.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/api-contracts.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/cloud-paid.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/cloudcp/portal/frontend/src/shell_view.test.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/cloudcp/portal/frontend/src/shell_view.ts",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "internal/cloudcp/portal/page.go",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "landing-page/manage.html",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse-pro",
|
|
"path": "landing-page/retrieve-license.html",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"release_gates": [
|
|
{
|
|
"id": "api-token-scope-and-assignment",
|
|
"summary": "Confirm API tokens are assigned to the correct user and org context, enforce scope boundaries including legacy persisted host-agent scope aliases, and revoke cleanly.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "managed-runtime-exercise",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L1",
|
|
"L6",
|
|
"L11",
|
|
"L14",
|
|
"L16"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/api-token-scope-and-assignment-2026-03-12.md",
|
|
"kind": "file",
|
|
"evidence_tier": "managed-runtime-exercise"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "cloud-hosted-tier-runtime-readiness",
|
|
"summary": "Confirm the actual hosted Pulse tier works end to end after provisioning: hosted auth, runtime entry, and hosted billing/admin surfaces all function coherently.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "real-external-e2e",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L3",
|
|
"L4",
|
|
"L12",
|
|
"L17"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-account-portal-proxy-2026-04-24.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-blocked-2026-03-25.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-production-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-production-fixed-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-production-followup-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-production-recovered-2026-03-26.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-production-remediated-2026-04-24.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-runtime-build-contract-2026-04-24.md",
|
|
"kind": "file",
|
|
"evidence_tier": "managed-runtime-exercise"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-storage-blocker-2026-04-23.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/cloud-hosted-tier-runtime-readiness-storage-guardrails-production-2026-04-24.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "commercial-cancellation-reactivation",
|
|
"summary": "Confirm grandfathered v5 recurring continuity holds while active, completed cancellation revokes paid state, and re-entry after cancellation uses current public v6 pricing.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "real-external-e2e",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L11",
|
|
"L12"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/commercial-cancellation-reactivation-2026-03-12.md",
|
|
"kind": "file",
|
|
"evidence_tier": "managed-runtime-exercise"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/commercial-cancellation-reactivation-external-e2e-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "documentation-currentness-and-legacy-cleanup",
|
|
"summary": "Confirm active v6-facing guidance is current, and any legacy or historical docs are clearly archived or demoted instead of remaining current guidance.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "release-ready",
|
|
"minimum_evidence_tier": "local-rehearsal",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L9"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/documentation-currentness-and-legacy-cleanup-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "hosted-signup-billing-replay",
|
|
"summary": "Confirm hosted signup, org provisioning, billing-admin visibility, and webhook replay succeed in the real checkout path.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "real-external-e2e",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L4",
|
|
"L12",
|
|
"L17"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/hosted-signup-billing-replay-2026-03-12.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/hosted-signup-billing-replay-production-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/hosted-signup-billing-replay-production-fixed-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "known-rc-issue-closure-for-ga",
|
|
"summary": "Confirm Pulse v6 GA is feature-complete relative to the prerelease issue set: every known RC-era user-visible issue intended for v6 is fixed in the candidate, proven invalid, or conservatively superseded instead of being carried knowingly into GA.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "release-ready",
|
|
"minimum_evidence_tier": "managed-runtime-exercise",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L1",
|
|
"L2",
|
|
"L8",
|
|
"L10",
|
|
"L12",
|
|
"L13",
|
|
"L15",
|
|
"L16"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/known-rc-issue-closure-for-ga-2026-04-21.md",
|
|
"kind": "file",
|
|
"evidence_tier": "managed-runtime-exercise"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "mobile-product-purpose-and-first-run-clarity",
|
|
"summary": "Confirm Pulse Mobile communicates a clear self-hosted operator purpose in the actual app experience: a normal user should understand why the companion app exists, what jobs it handles away from the desktop, and how pairing, alerts, approvals, and recovery surfaces fit together before public rollout.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "release-ready",
|
|
"minimum_evidence_tier": "local-rehearsal",
|
|
"status": "blocked",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L5"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/mobile-product-purpose-ga-blocker-2026-04-24.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "mobile-relay-auth-approvals",
|
|
"summary": "Confirm pulse-mobile pairing, persistence, relay reconnect, auth transitions, and approval flows work against a real instance.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "real-external-e2e",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L5",
|
|
"L7",
|
|
"L12"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/mobile-relay-auth-approvals-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "msp-provider-tenant-management",
|
|
"summary": "Confirm MSP mode behaves as a real provider workflow: one account can manage multiple client tenants coherently without cross-client leakage or MSP/public-plan confusion.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "real-external-e2e",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L3",
|
|
"L4",
|
|
"L12",
|
|
"L17"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/msp-provider-tenant-management-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/msp-provider-tenant-management-production-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/msp-provider-tenant-management-production-fixed-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/msp-provider-tenant-management-production-followup-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/multi-tenant-ga-readiness-revalidation-2026-04-23.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "multi-tenant-runtime-isolation-and-coherence",
|
|
"summary": "Confirm multi-tenant Pulse behaves as a coherent tenant-isolated product across org scope, runtime state, sharing, and migration.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "managed-runtime-exercise",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L4",
|
|
"L6",
|
|
"L12",
|
|
"L17"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/multi-tenant-ga-readiness-revalidation-2026-04-23.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/multi-tenant-runtime-isolation-and-coherence-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "managed-runtime-exercise"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "organization-user-scope-and-rbac",
|
|
"summary": "Confirm user creation, organization membership, RBAC scope, and cross-org sharing fail closed outside intended access.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "managed-runtime-exercise",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L4",
|
|
"L9",
|
|
"L12",
|
|
"L14",
|
|
"L17"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/multi-tenant-ga-readiness-revalidation-2026-04-23.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/organization-user-scope-and-rbac-2026-03-12.md",
|
|
"kind": "file",
|
|
"evidence_tier": "managed-runtime-exercise"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "paid-feature-entitlement-gating",
|
|
"summary": "Confirm free-versus-paid feature gating and agent allocation accounting match entitlements across UI, API, hosted, and upgrade surfaces.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "managed-runtime-exercise",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L6",
|
|
"L9",
|
|
"L12",
|
|
"L16"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/paid-feature-entitlement-gating-2026-03-12.md",
|
|
"kind": "file",
|
|
"evidence_tier": "managed-runtime-exercise"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"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.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "release-ready",
|
|
"minimum_evidence_tier": "real-external-e2e",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L1",
|
|
"L9",
|
|
"L11",
|
|
"L12"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-03-26.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-03-28.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-blocked-2026-04-04.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-rehearsal-2026-04-20.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/rc-to-ga-promotion-readiness-rehearsal-blocked-2026-03-26.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "relay-registration-reconnect-drain",
|
|
"summary": "Confirm relay fresh registration, reconnect, stale-session recovery, and disconnect drain behavior hold under real pressure.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "managed-runtime-exercise",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L5",
|
|
"L7",
|
|
"L12"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/relay-registration-reconnect-drain-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "managed-runtime-exercise"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "self-hosted-commercial-ga-coherence",
|
|
"summary": "Confirm the self-hosted GA commercial package is coherent end-to-end: public landing, in-app upgrade/trial path, checkout/account/license-management flows, and GA-facing guidance all describe the same Community / Relay / Pro product without legacy v5 bridge posture or contradictory plan copy.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "release-ready",
|
|
"minimum_evidence_tier": "real-external-e2e",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L2",
|
|
"L9",
|
|
"L12",
|
|
"L17"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/self-hosted-commercial-ga-coherence-2026-04-20.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/self-hosted-commercial-ga-coherence-paid-runtime-docker-policy-2026-04-24.md",
|
|
"kind": "file",
|
|
"evidence_tier": "managed-runtime-exercise"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "settings-surface-layout-consistency",
|
|
"summary": "Confirm comparable settings surfaces present the canonical page shell, with consistent header framing and no ad hoc top-level layout chrome.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "release-ready",
|
|
"minimum_evidence_tier": "local-rehearsal",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L8"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/settings-surface-layout-consistency-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "local-rehearsal"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "frontend-modern/src/components/Settings/__tests__/settingsArchitecture.test.ts",
|
|
"kind": "file",
|
|
"evidence_tier": "test-proof"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "unified-agent-v5-upgrade-continuity",
|
|
"summary": "Confirm a real v5-installed Pulse Unified Agent upgrades through candidate v6 RC assets into one canonical v6 agent identity without duplicate registration, stale fallback or legacy-scope breakage, or agent-count drift.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "real-external-e2e",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L11",
|
|
"L12",
|
|
"L16"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/unified-agent-v5-upgrade-continuity-2026-03-12.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "upgrade-state-and-entitlement-preservation",
|
|
"summary": "Confirm supported upgrades preserve state, entitlements, and first-session continuity without repair flows.",
|
|
"owner": "project-owner",
|
|
"blocking_level": "rc-ready",
|
|
"minimum_evidence_tier": "real-external-e2e",
|
|
"status": "passed",
|
|
"verification_doc": "docs/release-control/v6/internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md",
|
|
"lane_ids": [
|
|
"L3",
|
|
"L5",
|
|
"L8"
|
|
],
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/upgrade-state-and-entitlement-preservation-2026-03-13.md",
|
|
"kind": "file",
|
|
"evidence_tier": "real-external-e2e"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"lane_followups": [
|
|
{
|
|
"id": "architecture-post-rc-canonicalization",
|
|
"summary": "Track the remaining post-RC architecture cleanup that still belongs to L6 after canonicalizing Connected infrastructure and the frontend state contract by construction, including retirement of newly legacy or clearly obsolete old-way internal paths unless a boundary-only exception is explicitly governed.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-13",
|
|
"lane_ids": [
|
|
"L6"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"alerts",
|
|
"notifications",
|
|
"patrol-intelligence"
|
|
]
|
|
},
|
|
{
|
|
"id": "documentation-ga-promotion-package",
|
|
"summary": "Track the GA-facing documentation and release communication package that should only be finalized when promotion is actually being executed.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-13",
|
|
"lane_ids": [
|
|
"L9"
|
|
],
|
|
"subsystem_ids": []
|
|
},
|
|
{
|
|
"id": "first-session-post-rc-polish",
|
|
"summary": "Track broader first-session polish and parity work that is intentionally outside the RC stabilization floor, including the dashboard-home requirement that the first viewport preserves immediate estate orientation for v5-upgrade users through the canonical connected-infrastructure projection.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-13",
|
|
"lane_ids": [
|
|
"L8"
|
|
],
|
|
"subsystem_ids": [
|
|
"frontend-primitives"
|
|
]
|
|
},
|
|
{
|
|
"id": "mobile-post-rc-hardening",
|
|
"summary": "Track broader mobile go-live hardening beyond the RC usefulness floor, including non-public store-capable rehearsal while public rollout stays blocked until the actual app experience makes the self-hosted operator value, first-run story, and primary away-from-desk jobs clear enough to be judged product-ready.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-13",
|
|
"lane_ids": [
|
|
"L5"
|
|
],
|
|
"subsystem_ids": []
|
|
},
|
|
{
|
|
"id": "performance-post-rc-headroom",
|
|
"summary": "Track additional scalability headroom and non-blocking performance polish beyond the current release floor.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-13",
|
|
"lane_ids": [
|
|
"L10"
|
|
],
|
|
"subsystem_ids": [
|
|
"performance-and-scalability"
|
|
]
|
|
},
|
|
{
|
|
"id": "self-hosted-ga-promotion-package",
|
|
"summary": "Track the lane-local self-hosted GA promotion package: stable candidate inputs, rollback clarity, and dry-run capture once GA promotion is actually being executed.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-13",
|
|
"lane_ids": [
|
|
"L1"
|
|
],
|
|
"subsystem_ids": []
|
|
},
|
|
{
|
|
"id": "storage-recovery-post-rc-hardening",
|
|
"summary": "Track broader storage health UX polish and recovery timeline hardening beyond the current RC floor, including additional filter coherence edge cases and storage panel presentation improvements.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-14",
|
|
"lane_ids": [
|
|
"L15"
|
|
],
|
|
"repo_ids": [
|
|
"pulse"
|
|
],
|
|
"subsystem_ids": [
|
|
"storage-recovery"
|
|
],
|
|
"cross_repo": false
|
|
},
|
|
{
|
|
"id": "commercial-ga-promotion-package",
|
|
"summary": "Track the production public flip and release-day execution work for the self-hosted commercial package now that preview, in-app entry, checkout handoff, and Pulse Account coherence are already proved.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-04-20",
|
|
"lane_ids": [
|
|
"L2"
|
|
],
|
|
"subsystem_ids": []
|
|
},
|
|
{
|
|
"id": "journey-post-ga-expansion",
|
|
"summary": "Track broader same-lane end-to-end journey expansion beyond the current GA floor now that prerelease-to-GA promotion proof is recorded.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-04-20",
|
|
"lane_ids": [
|
|
"L12"
|
|
],
|
|
"subsystem_ids": []
|
|
},
|
|
{
|
|
"id": "migration-post-ga-hardening",
|
|
"summary": "Track remaining same-lane migration-safety hardening beyond the current GA floor now that prerelease-to-GA promotion proof is recorded.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-04-20",
|
|
"lane_ids": [
|
|
"L11"
|
|
],
|
|
"subsystem_ids": []
|
|
}
|
|
],
|
|
"coverage_gaps": [
|
|
{
|
|
"id": "action-governance-and-audit",
|
|
"summary": "v6 has approvals and AI surfaces, but it lacks a governed action model covering declared capabilities, planning and dry-run boundaries, approval requirements, audit trail ownership, and safe execution contracts.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-17",
|
|
"lane_ids": [
|
|
"L6",
|
|
"L14"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"api-contracts",
|
|
"patrol-intelligence",
|
|
"security-privacy"
|
|
],
|
|
"proposed_resolution": "new-lane",
|
|
"coverage_impact": 14,
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/ai-runtime.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/V6_BRIDGE_RELEASE_FOUNDATION_SPEC.md",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "fleet-governance-v1",
|
|
"summary": "L16 covers install and registration continuity, but the governed map still underrepresents fleet governance primitives such as enrollment state, version drift, adapter health, config rollout, credential status, and remote control-plane safety.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-17",
|
|
"lane_ids": [
|
|
"L16"
|
|
],
|
|
"subsystem_ids": [
|
|
"agent-lifecycle"
|
|
],
|
|
"proposed_resolution": "lane-expansion",
|
|
"coverage_impact": 10,
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/agent-lifecycle.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/V6_BRIDGE_RELEASE_FOUNDATION_SPEC.md",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "policy-aware-data-governance",
|
|
"summary": "The current v6 map treats privacy and AI runtime as adjacent concerns, but it does not yet govern sensitivity classification, redaction, local-vs-cloud routing, or AI-safe summary boundaries as a first-class release surface.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-17",
|
|
"lane_ids": [
|
|
"L6",
|
|
"L14"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"api-contracts",
|
|
"security-privacy"
|
|
],
|
|
"proposed_resolution": "new-lane",
|
|
"coverage_impact": 15,
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/security-privacy.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/V6_BRIDGE_RELEASE_FOUNDATION_SPEC.md",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "resource-change-and-timeline",
|
|
"summary": "The current v6 lane map proves unified resources and monitoring floors, but the resource-change and cross-resource timeline work is now kept as hidden backend foundation for investigation and AI flows until the surfaced case is proven.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-17",
|
|
"lane_ids": [
|
|
"L6",
|
|
"L13"
|
|
],
|
|
"subsystem_ids": [
|
|
"alerts",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"unified-resources"
|
|
],
|
|
"proposed_resolution": "lane-split",
|
|
"coverage_impact": 15,
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/unified-resources.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/V6_BRIDGE_RELEASE_FOUNDATION_SPEC.md",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "platform-admission-execution",
|
|
"summary": "The platform support model now governs admission decisions, and VMware vSphere is already the current admitted strategic next-platform direction, but the lane map still underrepresents the cross-surface work needed to carry an admitted first-class platform from architecture lock to a proved support floor across setup, canonical projections, alerts, assistant read, and bounded control classification.",
|
|
"owner": "project-owner",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-30",
|
|
"lane_ids": [
|
|
"L6",
|
|
"L13",
|
|
"L15"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"alerts",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"storage-recovery",
|
|
"unified-resources"
|
|
],
|
|
"proposed_resolution": "new-lane",
|
|
"coverage_impact": 12,
|
|
"evidence": [
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/PLATFORM_SUPPORT_MODEL.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/records/vmware-vcenter-phase1-proof-blocked-2026-03-30.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/SOURCE_OF_TRUTH.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/agent-lifecycle.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/ai-runtime.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/alerts.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/monitoring.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/storage-recovery.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/subsystems/unified-resources.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/VMWARE_VCENTER_PHASE1_ALERTS_AND_ASSISTANT_SPEC.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/VMWARE_VCENTER_PHASE1_API_RUNTIME_SPEC.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/VMWARE_VCENTER_PHASE1_ONBOARDING_SPEC.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/VMWARE_VCENTER_PHASE1_PROOF_MATRIX.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/VMWARE_VCENTER_PHASE1_PROOF_RECORD_TEMPLATE.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/VMWARE_VCENTER_PHASE1_RESOURCE_PROJECTION_SPEC.md",
|
|
"kind": "file"
|
|
},
|
|
{
|
|
"repo": "pulse",
|
|
"path": "docs/release-control/v6/internal/VMWARE_VSPHERE_PHASE1_EXECUTION_PLAN.md",
|
|
"kind": "file"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"candidate_lanes": [
|
|
{
|
|
"id": "action-governance-auditability",
|
|
"name": "Action governance and auditability",
|
|
"summary": "Promote action capability declaration, plan and dry-run state, approval requirements, safe execution boundaries, and audit ownership into a dedicated governed lane.",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-17",
|
|
"target_id": "v6-product-lane-expansion",
|
|
"current_lane_ids": [
|
|
"L6",
|
|
"L14"
|
|
],
|
|
"coverage_gap_ids": [
|
|
"action-governance-and-audit"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"api-contracts",
|
|
"patrol-intelligence",
|
|
"security-privacy"
|
|
]
|
|
},
|
|
{
|
|
"id": "fleet-governance-rollout-control",
|
|
"name": "Fleet governance and rollout control",
|
|
"summary": "Expand the current fleet lane from install and lifecycle continuity into governed enrollment, drift, adapter-health, config-rollout, and credential-status control surfaces.",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-17",
|
|
"target_id": "v6-product-lane-expansion",
|
|
"current_lane_ids": [
|
|
"L16"
|
|
],
|
|
"coverage_gap_ids": [
|
|
"fleet-governance-v1"
|
|
],
|
|
"subsystem_ids": [
|
|
"agent-lifecycle"
|
|
]
|
|
},
|
|
{
|
|
"id": "policy-aware-data-governance-lane",
|
|
"name": "Policy-aware data governance",
|
|
"summary": "Promote sensitivity classification, redaction, local-vs-cloud routing, and AI-safe summary boundaries into a governed product lane rather than leaving them split across privacy and AI runtime residue.",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-17",
|
|
"target_id": "v6-product-lane-expansion",
|
|
"current_lane_ids": [
|
|
"L6",
|
|
"L14"
|
|
],
|
|
"coverage_gap_ids": [
|
|
"policy-aware-data-governance"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"api-contracts",
|
|
"security-privacy"
|
|
]
|
|
},
|
|
{
|
|
"id": "resource-change-intelligence",
|
|
"name": "Resource change intelligence",
|
|
"summary": "Promote canonical resource relationships, first-class change envelopes, and cross-resource timelines into an explicit lane once the monitoring-first surface proves the case; keep the backend foundations hidden until then.",
|
|
"status": "planned",
|
|
"recorded_at": "2026-03-17",
|
|
"target_id": "v6-product-lane-expansion",
|
|
"current_lane_ids": [
|
|
"L6",
|
|
"L13"
|
|
],
|
|
"coverage_gap_ids": [
|
|
"resource-change-and-timeline"
|
|
],
|
|
"subsystem_ids": [
|
|
"alerts",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"unified-resources"
|
|
]
|
|
},
|
|
{
|
|
"id": "platform-admission-execution",
|
|
"name": "Platform admission execution",
|
|
"summary": "Carry admitted first-class platform directions from architecture lock to proved support floors through one governed lane covering shared onboarding, canonical resource projection, support-floor proof, and bounded assistant/control classification, starting with the active VMware vSphere direction.",
|
|
"status": "accepted",
|
|
"recorded_at": "2026-03-30",
|
|
"target_id": "v6-product-lane-expansion",
|
|
"current_lane_ids": [
|
|
"L6",
|
|
"L13",
|
|
"L15"
|
|
],
|
|
"coverage_gap_ids": [
|
|
"platform-admission-execution"
|
|
],
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"alerts",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"storage-recovery",
|
|
"unified-resources"
|
|
]
|
|
}
|
|
],
|
|
"work_claims": [],
|
|
"open_decisions": [],
|
|
"source_of_truth_file": "docs/release-control/v6/internal/SOURCE_OF_TRUTH.md",
|
|
"resolved_decisions": [
|
|
{
|
|
"id": "ga-floor-policy",
|
|
"summary": "Staged release policy locked; deeper Hosted MSP and Pulse Account portal expansion is post-GA and not a GA floor gate.",
|
|
"kind": "release-policy",
|
|
"decided_at": "2026-02-27",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L4",
|
|
"L17"
|
|
]
|
|
},
|
|
{
|
|
"id": "msp-pricing-band-lock",
|
|
"summary": "MSP pricing locked at Starter/Growth/Scale = $149/$249/$399 monthly with 10/25/50 workspace breakpoints.",
|
|
"kind": "pricing",
|
|
"decided_at": "2026-02-27",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L2",
|
|
"L4"
|
|
]
|
|
},
|
|
{
|
|
"id": "stripe-mapping-contract-lock",
|
|
"summary": "Cloud/MSP Stripe mapping contract is locked; concrete price IDs remain operational fill-in tasks.",
|
|
"kind": "contract",
|
|
"decided_at": "2026-02-27",
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L4"
|
|
]
|
|
},
|
|
{
|
|
"id": "host-type-migration-boundary-audit",
|
|
"summary": "Host-type migration audit completed; remaining host references are compatibility boundaries, internal shims, or non-resource terminology.",
|
|
"kind": "architecture",
|
|
"decided_at": "2026-03-05",
|
|
"subsystem_ids": [
|
|
"agent-lifecycle",
|
|
"alerts",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"unified-resources"
|
|
],
|
|
"lane_ids": [
|
|
"L6",
|
|
"L11",
|
|
"L13",
|
|
"L16"
|
|
]
|
|
},
|
|
{
|
|
"id": "trial-authority-saas-controlled",
|
|
"summary": "Trial authority for v6 is SaaS-controlled; hosted signup initiates trial start and local runtime may only redeem signed trial activations.",
|
|
"kind": "contract",
|
|
"decided_at": "2026-03-06",
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L11"
|
|
]
|
|
},
|
|
{
|
|
"id": "v5-license-bridge-landed",
|
|
"summary": "The v5-to-v6 license migration bridge landed, including upgrade exchange, activation input acceptance, and aligned public migration guidance.",
|
|
"kind": "migration",
|
|
"decided_at": "2026-03-06",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L11"
|
|
]
|
|
},
|
|
{
|
|
"id": "browser-proof-commercial-migration",
|
|
"summary": "Browser-level proof exists for unresolved v5 commercial migration states via the upgraded-fixture commercial migration spec.",
|
|
"kind": "migration",
|
|
"decided_at": "2026-03-07",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L11"
|
|
]
|
|
},
|
|
{
|
|
"id": "commercial-migration-truth-table-owned",
|
|
"summary": "The v5 commercial migration truth table is owned by v6 release-control and unresolved paid-license states must remain preserved through migration.",
|
|
"kind": "migration",
|
|
"decided_at": "2026-03-07",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L11"
|
|
]
|
|
},
|
|
{
|
|
"id": "embedded-frontend-drift-protection",
|
|
"summary": "Embedded frontend drift protection landed through synced dist assets, embed parity tests, and native embedded migration UI proof.",
|
|
"kind": "governance",
|
|
"decided_at": "2026-03-07",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L11"
|
|
]
|
|
},
|
|
{
|
|
"id": "orchestrator-retired",
|
|
"summary": "The v6 release-control orchestrator was retired; direct repo-aware sessions and governance guardrails are the only supported execution path.",
|
|
"kind": "governance",
|
|
"decided_at": "2026-03-11",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L6",
|
|
"L9"
|
|
]
|
|
},
|
|
{
|
|
"id": "top-level-governance-split",
|
|
"summary": "SOURCE_OF_TRUTH.md now owns only stable governance and locked decisions; live lane state and evidence references live only in status.json.",
|
|
"kind": "governance",
|
|
"decided_at": "2026-03-11",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L6",
|
|
"L9"
|
|
]
|
|
},
|
|
{
|
|
"id": "stable-release-promotion-model",
|
|
"summary": "v6 and later releases use an opt-in RC preview channel plus a promotion-only stable channel; stable customers must receive only already-validated builds, unattended auto-update exposure remains stable-only, and GA stays blocked until rollback instructions and the v5 maintenance-only policy are explicit.",
|
|
"kind": "release-policy",
|
|
"decided_at": "2026-03-12",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L1",
|
|
"L3",
|
|
"L11",
|
|
"L12"
|
|
]
|
|
},
|
|
{
|
|
"id": "v5-maintenance-support-policy",
|
|
"summary": "Once v6 reaches stable or GA, v5 moves to a 90-day maintenance-only window for critical security issues, critical correctness/data-loss issues, and safe migration blockers only; after that window, v5 is unsupported.",
|
|
"kind": "release-policy",
|
|
"decided_at": "2026-03-12",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L9"
|
|
]
|
|
},
|
|
{
|
|
"id": "v5-pro-price-grandfathering",
|
|
"summary": "Legacy recurring Pulse Pro subscriptions already active before the public v6 pricing cutover keep their existing recurring price plus uncapped monitored-system and guest capacity through the v6 pricing change until they cancel; renewals must preserve that grandfathered state, while any return after cancellation re-enters on current v6 pricing and limits.",
|
|
"kind": "pricing",
|
|
"decided_at": "2026-03-12",
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L11"
|
|
]
|
|
},
|
|
{
|
|
"id": "cloud-msp-price-id-propagation",
|
|
"summary": "The 13 canonical Cloud/MSP v6 price IDs are populated in the governed pulse-pro operations doc, launch checklist, and license-server env mapping template.",
|
|
"kind": "contract",
|
|
"decided_at": "2026-03-13",
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L4"
|
|
]
|
|
},
|
|
{
|
|
"id": "cloud-msp-stripe-prices",
|
|
"summary": "The 13 canonical Cloud/MSP v6 price IDs already exist as active live recurring Stripe prices and match the governed commercial mappings.",
|
|
"kind": "pricing",
|
|
"decided_at": "2026-03-13",
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L4"
|
|
]
|
|
},
|
|
{
|
|
"id": "mobile-usefulness-floor",
|
|
"summary": "Pulse Mobile is considered useful enough for the v6 RC line when it preserves at least one trusted paired instance across relaunches, surfaces relay/runtime state clearly in the main shell, fails closed into a recoverable disconnected state on stale or revoked access, and supports live approval visibility and action recovery; broader parity remains post-RC scope.",
|
|
"kind": "release-policy",
|
|
"decided_at": "2026-03-13",
|
|
"subsystem_ids": [
|
|
"frontend-primitives",
|
|
"relay-runtime"
|
|
],
|
|
"lane_ids": [
|
|
"L5",
|
|
"L7",
|
|
"L8",
|
|
"L12"
|
|
]
|
|
},
|
|
{
|
|
"id": "accidental-prerelease-tags-do-not-count-as-shipped-rcs",
|
|
"summary": "Accidental prerelease git tags do not count as shipped prerelease lineage. Local-only false-start prerelease tags must be cleared or superseded before the first real governed prerelease is published, and only actually published prerelease tags may be treated as valid stable-promotion `promoted_from_tag` lineage.",
|
|
"kind": "release-policy",
|
|
"decided_at": "2026-03-14",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L1",
|
|
"L9",
|
|
"L11",
|
|
"L12"
|
|
]
|
|
},
|
|
{
|
|
"id": "monitored-systems-counting-contract",
|
|
"summary": "Commercial counting for Pulse v6 is based on monitored systems, not installed agents: each top-level monitored system counts once regardless of collection path, while child resources remain included and API-only monitoring must consume the same cap as agent-backed monitoring.",
|
|
"kind": "contract",
|
|
"decided_at": "2026-03-17",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L2"
|
|
]
|
|
},
|
|
{
|
|
"id": "pulse-not-agent-sandbox-boundary",
|
|
"summary": "Pulse is not a universal agent sandbox; it is the infrastructure-specific context, policy, and action plane that sandboxed agents should use.",
|
|
"kind": "architecture",
|
|
"decided_at": "2026-03-17",
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"api-contracts",
|
|
"security-privacy",
|
|
"unified-resources"
|
|
],
|
|
"lane_ids": [
|
|
"L6",
|
|
"L13",
|
|
"L14"
|
|
]
|
|
},
|
|
{
|
|
"id": "self-hosted-pricing-band-lock-v2",
|
|
"summary": "Historical RC1 self-hosted pricing lock: Pulse v6 temporarily carried a capped Community / Relay / Pro / Pro+ self-hosted ladder during RC1, but that direction was superseded on 2026-04-16 by `self-hosted-core-monitoring-free` and must not be treated as the final GA self-hosted pricing truth.",
|
|
"kind": "pricing",
|
|
"decided_at": "2026-03-17",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L2"
|
|
]
|
|
},
|
|
{
|
|
"id": "v6-bridge-release-foundation",
|
|
"summary": "Pulse v6 is a bridge release toward a resource + policy + control platform: it must land irreversible primitives for canonical resources, policy-aware routing, governed actions, and fleet control without attempting the full private operational broker in one release.",
|
|
"kind": "architecture",
|
|
"decided_at": "2026-03-17",
|
|
"subsystem_ids": [
|
|
"agent-lifecycle",
|
|
"ai-runtime",
|
|
"api-contracts",
|
|
"security-privacy",
|
|
"unified-resources"
|
|
],
|
|
"lane_ids": [
|
|
"L6",
|
|
"L13",
|
|
"L14",
|
|
"L16"
|
|
]
|
|
},
|
|
{
|
|
"id": "canonical-timeline-source-precedence",
|
|
"summary": "Unified-resource change history is the canonical durable backend timeline; alert incident memory remains a derived investigation projection for alert-local notes, analysis, commands, runbooks, and lifecycle breadcrumbs.",
|
|
"kind": "architecture",
|
|
"decided_at": "2026-03-20",
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"alerts",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"unified-resources"
|
|
],
|
|
"lane_ids": [
|
|
"L6",
|
|
"L13"
|
|
]
|
|
},
|
|
{
|
|
"id": "mobile-public-release-stays-non-public-until-product-ready",
|
|
"summary": "Pulse Mobile may complete store setup and candidate submission plumbing before GA, but until the product bar is met it must stay non-public: App Store builds remain in App Store Connect/TestFlight, Google Play stays on the internal track, and public rollout waits for fresh physical-device proof on the current candidate plus an explicit product-ready judgment.",
|
|
"kind": "release-policy",
|
|
"decided_at": "2026-03-28",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L5"
|
|
]
|
|
},
|
|
{
|
|
"id": "mixed-private-infrastructure-operations-direction",
|
|
"summary": "Pulse is moving toward the unified operations layer for mixed private infrastructure: operators should get one coherent place to monitor, investigate, and safely act across mixed estates, and new platform work is admitted only when it strengthens that operator surface rather than landing opportunistically.",
|
|
"kind": "governance",
|
|
"decided_at": "2026-03-30",
|
|
"subsystem_ids": [
|
|
"agent-lifecycle",
|
|
"ai-runtime",
|
|
"alerts",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"storage-recovery",
|
|
"unified-resources"
|
|
],
|
|
"lane_ids": [
|
|
"L6",
|
|
"L13",
|
|
"L15",
|
|
"L16"
|
|
]
|
|
},
|
|
{
|
|
"id": "mobile-incident-companion-ia-v1",
|
|
"summary": "Pulse Mobile's primary product job is anywhere incident awareness, incident triage, and safe governed action away from the desk. The public-facing IA centers on Home, Findings, Instances, Approvals, and More, while Chat remains a contextual investigation tool rather than a top-level destination.",
|
|
"kind": "governance",
|
|
"decided_at": "2026-03-30",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L5"
|
|
]
|
|
},
|
|
{
|
|
"id": "platform-support-model-v1",
|
|
"summary": "Pulse v6 platform support is governed by one canonical model: `docker` and `kubernetes` are first-class top-level platforms, first-class platforms declare primary ingestion, canonical resource projections, and support-floor surfaces, and runtime variants such as `podman` plus transport helpers are not top-level platforms.",
|
|
"kind": "architecture",
|
|
"decided_at": "2026-03-30",
|
|
"subsystem_ids": [
|
|
"agent-lifecycle",
|
|
"ai-runtime",
|
|
"alerts",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"storage-recovery",
|
|
"unified-resources"
|
|
],
|
|
"lane_ids": [
|
|
"L6",
|
|
"L13",
|
|
"L15",
|
|
"L16"
|
|
]
|
|
},
|
|
{
|
|
"id": "vmware-vsphere-vcenter-first-admission-model",
|
|
"summary": "VMware vSphere is the current admitted strategic platform direction under the governed platform model: phase 1 stays vCenter-first and API-first, projects ESXi hosts as `agent`, VMs as `vm`, datastores as `storage`, keeps direct ESXi out of scope, treats snapshots as read-side workload context rather than recovery support, and leaves assistant control read-only until the governed action model expands.",
|
|
"kind": "architecture",
|
|
"decided_at": "2026-03-30",
|
|
"subsystem_ids": [
|
|
"ai-runtime",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"storage-recovery",
|
|
"unified-resources"
|
|
],
|
|
"lane_ids": [
|
|
"L6",
|
|
"L13",
|
|
"L15"
|
|
]
|
|
},
|
|
{
|
|
"id": "vmware-vsphere-vcenter-support-claim-ratchet",
|
|
"summary": "VMware vSphere is already an admitted strategic platform direction, but it is not a supported Pulse platform until one real vCenter capability is recorded in LOCAL_CAPABILITIES.md and the governed phase-1 proof matrix passes; implementation and contract work may proceed against the locked model before that point, but product, settings, and assistant surfaces must not claim VMware support.",
|
|
"kind": "governance",
|
|
"decided_at": "2026-03-30",
|
|
"subsystem_ids": [
|
|
"agent-lifecycle",
|
|
"ai-runtime",
|
|
"alerts",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"storage-recovery",
|
|
"unified-resources"
|
|
],
|
|
"lane_ids": [
|
|
"L6",
|
|
"L13",
|
|
"L15",
|
|
"L16"
|
|
]
|
|
},
|
|
{
|
|
"id": "platform-admission-first-lab-ready-stage",
|
|
"summary": "Admitted but not yet supported platforms now have one governed pre-support checkpoint, `first-lab-ready`: the architecture is locked, the shared phase floor is implemented, automated non-live proof is strong enough that the next highest-value step is live validation, and the support claim remains blocked until that live proof passes.",
|
|
"kind": "governance",
|
|
"decided_at": "2026-03-31",
|
|
"subsystem_ids": [
|
|
"agent-lifecycle",
|
|
"ai-runtime",
|
|
"alerts",
|
|
"api-contracts",
|
|
"monitoring",
|
|
"storage-recovery",
|
|
"unified-resources"
|
|
],
|
|
"lane_ids": [
|
|
"L6",
|
|
"L13",
|
|
"L15",
|
|
"L16"
|
|
]
|
|
},
|
|
{
|
|
"id": "rc-publication-judgment",
|
|
"summary": "Pulse v6 current `pulse/v6-release` candidate is approved for the first governed RC publication after the 2026-04-09 packet recorded a passing full active-target proof; `rc-publication-judgment` is resolved and prerelease publication may proceed on the governed v6 release line.",
|
|
"kind": "release-policy",
|
|
"decided_at": "2026-04-09",
|
|
"subsystem_ids": [],
|
|
"lane_ids": [
|
|
"L1",
|
|
"L8",
|
|
"L9",
|
|
"L12"
|
|
]
|
|
},
|
|
{
|
|
"id": "legacy-grandfathering-eligibility-cutoff",
|
|
"summary": "Uncapped grandfathered recurring continuity applies only to legacy recurring Pulse Pro subscriptions that were already active before the public v6 pricing cutover; public pricing and checkout copy must not imply that brand-new pre-cutover purchases automatically qualify for that legacy continuity.",
|
|
"kind": "pricing",
|
|
"decided_at": "2026-04-15",
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L9"
|
|
]
|
|
},
|
|
{
|
|
"id": "self-hosted-core-monitoring-free",
|
|
"summary": "Pulse v6 self-hosted core monitoring is not a paid gate: homelab users must not be monetized on monitored-system volume itself, monitored systems remain the canonical counted unit for product understanding and migration truth, and paid self-hosted value must come from optional extras, hosted convenience, business workflow, support, or similar non-core surfaces.",
|
|
"kind": "pricing",
|
|
"decided_at": "2026-04-16",
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L9"
|
|
]
|
|
},
|
|
{
|
|
"id": "self-hosted-paid-extras-packaging",
|
|
"summary": "Pulse v6 self-hosted paid packaging is now locked to Community / Relay / Pro with unlimited core monitoring on every self-hosted tier: Relay sells remote access, mobile, push, and convenience plus 14-day history; Pro sells Relay plus AI operations, automation, advanced administration, and 90-day history; legacy Pro+ remains continuity-only and is not a public no-cap self-hosted checkout tier; Cloud and MSP continue as separate hosted/commercial offers.",
|
|
"kind": "pricing",
|
|
"decided_at": "2026-04-16",
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"lane_ids": [
|
|
"L2",
|
|
"L3",
|
|
"L9"
|
|
]
|
|
},
|
|
{
|
|
"id": "patrol-product-language-ai-boundary",
|
|
"summary": "Patrol product-language migration boundary audited: customer-facing page titles, nav, route chrome, summary copy, actions, and empty states lead with Patrol/Pulse Patrol/Pulse Assistant. Internal file, store, type, transport, and log identifiers retain the shared AI-runtime boundary. The `/settings/system-ai` panel is the explicit provider/configuration carve-out where AI terminology is reserved; its chrome already leads with 'Assistant & Patrol'. The remaining AgentProfilesPanel 'Ideas' tooltip was product-neutralized to 'Suggest profiles for your estate'.",
|
|
"kind": "architecture",
|
|
"decided_at": "2026-04-17",
|
|
"subsystem_ids": [
|
|
"patrol-intelligence"
|
|
],
|
|
"lane_ids": [
|
|
"L6"
|
|
]
|
|
},
|
|
{
|
|
"id": "self-hosted-plans-surface-entitlement-first",
|
|
"summary": "The self-hosted v6 commercial settings surface is plan-owned rather than tier-owned: the settings nav label is `Plans`, the page title is `Plans & Activation`, and the canonical plan state must foreground the current unlocked tier plus capabilities so paid upgrades can confirm their entitlement immediately after entering a new key.",
|
|
"kind": "pricing",
|
|
"decided_at": "2026-04-22",
|
|
"subsystem_ids": [
|
|
"cloud-paid",
|
|
"frontend-primitives"
|
|
],
|
|
"lane_ids": [
|
|
"L3",
|
|
"L8",
|
|
"L9"
|
|
]
|
|
},
|
|
{
|
|
"id": "dashboard-home-estate-orientation-contract",
|
|
"summary": "The v6 dashboard remains the default landing surface only if its first viewport immediately proves that Pulse sees the operator's estate: the page must surface canonical connected-infrastructure system count, health, source coverage, freshness, and an explicit Infrastructure handoff before detailed dashboard rows, without restoring platform-special navigation or widening the dashboard hot path.",
|
|
"kind": "contract",
|
|
"decided_at": "2026-04-23",
|
|
"subsystem_ids": [
|
|
"frontend-primitives"
|
|
],
|
|
"lane_ids": [
|
|
"L8"
|
|
]
|
|
},
|
|
{
|
|
"id": "self-hosted-paid-surface-classification",
|
|
"summary": "Current v6 self-hosted paid surfaces now classify commercial capabilities explicitly: only the primary Pro pillars (root-cause analysis, safe remediation, 90-day history, and included admin extras) may be marketed in customer-facing copy and upgrade prompts; compatibility-only gates such as `kubernetes_ai` remain valid runtime facts but non-marketed, and legacy claims such as `incident memory`, `scheduled remediations`, and `execution audit trail` stay retired unless rebuilt into first-class product surfaces.",
|
|
"kind": "pricing",
|
|
"decided_at": "2026-04-23",
|
|
"subsystem_ids": [
|
|
"cloud-paid"
|
|
],
|
|
"lane_ids": [
|
|
"L3",
|
|
"L9"
|
|
]
|
|
}
|
|
]
|
|
}
|