Four documented platform-page gaps from the prior round are closed: 1. **Docker Swarm services canonical projection.** The unified resource adapter requires `host.Swarm.ClusterID`/`ClusterName` for `dockerSwarmClusterKey` to produce a stable service source ID; the mock generator was leaving those fields empty so all generated services were dropped. Anchor every mock Swarm host to a single named cluster (`mock-swarm-cluster-1` / `edge-swarm`) so manager and worker hosts share Swarm identity and their services deduplicate correctly across managers. Live mock survey now exposes 15 docker-service rows (was 0). 2. **Docker Swarm services UI restored.** The `/docker/services` sub-tab is back. `DockerPageSurface` mounts a `PlatformResourceTable` with the canonical operator toolbar (search + status chips + counter); `dockerPageModel.ts` re-introduces the services bucket; the model test asserts the three-tab shape and the services bucket. 3. **TrueNAS Systems / Overview sub-tab restored.** Re-survey of the canonical adapter confirms `truenas.FixtureRecords` already emits the top-level TrueNAS appliance as a unified `agent` row tagged with the `truenas` platform (see `internal/truenas/provider.go:: truenasRecordsFromSnapshot`). TrueNAS now defaults to `/truenas/overview` and the page model exposes a `systems` bucket. 4. **VMware fixture inventory scaled to a mature SMB lab.** `internal/vmware/fixtures.go::appendEdgeClusterFixtures` programmatically appends an Edge DC with 3 more ESXi hosts (esxi-05..07), 12 more VMs across Tier 1 / Stateful / Workstations / Observability / Archive tiers (mixed healthy/warning/powered-off, mixed Linux/Windows guest OS), and 4 more datastores (VMFS / NFS41 / vSAN / cold-iSCSI). Live mock survey now shows 43 VMs (was 31), 18 agents (was 15), and 60 storage rows (was 55) across two datacenters. 5. **TrueNAS / vSphere Storage source filter chip suppression.** `StoragePageControls` gains a `suppressSourceFilter` prop and `Storage.tsx` automatically applies it whenever `forcedSourceFilter` is set, so platform-page embeds no longer render the now-locked Source filter chip alongside the operator toolbar. Resource survey under the new mock baseline (live `/api/resources`): - TOTAL 342 unique resources (was 307) - app-container: 75, storage: 60, system-container: 44, vm: 43, pod: 40, physical_disk: 19, agent: 18, docker-service: 15, k8s-deployment: 14, docker-host: 5, network-endpoint: 5, pbs: 2, pmg: 1, k8s-cluster: 1 Browser verification (Playwright, chromium, live mock-mode dev runtime): - 9 tests pass. Every populated sub-tab — Docker Hosts / Containers / Swarm services, Kubernetes Clusters / Nodes / Pods / Deployments, TrueNAS Systems / Storage / Apps, vSphere Hosts / VMs / Storage — asserts both populated canonical rows AND a visible operator search input. Targeted vitest (77 files / 358 tests) + Go tests (./internal/vmware, ./internal/mock, ./internal/monitoring) all green. Contracts updated: - `storage-recovery.md` Shared Boundaries: TrueNAS defaults to the Systems overview now that the canonical adapter emits a TrueNAS- platform agent row; `suppressSourceFilter` auto-applies under `forcedSourceFilter`. - `unified-resources.md` Extension Points: same; the canonical TrueNAS adapter emits the appliance as a unified resource so the builder default lands on a populated Systems sub-tab. - `Storage.test.tsx` extended with the source-filter suppression contract assertion. |
||
|---|---|---|
| .. | ||
| internal | ||
| README.md | ||
| status.schema.json | ||
Pulse v6 Release Control
This folder is the current active release profile under the evergreen Pulse release control plane.
The evergreen control-plane files live one level up:
docs/release-control/CONTROL_PLANE.mddocs/release-control/control_plane.jsondocs/release-control/control_plane.schema.json
Start With These Control Files
../CONTROL_PLANE.md(evergreen governance, active-profile selection, and active-target rules)../control_plane.json(machine-readable active profile and active target)internal/SOURCE_OF_TRUTH.md(stable human governance, readiness-assertion design rules, and locked decisions)internal/RELEASE_PROMOTION_POLICY.md(canonical stable-versus-prerelease promotion rules, rollout criteria, and rollback expectations)internal/status.json(live lane state, coverage-gap discovery records, readiness derivation rules, the active readiness assertion catalog, lane-to-subsystem ownership, structured evidence references, typed lane/subsystem decision records, and canonical ordered lists)status.schema.json(machine-readable contract for thestatus.jsonshape)internal/subsystems/registry.json(machine-readable subsystem ownership, explicit shared-ownership exceptions, and proof routing)internal/subsystems/registry.schema.json(machine-readable contract for the subsystem registry shape, shared-ownership declarations, and unordered-list uniqueness)
status.json reporting every lane as target-met means the tracked v6
repo-hardening work is at target. It does not, by itself, mean Pulse v6 is
ready to cut a prerelease or approve stable/GA while phase-blocking
readiness_assertions, open_decisions, or release_gates remain unresolved.
Use python3 scripts/release_control/status_audit.py --pretty for the current
derived repo_ready, rc_ready, and release_ready summary.
Use status.json.coverage_gaps for active product-scope discovery records when
the current lane map does not model a durable surface cleanly enough yet.
Use status.json.candidate_lanes for the machine-readable promotion plan that
turns durable coverage gaps into explicit future lane splits, additions, or
expansions.
The current highest-ranked surfaced candidate is policy-aware data governance.
Use status.json.work_claims for the active lease-style reservation list that
keeps multiple agents from picking the same governed slice at the same time.
Record the claim immediately once the slice is chosen, and if an agent rolls
straight from one slice to another it should replace the claim in the same
status.json edit so the live reservation set never drops to a misleading
no-owner gap.
Support-only slices should still reserve the owning lane, candidate lane,
coverage gap, or narrower governed item, and the claim summary should say why
the plumbing is required for that governed surface.
Candidate lanes should point at the owning target from
docs/release-control/control_plane.json so lane-expansion work is routed to
an explicit initiative.
Use python3 scripts/release_control/status_audit.py --pretty to see any
derived candidate_lane_queue entries when agents need a ranked next pick for
the lane-expansion target.
Use that same audit output to see the available_candidate_lane_queue, active
claims, expired claims, and any claim conflicts before taking a new slice.
Use status.json.readiness_assertions for the active required assertion set, its proof references, and any executable proof_commands that readiness assertion guardrails run.
Use docs/release-control/control_plane.json for the active profile and active
target that sit above this profile.
Use python3 scripts/release_control/control_plane_audit.py --check to enforce
that the active target stays current and does not remain active after its
completion rule is already satisfied.
Supporting governance file:
CONSOLIDATION_MAP.md(legacy-doc demotion and archival map)RETIREMENT_AUDIT_2026-02-27.md(file-by-file audited retirement decisions)internal/CANONICAL_DEVELOPMENT_PROTOCOL.md(canonical subsystem development protocol)internal/PULSE_ACCOUNT_PORTAL_SPEC.md(canonical Pulse Account portal IA, ownership boundaries, and candidate-lane scope)internal/RELEASE_PROMOTION_POLICY.md(customer-facing release-train contract forstableversus the prereleasercchannel)internal/HIGH_RISK_RELEASE_VERIFICATION_MATRIX.md(manual verification runbook for trust-critical release gates)internal/RC_TO_GA_REHEARSAL_TEMPLATE.md(human record template for the non-publish GA rehearsal run)internal/subsystems/*.md(per-subsystem contracts: truth, shared boundaries, extension points, forbidden paths, completion obligations)
Useful helper tools:
python3 scripts/release_control/contract_audit.py --checkfor structured subsystem contract metadata, explicit cross-subsystem dependency declarations, shared-boundary declarations, required sections, and canonical path references Shared-boundary entries must match the exact registry-derived sentence shape, not freeform prose. Local pre-commit runs the v6 machine audits with staged control-file content so validation is based on the actual index content being committed. Local pre-commit also blocks partial staging for hook-sensitive governance files underdocs/release-control/v6/,scripts/release_control/,internal/repoctl/,.husky/pre-commit, and.github/workflows/canonical-governance.yml, because those checks still execute or structurally read working-tree content locally.python3 scripts/release_control/status_audit.py --checkValidates lane evidence, readiness assertions, release gates, decision records, and derived repo/release readiness.python3 scripts/release_control/readiness_assertion_guard.py --active-target --proof-type automatedRuns the machine-declared proof commands for automated assertions required by the active target phase straight fromstatus.json.readiness_assertions.python3 scripts/release_control/readiness_assertion_guard.py --active-target --proof-type hybridRuns any executable hybrid proof commands required by the active target phase, without replacing the linked manual release gates.python3 scripts/release_control/registry_audit.py --checkpython3 scripts/release_control/subsystem_lookup.py <path> [<path> ...] --pretty --leanfor subsystem ownership, proof routing, exact contract-focus lines, and compact lane context without pulling the full governance payload into every lookup Omit--leanwhen you explicitly need the full decision, release-gate, and status-summary payload.python3 scripts/release_control/work_claim.py --kind <KIND> --id <ID> --summary <SUMMARY> --agent-id <AGENT_ID> --prettyReserve or renew exactly one governed slice in a shared checkout before mutation without hand-editingstatus.json.python3 scripts/release_control/worktree_base.py --base-branch <BASE_BRANCH> --prettyEnsures the canonical clean landing worktree exists for the base branch before an isolated mutating slice begins.python3 scripts/release_control/worktree_claim.py --kind <KIND> --id <ID> --summary <SUMMARY> --agent-id <AGENT_ID> --prettyReserves a governed mutating slice and creates a dedicated git worktree for it, isolating hooks, staged scope, and dirty state to that slice.python3 scripts/release_control/worktree_finish.py --base-branch <BASE_BRANCH> --prettyLands a finished isolated slice back onto the canonical clean landing worktree for the base branch.
For governed runtime changes, the completion guard also requires any staged
contract update to touch a substantive contract section such as Purpose,
Canonical Files, Shared Boundaries, Extension Points, Forbidden Paths,
Completion Obligations, or Current State, not just metadata.
Local pre-commit formatting is intentionally scoped to staged files so unrelated
dirty worktree files are not mutated during commit.
The staged Go formatter updates the git index directly and avoids broad
restaging, so partially staged files do not silently absorb unrelated hunks.
Local pre-commit also blocks any unstaged edits to hook-sensitive governance
files, so working-tree-only governance changes cannot make local validation
disagree with the committed tree.
The old release-control orchestrator and loop tooling are retired. Direct, repo-aware sessions are now the only supported control-plane execution path. Post-release work should keep using this same profile until the control plane promotes a new active target such as stabilization, polish, or a named feature initiative.
Active Repo Scope
status.json.scope.control_plane_repo is pulse, and
status.json.scope.repo_catalog is the canonical machine-readable repo map for
the active workspace.
pulse: core desktop/runtime repo and canonical v6 release-control authoritypulse-pro: commercial operations, checkout, license-server, and relay-serverpulse-enterprise: closed-source enterprise and paid runtime featurespulse-mobile: mobile client, relay pairing, approvals, and local auth/state
Ignored for v6 control:
pulse-5.1.xpulse-refactor-streams
Lean-Mode Rule
For v6 execution, agents must read ../CONTROL_PLANE.md and
../control_plane.json first, then SOURCE_OF_TRUTH.md and status.json.
Open other docs only when direct evidence is needed for the active task.
For canonical subsystem work, the next file to open after those two is
internal/CANONICAL_DEVELOPMENT_PROTOCOL.md, followed by the relevant file under
internal/subsystems/.