carlos / platform Public

WIP claim Plan 14 Part 3 checkpoint 8 (not for merge)

E3 (moved from track E): root failure book, verified retry, canonical settings; E3 J4 family tests; cross-boot audit for generation identities; H2 at 75.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Paul Campbell pushed by claude agent, operated by paul@keymail.dev 070222cd13cffd424bec0faead3f40c3d0e1b4a4 parent 708ff51
23 files changed, +1359 −42
  • internal/host/agent.go +3 −3
  • internal/host/plan14_root_failures_root_linux_test.go +137 −0
  • internal/host/plan14_root_failures_test.go +281 −0
  • internal/host/rootgeneration_kernel_linux.go +41 −15
  • internal/host/rootgeneration_reboot_devices_root_linux_test.go +132 −0
  • internal/host/rootgenerations_launch.go +17 −6
  • internal/host/rootmigration_production_linux.go +3 −0
  • internal/host/rootupdates.go +254 −0
  • internal/host/updatesroot.go +10 −2
  • internal/host/updatesroot_test.go +4 −1
  • internal/provision/plan14_input_inventory_test.go +1 −1
  • internal/provision/plan14_p3_census_test.go +5 −0
  • internal/provision/testdata/plan14-root-reads-p3.tsv +35 −4
  • internal/release/adopt.go +29 −2
  • internal/release/rootgenerationpins.go +16 −2
  • internal/release/rootgenerations.go +2 −1
  • internal/release/rootupdates.go +84 −0
  • internal/rollout/failures.go +10 −5
  • internal/rollout/rootfailures.go +156 −0
  • internal/rootstate/persistent.go +18 −0
  • internal/rootstate/persistent_linux.go +66 −0
  • internal/rootstate/persistent_other.go +7 −0
  • internal/rootstate/persistent_test.go +48 −0

CI failed — run details

CI log
amadan: log truncated — showing the last 467036 bytes of 581474
    plan14_input_inventory_test.go:424: J4	internal/host/restart.go	restartGenPass	E1+E3	linux:internal/host/restart.go:restartRequestLeg	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/rootexecution_read.go	rootExecutionRead	D	linux:internal/host/rootexecution_read.go:productionClaimLocal.checkRootParticipation	Production root observer selects the descriptor-checked participation reader.
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_creation.go	rootRestartRequestSource.creation	E1	linux:internal/host/roothistory_creation.go:rootHistoryCreation	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers.
    plan14_input_inventory_test.go:424: J4	internal/release/refusal.go	ReadRefusal	E1+E3	linux:internal/host/buildstate.go:buildStates.heldWakeInput	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart.go	rootRestartRouteWith	B3	linux:internal/host/agent.go:runAdoptUnderRootRelease	rev3=merge-ruling-6;basis=Select main stamped-unit effects before binding dispatch without a census; ordinary routes still bypass census and record reads.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationCurrentBinding	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationKernel.absent	rev3=PROPOSED-p3;run=8;identity=root generation recovery uid 0;basis=reopens retained executable through checked ancestry and compares persistent filesystem, handle, ownership and mount attachment before adapting only the transient scanner device identities
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootview.go	FenceView.admit	G	linux:internal/hostguard/guard.go:Guard.With	rev3=PROPOSED-p3;identity=root claim controller construction uid 0;basis=read-only root view applies same predecessor-completion requirement as locked admission
    plan14_input_inventory_test.go:424: J4	internal/rollout/rootfailures.go	InitializeRootFailures	E3+G	linux:internal/host/rootupdates.go:initializeMigrationFailures	rev3=PROPOSED-p3;run=8;identity=offline root migration uid 0;basis=creates a new random root book only under explicit migration authority, preserving bounded legacy denies without legacy clears
    plan14_input_inventory_test.go:424: J4	internal/host/rootroute.go	proofBindingSource.needsRestart	B3	linux:internal/host/rootrestart.go:productionRootRestartChecks	Named units use authoritative deployment or root-owned local sources; ordinary recordless routes retain derived-unit dispatch.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/inventory_expected.go	StopInventoryDB.SnapshotRequest	C	linux:internal/host/rootinventory.go:ClaimRootHTTP.commitRootInventoryPending	Expose inventory revision and LastRequest for exact root commit recovery after receipt pruning.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_requirements.go	type generationRecord	E2	linux:internal/host/rootgeneration_inventory.go:type generationInventory	E30: derive route and ordinary-instance state-container requirements from schema- and shape-validated canonical deployment records bound to retained installation incarnation; include record contents and ETag in both source reads and the certificate digest. Missing, mismatched, omitted or changed evidence refuses without retiring pins. Fixtures: TestPlan14GenerationRequiredArtifacts, TestPlan14GenerationProductionModeGate. Production fixed-path witness TestPlan14GenerationRequiredArtifactsRootRunner is runner-pending. Timer classes, parked artifacts, positive empty-installation evidence and running-tenant containment remain incomplete.
    plan14_input_inventory_test.go:424: J4	internal/activator/containment.go	ExecBackend.spawnInCgroupAtTier	E2	linux:internal/activator/backend_exec.go:ExecBackend.seedChild	E40: claim-enabled raw backend refuses unsupported direct, placed and legacy-control launches before spawn. Claims-off body unchanged. TestPlan14GenerationBackendDirectBoundary, TestPlan14GenerationBackendControlBoundary, TestPlan14GenerationBackendAuxiliaryBoundary; each guard has an independent behavioral mutation. Agent-side refusal is not root reservation or containment evidence.
    plan14_input_inventory_test.go:424: J4	internal/activator/containment.go	ExecBackend.startRole	E2	linux:internal/activator/backend_exec.go:ExecBackend.spawnUnitFrom	E40: claim-enabled raw backend refuses unsupported direct, placed and legacy-control launches before spawn. Claims-off body unchanged. TestPlan14GenerationBackendDirectBoundary, TestPlan14GenerationBackendControlBoundary, TestPlan14GenerationBackendAuxiliaryBoundary; each guard has an independent behavioral mutation. Agent-side refusal is not root reservation or containment evidence.
    plan14_input_inventory_test.go:424: J4	internal/host/restartscope.go	bounceScopedRoutes	E1+E3	linux:internal/host/restart.go:restartRequestLeg	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalmigration_linux.go	JournalService.CheckLegacyMigration	C	linux:internal/host/claimjournal_migration.go:checkClaimJournalMigration	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/claimparticipation.go	productionClaimLocal.Prepare	D	linux:internal/host/claimassembly.go:ClaimAssembly.Build	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/writer.go	Writer.Published	C	linux:internal/host/claimwakeassembly.go:ClaimWakeAssembly.Build	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationPathRef	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationLinkRef	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor_publication.go	acceptRootSeedsPublication	F	linux:internal/host/rootseedsfloor.go:refreshRootSeedsFloor	rev3=PROPOSED-p3;identity=normal carlos adopt and system apply remote floor refresh, uid 0;basis=under stable floor lock, retains only verified nonregressing signed seeds publication; no publisher or activation switch added
    plan14_input_inventory_test.go:424: J4	internal/host/movesstage.go	heldReleaseStaged	C+E1	linux:internal/host/movesstage.go:heldReleaseHooksVia	root-route;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootgenerations_launch.go	generationLaunchPermit.check	E2	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.launchLocked	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_source.go	readRootFloorProjection	F	linux:internal/host/guardarm.go:RunSystemGuardArm	rev3=PROPOSED-p3;identity=carlos agent in carlos-edge.service uid carlos;basis=selects moves public root projection for checked advertisement reader
    plan14_input_inventory_test.go:424: J4	internal/host/claimrelocationrelease.go	RelocationReleaseReceipts.Complete	C+G	linux:internal/host/relocationreleases.go:verifyDischargedReceipt	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/empty_census.go	EmptyInstallationCensus.CheckLocal	C	linux:internal/host/claimassembly.go:ClaimAssembly.Build	Delegates strict empty census with no allowed row; only root registered-row recovery supplies a specific ownership exception.
    plan14_input_inventory_test.go:424: J4	internal/release/pins.go	SettingsRefs	E2	linux:internal/release/pins.go:BoxPins	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/claimconstruction.go	var openClaimRootAuthority	C	linux:internal/host/claimconstruction.go:OpenProductionClaimAssembly	root installation and fence authority; registration and recovery; agent RPC lock ordering
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.armFloor	F	linux:internal/host/systemapply.go:systemApplier.Run	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=normal update refreshes root moves and seeds histories in census mode; unknown history remains unacknowledged; no recovery or boot refresh
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_kernel_linux.go	stopIdentity	C+G	linux:internal/host/claimstop_kernel_linux.go:scanStopCgroupsMode	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor.go	rootSeedsFloorDir	F	linux:internal/host/rootmovesfloor_boot.go:withRootFloorGuardCandidate	rev3=PROPOSED-p3;identity=root adopt refresh, root system update/recovery and root guard floor readers, uid 0;basis=selects fixed seeds namespace separate from moves retained floor
    plan14_input_inventory_test.go:424: J4	internal/host/claimcensus.go	claimUnitCensus	C+G	linux:internal/host/claimcensus.go:claimGlobalSharedPaths	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/relocationowners.go	relocationBeforeAdmission	C	linux:internal/host/relocationowners.go:RelocationSource.Open	Before-admission requires certified release or explicitly lost and fenced source; preserves independent claim evidence.
    plan14_input_inventory_test.go:424: J4	internal/host/guardtransaction.go	systemApplier.checkGuardRecovery	D	linux:internal/host/systemapply.go:systemApplier.Run	Claims-on or retained root census uses root exclusion; claims-off with no census preserves main participation and recovery behavior. PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/root.go	Guard.AbandonRootInventory	C	linux:internal/host/rootinventory.go:ClaimRootHTTP.recoverRootInventory	Clear only an exact pending intent proved superseded, retaining quarantine and all prior denials.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/rolelaunch.go	LaunchJournal.UnitIntentions	C	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.launchLocked	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/inventoryscope.go	ValidateAgentInventory	C	linux:internal/hostbox/reconcile_adapter.go:ReconcileAdapter.Retire	root-route PROPOSED E46: captured claim selection and root journal mutation; root RPC outside service host exclusion; SQL/route data never grants root authority. Executing identity: service controller; root for inventory/retirement callbacks.
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	materializeHeld	C+E1+E2	linux:internal/release/materializeheld.go:MaterializeHeldUnderWithPins	root-route;kept=C,E1;scope=protected-decision-only E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/host/relocatepass.go	NewRelocationRuntime	C+D	linux:internal/host/relocatepass.go:startRelocationPass	Relocation runtime binds verified enrollment, source, participant and typed stop/fence providers; generic placement stays legacy.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory.go	RootHistory.readRecord	E1	linux:internal/release/roothistory.go:RootHistory.read	Root reconstruction reads exact durable records and preserves pending restrictions during signed replacement. Fixtures: TestPlan14ReconstructionReplacement, TestPlan14ReconstructionReplacementCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_creation.go	productionCreationHistory	E1	linux:internal/host/claimlaunch_production.go:WithProductionClaimLaunch	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers. PROPOSED E45: root enforces census-gated release ordering, bounded acquisition and scoped recovery; registry timer primitives preserve supplied identity but producer integration remains pending.
    plan14_input_inventory_test.go:424: J4	history_cli.go	historyReadFile	E1	linux:history_cli.go:historyCommandWithSave	E17: operator saves exact signed authorization and challenge before delivery, resumes without renewal, and verifies enrolled-root exact completion. Existing proof branches are unchanged. Tests: TestPlan14HistoryOperatorWorkflow, TestPlan14HistoryOperatorConflicts, TestPlan14HistoryOperatorExactCompletion, TestPlan14HistoryWorkflowProcessCrash, TestPlan14HistoryCommandResume, TestPlan14HistorySavedFiles, TestPlan14HistoryCLIDispatch.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration.go	rootMigration.write	G	linux:internal/host/rootmigration.go:rootMigration.run	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=serializes migration phase records through checked private store durability
    plan14_input_inventory_test.go:424: J4	internal/hostbox/stopinventory_db.go	StopInventoryDB.ReadStopInventory	C	linux:internal/hostbox/empty_census.go:EmptyInstallationCensus.checkLocal	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/movesfloor_linux.go	movesDir.removedDuringOpen	F	linux:internal/host/movesfloor_linux.go:movesDir.lockNamed	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/units/carlos-config-sync.service	external	B3+C+D+E1	linux:internal/host/bootstrap.go:var unitsFS	root-input;kept=B3,C,D,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootrecovery_rebind.go	ClaimRootHTTP.serveRecoveryRebind	C	linux:internal/host/claimretire_transport.go:ClaimRootHTTP.ServeHTTP	root installation and fence authority; recovery rebind and timer identity
    plan14_input_inventory_test.go:424: J4	internal/registry/registry.go	routeArgs	E3	linux:internal/registry/registry.go:Registry.Upsert	rev3=census-ruling-seeded-instances;basis=the registry's SQLite side, as carlos: in the agent (/opt/carlos/carlos agent, carlos-edge.service) and in the registry child (carlos __registry-child, which a root pass forks as the service user), wherever a route is inserted: Upsert, the cold handover restore and the import journal's inserts: the bind list from Registry.Upsert's body (and RestoreClaimRows'), with seed_source and import_gate added; E3, the same family as Registry.Upsert, whose body it came from
    plan14_input_inventory_test.go:424: J4	internal/caps/converge.go	Ops.checkStateDirShape	E4	linux:internal/caps/converge.go:Converge	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/coldhandover.go	LaunchJournal.HasInstallationEffects	C	linux:internal/hostbox/coldhandover.go:ColdHandover.Run	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalservice.go	NewJournalService	C	linux:internal/host/claimconstruction.go:OpenProductionClaimAssembly	root-input
    plan14_input_inventory_test.go:424: J4	proof_cli.go	runProof	E1	linux:main.go:main	E17: operator saves exact signed authorization and challenge before delivery, resumes without renewal, and verifies enrolled-root exact completion. Existing proof branches are unchanged. Tests: TestPlan14HistoryOperatorWorkflow, TestPlan14HistoryOperatorConflicts, TestPlan14HistoryOperatorExactCompletion, TestPlan14HistoryWorkflowProcessCrash, TestPlan14HistoryCommandResume, TestPlan14HistorySavedFiles, TestPlan14HistoryCLIDispatch.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalservice.go	JournalService.Execute	C	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	root installation and fence authority; registration and recovery; agent RPC lock ordering
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootview.go	Guard.fenceLocked	C+G	linux:internal/hostguard/recoveryfence.go:Guard.ResumeFence	rev3=PROPOSED-p3;identity=carlos instance-control, root control service uid 0; denial views also consumed by carlos agent uid carlos;basis=projects root-only migration denials into agent admission snapshot without trusting local hostguard records
    plan14_input_inventory_test.go:424: J4	internal/hostguard/record_unix.go	recordDir.read	C	linux:internal/hostguard/recoveryfence.go:Guard.PendingFences	root installation/fence backend and lock-free agent projection; establishment blocked; draft incomplete
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootbroker.go	RootBroker.recoverSettlement	D	linux:internal/hostexec/rootbroker.go:RootBroker.Recover	Recovery serializes settlement with in-flight requests and requires cleanup, exact conditional release and CC9. TestPlan14ExecutionRecoverySettlesWithoutControllerToken and TestPlan14ExecutionRecoveryJoinsRemoteWrite.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_inventory.go	generationOwner	E2	linux:internal/host/rootgeneration_inventory.go:generationReconciler.reconcile	E24: independent root installation and launch enumeration, exact reservation reconciliation and fresh quiescent whole-version-tree kernel census; missing sources, open unreserved launches, foreign namespaces and uncontained tasks refuse. Production pin source certifies this evidence before returning pins. Fixtures: TestPlan14GenerationInventoryCompleteness, TestPlan14GenerationInventoryPinConsumer, TestPlan14GenerationInventoryLifecycle, TestPlan14GenerationInventoryProcessCrash, TestPlan14GenerationKernelCensusUnknownReference, TestPlan14GenerationLaunchInventory, TestPlan14GenerationReaderDoesNotInitialize, TestPlan14GenerationInstallationInventory. Checked production source/kernel witnesses passed on the E27 root runner. E29 physical-payload and installed-unit witnesses passed on the controller runner; E30 required-artifact witness pending.
    plan14_input_inventory_test.go:424: J4	internal/host/rootlaunchverifier.go	var participationRelease	E2	linux:internal/host/rootlaunchverifier.go:registerProductionLaunchVerifier	PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner. PROPOSED E45: root enforces census-gated release ordering, bounded acquisition and scoped recovery; registry timer primitives preserve supplied identity but producer integration remains pending.
    plan14_input_inventory_test.go:424: J4	internal/host/claimproduction.go	readProductionRosterRow	C+G	linux:internal/host/movessources.go:productionRosterRegion	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalpath.go	checkJournalPath	C	linux:internal/hostbox/launchjournal.go:OpenLaunchJournal	root-input
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/transaction.go	Ledger.lockTransaction	D+F	linux:internal/rootparticipation/ledger.go:Ledger.Acquire	rev3=PROPOSED-p3;identity=root system apply/recover uid 0;basis=reuses transaction exclusion only for the identical root store; foreign stores refuse
    plan14_input_inventory_test.go:424: J4	internal/host/relocationattempts.go	relocationAttemptReader.ReadAttempt	C	linux:internal/host/claimlaunch_authority.go:ClaimLaunchRoot.authoritativeAttempt	Root attempt adapter cross-checks operation, executor and holder tuple with fresh claim; agent reservation metadata remains accepted legacy payload within this mixed declaration.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor.go	rootMovesFloors.projection	F	linux:internal/host/rootmovesfloor_boot.go:rootFloorPrevVerdict	rev3=PROPOSED-p3;identity=carlos system apply/recover and root adopt, systemd root units or offline CLI, uid 0;basis=matches public acceptance to private generation, identity and retained componentwise maximum
    plan14_input_inventory_test.go:424: J4	internal/host/claimproduction.go	claimAdminTokens.With	C+G	linux:internal/host/claimproduction.go:claimServingLaunchSource	root installation/fence backend and lock-free agent projection; establishment blocked; draft incomplete
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	MaterializeHeldUnder	C+E1+E2	linux:internal/host/relocationinstall.go:ClaimAssembly.relocationInstall	root-route;kept=C,E1;scope=protected-decision-only E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/release/proof.go	FileSHA256	B3	linux:internal/host/proofobserve.go:proofObserver.observe	root-input;kept=B3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_parked.go	generationRetirementRecords	E2	linux:internal/host/rootgeneration_parked.go:generationReadRetirements	E38: reconcile completed root retirement against the retained stop receipt and exact inventory; inspect parked identities, require retired rows absent or an independently inventoried successor, and retain generation pins. Fixtures: TestPlan14GenerationParkedPayload, TestPlan14GenerationParkedCrash, TestPlan14GenerationParkedKeepsReservation, TestPlan14GenerationParkedReadback; TestPlan14GenerationParkedRootRunner is runner-pending. Timer producer matches retained entries once and preserves successors on replay: TestPlan14GenerationTimerRetirement. No claims-off path changes.
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/relocation.go	ReplaceTarget	C	linux:internal/hostrelocate/worker.go:Worker.replace	Replacement verifies target termination fence and allocates a new install stamp, preserving unopened prepared build reuse.
    plan14_input_inventory_test.go:424: J4	internal/console/apirestartscope.go	routeWithHost	E1+E3	linux:internal/console/apirestartscope.go:resolveRestartScope	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/wakepolicy.go	WakePhase	C	linux:internal/hostbox/wakepolicy.go:Policy.check	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/ratchet.go	DigestRatchet.note	E1	linux:internal/release/ratchet.go:DigestRatchet.Admit	root-input;kept=E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/empty_census.go	EmptyInstallationCensus.checkHeldInventory	C	linux:internal/hostbox/empty_census.go:EmptyInstallationCensus.CheckHeld	Held-inventory validator requires exact box/enrollment, ownership and single materialized route.
    plan14_input_inventory_test.go:424: J4	internal/instancectl/peer_tuple_linux.go	procStart	C+G	linux:internal/instancectl/peer_tuple_linux.go:AuthenticatePeerTuple	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimparticipation_completed.go	ClaimAssembly.completedRelocationDischarge	C+D	linux:internal/host/claimparticipation.go:productionClaimLocal.cleanup	Completed-relocation discharge requires exact claim completion and verified retirement receipt; unread evidence refuses cleanup.
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/relocation.go	JournalRelease	C	linux:internal/hostrelocate/participant.go:Participant.Step	Release transition binds executor session, enrollment and immutable stop receipt reference; replication position payload remains legacy.
    plan14_input_inventory_test.go:424: J4	internal/caps/caps.go	Set.UnmarshalJSON	E4	linux:cli.go:readCapabilities	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/pins.go	readGenerationsSeq	E2	linux:internal/release/pins.go:ReadGenerations	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/relocating.go	ConvertCommittedLanding	C	linux:internal/hostrelocate/worker.go:Worker.ConvertLanding	Committed landing conversion verifies exact target termination fence and record commit before transferring installation authority.
    plan14_input_inventory_test.go:424: J4	internal/release/consumedfence_linux.go	lockConsumedPublish	E3	linux:internal/release/consumedfence.go:publishConsumed	root-input;kept=E3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/seedsfloor.go	judgeSeedsPrev	F	linux:internal/host/seedsfloor.go:rootJudgeSeedsPrev	rev3=census-ruling-seeded-instances;basis=system apply (/opt/carlos/carlos system apply, or carlos.prev system apply, with --recover at boot; carlos-system-update.service and carlos-system-recover.service; root) through notePrev, and the adopt pass (/opt/carlos/carlos adopt in every mode; carlos-adopt.service, carlos-config-sync.service, carlos-restart.service and carlos-stage.service; root) through rootJudgeSeedsPrev: seeds twin of the moves floor (F,J4); deny-only; Part 3 F2-F4 must cover the seeds floor alongside the moves floor.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationcompleteness.go	generationHash	E2	linux:internal/release/rootgenerationcompleteness.go:GenerationEvidence.valid	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationcompleteness.go	type GenerationEvidence	E2	linux:internal/host/rootgeneration_inventory.go:generationReconciler.reconcile	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/host/movesheldrelease_root.go	movesHeldReleaseRoot.authority	C+E1	linux:internal/host/movesheldrelease_root.go:movesHeldReleaseRoot.publishRelease	Held publication independently binds holder, operation, canonical deployment incarnation and hold; registry is a checked candidate.
    plan14_input_inventory_test.go:424: J4	internal/registry/registry.go	normalizeRoute	E3	linux:internal/registry/registry.go:Registry.Upsert	rev3=census-ruling-seeded-instances;basis=the registry's SQLite side, as carlos: in the agent (/opt/carlos/carlos agent, carlos-edge.service) and in the registry child (carlos __registry-child, which a root pass forks as the service user), wherever Upsert's SQLite arm and the import swap run: the insert defaults from Registry.Upsert's body; E3, the same family as Registry.Upsert, whose body they came from
    plan14_input_inventory_test.go:424: J4	internal/host/caps_pass.go	stampDBPaths	E4	linux:internal/host/caps_pass.go:capabilityPass	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/rolloutdeclined.go	failureHolds.heldHost	E1+E3	linux:internal/host/rolloutdeclined.go:failureHolds.skipHost	root-route
    plan14_input_inventory_test.go:424: J4	internal/registry/registry.go	Registry.Upsert	E3	linux:cli.go:runAdd	rev3=census-ruling-seeded-instances;basis=the registry's SQLite side, as carlos: in the agent (/opt/carlos/carlos agent, carlos-edge.service) and in the registry child (carlos __registry-child, which a root pass forks as the service user); the remote arm, unchanged, in the process that holds a remote handle, root passes included: main's body with its insert defaults moved to normalizeRoute and its bind list to routeArgs, and two columns added (seed_source, import_gate); the conflict clause, with the tenant-change rule E3 names, is unchanged; main's E3 authority retained
    plan14_input_inventory_test.go:424: J4	internal/host/rootinventory_state_linux.go	ClaimRoleAssembly.prepareStateInventory	C	linux:internal/host/rootinventory_state_linux.go:ClaimRoleAssembly.prepareStateRemote	root installation and fence authority; registration and recovery; agent RPC lock ordering
    plan14_input_inventory_test.go:424: J4	internal/release/pins.go	GenerationPins	E2	linux:internal/release/adopt.go:PassFilter	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_inventory.go	type generationInventory	E2	linux:internal/host/rootgeneration_inventory.go:productionLocalGenerationInventory	E38: reconcile completed root retirement against the retained stop receipt and exact inventory; inspect parked identities, require retired rows absent or an independently inventoried successor, and retain generation pins. Fixtures: TestPlan14GenerationParkedPayload, TestPlan14GenerationParkedCrash, TestPlan14GenerationParkedKeepsReservation, TestPlan14GenerationParkedReadback; TestPlan14GenerationParkedRootRunner is runner-pending. Timer producer matches retained entries once and preserves successors on replay: TestPlan14GenerationTimerRetirement. No claims-off path changes.
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/transaction.go	type heldTransaction	D+F	linux:internal/rootparticipation/transaction.go:TransactionLedger	rev3=PROPOSED-p3;identity=root system apply/recover uid 0;basis=binds transaction reuse to a root-opened ledger and live callback lifetime
    plan14_input_inventory_test.go:424: J4	internal/rootstate/persistent.go	PersistentIdentity.Same	A+E2	linux:internal/host/rootgeneration_kernel_linux.go:generationCurrentBinding	rev3=PROPOSED-p3;run=8;identity=root generation verification uid 0;basis=device and mount numbers are exact only within one boot; cross-boot equality requires persistent evidence and unchanged attachment topology;rev3=PROPOSED-p3;run=8;identity=root generation verification uid 0;basis=device and mount numbers are exact only within one boot; cross-boot equality requires persistent evidence and unchanged attachment topology
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/relocation.go	PinFailover	C	linux:internal/hostrelocate/worker.go:Worker.Step	Failover pinning requires recorded source fence and completed acknowledgement barrier.
    plan14_input_inventory_test.go:424: J4	internal/host/movesfiles.go	relocationPreparedManifest	C	linux:internal/host/movesfiles.go:movesFiles.preparedBinding	Prepared installation manifest is bound to authoritative claim digest, local-install receipt, box and install stamp before use.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/inventory_registration.go	ReconcileAdapter.RegisterLanding	C	linux:internal/host/claimassembly.go:ClaimAssembly.Build	Landing client snapshots and registers outside host lock, then revalidates record/claim/revision before activation.
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	ResponseKey	E1	linux:internal/historyreadback/readback.go:ReadStatus	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_delivery.go	RootHistory.ReceiveReconstruction	E1	linux:internal/host/roothistory_maintenance.go:rootHistoryMaintenance.run	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_readback.go	type historyReadbackPublisher	E1	linux:internal/host/roothistory_readback.go:publishRootHistoryReadback	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/root.go	type InstallationArtifacts	E2	linux:internal/hostguard/root.go:type RootInstallation	E37: retain independently initialized state-directory and timer requirements in the root installation transaction; preserve them through crash/reopen and rebind. Unknown history cannot certify completeness. Recommit under root-host exclusion before generation use. Canonical record and root retained obligations constrain agent candidate lists; timer enumeration is deny-only. Pre-flight 33, 80, 83. Fixtures: TestPlan14GenerationRequiredArtifacts, TestPlan14GenerationRegistryRows, TestPlan14RootTimerInventory, TestPlan14InventoryRequirementsRegistration, TestPlan14InventoryRequirementsUnknownAndRatchet, TestPlan14InventoryArtifactsCrash, TestPlan14InventoryRequirementsHistoryIdentity. Changed RequiredArtifacts and ExactRetirement root-runner witnesses await acceptance; remaining E2 launch/parked/containment integration is incomplete.
    plan14_input_inventory_test.go:424: J4	internal/host/claimjournal_migration.go	migrateClaimJournalsWith	G	linux:internal/host/claimjournal_migration.go:RunSystemJournalMigrate	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=opens verified actor and root journal then selects full offline census or unchanged legacy journal import
    plan14_input_inventory_test.go:424: J4	internal/host/seedsfloor.go	systemApplier.armSeedsFloor	F	linux:internal/host/systemapply.go:systemApplier.armFloor	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=normal apply refreshes root seeds history on census participants; nonparticipants retain legacy sync; never called by recovery or boot
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.floorAllowsForward	F	linux:internal/host/systemapply.go:systemApplier.recoverIfNeeded	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=network-free forward recovery checks both locally retained protocol release minima
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.layoutReversalReasons	F	linux:internal/host/systemapply.go:systemApplier.install	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=root participation and retained floor contribute refusal reasons before layout reversal
    plan14_input_inventory_test.go:424: J4	internal/host/claimroleassembly_other.go	ClaimRoleAssembly.PrepareState	C+G	darwin:internal/host/claimwakeassembly.go:ClaimWakeAssembly.Build	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/heldstage.go	retireEndedHeldRefusals	C+E1	linux:internal/host/heldstage.go:heldStagePass	root-input;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalservice.go	journalIdentity	C	linux:internal/hostbox/generationinventory.go:LaunchJournal.GenerationLaunches	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostexec/local_unix.go	openDir	D	linux:internal/hostexec/local_unix.go:openLocal	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/relocationinstall.go	ClaimAssembly.relocationVerifyLocal	C	linux:internal/host/relocationassembly.go:ClaimAssembly.RelocationEffects	Installation verification combines claim-bound receipt, captured stamp, held row and exact prepared files manifest; cannot first-register at installed.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootserving.go	RootBroker.servingView	D	linux:internal/hostexec/rootbroker.go:RootBroker.Execute	Tokenless serving needs completed migration and settled root state; preinstallation grants no privileged effect.
    plan14_input_inventory_test.go:424: J4	internal/rootstate/state_linux.go	Open	A	linux:internal/host/movesheldrelease_production.go:WithProductionMovesHeldRelease	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_retirement.go	type generationRetirement	E2	linux:internal/host/rootgeneration_retirement.go:productionRetireGenerations	E21: release then host exclusion; root installation and exact settled launch with irreversibly closed writers bind retirement before and after independent kernel verification. Production invokes it from the census-only pin source. Fixtures: TestPlan14GenerationRetirementRootBinding, TestPlan14GenerationRetirementAfterLostStarted, TestPlan14GenerationRetirementBindingProcessCrash, TestPlan14GenerationRetirementCensusGate. Privileged production opener acceptance remains pending.
    plan14_input_inventory_test.go:424: J4	internal/host/seedsfloor.go	withSeedsFields	F	linux:internal/host/edgesfile.go:edgesFileLoop	rev3=PROPOSED-p3;identity=carlos agent in carlos-edge.service uid carlos;basis=root participation selects checked root projection; legacy agent mirror remains unchanged for nonparticipants
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	const RootRestartAbsent	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.run	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart_requests.go	rootRestartRequests.consume	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.run	E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_pass.go	passConfig.bindProof	E1	linux:internal/release/adopt.go:adoptHost	E1 canonical binding selection and recheck; durable attempt precedes effects; only independent installed observation settles and retires the exact target refusal.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootread.go	ReadRoot	D	linux:internal/host/rootexecution_read.go:readRootExecution	fix1;basis=Queries broker OFD lock ownership without acquiring a lock; rechecks unchanged durable evidence and monotonic expiry.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootinventory_settle.go	Guard.SettleRootInventory	E2	linux:internal/host/rootinventory_timer_recovery.go:ClaimRootHTTP.settleTimerInventory	PROPOSED E46: exact persisted root pending intent only; finish journal after effect matches, preserve denial, no new SQL effect or network claim authority. Executing identity: root instance-control or root participation/update.
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_root.go	ClaimLaunchRoot.stop	C+E2+G	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.Serve	root-input;kept=C,G;scope=protected-decision-only PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/rootstate/state_linux.go	directory.Remove	A+B3	linux:internal/host/rootrollback.go:captureRollback	descriptor-checked root rollback capability identity/removal
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_source.go	refreshRootMovesFloor	F	linux:internal/host/systemapply.go:systemApplier.armFloor	rev3=PROPOSED-p3;identity=carlos system apply/recover and root adopt, systemd root units or offline CLI, uid 0;basis=normal adopt/update combines remote object with independent deny-only legacy evidence under root floor lock
    plan14_input_inventory_test.go:424: J4	internal/host/relocatepass.go	newCompletionRuntime	C+D	linux:internal/host/relocatepass.go:NewRelocationRuntime	Completion-only runtime treats registry and journal hostnames as discovery and verifies claim and bound identity before discharge.
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_writers.go	ClaimAssembly.WritersStopped	C+G	linux:internal/host/relocationassembly.go:ClaimAssembly.RelocationEffects	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/namedrecovery_active.go	namedUnitRecovery.recover	B3+E1	linux:internal/host/namedrecovery_pass.go:namedUnitRecovery.passOption	E13: signed recovery allows unknown history but preserves usable refusals, including retained originals; verified later promotion clears only D1. Health recording is independent of program recording; minting requires a census. Fixtures: TestPlan14RecoveryUnknownHistory, TestPlan14RecoveryKnownRefusal, TestPlan14RecoveryOriginalRefusalWithUnknownHistory, TestPlan14RootHistoryVerifiedRetryBeforeAttempt, TestPlan14ProgramFailureStillRecordsHealth, TestPlan14RootHistoryMintCensus.
    plan14_input_inventory_test.go:424: J4	internal/host/rootexecution_runtime.go	newClaimExecutionRuntime	D	linux:internal/host/claimassembly.go:NewProductionRootClaimStop	Positive claim or fence mismatches are terminal; transport failures retain bounded retry eligibility. PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_inventory.go	readProductionGenerationInventory	E2	linux:internal/host/rootgeneration_inventory.go:productionLocalGenerationInventory	PROPOSED E46: root participation/recovery reads retained root census, fences, inventory and kernel evidence; no deployment-store network dependency. SQL remains deny-only.
    plan14_input_inventory_test.go:424: J4	internal/host/claimowners.go	ClaimOwnerDispatch.Select	C+G	linux:internal/host/claimconstruction.go:OpenProductionClaimAssembly	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rolloutdeclined.go	failureHolds.refusal	E1+E3	linux:internal/host/rolloutdeclined.go:failureHolds.gate	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/relocationinstall.go	relocationActivationReader.Read	C	linux:internal/host/rootinstallation.go:rootInstallationHostApp	Activation reader obtains a fresh claim and applies typed relocation installation authority before activation.
    plan14_input_inventory_test.go:424: J4	internal/host/claimmoveaccess.go	claimMoveLaunchSource	C+G	linux:internal/host/claimproduction.go:ProductionClaimOwnerProvider.OpenClaimOwners	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/unitsettle.go	systemdUnits.Exe	B3	linux:internal/host/unitsettle.go:settleUnit	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rolloutdeclined.go	failureHolds.skipGet	E1+E3	linux:internal/host/agent.go:convergeLegFor	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/typedpark_linux.go	TypedParker.CaptureArtifact	C	linux:internal/hostbox/coldhandover.go:ColdHandover.retireIntended	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostexec/controller.go	Open	D	linux:internal/host/claimparticipation.go:productionClaimLocal.prepareLegacyWith	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart.go	productionRootRestartChecks	B3+E1	linux:internal/host/agent.go:runAdoptUnderRootRelease	Signed named-unit recovery is independent of release and health history. Root rechecks canonical source, unit, process, signed target and trusted live pointer; captures attempt authority before publication; verifies readiness and resumes without repeated effects. Fixtures: TestPlan14SignedActiveFixIgnoresHistory, TestPlan14SignedActiveFixAuthority, TestPlan14SignedFixSupersedesOlderAttempt, TestPlan14ActiveRecoveryProcessCrash, TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14SignedRestartRequiresTrustedLiveLink.
    plan14_input_inventory_test.go:424: J4	internal/host/agent.go	fastConvergeLoop	B3	linux:internal/host/agent.go:runAgent	rev3=census-ruling-carlos-run;basis=the agent (/opt/carlos/carlos agent, carlos-edge.service, user carlos): main's body with the runs worker's boot pass and pass called after reconcile; read sites unchanged, offsets moved; main's B3 authority retained
    plan14_input_inventory_test.go:424: J4	internal/release/sweep.go	SweepStaged	E2	linux:internal/host/versionsweep.go:sweepStagedVersions	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/movespass.go	movesWorker.hostBlocked	C	linux:internal/host/movesfinal.go:movesWorker.sweepFinalJournals	root-input;kept=C;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/activator/rolelaunch_root_linux.go	RoleLaunch.startIsolated	C	linux:internal/activator/rolelaunch_linux.go:RoleLaunch.Start	root installation and fence authority; registration and recovery; agent RPC lock ordering
    plan14_input_inventory_test.go:424: J4	internal/host/rootinventory.go	ClaimRootHTTP.commitRootInventoryPending	E2	linux:internal/host/rootinventory.go:ClaimRootHTTP.withRootInventoryHistory	E37: retain independently initialized state-directory and timer requirements in the root installation transaction; preserve them through crash/reopen and rebind. Unknown history cannot certify completeness. Recommit under root-host exclusion before generation use. Canonical record and root retained obligations constrain agent candidate lists; timer enumeration is deny-only. Pre-flight 33, 80, 83. Fixtures: TestPlan14GenerationRequiredArtifacts, TestPlan14GenerationRegistryRows, TestPlan14RootTimerInventory, TestPlan14InventoryRequirementsRegistration, TestPlan14InventoryRequirementsUnknownAndRatchet, TestPlan14InventoryArtifactsCrash, TestPlan14InventoryRequirementsHistoryIdentity. Changed RequiredArtifacts and ExactRetirement root-runner witnesses await acceptance; remaining E2 launch/parked/containment integration is incomplete. PROPOSED E44: root timer intention must precede materialization; exact registration and row identity required; root retirement cannot infer ownership from registry enumeration. Tests: TestPlan14TimerIntentionBeforeMaterialization, TestPlan14GenerationTimerRetirement; root timer intention, sync-failure retry and retirement acceptance. Scheduler producer wiring remains incomplete. PROPOSED E46: local root installation obligations, exact root intention and inventory revision; service SQL is a deny-only consistency check. Executing identity: root instance-control or root participation/update.
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	StageHeldVerified	C+E1+E2	linux:internal/host/movesstage.go:var heldStageVerified	root-route;kept=C,E1;scope=protected-decision-only E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/host/relocationreleases.go	ReleaseObligation.Complete	C	linux:internal/host/relocationeffects.go:RelocationEffects.Release	Release obligation completion reads fresh claim before verifying and recording root stop receipt.
    plan14_input_inventory_test.go:424: J4	internal/host/rootfloor_healthy.go	rootMovesFloors.healthy	F	linux:internal/host/rootfloor_healthy.go:rootMovesFloors.capLegacy	rev3=PROPOSED-p3;identity=root health acceptance, normal floor refresh and local seeds-bound readers, uid 0;basis=reads bounded private root health record; missing or malformed record supplies no legacy cap
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_writers_linux.go	rootInstallationCoverage	C+G	linux:internal/host/claimstop_writers_linux.go:verifyNoProcessAt	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/typedpark_linux.go	openParent	C	linux:internal/hostbox/typedpark_linux.go:TypedParker.Park	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/pins.go	BoxPins	E2	linux:internal/release/adopt.go:PassFilter	route-and-input
    plan14_input_inventory_test.go:424: J4	internal/host/movesstage.go	heldReleaseProbeRelease	C+E1	linux:internal/host/moveswakesource.go:movesWakeSources.Open	root-route;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_startup.go	var openRootMigrationParticipation	G	linux:internal/host/rootmigration_startup.go:verifyRootMigrationStartup	rev3=PROPOSED-p3;identity=root claim controller construction uid 0;basis=fixed production participation opener remains rootparticipation.OpenForUpdate; package tests substitute explicit no-census fixtures without accessing the machine store
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_refresh.go	rootRefreshAndJudgeMovesPrev	F	linux:internal/host/movesfloor.go:rootJudgeMovesPrevWithSource	rev3=PROPOSED-p3;identity=carlos adopt root pass, root unit uid 0;basis=adopt opens deployment store then refreshes floor before any no-prev return
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor_publication.go	type rootSeedsPublication	F	linux:internal/host/rootseedsfloor_publication.go:verifyRootSeedsPublication	rev3=PROPOSED-p3;identity=root normal adopt/apply floor refresh uid 0; local bound readers uid 0;basis=domain-separated signed seeds publication binds deployment and protocol object purpose
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journaltrust_linux.go	readTrustedJournal	C	linux:internal/hostbox/coldhandover.go:ColdHandover.Recover	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootrollback_resume.go	recoverRootRestarts	B3	linux:internal/host/agent.go:runAdoptUnderRootRelease	Recover every attempt independently, skip settled writes and remove leftover capabilities.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart_requests.go	logRestartRequestError	E1	linux:internal/host/agent.go:runAdoptUnderRootRelease	E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate.
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_root.go	ClaimLaunchRoot.launchLocked	E1+E2	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.startRecorded	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals. PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/host/claimparticipation.go	productionClaimLocal.prepareLegacyWith	D	linux:internal/host/rootexecution_client.go:productionClaimLocal.prepareWith	Production selects the broker client; the old local controller path is selected only by explicit legacy test fixtures.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrollback.go	loadRollback	B3+E1	linux:internal/host/rootrestart.go:rollbackUnitRestart	Signed named-unit recovery is independent of release and health history. Root rechecks canonical source, unit, process, signed target and trusted live pointer; captures attempt authority before publication; verifies readiness and resumes without repeated effects. Fixtures: TestPlan14SignedActiveFixIgnoresHistory, TestPlan14SignedActiveFixAuthority, TestPlan14SignedFixSupersedesOlderAttempt, TestPlan14ActiveRecoveryProcessCrash, TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14SignedRestartRequiresTrustedLiveLink.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalservice.go	journalPrune	C	linux:internal/hostbox/journalservice.go:JournalService.executeWithInventory	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostguard/record_unix.go	recordDir.openRecord	C	linux:internal/hostguard/record_unix.go:recordDir.read	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/namedrecovery_pass.go	namedUnitRecovery.passOption	B3+E1	linux:internal/host/agent.go:runAdoptUnderRootRelease	Production recovery wrapper preserves main exit status for per-host failures; only remaining named routes can probe the census for history selection. Ordinary routes make no census or binding-store reads. Fixtures: TestPlan14ERecoveryOrdinaryPass, TestPlan14Fix4AdoptPerHostFailureExitsZero, TestPlan14Fix5MainEquivalence.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgenerations_launch.go	productionRootGenerations	E2	linux:internal/host/claimlaunch_production.go:WithProductionClaimLaunch	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.;rev3=PROPOSED-p3;run=8;identity=root claim launch uid 0;basis=installs mandatory persistent identity capture for root generation reservations
    plan14_input_inventory_test.go:424: J4	internal/host/restartscope.go	restartScopePass	E1+E3	linux:internal/host/restart.go:restartRequestLeg	fix1-merge-review;basis=Hands historical signed retry entries to the common verifier; unknown selectors do not widen scope.
    plan14_input_inventory_test.go:424: J4	internal/host/rootupdates.go	rootUpdateSource.resolve	E3	linux:internal/host/rootupdates.go:productionRootUpdates	rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=binds fresh record and policy to root installation and claim; reads root consumed and served evidence, verifies signed retry and pointer transitions, persists decisions before dispatch
    plan14_input_inventory_test.go:424: J4	internal/host/legacyrestart.go	rootRestartChecks.allowLegacy	B3+G	linux:internal/host/agent.go:runAdoptUnderRootRelease	rev3=merge-ruling-4;basis=Evaluate the explicit census selector; omitted test selector remains strict.
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_production.go	WithProductionClaimLaunch	E1+E2	linux:internal/host/claimstop_run.go:RunInstanceControl	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.
    plan14_input_inventory_test.go:424: J4	internal/host/rootexecution_recovery.go	recoverRootExecution	D	linux:internal/host/guardtransaction.go:var recoverPendingControllers	Claims-on or retained root census uses root exclusion; claims-off with no census preserves main participation and recovery behavior.
    plan14_input_inventory_test.go:424: J4	internal/hostops/backfill_seeds.go	CollectCensusSeeds	G	linux:internal/host/rootmigration_census.go:rootMigrationCollector.collect	rev3=census-ruling-seeded-instances;basis=no caller in the tree yet; G wires the census collector that will call it: deny-only activation input; G wires its caller and must keep it deny-only. If it ever feeds a decision that allows rather than refuses, it needs a new ruling.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationKernel.absent	E2	linux:internal/host/rootgeneration_census_linux.go:generationKernel.census	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.;rev3=PROPOSED-p3;run=8;identity=root generation kernel census uid 0;basis=uses current-boot scanner identities only after retained filesystem and handle verification; immutable reservations remain unchanged
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	type generationMount	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationMounts	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.
    plan14_input_inventory_test.go:424: J4	internal/host/movesfloor.go	rootJudgeMovesPrevWithSource	F	linux:internal/host/movesfloor.go:rootJudgePrevWithSource	rev3=PROPOSED-p3;identity=carlos adopt root pass, root unit uid 0;basis=adopt refreshes root floor only for census participants; legacy registry judgement otherwise unchanged
    plan14_input_inventory_test.go:424: J4	internal/host/proofbinding.go	proofBindingSource.prepareRollback	B3	linux:internal/host/rootrestart.go:productionRootRestartChecks	trusted deployment record and root unit binding; durable per-attempt rollback and recovery
    plan14_input_inventory_test.go:424: J4	internal/rootstate/live_linux.go	directory.HoldLive	A+D	linux:internal/rootstate/live.go:HoldLive	fix1;basis=Retains a trusted private-file descriptor under an OFD write lock; readers query conflicting OFD ownership without locking.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_production_linux.go	migrationExecutionEmpty	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=any retained execution entry other than census/locks refuses migration; conservative settled-record limitation remains
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor_publication.go	readRootSeedsBound	F	linux:internal/host/rootmovesfloor_boot.go:withRootFloorGuardCandidate	rev3=PROPOSED-p3;identity=root normal adopt/apply refresh, system apply/recover and guard floor readers, uid 0;basis=unpublished seeds supplies no bound; verified retained publication and root-capped denies determine the bound
    plan14_input_inventory_test.go:424: J4	internal/host/claimhandover_recovery.go	claimCrossBoxHandover.rebindRecoveryRows	C+G	linux:internal/host/claimhandover_recovery.go:claimCrossBoxHandover.installRecoveryInventory	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimbackfill.go	newClaimBackfill	C+G	linux:internal/host/agent.go:instancesLoop	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimparticipation.go	productionClaimLocal.participateHost	D	linux:internal/host/claimparticipation.go:productionClaimLocal.participate	Production selects the broker client; the old local controller path is selected only by explicit legacy test fixtures.
    plan14_input_inventory_test.go:424: J4	internal/registry/remote.go	serveRemote	E2	linux:internal/registry/remote.go:ServeRemote	Mixed declaration: E2 adds only the ArtifactHosts read operation; all existing dispatch and write behavior stays legacy. Original immutable legacy fingerprints retained. E32: census-only E2 completeness discovers the bounded union of route and timer hosts, including inactive orphan timers, through the service-user read-only parser. Unknown hosts refuse even with an empty root installation list; discovery supplies no authority and never removes a retained obligation. Pre-flight 33, 80, 82, 83, 89 and 90. Fixtures: TestArtifactHosts, TestRemoteReadOnlyWALRegistry, TestPlan14GenerationRegistryRows, TestPlan14GenerationRegistryProductionReader; extended TestPlan14GenerationRequiredArtifactsRootRunner remains runner-pending.
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	stageHeld	C+E1+E2	linux:internal/release/materializeheld.go:StageHeldVerifiedWithPins	root-route;kept=C,E1;scope=protected-decision-only E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/flock_unix.go	acquire	C	linux:internal/hostguard/guard.go:Guard.locked	rev3=merge-ruling-4;basis=Descriptor checks classify nonregular or foreign-owner locks as unsafe; honest contention waits with bounded exponential backoff.
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/relocation.go	CompleteRelocation	C	linux:internal/hostrelocate/worker.go:Worker.Step	Completion requires stopped probe and retains exact stop reference for successor cold handover while queuing prior installations for retirement.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart.go	rootStartRoute	B3	linux:internal/host/agent.go:runAdoptUnderRootRelease	rev3=merge-ruling-4;basis=Use main systemctl start for legacy non-NotUp recovery while retaining checked rollback when authority binds.
    plan14_input_inventory_test.go:424: J4	internal/host/proofbinding.go	proofBindingSource.recovered	B3+E1	linux:internal/host/rootrestart.go:productionRootRestartChecks	Signed named-unit recovery is independent of release and health history. Root rechecks canonical source, unit, process, signed target and trusted live pointer; captures attempt authority before publication; verifies readiness and resumes without repeated effects. Fixtures: TestPlan14SignedActiveFixIgnoresHistory, TestPlan14SignedActiveFixAuthority, TestPlan14SignedFixSupersedesOlderAttempt, TestPlan14ActiveRecoveryProcessCrash, TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14SignedRestartRequiresTrustedLiveLink.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgenerations_launch.go	rootGenerationSource.reserve	E2	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.startRecorded	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	stageFrom	E2	linux:internal/release/adopt.go:ensureStagedDigest	E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode, TestPlan14GenerationProductionModeGate, TestPlan14GenerationSnapshotPermitsFreshTree. E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/participation.go	PreinstallationParticipant	D	linux:internal/host/rootexecution_authority.go:ClaimRootHTTP.executionAuthority	D1 selects only the fresh claim executor or named target in its allowed phase; Exec is a claim field, not a process invocation. No installation authority.
    plan14_input_inventory_test.go:424: J4	internal/host/restartscope.go	applyRetries	E1+E3	linux:internal/host/restart.go:restartRequestLeg	fix1-merge-review;basis=Verifies the deployment-root signature and account/app/host/book/epoch before lifting a restriction.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationcompleteness.go	generationDigest	E2	linux:internal/release/rootgenerationcompleteness.go:RootGenerations.Certify	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/host/restart.go	restartApps	E1+E3	linux:internal/host/restart.go:restartPass	root-route
    plan14_input_inventory_test.go:424: J4	internal/release/sweep.go	LivePins	B3+E2	linux:internal/host/versionsweep.go:sweepStagedVersions	Pin root previous pointers as well as current pointers so rollback artifacts survive sweeping.
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	type stageCheck	E2	linux:internal/release/adopt.go:type passConfig	E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode, TestPlan14GenerationProductionModeGate, TestPlan14GenerationSnapshotPermitsFreshTree.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	type generationKernel	E2	linux:internal/host/rootgeneration_census_linux.go:productionGenerationKernelCensus	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance. PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationcompleteness.go	type GenerationCompleteness	E2	linux:internal/release/rootgenerationcompleteness.go:RootGenerations.Certify	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor.go	rootMovesFloors.reconstruct	F		rev3=PROPOSED-p3;identity=offline root reconstruction capability, uid 0; no production caller installed;basis=requires private root-issued box/generation/nonce token and refuses weakening; no production caller installed
    plan14_input_inventory_test.go:424: J4	internal/host/heldstage.go	heldStageRow	C+E1	linux:internal/host/heldstage.go:heldStageAuthority	root-route;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	backfillManifest	E2	linux:internal/release/adopt.go:backfillManifestDigest	E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart.go	restartOrdinaryUnit	B3	linux:internal/host/rootrestart.go:rootRestartRouteWith	rev3=merge-ruling-4;basis=No-census derived-unit try-restart is unconditional and nonfatal, matching main for absent rows and systemd lookup failures.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory.go	RootHistory.Refusals	E1	linux:internal/release/roothistory_app.go:RootHistory.MintRefusals	E1 retains independently recorded outcomes in private history before minting/reconstruction. Failure bits never clear by replay, ambiguous attempts remain restrictive, and signed reconstruction cannot erase them. Fixtures: TestPlan14IndependentRecoveryRetainsMintBarrier, TestPlan14IndependentRecoveryRecordsHistory, TestPlan14HistoryRetainsRecoveryOutcomes, TestPlan14HistoryRecoveryCannotWeaken, TestPlan14HistoryReconstructionKeepsRecovery, TestPlan14HistoryRecoveryProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_production_linux.go	randomMigrationID	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=cryptographic nonce identifies newly collected stop evidence, never authorizes a stop
    plan14_input_inventory_test.go:424: J4	internal/hostops/completion_fence.go	ProductionAuthority.completionFence	C	linux:internal/hostops/production_held_start.go:ProductionAuthority.startAppLifecycle	Completion-fence exception independently verifies enrolled box termination before bypassing completion barrier for deletion.
    plan14_input_inventory_test.go:424: J4	internal/release/rootupdates.go	RootUpdateInputs.target	E3	linux:internal/release/adopt.go:settingsTarget	rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=re-resolves canonical route before selection and persists root request decision before permitting adoption
    plan14_input_inventory_test.go:424: J4	internal/host/claimowners.go	claimServingOwners.serving	C+G	linux:internal/host/claimowners.go:claimServingOwners.Select	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/restart.go	restartPass	E1+E3	linux:internal/host/agent.go:runAdoptUnderRootRelease	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/empty_census.go	EmptyInstallationCensus.checkLocal	C+G	linux:internal/hostbox/empty_census.go:EmptyInstallationCensus.CheckLocal	Complete local census retains absence checks and only excludes explicitly root-registered row during crash recovery.
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/ledger.go	Ledger.readCensus	D	linux:internal/rootparticipation/ledger.go:Ledger.Census	Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_parked.go	productionGenerationRetirements	E2	linux:internal/host/rootgeneration_inventory.go:readProductionGenerationInventory	E38: reconcile completed root retirement against the retained stop receipt and exact inventory; inspect parked identities, require retired rows absent or an independently inventoried successor, and retain generation pins. Fixtures: TestPlan14GenerationParkedPayload, TestPlan14GenerationParkedCrash, TestPlan14GenerationParkedKeepsReservation, TestPlan14GenerationParkedReadback; TestPlan14GenerationParkedRootRunner is runner-pending. Timer producer matches retained entries once and preserves successors on replay: TestPlan14GenerationTimerRetirement. No claims-off path changes.
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_kernel_linux.go	recoveryControllerAt	C+G	linux:internal/host/claimstop_kernel_linux.go:LinuxStopKernel.RecoverStopped	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_outcomes.go	type historyRecoveryRecord	E1	linux:internal/release/roothistory_outcomes.go:RootHistory.RetainRecovery	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/rootstate/state_linux.go	directory.Sync	A+F+G	linux:internal/rootstate/state.go:Sync	rev3=PROPOSED-p3;identity=checked filesystem callers including root control/apply/migration uid 0;basis=rechecks private descriptor identity then fsyncs directory durability
    plan14_input_inventory_test.go:424: J4	internal/console/seedfloor.go	Server.seedRegionReady	F	linux:internal/console/apiinstanceimport.go:Server.handleAPIImportStopped	rev3=PROPOSED-p3;identity=carlos console serve uid carlos-console;basis=requires accepted seeds generation only from root-floor participants; mixed fleet nonparticipants retain exact legacy readiness
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	const RootGenerationsDir	E2	linux:internal/host/rootlaunchverifier.go:registerProductionLaunchVerifier	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.
    plan14_input_inventory_test.go:424: J4	internal/rootstate/state_linux.go	directory.write	A+F+G	linux:internal/rootstate/state_linux.go:directory.Write	rev3=PROPOSED-p3;identity=checked filesystem callers including root control/apply/migration uid 0;basis=rechecks descriptor and uses same validated durable write for production and privileged fault wrapper
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/production.go	OpenForUpdate	D	linux:internal/host/claimstop_run.go:RunInstanceControl	Unactivated absent census does not block update or recovery; retained census remains authoritative.
    plan14_input_inventory_test.go:424: J4	internal/release/releaseexclusion.go	type ReleaseExclusion	E2	linux:internal/host/rootlaunchverifier.go:type rootLaunchVerifier	PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner. PROPOSED E45: root enforces census-gated release ordering, bounded acquisition and scoped recovery; registry timer primitives preserve supplied identity but producer integration remains pending.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/stopinventory_db.go	StopInventoryDB.inventoryVersion	C	linux:internal/hostbox/inventory_expected.go:StopInventoryDB.Snapshot	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_timers.go	rootMigrationTimers.adopt	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=offline migration root uid 0;basis=offline migration binds the exact observed pre-claim registrations to root retained stop evidence and denies; durable intention precedes conditional registry adoption and root inventory completion
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/ledger.go	Ledger.RecoverAcquisition	D+F	linux:internal/host/rootexecution_runtime.go:newClaimExecutionRuntime	rev3=PROPOSED-p3;identity=root system apply/recover or root participation caller uid 0;basis=retains acquisition-recovery checks and census commit under the same participation transaction; no new authority from a missing record
    plan14_input_inventory_test.go:424: J4	internal/caps/converge.go	scanClaims	E4	linux:internal/caps/converge.go:Ops.checkClaimsOnDisk	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/restart.go	restartSeed	E1+E3	linux:internal/host/agent.go:fastConvergeLoop	fix1-merge-review;basis=Baselines both request logs without applying historical ordinary restarts; signed retry grants remain independently verified.
    plan14_input_inventory_test.go:424: J4	internal/host/proofbinding.go	proofBindingSource.resolve	B3	linux:internal/host/rootupdates.go:productionRootUpdates	fix1;basis=Binds deployment or root-managed named-unit evidence, trusted unit identity and digest history; registry names are hints only.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootmigration.go	migrationDenied	C+G	linux:internal/hostguard/rootmigration.go:RootAuthority.CompleteMigrationInventory	rev3=PROPOSED-p3;identity=carlos instance-control, root control service uid 0; denial views also consumed by carlos agent uid carlos;basis=old sessions at/below retained captured stamp refuse root and agent admission
    plan14_input_inventory_test.go:424: J4	internal/rootstate/state_other.go	Open	A	darwin:internal/host/movesheldrelease_production.go:WithProductionMovesHeldRelease	root-input
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/ledger.go	Ledger.idle	D	linux:internal/rootparticipation/ledger.go:Ledger.RecoverAcquisition	D3 enumerates root records and requires settled obligations plus an independently supplied launch/kernel census.
    plan14_input_inventory_test.go:424: J4	internal/host/claimwakeassembly.go	ClaimWakeAssembly.readiness	C+G	linux:internal/host/claimwakeassembly.go:ClaimWakeAssembly.Build	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_run.go	RunInstanceControl	C+D+G	linux:main.go:main	Refuse premature claim activation and continue serving recovery after per-host startup failures. PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner. PROPOSED E45: root enforces census-gated release ordering, bounded acquisition and scoped recovery; registry timer primitives preserve supplied identity but producer integration remains pending.
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_run.go	instanceRegistryHostApp	C+G	linux:internal/host/claimstop_run.go:RunInstanceControl	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootinstallation.go	rootInstallationHostApp	E2	linux:internal/host/claimstop_run.go:RunInstanceControl	E20: read the atomic root installation under the existing host exclusion without recursive lock acquisition; retain fresh claim, canonical record, signed artifact and final reservation checks. Fixtures: TestPlan14GenerationLaunchDoesNotReenterRootLock, TestPlan14GenerationLaunchRefusals, TestPlan14RootDispatchRejectsRegistryMutation.
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	restartValue	E1	linux:internal/release/rootrestart_history.go:RootRestarts.Observe	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	type passConfig	E2+E3	linux:internal/release/adopt.go:BakeDir	E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode, TestPlan14GenerationProductionModeGate, TestPlan14GenerationSnapshotPermitsFreshTree.;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0; legacy agent pass uid carlos;basis=stores the typed census-only root update provider and per-pass resolved input authority
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/relocation.go	install	C	linux:internal/hostclaim/relocation.go:ToInstalling	Install transition allocates authoritative stamp and pinned release, records target before effects and removes prior local receipt.
    plan14_input_inventory_test.go:424: J4	internal/host/guardtransaction.go	systemApplier.beginGuard	D	linux:internal/host/systemapply.go:systemApplier.Run	Claims-on or retained root census uses root exclusion; claims-off with no census preserves main participation and recovery behavior. PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner.
    plan14_input_inventory_test.go:424: J4	history_cli.go	historySync	E1	linux:history_cli.go:historySave	E17: operator saves exact signed authorization and challenge before delivery, resumes without renewal, and verifies enrolled-root exact completion. Existing proof branches are unchanged. Tests: TestPlan14HistoryOperatorWorkflow, TestPlan14HistoryOperatorConflicts, TestPlan14HistoryOperatorExactCompletion, TestPlan14HistoryWorkflowProcessCrash, TestPlan14HistoryCommandResume, TestPlan14HistorySavedFiles, TestPlan14HistoryCLIDispatch.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_containment_linux.go	generationKernel.containedBinding	E2	linux:internal/host/rootgeneration_containment_linux.go:generationKernel.containedTask	PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening. PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening. PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_outcomes.go	validHistoryRecovery	E1	linux:internal/release/roothistory_status.go:RootHistory.MigrationStatusWithSources	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	RestartBinding.valid	E1	linux:internal/release/rootrestart_history.go:RootRestarts.read	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	materializeHeldChecked	E2	linux:internal/release/materializeheld.go:serveHeldStageRequest	E23: old held-stage relay forwards the root generation source before artifact writes and outside publication exclusion. Request fields retain their prior hint/authorization checks; only root pins authorize destructive staging on census boxes. No-census source yields empty pins. Fixtures: TestPlan14GenerationLegacyRelay, TestHeldStagePassIsANoOpWithoutRequests, TestHeldStagePassDropsAnUnauthorizedBuild, TestServeHeldStageRequestsRefusesStaleAndTraversal. Production source wiring is inspected; privileged completeness is not claimed.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootmigration.go	RootAuthority.RetainMigrationDeny	C+G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=root retains old incarnation/stamp/session denial under stable per-host lock; grants no launch authority
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.Run	D+F	linux:internal/host/systemapply.go:systemApplier.runWithRelease	root-input;kept=D,F;scope=protected-decision-only PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner. PROPOSED E45: root enforces census-gated release ordering, bounded acquisition and scoped recovery; registry timer primitives preserve supplied identity but producer integration remains pending. PROPOSED E45: root enforces census-gated release ordering, bounded acquisition and scoped recovery; registry timer primitives preserve supplied identity but producer integration remains pending.
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_recovery.go	resumeHistoryRestart	B3+E1	linux:internal/host/namedrecovery_active.go:namedUnitRecovery.recover	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_production_linux.go	publishMigrationReceipt	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=reconstructs immutable key/digest from original signed receipt bytes without changing evidence time
    plan14_input_inventory_test.go:424: J4	internal/host/guardtransaction.go	legacyGuardEntries	D	linux:internal/host/guardtransaction.go:installFloorHook	Claims-on or retained root census uses root exclusion; claims-off with no census preserves main participation and recovery behavior.
    plan14_input_inventory_test.go:424: J4	internal/host/relocationinstall.go	ClaimAssembly.relocationInstall	B2+C+E2	linux:internal/host/relocationassembly.go:ClaimAssembly.RelocationEffects	Existing root inventory and installation obligations remain B2,C; E41: default relocation materializer refuses claim-mode direct stage/publication until a root-reserved relay exists. Claims-off body unchanged; already-live verified releases remain readable. TestPlan14GenerationRelocationDefaultMaterializer and TestPlan14GenerationRelocationRelayRefusal. Positive root relocation remains open.
    plan14_input_inventory_test.go:424: J4	internal/rootstate/shared_linux.go	EnsurePublicDir	A+B4	linux:internal/host/rootrestart.go:productionRootRestartChecks	fix1;basis=Creates or descriptor-repairs only a root:root 0700/0755 shared directory, without following symlinks or admitting writable/foreign parents.
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_creation.go	rootHistoryInstallation	E2	linux:internal/host/rootgeneration_inventory.go:generationReconciler.reconcile	E37: retain independently initialized state-directory and timer requirements in the root installation transaction; preserve them through crash/reopen and rebind. Unknown history cannot certify completeness. Recommit under root-host exclusion before generation use. Canonical record and root retained obligations constrain agent candidate lists; timer enumeration is deny-only. Pre-flight 33, 80, 83. Fixtures: TestPlan14GenerationRequiredArtifacts, TestPlan14GenerationRegistryRows, TestPlan14RootTimerInventory, TestPlan14InventoryRequirementsRegistration, TestPlan14InventoryRequirementsUnknownAndRatchet, TestPlan14InventoryArtifactsCrash, TestPlan14InventoryRequirementsHistoryIdentity. Changed RequiredArtifacts and ExactRetirement root-runner witnesses await acceptance; remaining E2 launch/parked/containment integration is incomplete.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/probe_unix.go	probeExisting	D	linux:internal/hostexec/probe_unix.go:probeLifetime	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	Adoptable	C+E3	linux:internal/host/proofask.go:mintAsker.tick	root-route;kept=C,E3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimwakestop.go	ClaimAssembly.localStopIdentity	C+G	linux:internal/host/claimparticipation.go:productionClaimLocal.bind	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/stopinventory_db.go	StopInventoryDB.ReadExactStopInventory	C	linux:internal/host/claimretire_transport.go:ClaimRootHTTP.retire	root-input
    plan14_input_inventory_test.go:424: J4	internal/caps/converge.go	Ops.ensureUser	E4	linux:internal/caps/converge.go:Converge	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/claimroleassembly_other.go	ClaimRoleAssembly.Launch	C+G	darwin:internal/host/claimwakeassembly.go:ClaimWakeAssembly.Build	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimunit.go	readClaimUnitSettings	C+G	linux:internal/host/bootstrap.go:bootstrapWith	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/movesinstall.go	installRun.configured	C+E1	linux:internal/host/movesinstall.go:installGeneration	Configured landing now validates root-created registration before render and held publication; source recovery keeps existing typed rebind.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/inventory_registration.go	ReconcileAdapter.registerRemote	C	linux:internal/hostbox/inventory_registration.go:ReconcileAdapter.installRemote	root installation and fence authority; registration and recovery; agent RPC lock ordering
    plan14_input_inventory_test.go:424: J4	internal/host/claimmoveaccess.go	claimMoveReadAccess.bind	C+G	linux:internal/host/claimassembly.go:ClaimAssembly.Build	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	digest	E1	linux:internal/historyreadback/readback.go:RequestKey	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_census_linux.go	generationKernel.census	E2	linux:internal/host/rootgeneration_census_linux.go:productionGenerationKernelCensus	E24: independent root installation and launch enumeration, exact reservation reconciliation and fresh quiescent whole-version-tree kernel census; missing sources, open unreserved launches, foreign namespaces and uncontained tasks refuse. Production pin source certifies this evidence before returning pins. Fixtures: TestPlan14GenerationInventoryCompleteness, TestPlan14GenerationInventoryPinConsumer, TestPlan14GenerationInventoryLifecycle, TestPlan14GenerationInventoryProcessCrash, TestPlan14GenerationKernelCensusUnknownReference, TestPlan14GenerationLaunchInventory, TestPlan14GenerationReaderDoesNotInitialize, TestPlan14GenerationInstallationInventory. Checked production source/kernel witnesses passed on the E27 root runner. E29 physical-payload and installed-unit witnesses passed on the controller runner; E30 required-artifact witness pending.
    plan14_input_inventory_test.go:424: J4	internal/host/claimmoveaccess.go	claimMoveReadAccess.Route	C+G	linux:internal/host/moveswakesource.go:movesReadRoute	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_status.go	RootHistory.MigrationStatus	E1	linux:internal/release/roothistory_status.go:RootHistory.MigrationStatusWithSources	Exact completion binds the accepted authorization digest from durable private history to enrolled-root signed readback. Pending originals, changed evidence and canonical sources cannot supply retirement completion. Fixtures: TestPlan14HistoryReconstructionCompletion, TestPlan14HistoryRetirementCompletion, TestPlan14ReadReconstructionCompletion, TestPlan14ReadRetirementCompletion, TestPlan14RecoveryRetirementProductionCallback, TestPlan14RootHistoryReconstructionCrash, TestPlan14HistoryRetirementProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_outcomes.go	RootHistory.RetainRecovery	E1	linux:internal/host/roothistory_recovery.go:rootRestartChecks.settleHistory	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_recovery_policy.go	RootHistory.recoveryDenials	E1	linux:internal/release/roothistory.go:RootHistory.Blocks	E13: signed recovery allows unknown history but preserves usable refusals, including retained originals; verified later promotion clears only D1. Health recording is independent of program recording; minting requires a census. Fixtures: TestPlan14RecoveryUnknownHistory, TestPlan14RecoveryKnownRefusal, TestPlan14RecoveryOriginalRefusalWithUnknownHistory, TestPlan14RootHistoryVerifiedRetryBeforeAttempt, TestPlan14ProgramFailureStillRecordsHealth, TestPlan14RootHistoryMintCensus.
    plan14_input_inventory_test.go:424: J4	internal/host/legacyrestart.go	legacyRollbackRestart	B3	linux:internal/host/rootrestart.go:rollbackUnitRestart	rev3=merge-ruling-6;basis=Restore main reset-failed, restart and D1 settle even after an operator reset; retain main error wrapping and diagnostics.
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	type RestartBinding	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.run	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor.go	rootMovesFloors.selector	F	linux:internal/host/rootmovesfloor_source.go:readRootProtocolProjection	rev3=PROPOSED-p3;identity=root apply/recover/adopt units uid 0 and agent edges publisher carlos-edge.service uid carlos;basis=strict bounded canonical protocol/release line supplies independent crash-surviving deny
    plan14_input_inventory_test.go:424: J4	internal/host/claimproduction.go	productionClaimRoster.Actor	C+G	linux:internal/hostbox/identity.go:IdentityProvider.Verify	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/rootstate/state.go	type Store	A+B3	linux:internal/host/claimassembly.go:NewProductionRootClaimStop	descriptor-checked root rollback capability identity/removal
    plan14_input_inventory_test.go:424: J4	internal/host/bootstrap.go	bootstrapWith	A+C+G	linux:internal/host/bootstrap.go:RunBootstrap	root-input;kept=A,C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/proofnamed.go	proofBindingSource.trustedBytes	B3	linux:internal/host/proofnamed.go:proofBindingSource.record	fix1;basis=Authorizes recordless units only from descriptor-checked root configuration, installed console guard evidence, root history or the matching root update capture.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationGroupGone	E2	linux:internal/host/rootgeneration_kernel_linux.go:productionGenerationAbsence	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance. PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/recoveryfence.go	Guard.recordNames	C	linux:internal/hostguard/recoveryfence.go:Guard.PendingFences	root installation/fence backend and lock-free agent projection; establishment blocked; draft incomplete
    plan14_input_inventory_test.go:424: J4	internal/provision/rootrecord.go	FindRecordByHost	B3+C	linux:internal/host/rootrecord_claim.go:rootClaimRecord	Discovery delegates to the collision-checking index and still reads the selected record afresh.
    plan14_input_inventory_test.go:424: J4	internal/release/rootbake.go	RootHistory.LoadBake	E1	linux:internal/release/adopt.go:PassFilter	E1 strict root bake and app completeness revisions; backward clocks refuse and visible records are durably recommitted.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_parked.go	generationPhysicalPayloads	E2	linux:internal/host/rootgeneration_inventory.go:generationReconciler.reconcile	E38: reconcile completed root retirement against the retained stop receipt and exact inventory; inspect parked identities, require retired rows absent or an independently inventoried successor, and retain generation pins. Fixtures: TestPlan14GenerationParkedPayload, TestPlan14GenerationParkedCrash, TestPlan14GenerationParkedKeepsReservation, TestPlan14GenerationParkedReadback; TestPlan14GenerationParkedRootRunner is runner-pending. Timer producer matches retained entries once and preserves successors on replay: TestPlan14GenerationTimerRetirement. No claims-off path changes. PROPOSED E46: Root rejects unfinished live inventory but accepts intended timer entries only behind exact completed retirement.
    plan14_input_inventory_test.go:424: J4	internal/host/claimowners.go	claimServingOwners.launch	C+G	linux:internal/host/claimowners.go:claimServingOwners.Select	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostops/move_fence_release.go	MoveRecoveryGrant.ReleaseFencedTarget	C+D	linux:internal/console/movesrecovery.go:Server.movesRecovery	Public release wrapper delegates verified target-fence release and returns its typed outcome; record-first close remains in the reviewed implementation.
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/disk.go	Disk.withParticipation	D+F	linux:internal/hostfloor/disk.go:Disk.WithParticipation	rev3=PROPOSED-p3;identity=root system apply/recover or root participation caller uid 0;basis=uses a live root-minted scoped ledger only for its original store; otherwise opens the ordinary census; absent census keeps legacy behavior
    plan14_input_inventory_test.go:424: J4	internal/host/rootrecord_claim.go	rootClaimRecord	C	linux:internal/host/rootinstallation.go:rootInstallationHostApp	root installation and fence authority; registration and recovery; agent RPC lock ordering
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalmigration_linux.go	JournalService.journalMigrationMarker	C	linux:internal/hostbox/journalmigration_linux.go:JournalService.MigrateLegacy	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/consumedfence.go	publishGate	E3	linux:internal/release/consumedfence.go:publishConsumed	root-route;kept=E3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/reconcile.go	Reconciler.Install	C	linux:internal/hostbox/reconcile_adapter.go:ReconcileAdapter.Install	root installation and fence authority; registration and recovery; agent RPC lock ordering
    plan14_input_inventory_test.go:424: J4	internal/release/consumedfence.go	publishConsumed	E3	linux:internal/release/adopt.go:settingsTarget	root-route;kept=E3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/updatetarget.go	NextConsumed	E3	linux:internal/release/adopt.go:settingsTarget	Next consumed settings reset foreign decisions and stamp canonical tenant plus effective update policy.
    plan14_input_inventory_test.go:424: J4	internal/host/movesheldrelease.go	heldReleaseVia.publish	C+E1	linux:internal/host/movesstage.go:heldReleasePublished	root-route;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_requirements.go	generationRequiredInventory	E2	linux:internal/host/rootgeneration_inventory.go:readProductionGenerationInventory	E37: retain independently initialized state-directory and timer requirements in the root installation transaction; preserve them through crash/reopen and rebind. Unknown history cannot certify completeness. Recommit under root-host exclusion before generation use. Canonical record and root retained obligations constrain agent candidate lists; timer enumeration is deny-only. Pre-flight 33, 80, 83. Fixtures: TestPlan14GenerationRequiredArtifacts, TestPlan14GenerationRegistryRows, TestPlan14RootTimerInventory, TestPlan14InventoryRequirementsRegistration, TestPlan14InventoryRequirementsUnknownAndRatchet, TestPlan14InventoryArtifactsCrash, TestPlan14InventoryRequirementsHistoryIdentity. Changed RequiredArtifacts and ExactRetirement root-runner witnesses await acceptance; remaining E2 launch/parked/containment integration is incomplete. PROPOSED E46: local root installation obligations, exact root intention and inventory revision; service SQL is a deny-only consistency check. Executing identity: root instance-control or root participation/update.
    plan14_input_inventory_test.go:424: J4	internal/host/claimjournal_migration_linux.go	quiesceLegacyClaimJournals	C+G	linux:internal/host/claimjournal_migration.go:migrateClaimJournalsWith	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/console/apirestartscope.go	resolveRestartScope	E1+E3	linux:internal/console/apirestartscope.go:Server.handleAPIRestartScope	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/claimparticipation_stale.go	participationCleanupRead.Read	D	linux:internal/host/rootinstallation.go:rootInstallationHostApp	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/moveswakesource.go	movesWakeSources.Open	B2+C	linux:internal/host/claimproduction.go:ProductionClaimOwnerProvider.OpenClaimOwners	Moves owner source wires authenticated root relay and root healthy-history proof gate with verified actor.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgenerations_launch.go	rootGenerationSource.resolve	E2	linux:internal/host/rootgenerations_launch.go:rootGenerationSource.reserve	E20: read the atomic root installation under the existing host exclusion without recursive lock acquisition; retain fresh claim, canonical record, signed artifact and final reservation checks. Fixtures: TestPlan14GenerationLaunchDoesNotReenterRootLock, TestPlan14GenerationLaunchRefusals, TestPlan14RootDispatchRejectsRegistryMutation. PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.;rev3=PROPOSED-p3;run=8;identity=root claim launch uid 0;basis=captures persistent executable and tree proofs only after canonical installation and signed artifact verification under exclusion
    plan14_input_inventory_test.go:424: J4	internal/host/rootexecution_read.go	readRootExecution	D	linux:internal/host/rootexecution_read.go:rootExecutionRead	Descriptor-checked root opener shared by root Prepare/Check, initial launch authorization and final executable checks; no agent fallback.
    plan14_input_inventory_test.go:424: J4	internal/host/guardarm.go	RunSystemGuardArm	F	linux:system.go:runSystem	rev3=PROPOSED-p3;identity=carlos system guard-arm, offline CLI uid 0;basis=root guard-arm checks retained census floor before installing guard; no census retains main
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	RootRestarts.Begin	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.consume	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/launchjournal.go	LaunchJournal.mutate	C	linux:internal/hostbox/rolelaunch.go:LaunchJournal.CloseWriters	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationKernel.task	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationKernel.absent	E25: keep the descriptor-listing handle open through inspection, including when scanning the current process. Check every listed descriptor against paths and artifact identities. Fixtures: TestPlan14GenerationKernelOwnDescriptors and TestPlan14GenerationKernelReferences. Root-runner acceptance passed at E27: TestPlan14GenerationKernelCensusRootRunner and TestPlan14GenerationKernelRetirementRootRunner. PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/host/claimcleanup_identity.go	claimCleanupEnrollment.configureSigner	C+G	linux:internal/host/claim_evidence_wiring.go:ClaimOwnerBindings.claimEvidenceCoordinator	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/rootstate/persistent_linux.go	Persistent	A+E2	linux:internal/host/rootgenerations_launch.go:productionRootGenerations	rev3=PROPOSED-p3;run=8;identity=root generation capture and verification uid 0;basis=captures filesystem ID, export handle, boot, inode, ownership and stable mount attachment from caller-checked descriptor;rev3=PROPOSED-p3;run=8;identity=root generation capture and verification uid 0;basis=captures filesystem ID, export handle, boot, inode, ownership and stable mount attachment from caller-checked descriptor
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_timers.go	rootMigrationTimers.load	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=offline migration root uid 0;basis=reads only the root-private saved adoption intention, requiring the same host, incarnation, stamp, session and enrolled box; preserves exact registration IDs on retry
    plan14_input_inventory_test.go:424: J4	internal/host/claimwakeassembly.go	claimSocketReady	C+G	linux:internal/host/claimwakeassembly.go:ClaimWakeAssembly.Build	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimmovefence.go	claimBoxFenceVerifier	C+G	linux:internal/host/claimassembly.go:ClaimAssembly.Build	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.restoreVersion	F	linux:internal/host/systemapply.go:systemApplier.recoverIfNeeded	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=census rollback and recovery completion use signed previous executable identity; legacy sidecar remains only without census
    plan14_input_inventory_test.go:424: J4	internal/host/claimroleassembly_other.go	ClaimRoleAssembly.Prelaunch	C+G	darwin:internal/host/claimwakeassembly.go:ClaimWakeAssembly.Build	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimwakeassembly.go	ClaimWakeAssembly.Build	C+G	linux:internal/host/claimassembly.go:ClaimAssembly.Build	route-and-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostguard/generationinventory.go	RootAuthority.GenerationInstallations	E2	linux:internal/host/rootgeneration_inventory.go:generationInventoryAt	E37: retain independently initialized state-directory and timer requirements in the root installation transaction; preserve them through crash/reopen and rebind. Unknown history cannot certify completeness. Recommit under root-host exclusion before generation use. Canonical record and root retained obligations constrain agent candidate lists; timer enumeration is deny-only. Pre-flight 33, 80, 83. Fixtures: TestPlan14GenerationRequiredArtifacts, TestPlan14GenerationRegistryRows, TestPlan14RootTimerInventory, TestPlan14InventoryRequirementsRegistration, TestPlan14InventoryRequirementsUnknownAndRatchet, TestPlan14InventoryArtifactsCrash, TestPlan14InventoryRequirementsHistoryIdentity. Changed RequiredArtifacts and ExactRetirement root-runner witnesses await acceptance; remaining E2 launch/parked/containment integration is incomplete.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration.go	rootMigrationSnapshot.preflight	G	linux:internal/host/rootmigration_startup.go:verifyRootMigrationState	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=refuses active moves, unfinished seeds, incomplete inventories or mismatched migration identity before effects
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationcompleteness.go	const generationCompletenessKey	E2	linux:internal/release/rootgenerationpins.go:RootGenerations.Reservations	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/release/proofgate.go	ProofGate.bindRecording	B3	linux:internal/release/roothistory_pass.go:passConfig.bindProof	root-route;kept=B3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_maintenance.go	type rootHistoryMaintenance	E1	linux:internal/host/roothistory.go:openRootHistory	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/rolloutdeclined.go	failureHolds.heldRoute	E1+E3	linux:internal/host/rolloutdeclined.go:failureHolds.skipRoutes	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/registryrows.go	RegistryRows.RetireRowsJournal	C	linux:internal/hostbox/typedretire.go:TypedRetirement.Run	root-route PROPOSED E46: captured claim selection and root journal mutation; root RPC outside service host exclusion; SQL/route data never grants root authority. Executing identity: service controller; root for inventory/retirement callbacks.
    plan14_input_inventory_test.go:424: J4	internal/rootstate/live.go	HoldLive	A+D	linux:internal/hostexec/rootbroker.go:RootBroker.write	fix1;basis=Requires the store to implement broker-only liveness holding and a non-acquiring query; unsupported stores fail closed.
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor.go	judgeRootSeedsPrev	F	linux:internal/host/rootseedsfloor.go:rootRefreshAndJudgeSeedsPrev	rev3=PROPOSED-p3;identity=carlos adopt and system apply refresh, uid 0; no recovery or boot-selector call;basis=evaluates signed current and prev seeds support under shared durable floor judge and independent downgrade completeness
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_retirement.go	RootHistory.RecoveryRetired	E1	linux:internal/host/recoveryrefusals.go:checkUnresolvedRecoveries	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/namedrecovery.go	type namedUnitRecovery	E1	linux:internal/host/namedrecovery.go:productionNamedUnitRecovery	E13: signed recovery allows unknown history but preserves usable refusals, including retained originals; verified later promotion clears only D1. Health recording is independent of program recording; minting requires a census. Fixtures: TestPlan14RecoveryUnknownHistory, TestPlan14RecoveryKnownRefusal, TestPlan14RecoveryOriginalRefusalWithUnknownHistory, TestPlan14RootHistoryVerifiedRetryBeforeAttempt, TestPlan14ProgramFailureStillRecordsHealth, TestPlan14RootHistoryMintCensus.
    plan14_input_inventory_test.go:424: J4	internal/instancectl/claimexec.go	ClaimUnits.prepareExecGate	C+E2+G	linux:internal/instancectl/claimunit.go:ClaimUnits.start	root-input;kept=C,G;scope=protected-decision-only PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	MaterializeHeldUnderWithPins	E2	linux:internal/host/movesheldrelease_root.go:movesHeldReleaseRoot.publishRelease	E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/host/claim_evidence_producer.go	ConfigureStopEvidence	C+G	linux:internal/host/claim_evidence_wiring.go:ClaimOwnerBindings.claimEvidenceCoordinator	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	PassFilter	B3+E1+E2+E3	linux:internal/release/adopt.go:Pass	Signed named-unit recovery is independent of release and health history. Root rechecks canonical source, unit, process, signed target and trusted live pointer; captures attempt authority before publication; verifies readiness and resumes without repeated effects. Fixtures: TestPlan14SignedActiveFixIgnoresHistory, TestPlan14SignedActiveFixAuthority, TestPlan14SignedFixSupersedesOlderAttempt, TestPlan14ActiveRecoveryProcessCrash, TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14SignedRestartRequiresTrustedLiveLink. E7 applies merge ruling 4: unbound no-census routes use the legacy pass and restart; ordinary candidates make no binding store call. Fixtures: TestR2UnguardedERecoveryUpdate, TestR2UnguardedERecoveryIncidentRecipe, TestPlan14ERecoveryBindingRefusalKeepsPromotedFix. E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode.;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0; legacy agent pass uid carlos;basis=resolves protected route inputs before filters, recovery and dispatch on census boxes and bypasses service-owned failure opener only there
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_app.go	RootHistory.AppRefusals	E1	linux:internal/release/roothistory_app.go:RootHistory.MintRefusals	E1 retains independently recorded outcomes in private history before minting/reconstruction. Failure bits never clear by replay, ambiguous attempts remain restrictive, and signed reconstruction cannot erase them. Fixtures: TestPlan14IndependentRecoveryRetainsMintBarrier, TestPlan14IndependentRecoveryRecordsHistory, TestPlan14HistoryRetainsRecoveryOutcomes, TestPlan14HistoryRecoveryCannotWeaken, TestPlan14HistoryReconstructionKeepsRecovery, TestPlan14HistoryRecoveryProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationcompleteness.go	RootGenerations.invalidateCompleteness	E2	linux:internal/release/rootgenerationcompleteness.go:RootGenerations.Certify	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/host/claimrecoveryreceipt.go	claimCrossBoxHandover.recoveryStopReceipt	C+G	linux:internal/host/claimhandover_recovery.go:claimCrossBoxHandover.recoveryEvidence	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/buildstate.go	settingsApply	E3	linux:internal/host/buildstate.go:buildStates.wakeTarget	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/proofnamed.go	proofBindingSource.record	B3	linux:internal/host/rootroute.go:proofBindingSource.needsRestart	Record key selection uses indexed discovery; local root-managed unit authority is unchanged.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_inventory.go	generationPayloadBindings	E2	linux:internal/host/rootgeneration_inventory.go:generationReconciler.reconcile	E29: current and retained predecessor payloads must have completed materialization for every artifact kind, including route and timer. Tests: TestPlan14GenerationRegistryPayloadUnfinished, TestPlan14GenerationPayloadCompleteness, TestPlan14GenerationPayloadRetainedPredecessor. E27 checked root reader passed; extended physical/root-unit witnesses passed at E29. Required-artifact derivation and running-tenant containment remain incomplete. PROPOSED E46: local root installation obligations, exact root intention and inventory revision; service SQL is a deny-only consistency check. Executing identity: root instance-control or root participation/update.
    plan14_input_inventory_test.go:424: J4	internal/host/proofobserve.go	productionProofObserver	B3+B4	linux:internal/host/agent.go:runAdoptUnderRootRelease	Reuse per-pass record discovery; continue independent observation and root health writes.
    plan14_input_inventory_test.go:424: J4	internal/host/agent.go	agentCheckedUnitRestart	B3	linux:internal/host/agent.go:adoptLoop	kept=B3;scope=agent-only-legacy-behavior-preservation;not-root-authority
    plan14_input_inventory_test.go:424: J4	internal/console/boxselect.go	Server.selectMoveBoxes	F	linux:internal/console/apiinstancemove.go:Server.handleAPIInstanceMoveRequest	rev3=PROPOSED-p3;identity=carlos console serve, console.service uid carlos-console;basis=applies accepted/generation refusal only to advertised root-floor participants; legacy selection retains main exactly
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootmigration_inventory.go	RootAuthority.MigrationInstallations	C+G	linux:internal/host/rootmigration_startup.go:verifyRootMigrationStartup	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0; also root claim startup uid 0;basis=read-only root installation enumeration includes incomplete records and never repairs before preflight
    plan14_input_inventory_test.go:424: J4	internal/host/claimretire_local.go	claimArtifactRetirement.Retire	C+G	linux:internal/host/claimconstruction.go:OpenProductionClaimAssembly	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootinventory_install.go	ClaimRootHTTP.rootLandingRoute	C+E3	linux:internal/host/rootinventory.go:ClaimRootHTTP.commitRootInventoryPending	Root derives flat landing row and settings from authoritative record and app policy after target/phase binding.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationcompleteness.go	RootGenerations.writeCompleteness	E2	linux:internal/release/rootgenerationcompleteness.go:RootGenerations.Certify	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/rootstate/authorityfile_linux.go	OpenAuthorityFile	E2	linux:internal/host/rootmovesfloor_boot.go:rootFloorJournalPresent	E33: census-only generation journal reads accept private root-owned ancestry without chmod or repair. Every ancestor remains descriptor-checked, root-owned and non-writable by group/other; leaves remain single-link regular root-owned files, checked for DB/WAL/SHM. Public-file callers remain unchanged. Fixtures: TestPlan14AuthorityFilePrivateAncestors, TestPlan14AuthorityFileAbsoluteBoundary; TestPlan14GenerationPrivateJournalRootRunner and TestPlan14GenerationRequiredArtifactsRootRunner are runner-pending. Pre-flight 76, 78, 82 and 89.
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	verifyHeldLive	B2+C+E1	linux:internal/release/materializeheld.go:VerifyHeldLive	Live held verification consumes the configured root proof gate and verifies pinned bytes under the same held lock.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/coldhandover.go	Guard.AbandonColdHandover	C	linux:internal/hostbox/coldhandover.go:ColdHandover.Recover	Fresh successor claim permits abandonment; retire barrier stamp and retain predecessor receipt.
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	WithRunningVersion	B3	linux:internal/host/agent.go:runAdoptUnderRootRelease	rev3=fix3-Astra-P2;basis=Root-only hook supplies verified current or previous running authority before replacing pointers.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart_requests.go	productionRestartRequestPass	E1	linux:internal/host/agent.go:runAdoptUnderRootRelease	E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgenerations_launch.go	generationLaunchPermit.started	E2	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.launchLocked	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals. PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationpins.go	stageGenerationSibling	E2	linux:internal/release/adopt.go:backfillManifestDigest	E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/host/movesfloor.go	readBeneathLine	F	linux:internal/host/movesfloor.go:syncLocalFloor	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/typedpark_linux.go	TypedParker.verifyDestination	C	linux:internal/hostbox/typedpark_linux.go:TypedParker.Park	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/pins.go	GenerationVersions	E2	linux:internal/host/versionsweep.go:sweepStagedVersions	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart.go	checkedUnitRestart	B3+E1	linux:internal/host/rootrestart.go:rootRestartRouteWith	Signed named-unit recovery is independent of release and health history. Root rechecks canonical source, unit, process, signed target and trusted live pointer; captures attempt authority before publication; verifies readiness and resumes without repeated effects. Fixtures: TestPlan14SignedActiveFixIgnoresHistory, TestPlan14SignedActiveFixAuthority, TestPlan14SignedFixSupersedesOlderAttempt, TestPlan14ActiveRecoveryProcessCrash, TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14SignedRestartRequiresTrustedLiveLink.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/generationinventory.go	OpenGenerationLaunchReader	E2	linux:internal/host/rootgeneration_inventory.go:openGenerationLaunchInventory	E24: independent root installation and launch enumeration, exact reservation reconciliation and fresh quiescent whole-version-tree kernel census; missing sources, open unreserved launches, foreign namespaces and uncontained tasks refuse. Production pin source certifies this evidence before returning pins. Fixtures: TestPlan14GenerationInventoryCompleteness, TestPlan14GenerationInventoryPinConsumer, TestPlan14GenerationInventoryLifecycle, TestPlan14GenerationInventoryProcessCrash, TestPlan14GenerationKernelCensusUnknownReference, TestPlan14GenerationLaunchInventory, TestPlan14GenerationReaderDoesNotInitialize, TestPlan14GenerationInstallationInventory. Checked production source/kernel witnesses passed on the E27 root runner. E29 physical-payload and installed-unit witnesses passed on the controller runner; E30 required-artifact witness pending.
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/migration.go	Ledger.MigrationCensus	G	linux:internal/host/rootmigration.go:rootMigration.run	rev3=PROPOSED-p3;identity=carlos system journal-migrate offline uid 0;basis=under participation transaction exclusion, preserves completed census revisions, refuses foreign pending state, and revokes failed completion
    plan14_input_inventory_test.go:424: J4	internal/host/updatesroot.go	updatesPassOption	E3	linux:internal/host/agent.go:adoptLoop	rev3=PROPOSED-p3;run=8;identity=root adopt uid 0; unchanged agent opener uid carlos;basis=installs census-only root input provider while preserving the legacy failure-book opener for nonparticipating passes
    plan14_input_inventory_test.go:424: J4	internal/hostbox/launchjournal.go	LaunchJournal.Read	C	linux:internal/host/rootexecution_settle.go:ClaimRootHTTP.cleanupExecution	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/restartscope.go	retryRequests	E1+E3	linux:internal/host/restartscope.go:applyRetries	root-route
    plan14_input_inventory_test.go:424: J4	internal/release/rollback.go	processGroup	B3+E1+E3	linux:internal/release/rollback.go:rollbackGroup	root-route;kept=B3,E1,E3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rolloutdeclined.go	failureHolds.pass	E1+E3	linux:internal/host/rolloutdeclined.go:failureHolds.pointerLoop	fix1-merge-review;basis=Saves the failure book before processing pointer retries; preserves signed retry and restriction checks.
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	type Scope	E1	linux:history_cli.go:historyCommandWithSave	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/console/apirestartscope.go	hostNames	E1+E3	linux:internal/console/apirestartscope.go:resolveRestartScope	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/guardexec.go	recoverLockHeld	F	linux:internal/host/guardexec.go:RunSystemGuardExec	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/unitsettle.go	routeReady	B3	linux:internal/host/agent.go:agentCheckedUnitRestart	root-route
    plan14_input_inventory_test.go:424: J4	internal/registry/importjournal.go	Registry.ImportJournalHosts	G	linux:internal/registry/remote_dispatch.go:Registry.dispatchRemote	rev3=census-ruling-seeded-instances;basis=its SQLite arm as carlos, in the agent or the registry child (carlos __registry-child); its remote arm in whichever process holds a remote handle, and a root pass does. No caller in the tree yet, outside the child's dispatch: deny-only activation input; G wires its caller and must keep it deny-only. If it ever feeds a decision that allows rather than refuses, it needs a new ruling.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	GenerationBinding.valid	E2	linux:internal/release/rootgenerations.go:RootGenerations.Read	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals. PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/record_unix.go	openDirectory	C	linux:internal/hostguard/flock_unix.go:acquire	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	type RestartIntent	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.run	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	RootGenerations.Reserve	E2	linux:internal/host/rootgenerations_launch.go:rootGenerationSource.reserve	E20: exact reservation closure precedes retirement verification; retained tombstones forbid replay and require sync recommit. Retired records release only their own pins; completeness remains a separate mandatory verifier, still unavailable in production. Fixtures: TestPlan14GenerationRetirementReleasesExactPin, TestPlan14GenerationRetirementRefusals, TestPlan14GenerationClosedReplayRefused, TestPlan14GenerationRetirementProcessCrash, TestPlan14GenerationRetirementKeepsIndependentReference, TestPlan14GenerationClaimsOffRestageMatchesMain.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_refresh.go	rootFloorDowngradeIdle	D+E2+F	linux:internal/host/rootmovesfloor_boot.go:withRootFloorGuardCandidate	rev3=PROPOSED-p3;identity=root adopt, guard boot selector and system apply/recover uid 0;basis=uses E network-free retained generation obligations and kernel census under participation before floor; borrowed transaction matches the original root store; no deployment provider read
    plan14_input_inventory_test.go:424: J4	internal/host/movesfloor.go	readLine	F	linux:internal/host/movesfloor.go:withMovesFields	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/unitsettle.go	systemdUnits.Show	B3	linux:internal/host/agent.go:agentCheckedUnitRestart	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostguard/guard.go	Guard.Activate	C	linux:internal/host/claimwakeassembly.go:ClaimWakeAssembly.Build	Pending intent and durable quarantine remain denial conditions.
    plan14_input_inventory_test.go:424: J4	internal/release/pins.go	StagedPaths.Refers	E2	linux:internal/release/rootgenerationpins.go:passConfig.generationWriteCheck	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationpins.go	generationFileIdentity	E2	linux:internal/release/rootgenerationpins.go:RootGenerationPins.StagedPins	E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode, TestPlan14GenerationProductionModeGate, TestPlan14GenerationSnapshotPermitsFreshTree.;rev3=PROPOSED-p3;run=8;identity=root release retention uid 0;basis=persistent filesystem and handle evidence supersedes boot-local device equality for new root generation records;rev3=PROPOSED-p3;run=8;identity=root release retention uid 0;basis=persistent filesystem and handle evidence supersedes boot-local device equality for new root generation records
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_retirement.go	productionRetireGenerations	E2	linux:internal/host/rootgenerationpins.go:productionRootGenerationPins	E25: validate installation, controller, exact unit and process before retaining an active or prelaunch pin. Only closed writers plus a settled unit reach durable retirement and independent kernel absence. Use the checked read-only journal and continue past active pins. Fixtures: TestPlan14GenerationRetirementKeepsActivePin, TestPlan14GenerationRetirementKeepsPrelaunchPin, TestPlan14GenerationRetirementContinuesPastActivePin, TestPlan14GenerationRetirementBindingProcessCrash, TestPlan14GenerationRetirementCensusGate. Running-tenant completeness remains unfinished.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_refresh.go	rootFloorJudge.judge	F	linux:internal/host/systemapply.go:systemApplier.notePrev	rev3=PROPOSED-p3;identity=carlos adopt normal refresh and carlos system apply notePrev, uid 0;basis=observes participation before floor lock; writes identity-bound current/prev verdict even under unknown history without blocking repair executor
    plan14_input_inventory_test.go:424: J4	internal/host/systemparticipation.go	systemApplier.beginExecutableChange	D	linux:internal/host/systemapply.go:systemApplier.install	Claims-on or retained root census uses root exclusion; claims-off with no census preserves main participation and recovery behavior. PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner.
    plan14_input_inventory_test.go:424: J4	internal/rootstate/state.go	Sync	A+F+G	linux:internal/host/rootmovesfloor_source.go:readRootProtocolProjection	rev3=PROPOSED-p3;identity=checked filesystem callers including root control/apply/migration uid 0;basis=syncs an existing checked root descriptor before acknowledgement
    plan14_input_inventory_test.go:424: J4	internal/host/rootfloor_healthy.go	rootMovesFloors.capLegacy	F	linux:internal/host/rootseedsfloor_publication.go:readRootSeedsBound	rev3=PROPOSED-p3;identity=root normal adopt/apply refresh and local seeds-bound readers in apply/recover/guard, uid 0;basis=caps service-written protocol and release minima by highest root-observed healthy build; absent observation supplies no bound
    plan14_input_inventory_test.go:424: J4	internal/rollout/failures.go	FailureBook.saveLocked	E3	linux:internal/rollout/rootfailures.go:RootFailures.ImportLegacy	rev3=PROPOSED-p3;run=8;identity=root adoption uid 0 or legacy rollout uid carlos;basis=root instance uses checked store writer; legacy instances retain the original atomic file writer and epoch semantics
    plan14_input_inventory_test.go:424: J4	internal/host/rolloutdeclined.go	failureHolds.gate	E1+E3	linux:internal/host/rolloutdeclined.go:honourDeclinedFailures	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/rootinventory.go	ClaimRootHTTP.verifyInventoryPath	C	linux:internal/host/rootinventory.go:ClaimRootHTTP.commitRootInventoryPending	root installation and fence authority; registration and recovery; agent RPC lock ordering
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/ledger.go	Ledger.UpdateID	D	linux:internal/host/systemparticipation.go:systemApplier.checkUnarmedParticipationRecovery	Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness.
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	const RootRestartsDir	E1	linux:internal/host/rootrestart_requests.go:productionRestartRequestPass	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/local_unix.go	localDir.read	D	linux:internal/hostexec/rootmirror.go:ProjectRootClient	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/relocationhandover.go	relocationCompletedHandover.completedPrior	C	linux:internal/host/claimhandover_crossbox.go:wireCompletedHandover	Completed handover binds authoritative completed stop, session, generation and stamp to current serving writer.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_outcomes.go	RootHistory.recoveryRefusals	E1	linux:internal/release/roothistory.go:RootHistory.Refusals	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_creation.go	RootHistory.ConsumeCreation	E1	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.startRecorded	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootrebind.go	Guard.RebindRootInventory	E2	linux:internal/host/rootrecovery_rebind.go:ClaimRootHTTP.rebindRecoveryInventory	E37: retain independently initialized state-directory and timer requirements in the root installation transaction; preserve them through crash/reopen and rebind. Unknown history cannot certify completeness. Recommit under root-host exclusion before generation use. Canonical record and root retained obligations constrain agent candidate lists; timer enumeration is deny-only. Pre-flight 33, 80, 83. Fixtures: TestPlan14GenerationRequiredArtifacts, TestPlan14GenerationRegistryRows, TestPlan14RootTimerInventory, TestPlan14InventoryRequirementsRegistration, TestPlan14InventoryRequirementsUnknownAndRatchet, TestPlan14InventoryArtifactsCrash, TestPlan14InventoryRequirementsHistoryIdentity. Changed RequiredArtifacts and ExactRetirement root-runner witnesses await acceptance; remaining E2 launch/parked/containment integration is incomplete.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/root.go	type RootInstallation	E2	linux:internal/host/rootinstallation.go:rootInstallationHostApp	E37: retain independently initialized state-directory and timer requirements in the root installation transaction; preserve them through crash/reopen and rebind. Unknown history cannot certify completeness. Recommit under root-host exclusion before generation use. Canonical record and root retained obligations constrain agent candidate lists; timer enumeration is deny-only. Pre-flight 33, 80, 83. Fixtures: TestPlan14GenerationRequiredArtifacts, TestPlan14GenerationRegistryRows, TestPlan14RootTimerInventory, TestPlan14InventoryRequirementsRegistration, TestPlan14InventoryRequirementsUnknownAndRatchet, TestPlan14InventoryArtifactsCrash, TestPlan14InventoryRequirementsHistoryIdentity. Changed RequiredArtifacts and ExactRetirement root-runner witnesses await acceptance; remaining E2 launch/parked/containment integration is incomplete.
    plan14_input_inventory_test.go:424: J4	internal/host/restart.go	loadRestartMarks	E1+E3	linux:internal/host/restart.go:restartPass	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/restart.go	cycleWorkers	E1+E3	linux:internal/host/restart.go:restartRequestLeg	root-route
    plan14_input_inventory_test.go:424: J4	history_cli.go	historyCommandWithSave	E1	linux:history_cli.go:historyCommand	E17: operator saves exact signed authorization and challenge before delivery, resumes without renewal, and verifies enrolled-root exact completion. Existing proof branches are unchanged. Tests: TestPlan14HistoryOperatorWorkflow, TestPlan14HistoryOperatorConflicts, TestPlan14HistoryOperatorExactCompletion, TestPlan14HistoryWorkflowProcessCrash, TestPlan14HistoryCommandResume, TestPlan14HistorySavedFiles, TestPlan14HistoryCLIDispatch.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_production_other.go	migrateRootClaimAuthority	G	darwin:internal/host/claimjournal_migration.go:migrateClaimJournalsWith	rev3=PROPOSED-p3;identity=non-Linux offline journal-migrate CLI;basis=unsupported-platform stub returns ErrUnsupported without reading or granting migration authority
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_authorization.go	rootMovesFloors.authorizeReconstruction	F		rev3=PROPOSED-p3;identity=offline root reconstruction capability, uid 0; no production caller installed;basis=issues private nonce capability for this root identity and next generation under stable lock; no production caller
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_boot.go	rootFloorJudge.permits	F	linux:internal/host/rootmovesfloor_boot.go:rootFloorPrevVerdict	rev3=PROPOSED-p3;identity=root guard-exec apply/recover selection and carlos.prev floor-allows-prev, uid 0;basis=signed current, retained prev and fixed staged candidate determine whether a below-bound candidate must be refused; no available qualifying build preserves recovery
    plan14_input_inventory_test.go:424: J4	internal/host/caps_pass.go	stagedManifestOfLiveVersion	E4	linux:internal/host/agent.go:runAgent	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/claimhandover_recovery.go	claimCrossBoxHandover.recoveryEvidence	C+G	linux:internal/host/claimhandover_recovery.go:claimCrossBoxHandover.afterRecovery	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimjournal_transport.go	ClaimRootHTTP.serveJournal	C	linux:internal/host/claimretire_transport.go:ClaimRootHTTP.ServeHTTP	root installation and fence authority; registration and recovery; agent RPC lock ordering
    plan14_input_inventory_test.go:424: J4	internal/host/units/carlos-system-update.service	external	F	linux:internal/host/bootstrap.go:var unitsFS	rev3=PROPOSED-p3;identity=systemd update/recover oneshot shell uid 0;basis=guard branch is conditional on executable presence; unarmed units retain main selector; installed guard selects from root local floor
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart_requests_source.go	type rootRestartRequestSource	E1	linux:internal/host/rootupdates.go:productionRootUpdates	E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration.go	rootMigrationSnapshot.fingerprint	G	linux:internal/host/rootmigration.go:rootMigration.run	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=binds exclusion and membership across observations/restart while allowing boot metadata and independently recovered payload revision
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	restartIntentID	E1	linux:internal/release/rootrestart_history.go:RootRestarts.Observe	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/caps/converge.go	Ops.checkClaimsOnDisk	E4	linux:internal/caps/converge.go:Converge	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/restart.go	bounceExecRoutes	E1+E3	linux:internal/host/restart.go:restartRequestLeg	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/buildstate.go	buildStates.heldTarget	E3	linux:internal/host/buildstate.go:buildStates.wakeTarget	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/proofask.go	mintAsker.tick	B3	linux:internal/host/agent.go:fastConvergeLoop	route-and-input;kept=B3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/park.go	Regional.observe	C	linux:internal/hostbox/regionalworker.go:RegionalWorker.runHost	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootexecution_settle.go	ClaimRootHTTP.cleanupExecution	D	linux:internal/host/rootexecution_runtime.go:newClaimExecutionRuntime	Root cleanup checks exact retained installation, launch journal and kernel evidence; CC9 requires a fresh terminal or exclusion claim.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_retirement.go	type HistoryRecoveryRetirement	E1	linux:history_cli.go:historyCommandWithSave	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/caps/converge.go	Ops.query	E4	linux:internal/caps/converge.go:Ops.applyUnitState	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	RouteAccount	B3+E3+E4	linux:cli.go:runRoute	root-route;kept=B3,E3,E4;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/rootstate/state_linux.go	descendSync	A	linux:internal/rootstate/state_linux.go:descend	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootbroker.go	RootBroker.acquire	D	linux:internal/hostexec/rootbroker.go:RootBroker.Execute	Retry conditional writes and authority reads within original monotonic cutoff; reconcile uncertain writes by exact bytes.
    plan14_input_inventory_test.go:424: J4	internal/host/legacyrestart.go	legacyCheckedUnitRestart	B3	linux:internal/host/rootrestart.go:rootRestartRouteWith	rev3=merge-ruling-6;basis=Restore main stamped-unit restart and D1 settle, including diagnostics; only clock, readiness and health-hook adapters differ.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationTree	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationKernel.absent	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.install	F	linux:internal/host/systemapply.go:systemApplier.Run	rev3=PROPOSED-p3;identity=carlos system apply, root update unit or offline root CLI, uid 0;basis=root verifies staged signature and final locked bounds before rename, then records root accepted floor history only after health succeeds
    plan14_input_inventory_test.go:424: J4	internal/host/claimwakeassembly.go	claimSameWriter	C+G	linux:internal/host/claimretire_local.go:claimArtifactRetirement.Recover	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostexec/pending_linux.go	controllerProcessStart	D	linux:internal/hostexec/rootprocess_linux.go:ControllerAlive	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/proofroot.go	readProvingKey	B3	linux:internal/host/agent.go:runAdoptUnderRootRelease	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootfloor_healthy.go	rootMovesFloors.acceptHealthy	F	linux:internal/host/rootfloor_healthy.go:systemApplier.acceptRootFloorHealthy	rev3=PROPOSED-p3;identity=carlos system apply after successful root health gate, uid 0;basis=after successful root health gate, retains highest accepted build and publishes accepted floor only when that build supports it
    plan14_input_inventory_test.go:424: J4	internal/release/bake.go	LoadFirstSeen	E1+E3	linux:internal/release/adopt.go:PassFilter	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/rollback.go	rollbackGroup	B3+E1+E3	linux:internal/release/adopt.go:adoptHost	root-route;kept=B3,E1,E3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_pass.go	RootHistoryPass.complete	E1	linux:internal/release/adopt.go:adoptHost	E1 canonical binding selection and recheck; durable attempt precedes effects; only independent installed observation settles and retires the exact target refusal.
    plan14_input_inventory_test.go:424: J4	internal/host/recoveryrefusals.go	recoveryHistoryOutcome	E1	linux:internal/host/roothistory_recovery.go:rootRestartChecks.settleHistory	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationUnescape	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationMounts	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/retirement_timers.go	retirementWithTimers	C+E2	linux:internal/hostbox/reconcile_adapter.go:ReconcileAdapter.Retire	E38: reconcile completed root retirement against the retained stop receipt and exact inventory; inspect parked identities, require retired rows absent or an independently inventoried successor, and retain generation pins. Fixtures: TestPlan14GenerationParkedPayload, TestPlan14GenerationParkedCrash, TestPlan14GenerationParkedKeepsReservation, TestPlan14GenerationParkedReadback; TestPlan14GenerationParkedRootRunner is runner-pending. Timer producer matches retained entries once and preserves successors on replay: TestPlan14GenerationTimerRetirement. No claims-off path changes. PROPOSED E44: root timer intention must precede materialization; exact registration and row identity required; root retirement cannot infer ownership from registry enumeration. Tests: TestPlan14TimerIntentionBeforeMaterialization, TestPlan14GenerationTimerRetirement; root timer intention, sync-failure retry and retirement acceptance. Scheduler producer wiring remains incomplete.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/stopjournal_reader.go	LaunchJournal.ReadStopKernelJournal	C	linux:internal/host/rootmigration_collect_linux.go:migrationStopKernel.RecoverStopped	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/unitsettle.go	systemdUnits.StartTime	B3	linux:internal/host/proofobserve.go:proofObserver.observe	kept=B3;scope=canonical-binding-and-readiness;implementation-incomplete
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_production_linux.go	rootMigrationLegacySuspects	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=agent-writable hostguard filenames only identify unexplained hosts to refuse, never authorize inventory
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/disk.go	Disk.Begin	D	linux:internal/host/guardtransaction.go:systemApplier.beginGuard	Claims-on or retained root census uses root exclusion; claims-off with no census preserves main participation and recovery behavior. PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/generationinventory.go	LaunchJournal.GenerationLaunches	E2	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	E24: independent root installation and launch enumeration, exact reservation reconciliation and fresh quiescent whole-version-tree kernel census; missing sources, open unreserved launches, foreign namespaces and uncontained tasks refuse. Production pin source certifies this evidence before returning pins. Fixtures: TestPlan14GenerationInventoryCompleteness, TestPlan14GenerationInventoryPinConsumer, TestPlan14GenerationInventoryLifecycle, TestPlan14GenerationInventoryProcessCrash, TestPlan14GenerationKernelCensusUnknownReference, TestPlan14GenerationLaunchInventory, TestPlan14GenerationReaderDoesNotInitialize, TestPlan14GenerationInstallationInventory. Checked production source/kernel witnesses passed on the E27 root runner. E29 physical-payload and installed-unit witnesses passed on the controller runner; E30 required-artifact witness pending.
    plan14_input_inventory_test.go:424: J4	internal/host/rootupdates.go	rootFailureLegacy	E3	linux:internal/host/rootupdates.go:productionRootUpdates	rev3=PROPOSED-p3;run=8;identity=carlos adopt and offline migration uid 0;basis=bounded legacy byte read feeds only failure tuples and unresolved intents to the root deny importer; no legacy book opener or retry grant
    plan14_input_inventory_test.go:424: J4	internal/hostbox/wakepolicy.go	relocationProbe	C	linux:internal/hostbox/wakepolicy.go:Policy.check	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/pins.go	BuildStateKept	E2	linux:internal/release/pins.go:SettingsRefs	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/proofbinding.go	proofBinding.authorizedRecovery	B3+E1	linux:internal/host/rootupdates.go:rootUpdateSource.resolve	Independent signed recovery authority and retained attempt outcomes. Fixtures: TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14IndependentRecoveryRetainsMintBarrier, TestPlan14ActiveRecoveryProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_pass.go	RootHistoryPass.resolve	E1	linux:internal/release/roothistory_pass.go:RootHistoryPass.selectRoute	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers.
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor.go	systemApplier.seedsActivationRefusal	F	linux:internal/host/systemapply.go:systemApplier.activationRule	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=refuses activation below selected local seeds release bound; missing unknown history grants no acceptance projection
    plan14_input_inventory_test.go:424: J4	internal/host/rootexecution_migration.go	ClaimRootHTTP.executionAuthorityWithMigration	D	linux:internal/host/rootexecution_runtime.go:newClaimExecutionRuntime	Root participation census supplies migration generation; TestPlan14ExecutionMigrationIsIndependent and TestPlan14ExecutionPreinstallationBindsMigration.
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	type rootRestartRecord	E1	linux:internal/release/rootrestart_history.go:RootRestarts.Bindings	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/movespass.go	armMovesPass	B+C	linux:internal/host/agent.go:runAgent	Agent moves construction passes registration client and existing guarded publication and park providers.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalservice.go	journalPrepare	C	linux:internal/hostbox/journalservice.go:journalCall	root installation and fence authority; registration and recovery; agent RPC lock ordering
    plan14_input_inventory_test.go:424: J4	internal/hostguard/fence.go	StopAuthorityMatches	C	linux:internal/host/claimwakestop.go:ClaimAssembly.collectCapturedStop	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostrelocate/worker.go	Worker.Step	C+D	linux:internal/host/relocatepass.go:RelocationRuntime.once	Worker transitions revalidate claim and fence and consume verified root stop receipts; generic transition timing remains legacy.
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	type Receipt	E1	linux:internal/historyreadback/workflow.go:Operation.Read	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor.go	withRootSeedsFields	F	linux:internal/host/seedsfloor.go:withSeedsFields	rev3=PROPOSED-p3;identity=carlos agent in carlos-edge.service uid carlos;basis=advertises only checked synced root seeds projection matching deployment and box; no valid projection stays quarantined
    plan14_input_inventory_test.go:424: J4	internal/host/proofobserve.go	proofObserver.recordSettled	B3	linux:internal/host/agent.go:runAdoptUnderRootRelease	rev3=merge-ruling-5;basis=Ordinary unstamped and derived routes do not resolve deployment records for post-restart health observation.
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/relocation_probestop.go	RecordProbeStop	C	linux:internal/hostrelocate/participant.go:Participant.Step	Probe-stop transition binds exact passed session and immutable receipt reference for later root handover verification.
    plan14_input_inventory_test.go:424: J4	internal/host/proofbinding.go	proofBindingSource.unitBinding	B3+E1	linux:internal/host/namedrecovery_active.go:namedUnitRecovery.recover	Reads canonical deployment record, claim, unit file identities and systemd facts without assuming a running PID. Existing running/rollback binding uses the same verifier. Fixtures: TestPlan14SignedNamedRecoveryAuthority and TestPlan14ProofBindingProvenance.
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.recoverIfNeeded	F	linux:internal/host/systemapply.go:systemApplier.Run	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=network-free recovery uses local root floors and rechecks signed image at final forward-completion boundary
    plan14_input_inventory_test.go:424: J4	internal/host/claimowners.go	claimServingOwners.Select	C+G	linux:internal/host/claimconstruction.go:OpenProductionClaimAssembly	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/proofpolicy.go	LoadProofPolicy	B3	linux:internal/host/proofask.go:mintAsker.tick	root-input;kept=B3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_delivery.go	HistoryRecoveryRetirementKey	E1	linux:internal/historyreadback/workflow.go:Operation.Deliver	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/writerstop.go	operationWriter	C	linux:internal/hostguard/writerstop.go:LandingWriter	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootexecution_settle.go	ClaimRootHTTP.settleExecution	D	linux:internal/host/rootexecution_runtime.go:newClaimExecutionRuntime	Root cleanup checks exact retained installation, launch journal and kernel evidence; CC9 requires a fresh terminal or exclusion claim.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	type GenerationProcess	E2	linux:internal/host/rootgeneration_inventory.go:generationReconciler.reconcile	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals. PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/host/movesheldrelease_root.go	publishVersion	C+E1	linux:internal/host/movesheldrelease_root.go:movesHeldReleaseRoot.publishRelease	root-input;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootbroker.go	RootBroker.retry	D	linux:internal/hostexec/rootbroker.go:RootBroker.Execute	Bound transport retries by original monotonic slack and context; never extend a permit.
    plan14_input_inventory_test.go:424: J4	internal/host/agent.go	runAdoptUnderRootRelease	B3+E1+E2+E3	linux:internal/host/agent.go:runAdoptWithEnsureSystemUnits	E13: signed recovery allows unknown history but preserves usable refusals, including retained originals; verified later promotion clears only D1. Health recording is independent of program recording; minting requires a census. Fixtures: TestPlan14RecoveryUnknownHistory, TestPlan14RecoveryKnownRefusal, TestPlan14RecoveryOriginalRefusalWithUnknownHistory, TestPlan14RootHistoryVerifiedRetryBeforeAttempt, TestPlan14ProgramFailureStillRecordsHealth, TestPlan14RootHistoryMintCensus. E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate. E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode.;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=wires the census-specific update authority under existing root release exclusion
    plan14_input_inventory_test.go:424: J4	internal/host/proofroot.go	proofRoot.mintAndLog	E1	linux:internal/host/proofroot.go:proofRoot.around	E13: signed recovery allows unknown history but preserves usable refusals, including retained originals; verified later promotion clears only D1. Health recording is independent of program recording; minting requires a census. Fixtures: TestPlan14RecoveryUnknownHistory, TestPlan14RecoveryKnownRefusal, TestPlan14RecoveryOriginalRefusalWithUnknownHistory, TestPlan14RootHistoryVerifiedRetryBeforeAttempt, TestPlan14ProgramFailureStillRecordsHealth, TestPlan14RootHistoryMintCensus.
    plan14_input_inventory_test.go:424: J4	internal/host/proofbinding.go	productionProofBindingSource	B3	linux:internal/host/rootupdates.go:productionRootUpdates	Root-owned current and previous pointers replace health history as executable authority; cache only record discovery.
    plan14_input_inventory_test.go:424: J4	internal/host/seedsfloor.go	rootJudgeSeedsPrev	F	linux:internal/host/movesfloor.go:rootJudgePrevWithSource	rev3=census-ruling-seeded-instances;basis=the adopt pass (/opt/carlos/carlos adopt in every mode; carlos-adopt.service, carlos-config-sync.service, carlos-restart.service and carlos-stage.service; root): seeds twin of the moves floor (F,J4); deny-only; Part 3 F2-F4 must cover the seeds floor alongside the moves floor.
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_kernel_linux.go	LinuxStopKernel.readContainedJournal	C+G	linux:internal/host/claimstop_kernel_linux.go:LinuxStopKernel.RecoverStopped	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_source.go	rootMovesFloorIdentity	F	linux:internal/host/guardarm.go:RunSystemGuardArm	rev3=PROPOSED-p3;identity=carlos system apply/recover and root adopt, systemd root units or offline CLI, uid 0;basis=root-only census reader supplies deployment/box/enrollment; edge mode cannot call it
    plan14_input_inventory_test.go:424: J4	internal/host/rootexecution_client.go	productionClaimLocal.prepareWith	D	linux:internal/host/claimparticipation.go:productionClaimLocal.Prepare	Agent selects the single root lease owner over authenticated RPC; its mirror grants no root authority.
    plan14_input_inventory_test.go:424: J4	internal/host/claimjournal_containment_linux.go	inspectClaimContainment	C+G	linux:internal/host/claimjournal_containment_linux.go:var claimContainmentInspect	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/console/apirestartscope.go	Server.handleAPIRestartScope	E1+E3	linux:internal/console/authcli.go:Server.registerCLIRoutes	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/reconcile.go	Reconciler.holdOnly	C	linux:internal/hostbox/reconcile.go:Reconciler.installWithWork	Hold-only write rechecks claim, record and source inventory under local lock without root RPC there.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootbroker.go	RootBroker.Execute	D	linux:internal/host/rootexecution_transport.go:ClaimRootHTTP.serveExecution	Retry transient authority reads within existing admission slack; bounded replay and permanent mismatches remain enforced.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgenerationpins.go	productionRootGenerationPins	E2	linux:internal/host/movesheldrelease_production.go:WithProductionMovesHeldRelease	E24: independent root installation and launch enumeration, exact reservation reconciliation and fresh quiescent whole-version-tree kernel census; missing sources, open unreserved launches, foreign namespaces and uncontained tasks refuse. Production pin source certifies this evidence before returning pins. Fixtures: TestPlan14GenerationInventoryCompleteness, TestPlan14GenerationInventoryPinConsumer, TestPlan14GenerationInventoryLifecycle, TestPlan14GenerationInventoryProcessCrash, TestPlan14GenerationKernelCensusUnknownReference, TestPlan14GenerationLaunchInventory, TestPlan14GenerationReaderDoesNotInitialize, TestPlan14GenerationInstallationInventory. Checked production source/kernel witnesses passed on the E27 root runner. E29 physical-payload and installed-unit witnesses passed on the controller runner; E30 required-artifact witness pending.
    plan14_input_inventory_test.go:424: J4	internal/host/movesinstall.go	installRun.local_	C+G	linux:internal/host/movesinstall.go:installGeneration	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/proofnamed.go	proofExecPath	B3	linux:internal/host/proofobserve.go:proofObserver.observe	fix1;basis=Authorizes recordless units only from descriptor-checked root configuration, installed console guard evidence, root history or the matching root update capture.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_creation.go	RootHistory.FreshInstallation	E1	linux:internal/host/rootgeneration_requirements.go:productionGenerationCreation	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_source.go	rootProtocolLegacy	F	linux:internal/host/rootmovesfloor_source.go:rootFloorLegacy	rev3=PROPOSED-p3;identity=carlos adopt and system apply refresh, uid 0; no recovery or boot-selector call;basis=bounded agent-writable JSON and line mirrors contribute only increasing denies; neither can establish accepted state
    plan14_input_inventory_test.go:424: J4	internal/hostbox/coldhandover.go	ColdHandover.Run	C	linux:internal/hostbox/coldhandover.go:ColdHandover.Recover	route-and-input PROPOSED E46: captured claim selection and root journal mutation; root RPC outside service host exclusion; SQL/route data never grants root authority. Executing identity: service controller; root for inventory/retirement callbacks.
    plan14_input_inventory_test.go:424: J4	internal/release/pins.go	nextGenerationsSeq	E2	linux:internal/release/pins.go:WriteGenerations	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationIDRef	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationLinkRef	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.
    plan14_input_inventory_test.go:424: J4	internal/activator/workerswap.go	Service.ReplaceWorker	E2	linux:internal/rollout/worker.go:scheduler.executeWorker	E39: close the unsupported claimed worker path before backend entry, replacement or supervised stop. Claims-off paths remain unchanged. This is refusal coverage, not positive root-reserved worker launch support. Fixtures: TestPlan14GenerationWorkerStartBoundary, TestPlan14GenerationWorkerRealBackendRefusal, TestPlan14GenerationWorkerReplacementBoundary, TestPlan14GenerationWorkerSupervisionBoundary. Pre-flight 29 and E39 worker launch audit.
    plan14_input_inventory_test.go:424: J4	internal/host/systemunits.go	ensureSystemUnits	F	linux:internal/host/agent.go:runAdopt	root-input;kept=F;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/relocationinstall.go	ClaimAssembly.relocationReceipt	C	linux:internal/host/relocationassembly.go:ClaimAssembly.RelocationEffects	Local-install receipt reader refuses malformed operation materialization; claim receipt digest is checked by its consumers.
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/production.go	Ledger.UpdateRequired	D	linux:internal/rootparticipation/production.go:OpenForUpdate	Select root participation when claims are enabled or a census exists; only absent state with claims off selects the legacy protocol.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_collect_linux.go	migrationStopKernel.RecoverStopped	G	linux:internal/host/claimstop_recovery.go:ClaimStopCoordinator.RecoverStopped	rev3=PROPOSED-p3;identity=carlos system journal-migrate uid 0;basis=requires dead controller or changed boot plus closed settled root writers; observes real proc descriptors and exact cgroups; compares typed inventory and journal on both sides; records current evidence time downstream
    plan14_input_inventory_test.go:424: J4	internal/host/restart.go	restartRequestLeg	E1+E3	linux:internal/host/agent.go:fastConvergeLoop	fix1-merge-review;basis=Reads the new host-retry log while preserving root-signed grant verification and ordinary restart gates.
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/ledger.go	Ledger.BeginUpdate	D	linux:internal/host/systemparticipation.go:systemApplier.checkUnarmedParticipationRecovery	Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness.
    plan14_input_inventory_test.go:424: J4	internal/host/restartscope.go	scopedHosts	E1+E3	linux:internal/host/restartscope.go:bounceScopedRoutes	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/work.go	WorkSource.Select	C	linux:internal/host/movesheldrelease_production.go:WithProductionMovesHeldRelease	root installation/fence backend and lock-free agent projection; establishment blocked; draft incomplete
    plan14_input_inventory_test.go:424: J4	internal/host/movesheldrelease.go	heldReleaseVia.claim	C+E1	linux:internal/host/movesheldrelease.go:heldReleaseVia.request	root-input;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_status.go	RootHistory.ProjectMigrationStatus	E1	linux:internal/host/roothistory_maintenance.go:rootHistoryMaintenance.run	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_pass.go	RootHistoryPass.selectRoute	E1	linux:internal/release/adopt.go:PassFilter	E1 canonical binding selection and recheck; durable attempt precedes effects; only independent installed observation settles and retires the exact target refusal.
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.floorArmed	F	linux:internal/host/systemapply.go:systemApplier.activationGuard	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=dormancy decision includes unreadable or present moves and seeds floors from selected authority
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationpins.go	type RootGenerationPins	E2	linux:internal/host/rootmovesfloor_refresh.go:rootFloorDowngradeIdle	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_writers_linux.go	emptyContainmentAt	C+G	linux:internal/host/claimstop_writers_linux.go:noProcessGroups	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/retention.go	retentionPass	E2	linux:internal/host/agent.go:retentionLoop	root-route
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	serveHeldStageRequest	E2	linux:internal/release/materializeheld.go:ServeHeldStageRequestsWithPins	E23: old held-stage relay forwards the root generation source before artifact writes and outside publication exclusion. Request fields retain their prior hint/authorization checks; only root pins authorize destructive staging on census boxes. No-census source yields empty pins. Fixtures: TestPlan14GenerationLegacyRelay, TestHeldStagePassIsANoOpWithoutRequests, TestHeldStagePassDropsAnUnauthorizedBuild, TestServeHeldStageRequestsRefusesStaleAndTraversal. Production source wiring is inspected; privileged completeness is not claimed.
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/disk.go	UpdateIdle	F	linux:internal/host/claimreport.go:claimReport	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootinventory_timer_mutation.go	ClaimRootHTTP.applyTimerMutation	E2	linux:internal/host/rootinventory.go:ClaimRootHTTP.commitRootInventoryPending	PROPOSED E46: local root installation obligations, exact root intention and inventory revision; service SQL is a deny-only consistency check. Executing identity: root instance-control or root participation/update.
    plan14_input_inventory_test.go:424: J4	internal/release/restartscope.go	RestartScope.Selects	E1+E3	linux:internal/host/restartscope.go:scopedHosts	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_boot.go	withRootFloorGuardCandidate	F	linux:internal/host/guardexec.go:RunSystemGuardExec	rev3=PROPOSED-p3;identity=carlos system guard-exec apply/recover, systemd root units uid 0;basis=release then previous-binary exclusion; participation check precedes moves and seeds locks; certified current remains executor fallback
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalmigration_linux.go	JournalService.MigrateLegacy	C	linux:internal/host/claimjournal_migration.go:migrateClaimJournalsWith	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostguard/guard.go	Guard.freshObserved	C	linux:internal/hostguard/guard.go:Guard.fresh	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_writers_linux.go	agentUnitCgroup	C+G	linux:internal/host/claimstop_kernel_linux.go:newProductionStopKernel	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/movesfloor.go	readLocalFloor	F	linux:internal/host/movesfloor.go:withMovesFields	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rolloutdeclined.go	failureHolds.plan	E1+E3	linux:internal/host/rolloutdeclined.go:honourDeclinedFailures	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostguard/retirement.go	Guard.WithNoInstallation	C	linux:internal/host/claimproduction.go:claimAdminTokens.With	Use the already-held root host lock for empty-installation authority checks.
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_writers_linux.go	LinuxStopKernel.VerifyNoProcess	C+G	linux:internal/host/rootexecution_settle.go:ClaimRootHTTP.cleanupExecution	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/program.go	ArtifactProgram	E1	linux:internal/release/program.go:ReleaseProgram	root-input;kept=E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_parked.go	generationReadRetirements	E2	linux:internal/host/rootgeneration_parked.go:productionGenerationRetirements	E38: reconcile completed root retirement against the retained stop receipt and exact inventory; inspect parked identities, require retired rows absent or an independently inventoried successor, and retain generation pins. Fixtures: TestPlan14GenerationParkedPayload, TestPlan14GenerationParkedCrash, TestPlan14GenerationParkedKeepsReservation, TestPlan14GenerationParkedReadback; TestPlan14GenerationParkedRootRunner is runner-pending. Timer producer matches retained entries once and preserves successors on replay: TestPlan14GenerationTimerRetirement. No claims-off path changes.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/migration_census_linux.go	CheckMigrationRoots	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=offline scan requires every managed payload to match independent retained inode/type inventory or explicit shared path rules
    plan14_input_inventory_test.go:424: J4	internal/rootstate/live_linux.go	directory.liveFile	A+D	linux:internal/rootstate/live_linux.go:directory.HoldLive	fix1;basis=Retains a trusted private-file descriptor under an OFD write lock; readers query conflicting OFD ownership without locking.
    plan14_input_inventory_test.go:424: J4	internal/host/rootupdates.go	initializeMigrationFailures	E3+G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;run=8;identity=offline journal-migrate uid 0;basis=requires complete root census before creating migration-bound root failure book; missing legacy history supplies no known refusal
    plan14_input_inventory_test.go:424: J4	internal/hostguard/record_unix.go	recordDir.writeUsing	C	linux:internal/hostguard/record_unix.go:recordDir.write	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_identity.go	rememberRootFloorSystemIdentity	F	linux:internal/host/systemapply.go:systemApplier.verifyPointer	rev3=PROPOSED-p3;identity=carlos system apply/recover and root adopt, systemd root units or offline CLI, uid 0;basis=re-fetches and verifies signed pointer equality before retaining its executable identity
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_timers.go	type rootMigrationTimerRecord	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=offline migration root uid 0;basis=retains original stopped inventory, exact observed timer contents and registrations, successor inventory and root revision through interrupted migration
    plan14_input_inventory_test.go:424: J4	internal/host/claimretire_local.go	claimArtifactRetirement.Recover	C+G	linux:internal/host/claimconstruction.go:OpenProductionClaimAssembly	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/workflow.go	Operation.Read	E1	linux:history_cli.go:historyCommandWithSave	E17: operator saves exact signed authorization and challenge before delivery, resumes without renewal, and verifies enrolled-root exact completion. Existing proof branches are unchanged. Tests: TestPlan14HistoryOperatorWorkflow, TestPlan14HistoryOperatorConflicts, TestPlan14HistoryOperatorExactCompletion, TestPlan14HistoryWorkflowProcessCrash, TestPlan14HistoryCommandResume, TestPlan14HistorySavedFiles, TestPlan14HistoryCLIDispatch.
    plan14_input_inventory_test.go:424: J4	internal/rootstate/state_linux.go	trusted	A	linux:internal/rootstate/state_linux.go:directory.Read	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostrelocate/worker.go	Worker.ConvertLanding	C	linux:internal/host/relocatepass.go:convertFencedLanding	Landing conversion requires verified local worker and termination-fence authority before claim conversion.
    plan14_input_inventory_test.go:424: J4	internal/host/proofroot.go	proofRoot.recordLive	B3	linux:internal/host/proofroot.go:proofRoot.around	rev3=merge-ruling-5;basis=Exclude ordinary unstamped and derived routes before pre-pass binding and health observation.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_source.go	readRootLegacyProtocolJSON	F	linux:internal/host/rootmovesfloor_source.go:rootProtocolLegacy	rev3=PROPOSED-p3;identity=carlos adopt and system apply refresh, uid 0; no recovery or boot-selector call;basis=bounded descriptor read of optional legacy moves or seeds mirror; shape validation and caller denial-only merge prevent acceptance
    plan14_input_inventory_test.go:424: J4	internal/release/pins.go	ReadGenerations	E2	linux:internal/release/pins.go:GenerationPins	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/proofbinding.go	proofBindingSource.forHost	B3	linux:internal/host/rootrestart.go:productionRootRestartChecks	canonical record/unit/executable authority and one-attempt rollback; draft incomplete
    plan14_input_inventory_test.go:424: J4	internal/rollout/failures.go	OpenFailureBook	E1+E3	linux:internal/host/updatesroot.go:updatesPassOption	fix1-merge-review;basis=Loads schema-three durable generations and refuses unsafe identity recovery on entropy failure.
    plan14_input_inventory_test.go:424: J4	internal/host/claimrecovery_remote.go	claimCrossBoxHandover.installRecoveryRemote	C	linux:internal/host/claimhandover_recovery.go:claimCrossBoxHandover.afterRecovery	root installation and fence authority; recovery rebind and timer identity
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/image_linux.go	Disk.Run	F	linux:internal/host/guardtransaction.go:systemApplier.guardRun	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory.go	recordRootProgram	E1	linux:internal/host/agent.go:runAdoptUnderRootRelease	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_reconstruct.go	RootHistory.reconstructionState	E1	linux:internal/release/roothistory_reconstruct.go:RootHistory.reconstructionReady	E1 signed root-history reconstruction; exact namespace identity, revisions and canonical sources; journaled completion retains denies and stronger bounds. Tests: TestPlan14RootHistoryReconstruction, TestPlan14RootHistoryReconstructionCrash, TestPlan14RootHistoryReconstructionDeliveryPass.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/roleintention_linux.go	LaunchJournal.ResolveRoleIntentions	C	linux:internal/host/claimstop_kernel_linux.go:LinuxStopKernel.resolveRoleIntentions	root-input
    plan14_input_inventory_test.go:424: J4	internal/rootstate/file_linux.go	Identity	A+B3	linux:internal/host/roothistory_launch.go:ClaimLaunchRoot.rootInstalledProgram	descriptor-checked root rollback capability identity/removal
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_authorization.go	rootMovesFloors.authorizedReconstruction	F		rev3=PROPOSED-p3;identity=offline root reconstruction capability, uid 0; no production caller installed;basis=requires exact private persisted nonce, box identity and next generation; caller strings cannot authorize
    plan14_input_inventory_test.go:424: J4	internal/host/claimhandover_recovery.go	claimCrossBoxHandover.afterRecovery	C+G	linux:internal/host/claimhandover_crossbox.go:wireClaimAdmission	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/report.go	ReadEnrollment	F	linux:internal/host/guardarm.go:RunSystemGuardArm	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/restart.go	restartEligible	E1+E3	linux:internal/host/rollout.go:feedRestarts	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/claimjournal_containment.go	validateClaimJournalContainment	C+G	linux:internal/host/claimjournal_transport.go:ClaimRootHTTP.serveJournal	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_kernel_linux.go	scanStopDescriptors	C+G	linux:internal/host/claimstop_kernel_linux.go:LinuxStopKernel.RecoverStopped	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/relocationinstall.go	ClaimAssembly.relocationBuildAuthority	C+D	linux:internal/host/relocationbuild.go:ClaimAssembly.relocationBuild	Relocation build revalidates operation, captured install stamp, prepared pin and execution participation before writes.
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	validRootRestart	E1	linux:internal/release/rootrestart_history.go:RootRestarts.Bindings	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_creation.go	RootHistory.RecordCreation	E1	linux:internal/host/rootinventory.go:ClaimRootHTTP.commitRootInventoryPending	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers.
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	heldStageable	C+E1	linux:internal/release/materializeheld.go:materializeHeldChecked	root-route;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimunit_binding.go	claimUnitBindings.read	E2	linux:internal/host/claimunit_placement.go:ClaimLaunchRoot.checkUnitBinding	PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor.go	rootMovesFloors.refresh	F	linux:internal/host/rootmovesfloor_source.go:refreshRootMovesFloor	rev3=PROPOSED-p3;identity=carlos system apply/recover and root adopt, systemd root units or offline CLI, uid 0;basis=normal refresh ratchets accepted history; unknown history persists only observed denies and never advertises accepted
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	MaterializeHeld	E2	linux:internal/host/movesstage.go:var heldMaterialize	E23: old held-stage relay forwards the root generation source before artifact writes and outside publication exclusion. Request fields retain their prior hint/authorization checks; only root pins authorize destructive staging on census boxes. No-census source yields empty pins. Fixtures: TestPlan14GenerationLegacyRelay, TestHeldStagePassIsANoOpWithoutRequests, TestHeldStagePassDropsAnUnauthorizedBuild, TestServeHeldStageRequestsRefusesStaleAndTraversal. Production source wiring is inspected; privileged completeness is not claimed.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_boot.go	rootFloorAllowsPrev	F	linux:internal/host/movesfloorgate.go:floorGateMain	rev3=PROPOSED-p3;identity=carlos.prev system floor-allows-prev --root, invoked by root guard selector, uid 0;basis=signed prev identity satisfies local moves and published seeds bounds, relaxed only when no certified build meets bound; caller checks participation separately
    plan14_input_inventory_test.go:424: J4	internal/host/agent.go	makeRestartRoute	B3	linux:internal/host/agent.go:adoptLoop	root-route;kept=B3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/rootstate/live_linux.go	directory.LiveHeld	A+D	linux:internal/rootstate/live.go:LiveHeld	fix1;basis=Retains a trusted private-file descriptor under an OFD write lock; readers query conflicting OFD ownership without locking.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	type RootGenerations	E2	linux:internal/host/rootlaunchverifier.go:rootLaunchVerifier.verify	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	RootGenerations.Retire	E2	linux:internal/host/rootgeneration_retirement.go:generationRetirement.retire	E20: exact reservation closure precedes retirement verification; retained tombstones forbid replay and require sync recommit. Retired records release only their own pins; completeness remains a separate mandatory verifier, still unavailable in production. Fixtures: TestPlan14GenerationRetirementReleasesExactPin, TestPlan14GenerationRetirementRefusals, TestPlan14GenerationClosedReplayRefused, TestPlan14GenerationRetirementProcessCrash, TestPlan14GenerationRetirementKeepsIndependentReference, TestPlan14GenerationClaimsOffRestageMatchesMain.
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_kernel_linux.go	linuxClaimLaunchKernel.VerifyDigest	C+G	linux:internal/host/claimlaunch_authority.go:ClaimLaunchRoot.authorize	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/relocationowners.go	relocationAfterAdmission	C	linux:internal/host/relocationowners.go:RelocationSource.Open	After-admission installation binds local journal bytes to authoritative receipt hash and installed stamp.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_startup.go	verifyRootMigrationFloors	F+G	linux:internal/host/rootmigration_startup.go:verifyRootMigrationStartup	rev3=PROPOSED-p3;identity=root claim controller construction uid 0;basis=checks installed and guard signed binaries against both locally retained protocol bounds without remote access
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_kernel_linux.go	scanStopCgroupsMode	C+G	linux:internal/host/claimstop_kernel_linux.go:LinuxStopKernel.RecoverStopped	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootreleaselock.go	withClaimReleaseCensus	E2	linux:internal/host/rootreleaselock.go:withClaimRootRelease	PROPOSED E45: root enforces census-gated release ordering, bounded acquisition and scoped recovery; registry timer primitives preserve supplied identity but producer integration remains pending.
    plan14_input_inventory_test.go:424: J4	internal/host/claimmoveaccess.go	claimMoveReadAccess.selected	C+G	linux:internal/host/claimmoveaccess.go:claimMoveReadWork.With	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_writers.go	ClaimStopCoordinator.WritersStopped	C+G	linux:internal/host/claimstop_writers.go:ClaimStopHTTP.serveWritersStopped	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/work.go	Serving	C	linux:internal/hostbox/wakepolicy.go:Policy.check	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/movesheldrelease_root.go	type movesHeldReleaseRoot	E2	linux:internal/host/movesheldrelease_production.go:WithProductionMovesHeldRelease	E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	prepareStatus	E1	linux:internal/historyreadback/workflow.go:PrepareOperation	E17: operator saves exact signed authorization and challenge before delivery, resumes without renewal, and verifies enrolled-root exact completion. Existing proof branches are unchanged. Tests: TestPlan14HistoryOperatorWorkflow, TestPlan14HistoryOperatorConflicts, TestPlan14HistoryOperatorExactCompletion, TestPlan14HistoryWorkflowProcessCrash, TestPlan14HistoryCommandResume, TestPlan14HistorySavedFiles, TestPlan14HistoryCLIDispatch.
    plan14_input_inventory_test.go:424: J4	internal/host/claimmoveaccess.go	claimMoveReadAccess.Launch	C+G	linux:internal/host/moveswakesource.go:movesReadLaunch	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/rolelaunch.go	LaunchJournal.UnitReservation	C	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.launchLocked	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/proofbinding.go	proofBindingSource.rollback	B3	linux:internal/host/rootrestart.go:productionRootRestartChecks	canonical record/unit/executable authority and one-attempt rollback; draft incomplete
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/production.go	Ledger.ActivationReady	E2	linux:internal/host/claimstop_run.go:claimActivationReady	PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner.
    plan14_input_inventory_test.go:424: J4	internal/host/buildstate.go	buildStates.write	E3	linux:internal/host/buildstate.go:buildStates.beforeExec	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/healthy.go	ReadHealthy	B+B4	linux:internal/host/proofbinding.go:productionProofBindingSource	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootfloor_available.go	rootFloorAvailable	F	linux:internal/host/rootseedsfloor.go:rootSeedsAllowsBinary	rev3=PROPOSED-p3;identity=root system apply/recover candidate checks and carlos.prev floor-allows-prev via seeds gate, uid 0;basis=checks signed current, retained prev and fixed staged candidate; a floor constrains replacement only if a qualifying certified copy is available
    plan14_input_inventory_test.go:424: J4	internal/rollout/rootfailures.go	RootFailures.VerifiedRetry	E3	linux:internal/host/rootupdates.go:rootUpdateSource.resolve	rev3=PROPOSED-p3;run=8;identity=root adoption uid 0;basis=verifies deployment-root signature, tuple, freshness and exact root book epoch before existing durable retry transition
    plan14_input_inventory_test.go:424: J4	internal/hostguard/root.go	RootAuthority.read	C+G	linux:internal/hostguard/root.go:Guard.Capture	rev3=PROPOSED-p3;identity=carlos instance-control, root control service uid 0; denial views also consumed by carlos agent uid carlos;basis=strict checked root record decoding includes retained migration session denials
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_retirement.go	generationRetirement.verify	E2	linux:internal/host/rootgeneration_retirement.go:generationRetirement.retire	E21: release then host exclusion; root installation and exact settled launch with irreversibly closed writers bind retirement before and after independent kernel verification. Production invokes it from the census-only pin source. Fixtures: TestPlan14GenerationRetirementRootBinding, TestPlan14GenerationRetirementAfterLostStarted, TestPlan14GenerationRetirementBindingProcessCrash, TestPlan14GenerationRetirementCensusGate. Privileged production opener acceptance remains pending.
    plan14_input_inventory_test.go:424: J4	internal/host/movespass.go	movesWorker.liftFences	C	linux:internal/host/movespass.go:movesPass	root-route;kept=C;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootlaunchverifier.go	registerProductionLaunchVerifier	E2	linux:internal/host/claimstop_run.go:RunInstanceControl	PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner. PROPOSED E46: local root installation obligations, exact root intention and inventory revision; service SQL is a deny-only consistency check. Executing identity: root instance-control or root participation/update.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_startup.go	verifyRootMigrationRetained	F+G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=root claim controller construction uid 0;basis=requires each migrated installation to retain its old-session deny, exact stopped predecessor receipt and complete root inventory
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor.go	openRootProtocolFloors	F	linux:internal/host/rootmovesfloor_boot.go:withRootFloorGuardCandidate	rev3=PROPOSED-p3;identity=root adopt refresh, root system update/recovery and root guard floor readers, uid 0;basis=checked root ancestry and leaf ownership for separate moves or seeds public/private stores
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_boot.go	rootFloorAllowsPrevIdentity	F	linux:internal/host/rootmovesfloor_boot.go:rootFloorAllowsPrev	rev3=PROPOSED-p3;identity=carlos.prev system floor-allows-prev --root, invoked by root guard selector, uid 0;basis=checks local signed prev and independent moves/seeds bounds using root census identity; no remote reads
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.activationGuard	D+F	linux:internal/host/systemapply.go:systemApplier.install	rev3=PROPOSED-p3;identity=carlos system apply/recover root units and offline root CLI uid 0;basis=release exclusion then scoped participation transaction then effective moves/seeds floor and registry; signed candidate checks remain inside guard; nested journal close reuses live exclusion
    plan14_input_inventory_test.go:424: J4	internal/host/rootroute.go	sameProofCandidate	B3	linux:internal/host/proofbinding.go:proofBindingSource.resolve	canonical record/unit/executable authority and one-attempt rollback; draft incomplete
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_delivery.go	HistoryReconstructionKey	E1	linux:internal/historyreadback/workflow.go:Operation.Deliver	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/registry/artifacthosts.go	Registry.ArtifactHosts	E2	linux:internal/registry/remote_dispatch.go:Registry.dispatchRemote	E32: census-only E2 completeness discovers the bounded union of route and timer hosts, including inactive orphan timers, through the service-user read-only parser. Unknown hosts refuse even with an empty root installation list; discovery supplies no authority and never removes a retained obligation. Pre-flight 33, 80, 82, 83, 89 and 90. Fixtures: TestArtifactHosts, TestRemoteReadOnlyWALRegistry, TestPlan14GenerationRegistryRows, TestPlan14GenerationRegistryProductionReader; extended TestPlan14GenerationRequiredArtifactsRootRunner remains runner-pending.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_containment_linux.go	generationKernel.containedTask	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationKernel.task	PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/host/claimproduction.go	claimServingLaunchSource	C+G	linux:internal/host/claimproduction.go:ProductionClaimOwnerProvider.OpenClaimOwners	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootupdates.go	productionRootUpdates	E3	linux:internal/host/agent.go:runAdoptWithEnsureSystemUnits	rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=checks census before opening any new authority; retains root failure book and installation store and installs canonical inputs;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=checks census before opening any new authority; retains root failure book and installation store and installs canonical inputs
    plan14_input_inventory_test.go:424: J4	internal/host/guardarm.go	guardArmIdle	F	linux:internal/host/guardarm.go:RunSystemGuardArm	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostexec/controller.go	Controller.authority	D	linux:internal/hostexec/controller.go:Open	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_evidence.go	readMigrationStop	G	linux:internal/host/rootmigration_collect_linux.go:recoverMigrationStop	rev3=PROPOSED-p3;identity=carlos system journal-migrate offline operator uid 0;basis=revalidates enrolled immutable stop signature and exact launch inventory journal tuple; preserves original bytes and evidence time
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	RootRestarts.read	E1	linux:internal/release/rootrestart_history.go:RootRestarts.Bindings	E14 restart journal: exact canonical request/target snapshot, durable before-invocation intent, no ambiguous replay, explicit completeness and completion. Component only; production target/dispatch wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartPendingSurvivesRollover, TestPlan14RootRestartAmbiguousDoesNotReplay, TestPlan14RootRestartVisibleSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/proofbinding.go	proofBindingSource.binding	B3	linux:internal/host/proofbinding.go:proofBindingSource.forHost	Signed named-unit recovery is independent of release and health history. Root rechecks canonical source, unit, process, signed target and trusted live pointer; captures attempt authority before publication; verifies readiness and resumes without repeated effects. Fixtures: TestPlan14SignedActiveFixIgnoresHistory, TestPlan14SignedActiveFixAuthority, TestPlan14SignedFixSupersedesOlderAttempt, TestPlan14ActiveRecoveryProcessCrash, TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14SignedRestartRequiresTrustedLiveLink.
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor_publication.go	verifyRootSeedsPublication	F	linux:internal/host/rootseedsfloor_publication.go:readRootSeedsBound	rev3=PROPOSED-p3;identity=root protocol readers uid 0; edge advertisements from public root projection uid carlos;basis=verifies canonical root signature, deployment, purpose, schema and protocol minimum; unsigned source cannot arm seeds
    plan14_input_inventory_test.go:424: J4	internal/host/movesfloor.go	judgePrevWith	F	linux:internal/host/movesfloor.go:rootJudgeMovesPrevWithSource	route-and-input
    plan14_input_inventory_test.go:424: J4	internal/host/rolloutdeclined.go	failureHolds.heldBuild	E1+E3	linux:internal/host/rolloutdeclined.go:failureHolds.report	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/regionalworker.go	RegionalWorker.Census	C	linux:internal/hostbox/regionalworker.go:RegionalWorker.Run	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostops/production_delete.go	ProductionAuthority.StartDeleteClaim	C	linux:internal/hostops/operations.go:Controller.BeginRetire	Production delete obtains verified completed-box fence before permitting claim transition across completion barrier.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_requirements.go	generationLocalObligations	E2	linux:internal/host/rootgeneration_inventory.go:readProductionGenerationInventory	PROPOSED E46: root participation/recovery reads retained root census, fences, inventory and kernel evidence; no deployment-store network dependency. SQL remains deny-only.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor.go	rootMovesFloors.localBound	F	linux:internal/host/rootmovesfloor_boot.go:withRootFloorGuardCandidate	rev3=PROPOSED-p3;identity=carlos system apply/recover and root adopt, systemd root units or offline CLI, uid 0;basis=retains every readable independent deny; missing or corrupt history adds no invented refusal or acceptance
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart_requests_source.go	rootRestartRequestSource.target	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.consume	E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate.
    plan14_input_inventory_test.go:424: J4	internal/host/movesfinal.go	sourceFinal.parkLocal	C	linux:internal/host/movesfinal.go:sourceFinal.run	root installation/fence backend and lock-free agent projection; establishment blocked; draft incomplete
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/relocation.go	requireReceiptOfInstallation	C	linux:internal/hostclaim/relocation.go:RecordLocalInstall	Receipt guard binds target, enrollment, install stamp and digest and refuses remaking opened prepared generation.
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	Respond	E1	linux:internal/host/roothistory_readback.go:historyReadbackPublisher.publish	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgenerations_launch.go	type generationLaunchPermit	E2	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.startRecorded	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_inventory.go	productionGenerationInventory	E2	linux:internal/host/rootgenerationpins.go:productionRootGenerationPins	E38: reconcile completed root retirement against the retained stop receipt and exact inventory; inspect parked identities, require retired rows absent or an independently inventoried successor, and retain generation pins. Fixtures: TestPlan14GenerationParkedPayload, TestPlan14GenerationParkedCrash, TestPlan14GenerationParkedKeepsReservation, TestPlan14GenerationParkedReadback; TestPlan14GenerationParkedRootRunner is runner-pending. Timer producer matches retained entries once and preserves successors on replay: TestPlan14GenerationTimerRetirement. No claims-off path changes. PROPOSED E46: local root installation obligations, exact root intention and inventory revision; service SQL is a deny-only consistency check. Executing identity: root instance-control or root participation/update.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_timers.go	rootMigrationTimers.owner	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=offline migration root uid 0;basis=derives installation ownership from root-observed host, incarnation, stamp and box, never a service row owner
    plan14_input_inventory_test.go:424: J4	internal/hostbox/restore.go	writeGeneration	C	linux:internal/hostbox/restore.go:ColdRestore.Install	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/claimwakestop.go	ClaimAssembly.collectRetirementStop	C+G	linux:internal/host/claimassembly.go:ClaimAssembly.Build	route-and-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/regionalworker.go	RegionalWorker.runHost	C	linux:internal/hostbox/regionalworker.go:RegionalWorker.Run	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/relocationowners.go	ClaimAssembly.relocationReleaseHold	C+D	linux:internal/host/relocatepass.go:newCompletionRuntime	Completion releases hold only after verified participation discharge, then lifts agent-owned probe fence and marks authoritative completion.
    plan14_input_inventory_test.go:424: J4	internal/hostrelocate/participant.go	Participant.Sweep	C+D		Sweep reads fresh claim before retiring a participant; absence never manufactures a local discharge.
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_authority.go	ClaimLaunchRoot.authorize	D+E2	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.startRecorded	Both root launch authorizations read root participation and match authenticated peer; TestPlan14ExecutionFinalLaunchUsesRootParticipation. PROPOSED E47: final named-unit launch authorization rechecks the retained root binding and refuses missing, retired, foreign or changed canonical shape.
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_recovery.go	rootRestartChecks.settleHistory	B3+E1	linux:internal/host/rootrestart.go:rollbackUnitRestart	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_creation.go	type rootHistoryAccess	E1	linux:internal/host/claimretire_transport.go:type ClaimRootHTTP	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers.
    plan14_input_inventory_test.go:424: J4	internal/host/claimready_other.go	claimProbeSocketReady	B3	darwin:internal/host/claimconstruction.go:claimGroupDWiring	root-route;kept=B3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/reconcile_adapter.go	ReconcileAdapter.Retire	C+E2	linux:internal/host/claimretire_transport.go:ClaimRootHTTP.retire	E38: reconcile completed root retirement against the retained stop receipt and exact inventory; inspect parked identities, require retired rows absent or an independently inventoried successor, and retain generation pins. Fixtures: TestPlan14GenerationParkedPayload, TestPlan14GenerationParkedCrash, TestPlan14GenerationParkedKeepsReservation, TestPlan14GenerationParkedReadback; TestPlan14GenerationParkedRootRunner is runner-pending. Timer producer matches retained entries once and preserves successors on replay: TestPlan14GenerationTimerRetirement. No claims-off path changes. PROPOSED E44: root timer intention must precede materialization; exact registration and row identity required; root retirement cannot infer ownership from registry enumeration. Tests: TestPlan14TimerIntentionBeforeMaterialization, TestPlan14GenerationTimerRetirement; root timer intention, sync-failure retry and retirement acceptance. Scheduler producer wiring remains incomplete. PROPOSED E46: captured claim selection and root journal mutation; root RPC outside service host exclusion; SQL/route data never grants root authority. Executing identity: service controller; root for inventory/retirement callbacks.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationRetainedFiles	E2	linux:internal/host/rootgeneration_kernel_linux.go:productionGenerationAbsence	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.;rev3=PROPOSED-p3;run=8;identity=root generation recovery uid 0;basis=requires verified persistent executable and tree identity through generationCurrentBinding
    plan14_input_inventory_test.go:424: J4	internal/host/caps_pass.go	capabilityPass	E4	linux:internal/host/agent.go:runAdoptUnderRootRelease	root-route
    plan14_input_inventory_test.go:424: J4	internal/rootstate/file_linux.go	OpenTrustedFile	A+B3	linux:internal/host/rootgenerations_launch.go:productionRootGenerations	kept=B3;scope=canonical-binding-and-readiness;implementation-incomplete
    plan14_input_inventory_test.go:424: J4	internal/rollout/failures.go	var randRead	E1+E3	linux:internal/rollout/failures.go:newBookID	fix1-merge-review;basis=Names the cryptographic entropy source for failure-book identity; remains retry replay authority.
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/relocation.go	fenceTargetStuck	C	linux:internal/hostclaim/relocation.go:FenceExhaustedTarget	Exhausted-target transition verifies fence and revokes only dead target execution, preserving another live source.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/reconcile_adapter.go	ReconcileAdapter.MintHeld	C	linux:internal/hostbox/reconcile_adapter.go:ReconcileAdapter.MintHeldUnder	Local held-row mint requires matching nested installation ownership and operation; production remote path uses separate registration.
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/participation.go	checkLegacyParticipation	D	linux:internal/hostfloor/disk.go:Disk.Begin	Claims-on or retained root census uses root exclusion; claims-off with no census preserves main participation and recovery behavior.
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	RootRestarts.Complete	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.consume	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_refresh.go	withRootMovesFields	F	linux:internal/host/movesfloor.go:withMovesFields	rev3=PROPOSED-p3;identity=carlos agent edgesFileLoop, carlos-edge.service uid carlos;basis=agent publishes only checked root public verdict and explicitly quarantines unreadable participant state
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/remote.go	CheckRemote	F	linux:internal/hostexec/controller.go:Config.checkRemoteUpdateIdentity	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_census_linux.go	checkedGenerationTree	E2	linux:internal/host/rootgeneration_census_linux.go:productionGenerationKernelCensus	E24: independent root installation and launch enumeration, exact reservation reconciliation and fresh quiescent whole-version-tree kernel census; missing sources, open unreserved launches, foreign namespaces and uncontained tasks refuse. Production pin source certifies this evidence before returning pins. Fixtures: TestPlan14GenerationInventoryCompleteness, TestPlan14GenerationInventoryPinConsumer, TestPlan14GenerationInventoryLifecycle, TestPlan14GenerationInventoryProcessCrash, TestPlan14GenerationKernelCensusUnknownReference, TestPlan14GenerationLaunchInventory, TestPlan14GenerationReaderDoesNotInitialize, TestPlan14GenerationInstallationInventory. Checked production source/kernel witnesses passed on the E27 root runner. E29 physical-payload and installed-unit witnesses passed on the controller runner; E30 required-artifact witness pending. PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_kernel_linux.go	linuxClaimLaunchKernel.Verify	C+G	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.startRecorded	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/empty_census.go	EmptyInstallationCensus.CheckRootRegisteredRow	C	linux:internal/host/rootinventory.go:ClaimRootHTTP.commitRootInventoryPending	Crash census exception admits only the row named by root pending registration; all other census checks remain required.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_pass.go	passConfig.recordRefusal	E1	linux:internal/release/adopt.go:adoptHost	E1 canonical binding selection and recheck; durable attempt precedes effects; only independent installed observation settles and retires the exact target refusal.
    plan14_input_inventory_test.go:424: J4	internal/host/movesfloor.go	readLineFrom	F	linux:internal/host/movesfloor.go:readLine	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/relocatepass.go	RelocationRuntime.once	C+D	linux:internal/host/relocatepass.go:RelocationRuntime.Run	Agent pass re-reads claims around participant/worker effects and typed completion; unrelated journal sweep remains legacy.
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_root.go	type ClaimLaunchRoot	E1+E2	linux:internal/host/claimlaunch_production.go:WithProductionClaimLaunch	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals. PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationpins.go	RootGenerationPins.StagedPins	E2	linux:internal/host/rootmovesfloor_refresh.go:rootFloorDowngradeIdle	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.;rev3=PROPOSED-p3;run=8;identity=root release retention uid 0;basis=verifies persistent executable and tree proofs before retaining staged pins across reboot
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationMounts	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationKernel.task	E27: refuse nsfs mounts explicitly because a mounted namespace can retain staged bind mounts after its last process and descriptor exit. Fixtures: TestPlan14GenerationKernelRetainedNamespaceMount (retirement and census); TestPlan14GenerationKernelNamespaceMountRootRunner (real namespace retention and release, passed on the E27 root runner). Other mount-device checks remain restrictive.
    plan14_input_inventory_test.go:424: J4	internal/host/proofobserve.go	proofObserver.observe	B3	linux:internal/host/rootupdates.go:productionRootUpdates	fix1;basis=Observes only the canonically bound unit, executable and readiness, including the installed console guard wrapper.
    plan14_input_inventory_test.go:424: J4	internal/host/rolloutdeclined.go	failureHolds.report	E1+E3	linux:internal/host/rollout.go:rolloutStatusProbe	fix1-merge-review;basis=Reports only durable published restriction epochs and the supported retry protocol; reports do not grant authority.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalmigration_linux.go	readLegacyJournals	C	linux:internal/hostbox/journalmigration_linux.go:JournalService.MigrateLegacy	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/launchjournal.go	OpenLaunchJournal	C	linux:internal/host/claimjournal_migration.go:var openClaimRootJournal	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/units/carlos-adopt.service	external	B3+C+D+E1	linux:internal/host/bootstrap.go:var unitsFS	root-input;kept=B3,C,D,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/proofbinding.go	proofRouteReady	B3	linux:internal/host/proofobserve.go:productionProofObserver	kept=B3;scope=canonical-binding-and-readiness;implementation-incomplete
    plan14_input_inventory_test.go:424: J4	internal/host/relocationflush.go	ReleasePositionsFile.Recorded	C	linux:internal/host/relocationeffects.go:RelocationEffects.flushStopped	Release-position candidate is bound to exact stop request and process identity before receipt construction; unrelated replication positions remain legacy payload.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootview.go	RootAuthority.viewLocked	C+G	linux:internal/hostguard/rootview.go:RootAuthority.Installation	rev3=PROPOSED-p3;identity=carlos instance-control, root control service uid 0; denial views also consumed by carlos agent uid carlos;basis=projects root migration denials together with canonical installation and existing fences
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart_requests.go	type rootRestartRequests	E1	linux:internal/host/rootrestart_requests.go:productionRestartRequestPass	E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrecovery_rebind.go	ClaimRootHTTP.rebindRecoveryInventory	C	linux:internal/host/rootinventory.go:ClaimRootHTTP.recoverRootInventory	Retain fresh claim and inventory checks and refuse a box listed Lost.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart_requests_source.go	rootRestartRequestSource.installation	E1	linux:internal/host/rootupdates.go:rootUpdateSource.resolve	E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_refresh.go	rootFloorBinary.supports	F	linux:internal/host/guardarm.go:RunSystemGuardArm	rev3=PROPOSED-p3;identity=root apply/recover/adopt units uid 0 and agent edges publisher carlos-edge.service uid carlos;basis=signed digest/release are required; protocol minimum applies only when a retained floor exists, preserving unknown-history permission
    plan14_input_inventory_test.go:424: J4	internal/host/restart.go	dispatchBoundedWakes	E1+E3	linux:internal/host/restart.go:cycleWorkers	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostguard/record_unix.go	recordDir.write	C	linux:internal/hostguard/root.go:Guard.AbandonRootInventory	root installation/fence backend and lock-free agent projection; establishment blocked; draft incomplete
    plan14_input_inventory_test.go:424: J4	internal/host/relocatepass.go	RelocationRuntime.finishCompletion	C+D	linux:internal/host/relocatepass.go:RelocationRuntime.once	Completion dispatch requires authoritative completed operation and current executor before discharge.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_outcomes.go	RootHistory.recoveryOutcomes	E1	linux:internal/release/roothistory.go:RootHistory.Refusals	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/claimhandover_crossbox.go	claimCrossBoxHandover.Before	C+G	linux:internal/host/claimhandover_crossbox.go:wireClaimAdmission	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimrelocation.go	openClaimRelocationOwners	C+G	linux:internal/host/claimproduction.go:ProductionClaimOwnerProvider.OpenClaimOwners	Relocation owner constructor receives existing serving sources and verified identity inside feature gate.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationKernel.boot	E2	linux:internal/host/rootgeneration_census_linux.go:generationKernel.census	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/typedpark_linux.go	TypedParker.Park	C	linux:internal/hostbox/typedretire.go:TypedRetirement.Run	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/relocationrows.go	RelocationRow	C	linux:internal/hostbox/reconcile.go:Reconciler.rowDecision	Relocation row decision consumes root admission-fence view and exact claim participation; grants no first registration itself.
    plan14_input_inventory_test.go:424: J4	internal/host/claimstate_linux.go	claimPrivatePathOwner	C+G	linux:internal/host/claimstate_linux.go:prepareClaimStateDirectory	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootexecution_runtime.go	var openClaimExecutionAuthority	D	linux:internal/host/claimassembly.go:NewProductionRootClaimStop	Instance-control owns broker, checked store, monitor and bounded cleanup lifetime.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootbroker.go	RootBroker.write	D	linux:internal/hostexec/rootbroker.go:RootBroker.settle	fix1;basis=Bounds replay to the latest acquisition and preceding settlement, rotates renewal tokens, and holds broker-only OFD liveness.
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory.go	boundRootHistory	E1	linux:internal/host/roothistory.go:openRootHistory	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart.go	rootRestartChecks.live	B3+E1	linux:internal/host/roothistory_recovery.go:linkRootHistory	Signed named-unit recovery is independent of release and health history. Root rechecks canonical source, unit, process, signed target and trusted live pointer; captures attempt authority before publication; verifies readiness and resumes without repeated effects. Fixtures: TestPlan14SignedActiveFixIgnoresHistory, TestPlan14SignedActiveFixAuthority, TestPlan14SignedFixSupersedesOlderAttempt, TestPlan14ActiveRecoveryProcessCrash, TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14SignedRestartRequiresTrustedLiveLink.
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_kernel_linux.go	LinuxStopKernel.recoverAfterReboot	C+G	linux:internal/host/claimstop_kernel_linux.go:LinuxStopKernel.RecoverStopped	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/restart.go	seedRestartMarks	E1+E3	linux:internal/host/restart.go:restartSeed	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/typedpark_linux.go	TypedParker.VerifyEmptyDirectory	C	linux:internal/hostbox/coldhandover.go:ColdHandover.retireIntended	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_root.go	ClaimLaunchRoot.launchRecord	C+E2+G	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.launchLocked	root-input;kept=C,G;scope=protected-decision-only PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/host/versionsweep.go	settingsPins	E2	linux:internal/host/versionsweep.go:sweepStagedVersions	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/buildstate.go	keepsBuildState	E3	linux:internal/host/buildstate.go:buildStates.wakeTarget	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/claimhandover_crossbox.go	claimCrossBoxHandover.sourceEvidence	C+G	linux:internal/host/claimhandover_crossbox.go:claimCrossBoxHandover.After	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_retirement.go	RootHistory.recoveryRetired	E1	linux:internal/release/roothistory_delivery.go:RootHistory.ReceiveRecoveryRetirements	Exact completion binds the accepted authorization digest from durable private history to enrolled-root signed readback. Pending originals, changed evidence and canonical sources cannot supply retirement completion. Fixtures: TestPlan14HistoryReconstructionCompletion, TestPlan14HistoryRetirementCompletion, TestPlan14ReadReconstructionCompletion, TestPlan14ReadRetirementCompletion, TestPlan14RecoveryRetirementProductionCallback, TestPlan14RootHistoryReconstructionCrash, TestPlan14HistoryRetirementProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration.go	rootMigration.run	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=carlos system journal-migrate offline uid 0;basis=offline guarded migration reobserves changed claims, retains union of session tuples, publishes only durable completion and verifies completed replay without rewriting census
    plan14_input_inventory_test.go:424: J4	internal/host/claimmoveparks.go	openProductionClaimMoveWake	C+G	linux:internal/host/claimproduction.go:ProductionClaimOwnerProvider.OpenClaimOwners	Moves owner construction wraps every bucket request in bound identity check and preserves wake refusal.
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/image_linux.go	ExecutingHash	F	linux:internal/host/guardarm.go:RunSystemGuardArm	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	syncSibling	E2	linux:internal/release/adopt.go:stageFrom	E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalmigration_linux.go	lockJournalMigration	C	linux:internal/hostbox/journalmigration_linux.go:JournalService.MigrateLegacy	root-input
    plan14_input_inventory_test.go:424: J4	internal/rootstate/file_other.go	CheckPublicConfig	A+B3	darwin:internal/host/proofnamed.go:proofBindingSource.trustedBytes	fix1;basis=Non-Linux descriptor checks fail closed.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_outcomes.go	historyRecoveryKey	E1	linux:internal/release/roothistory_outcomes.go:RootHistory.RetainRecovery	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor.go	readEffectiveSeedsFloor	F	linux:internal/host/rootseedsfloor.go:systemApplier.seedsActivationRefusal	rev3=PROPOSED-p3;identity=root adopt refresh, root system update/recovery and root guard floor readers, uid 0;basis=census selects verified signed publication plus capped retained deny; unpublished seeds impose no bound; no census retains legacy reader
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	RootRestarts.Fail	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.consume	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/store.go	Read	C+D+G	linux:internal/host/movesheldrelease_production.go:WithProductionMovesHeldRelease	root-input;kept=C,D,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	rootRestartRecord.advance	E1	linux:internal/release/rootrestart_history.go:RootRestarts.Finish	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/units/carlos-stage.service	external	B3+C+D+E1	linux:internal/host/bootstrap.go:var unitsFS	root-input;kept=B3,C,D,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/reconcile_adapter.go	ReconcileAdapter.MintHeldUnder	C	linux:internal/host/relocationinstall.go:ClaimAssembly.relocationInstall	Remote held mint registers outside selected work, revalidates under work and checks exact held-row ownership.
    plan14_input_inventory_test.go:424: J4	internal/instanceexec/claim_generation_linux.go	ScopeClaimGeneration	E2	linux:internal/instanceexec/claimexec_linux.go:scopedClaimInit	PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/begun.go	ReadBegun	F	linux:internal/host/guardtransaction.go:systemApplier.guardFinished	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/hold.go	RegistryHoldPolicy	C	linux:internal/host/claimassembly.go:ClaimAssembly.Build	root-route
    plan14_input_inventory_test.go:424: J4	internal/release/ratchet.go	DigestRatchet.marked	E1	linux:internal/release/ratchet.go:DigestRatchet.Admit	root-input;kept=E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/relocationowners.go	RelocationSource.Open	C+D	linux:internal/host/claimrelocation.go:openClaimRelocationOwners	Relocation owner wiring binds verified actor, C8 provider and identity-checked requests; admission remains typed.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/clock_linux.go	BootID	D	linux:internal/host/rootexecution_runtime.go:newClaimExecutionRuntime	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_retirement.go	validHistoryRetirement	E1	linux:internal/release/roothistory_retirement.go:RootHistory.RetireRecovery	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	productionGenerationAbsence	E2	linux:internal/host/rootgeneration_retirement.go:productionRetireGenerations	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor.go	rootMovesFloors.persist	F	linux:internal/host/rootmovesfloor.go:rootMovesFloors.refresh	rev3=PROPOSED-p3;identity=carlos system apply/recover and root adopt, systemd root units or offline CLI, uid 0;basis=writes quarantine before selector and deny ratchet, then accepted state, then synced public acknowledgement
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_kernel_linux.go	claimLaunchProcessIdentity	C+G	linux:internal/host/claimlaunch_kernel_linux.go:linuxClaimLaunchKernel.Observe	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/relocationeffects.go	RelocationEffects.EnsureLocal	C	linux:internal/hostrelocate/participant.go:Participant.Step	Installation repair compares authoritative local-install receipt, exact box/enrollment/stamp and re-verifies materialization.
    plan14_input_inventory_test.go:424: J4	internal/host/relocationinstall.go	relocationInstallAuthority	C	linux:internal/host/relocationinstall.go:ClaimAssembly.relocationInstall	Existing relocation install authority binds exact kind/op/phase/executor/install stamp, lost state and unopened prepared generation.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/root.go	Guard.CommitRootInventoryArtifacts	G	linux:internal/host/rootinventory.go:ClaimRootHTTP.commitRootInventoryPending	rev3=PROPOSED-p3;identity=root claim controller construction uid 0;basis=root inventory commit admits a newer migration writer only after its exact predecessor completed; old sessions stay denied
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_containment_linux.go	generationContainedStatus	E2	linux:internal/host/rootgeneration_containment_linux.go:generationKernel.containedTask	PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/rollout/rootfailures.go	rootFailureWriter	E3	linux:internal/rollout/rootfailures.go:OpenRootFailures	rev3=PROPOSED-p3;run=8;identity=root adoption and migration uid 0;basis=writes migration identity, failure epochs and import fingerprints atomically through checked private root store
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_payload_other.go	generationPayloadFiles	E2	darwin:internal/host/rootgeneration_inventory.go:generationReconciler.reconcile	E28: retained data payloads require exact device/inode/type through no-symlink descriptor opens before and after kernel inspection. Missing, replaced and intended payloads remain unresolved. Tests: TestPlan14GenerationPayloadPhysicalIdentity; privileged TestPlan14GenerationPayloadPhysicalRootRunner remains runner-pending. Route/timer and running-tenant containment are not accepted by this check.
    plan14_input_inventory_test.go:424: J4	internal/host/claimparticipation_stale.go	productionClaimLocal.clearUntracked	D	linux:internal/host/claimparticipation.go:productionClaimLocal.prepareLegacyWith	Untracked participation cleanup now carries exact controller binding into retirement before stale-state clearing.
    plan14_input_inventory_test.go:424: J4	internal/host/claimready_linux.go	claimParentPID	B3	linux:internal/host/claimready_linux.go:claimProbePeer	root-input;kept=B3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rolloutdeclined.go	failureHolds.holdOf	E1+E3	linux:internal/host/rolloutdeclined.go:failureHolds.heldBuild	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/empty_census.go	LaunchJournal.HasHost	C	linux:internal/hostbox/empty_census.go:EmptyInstallationCensus.checkLocal	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/reconcile.go	activationReader.Read	C	linux:internal/host/rootinstallation.go:rootInstallationHostApp	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/relocationwake.go	RelocationWakeInputs.Select	C	linux:internal/host/claimconstruction.go:OpenProductionClaimAssembly	Relocation wake binds prepared generation, release receipt and install stamp before admission; launch payload selection remains legacy.
    plan14_input_inventory_test.go:424: J4	internal/rootstate/link_linux.go	directory.readLink	A+E1	linux:internal/rootstate/link_linux.go:ReadTrustedLink	Pins the symlink inode with O_PATH and checks owner/type/link count before readlinkat. Fixture: TestPlan14TrustedLiveLink.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_retirement.go	RootHistory.recoveryRetirementDigest	E1	linux:internal/release/roothistory_retirement.go:RootHistory.recoveryRetired	Exact completion binds the accepted authorization digest from durable private history to enrolled-root signed readback. Pending originals, changed evidence and canonical sources cannot supply retirement completion. Fixtures: TestPlan14HistoryReconstructionCompletion, TestPlan14HistoryRetirementCompletion, TestPlan14ReadReconstructionCompletion, TestPlan14ReadRetirementCompletion, TestPlan14RecoveryRetirementProductionCallback, TestPlan14RootHistoryReconstructionCrash, TestPlan14HistoryRetirementProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	ReadStatus	E1	linux:internal/historyreadback/workflow.go:Operation.Read	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	publish	E1	linux:internal/historyreadback/workflow.go:Operation.Deliver	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	history_cli.go	historySave	E1	linux:history_cli.go:historyCommand	E17: operator saves exact signed authorization and challenge before delivery, resumes without renewal, and verifies enrolled-root exact completion. Existing proof branches are unchanged. Tests: TestPlan14HistoryOperatorWorkflow, TestPlan14HistoryOperatorConflicts, TestPlan14HistoryOperatorExactCompletion, TestPlan14HistoryWorkflowProcessCrash, TestPlan14HistoryCommandResume, TestPlan14HistorySavedFiles, TestPlan14HistoryCLIDispatch.
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_kernel_linux.go	linuxClaimLaunchKernel.tenant	C+G	linux:internal/host/claimlaunch_kernel_linux.go:linuxClaimLaunchKernel.Observe	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_refresh.go	rootFloorJudge.refresh	F	linux:internal/host/rootmovesfloor_refresh.go:rootRefreshAndJudgeMovesPrev	rev3=PROPOSED-p3;identity=carlos system apply/recover and root adopt, systemd root units or offline CLI, uid 0;basis=refreshes retained floor before signed current/previous judgement, even when previous is absent
    plan14_input_inventory_test.go:424: J4	internal/hostbox/empty_census.go	censusRule.check	C	linux:internal/hostbox/empty_census.go:EmptyInstallationCensus.checkLocal	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootview.go	RootAuthority.Installation	E2	linux:internal/host/rootinstallation.go:rootInstallationHostApp	E20: read the atomic root installation under the existing host exclusion without recursive lock acquisition; retain fresh claim, canonical record, signed artifact and final reservation checks. Fixtures: TestPlan14GenerationLaunchDoesNotReenterRootLock, TestPlan14GenerationLaunchRefusals, TestPlan14RootDispatchRejectsRegistryMutation.
    plan14_input_inventory_test.go:424: J4	internal/host/claimconstruction.go	refusingRootWake	C+G	linux:internal/host/claimassembly.go:ClaimAssembly.Build	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/instanceexec/claimexec_linux.go	checkClaimExec	E2	linux:internal/instanceexec/claimexec_linux.go:scopedClaimInit	PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/console/browserrestart.go	Server.handleBrowserRestart	E1+E3	linux:internal/console/browserrestart.go:Server.handleAppRestart	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/reconcile_adapter.go	ReconcileAdapter.Install	C	linux:internal/hostbox/reconcile_adapter.go:ReconcileAdapter.Configure	Reconcile adapter binds record and routes landing mint through root registration while preserving existing typed ownership paths.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_parked.go	generationRetirements	E2	linux:internal/host/rootgeneration_parked.go:generationPhysicalPayloads	E38: reconcile completed root retirement against the retained stop receipt and exact inventory; inspect parked identities, require retired rows absent or an independently inventoried successor, and retain generation pins. Fixtures: TestPlan14GenerationParkedPayload, TestPlan14GenerationParkedCrash, TestPlan14GenerationParkedKeepsReservation, TestPlan14GenerationParkedReadback; TestPlan14GenerationParkedRootRunner is runner-pending. Timer producer matches retained entries once and preserves successors on replay: TestPlan14GenerationTimerRetirement. No claims-off path changes. PROPOSED E46: local root installation obligations, exact root intention and inventory revision; service SQL is a deny-only consistency check. Executing identity: root instance-control or root participation/update.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/local_unix.go	tryAcquireNamed	D	linux:internal/hostexec/local_unix.go:tryAcquire	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/rollback.go	writeGroupRefusals	E1	linux:internal/release/adopt.go:adoptHost	E1 group refusal writer persists root denial before its diagnostic projection; pending attempt remains restrictive.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_pass.go	RootHistoryPass.begin	E1	linux:internal/release/adopt.go:adoptHost	Root history intent is linked to captured canonical rollback authority before live effects; verified recovery settles only its exact intent. Fixtures: TestPlan14HistoryRollbackLink, TestPlan14HistoryRecoveryRefusesChanges, TestPlan14HistoryRecoveryProcessCrash, TestPlan14HistorySettlementRetriesVisibleSync. E1 migration and restart consumption remain incomplete.
    plan14_input_inventory_test.go:424: J4	internal/host/claimwakestop.go	ClaimAssembly.stopRetryAttempt	C+G	linux:internal/host/claimwakestop.go:ClaimAssembly.bindClaimWakeStop	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimhandover_crossbox.go	relocationBefore	C	linux:internal/host/claimhandover_crossbox.go:wireClaimAdmission	Before-admission dispatch binds relocation executor and probe phase before typed handover.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_replace.go	replacementReconstruction	E1	linux:internal/release/roothistory_reconstruct.go:RootHistory.Reconstruct	Signed replacement binds the exact pending digest and current sources/revisions; old intended refusals and hold bounds remain restrictive. Fixtures: TestPlan14ReconstructionReplacement, TestPlan14ReconstructionReplacementCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_production.go	NewProductionClaimStopHandler	C+G	linux:internal/host/claimassembly.go:NewProductionRootClaimStop	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/edgesfile.go	edgesFileWriteClaims	F	linux:internal/host/edgesfile.go:edgesFileLoop	root-route;kept=F;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostexec/pending_linux.go	tryExistingPendingLock	D	linux:internal/hostexec/pending_linux.go:recoverPending	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory.go	RootHistory.Blocks	E1	linux:internal/host/namedrecovery.go:namedUnitRecovery.checkHistory	E13: signed recovery allows unknown history but preserves usable refusals, including retained originals; verified later promotion clears only D1. Health recording is independent of program recording; minting requires a census. Fixtures: TestPlan14RecoveryUnknownHistory, TestPlan14RecoveryKnownRefusal, TestPlan14RecoveryOriginalRefusalWithUnknownHistory, TestPlan14RootHistoryVerifiedRetryBeforeAttempt, TestPlan14ProgramFailureStillRecordsHealth, TestPlan14RootHistoryMintCensus.
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	recheck	E1	linux:internal/historyreadback/workflow.go:Operation.Deliver	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/activator/backend_exec.go	ExecBackend.startSidecarUnitFrom	E2	linux:internal/activator/genbackend.go:ExecBackend.StartSidecarGen	E40: claim-enabled raw backend refuses unsupported direct, placed and legacy-control launches before spawn. Claims-off body unchanged. TestPlan14GenerationBackendDirectBoundary, TestPlan14GenerationBackendControlBoundary, TestPlan14GenerationBackendAuxiliaryBoundary; each guard has an independent behavioral mutation. Agent-side refusal is not root reservation or containment evidence.
    plan14_input_inventory_test.go:424: J4	internal/host/rootinventory.go	ClaimRootHTTP.recoverRootInventory	C+E1	linux:internal/host/claimretire_transport.go:ClaimRootHTTP.RecoverPending	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers. PROPOSED E46: local root installation obligations, exact root intention and inventory revision; service SQL is a deny-only consistency check. Executing identity: root instance-control or root participation/update.
    plan14_input_inventory_test.go:424: J4	internal/host/movesfloor.go	rootJudgePrev	F	linux:internal/host/agent.go:runAdoptUnderRootRelease	rev3=PROPOSED-p3;identity=carlos adopt root pass, root unit uid 0;basis=normal adopt combines moves and seeds verdict errors; unpublished seeds remain inert; raised bounds never block recording signed prev
    plan14_input_inventory_test.go:424: J4	internal/release/programhistory.go	ReadPrograms	E1+E3	linux:internal/release/adopt.go:adoptHost	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/wakepolicy.go	Policy.check	C	linux:internal/hostbox/wakepolicy.go:Policy.Check	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_refresh.go	rootFloorAdvertisementFor	F	linux:internal/host/rootmovesfloor_refresh.go:withRootMovesFields	rev3=PROPOSED-p3;identity=carlos agent edgesFileLoop, carlos-edge.service uid carlos;basis=agent reports accepted only for matching generation with signed compatible current and previous verdict
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/floor.go	Read	F	linux:internal/host/hostfencepass.go:hostFenceOnce	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostrelocate/worker.go	Worker.Start	C+D		Relocation start binds verified worker and source/target identity, checks termination fence and discharge; placement policy stays legacy.
    plan14_input_inventory_test.go:424: J4	internal/host/legacyrestart.go	restartEffectFailed	B3	linux:internal/host/rootrestart.go:restartBoundUnit	E8 merge ruling 5: optional identity failures preserve the same restart outcome; no second restart; real not-up takes main rollback. Fixtures: TestPlan14ERecoveryRestartOutcome, TestPlan14ERecoveryBindingRefusalKeepsPromotedFix, TestPlan14ERecoveryNotUpPrecedesBinding.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/launchjournal.go	LaunchJournal.SessionLaunches	C	linux:internal/host/claimwakestop.go:ClaimAssembly.collectRetirementStop	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/relocationinstall.go	relocationRecord	C+E3	linux:internal/host/relocatepass.go:relocationRelocatable	Canonical relocation record and update policy derive nested installation shape; source account/incarnation is rechecked by root registration.
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/ledger.go	Ledger.Census	D	linux:internal/rootparticipation/production.go:Ledger.ActivationReady	Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart.go	restartVerifiedOrdinaryUnit	B3	linux:internal/host/rootrestart.go:rootRestartRouteWith	rev3=merge-ruling-4;basis=Retain the checked ordinary-unit path for strict census-backed operation.
    plan14_input_inventory_test.go:424: J4	internal/host/claimretire_transport.go	type ClaimRootHTTP	E1	linux:internal/host/claimstop_run.go:RunInstanceControl	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers.
    plan14_input_inventory_test.go:424: J4	internal/host/claimproduction.go	declinedClaimGate	C+G	linux:internal/host/claimmoveaccess.go:claimMoveLaunchSource	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/movespass.go	armPhase1	B2+C	linux:internal/host/movespass.go:armMovesPass	rev3=census-ruling-seeded-instances;basis=the agent (/opt/carlos/carlos agent, carlos-edge.service, user carlos): main's body with the S1 probe hook refusing a row whose import gate is set; main's B2,C authority retained
    plan14_input_inventory_test.go:424: J4	internal/host/claimjournal_proof.go	legacyJournalProof	C+G	linux:internal/host/claimjournal_migration.go:migrateClaimJournalsWith	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimroleassembly_linux.go	verifiedClaimExecutable	C+G	linux:internal/host/claimroleassembly_linux.go:ClaimRoleAssembly.Launch	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/disk.go	Disk.WithParticipation	D	linux:internal/host/systemapply.go:systemApplier.runWithRelease	Claims-on or retained root census uses root exclusion; claims-off with no census preserves main participation and recovery behavior. PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_status.go	const RootHistoryStatusDir	E1	linux:internal/host/roothistory.go:openRootHistory	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/proofroot.go	proofRoot.observeAndRecord	B3+E1	linux:internal/host/proofroot.go:proofRoot.mintAndLog	E13: signed recovery allows unknown history but preserves usable refusals, including retained originals; verified later promotion clears only D1. Health recording is independent of program recording; minting requires a census. Fixtures: TestPlan14RecoveryUnknownHistory, TestPlan14RecoveryKnownRefusal, TestPlan14RecoveryOriginalRefusalWithUnknownHistory, TestPlan14RootHistoryVerifiedRetryBeforeAttempt, TestPlan14ProgramFailureStillRecordsHealth, TestPlan14RootHistoryMintCensus.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/reconcile.go	Reconciler.installWithWork	C	linux:internal/hostbox/inventory_registration.go:ReconcileAdapter.installRemote	Install dispatch preserves serving registration and distinguishes hold-only relocation from installation.
    plan14_input_inventory_test.go:424: J4	internal/host/recoveryrefusals.go	checkUnresolvedRecoveries	E1	linux:internal/host/recoveryrefusals.go:rootRestartChecks.retainRecoveryHistory	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_status.go	type HistoryMigrationStatus	E1	linux:internal/host/roothistory.go:openRootHistory	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_launch.go	ClaimLaunchRoot.rootInstalledProgram	E1	linux:internal/host/claimlaunch_production.go:WithProductionClaimLaunch	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	RootGenerations.Started	E2	linux:internal/host/rootgenerations_launch.go:generationLaunchPermit.started	E20: exact reservation closure precedes retirement verification; retained tombstones forbid replay and require sync recommit. Retired records release only their own pins; completeness remains a separate mandatory verifier, still unavailable in production. Fixtures: TestPlan14GenerationRetirementReleasesExactPin, TestPlan14GenerationRetirementRefusals, TestPlan14GenerationClosedReplayRefused, TestPlan14GenerationRetirementProcessCrash, TestPlan14GenerationRetirementKeepsIndependentReference, TestPlan14GenerationClaimsOffRestageMatchesMain.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/coldhandover.go	coldNamespaceEmpty	C	linux:internal/hostbox/coldhandover.go:ColdHandover.Run	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_census_other.go	productionGenerationKernelCensus	E2	darwin:internal/host/rootlaunchverifier.go:registerProductionLaunchVerifier	E24: independent root installation and launch enumeration, exact reservation reconciliation and fresh quiescent whole-version-tree kernel census; missing sources, open unreserved launches, foreign namespaces and uncontained tasks refuse. Production pin source certifies this evidence before returning pins. Fixtures: TestPlan14GenerationInventoryCompleteness, TestPlan14GenerationInventoryPinConsumer, TestPlan14GenerationInventoryLifecycle, TestPlan14GenerationInventoryProcessCrash, TestPlan14GenerationKernelCensusUnknownReference, TestPlan14GenerationLaunchInventory, TestPlan14GenerationReaderDoesNotInitialize, TestPlan14GenerationInstallationInventory. Checked production source/kernel witnesses passed on the E27 root runner. E29 physical-payload and installed-unit witnesses passed on the controller runner; E30 required-artifact witness pending.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootmigration.go	RootAuthority.CompleteMigrationInventory	G	linux:internal/host/rootmigration_timers.go:rootMigrationTimers.adopt	rev3=PROPOSED-p3;identity=offline migration root uid 0;basis=root fence completion binds the migration inventory revision; timer adoption permits only its exact previous revision plus one and recommits visible failed writes
    plan14_input_inventory_test.go:424: J4	internal/host/movesstage.go	heldReleaseReady	C+E1	linux:internal/host/movesstage.go:heldReleaseHooksVia	root-route;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalservice.go	JournalService.Replay	C	linux:internal/host/rootinventory.go:ClaimRootHTTP.commitRootInventoryPending	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostexec/local_unix.go	localDir.write	D	linux:internal/hostexec/rootmirror.go:ProjectRootClient	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	type GenerationOwner	E2	linux:internal/host/rootgeneration_inventory.go:generationReconciler.reconcile	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.
    plan14_input_inventory_test.go:424: J4	internal/host/claimroleassembly_linux.go	ClaimRoleAssembly.PrepareState	C	linux:internal/host/claimwakeassembly.go:ClaimWakeAssembly.Build	root installation and fence authority; registration and recovery; agent RPC lock ordering
    plan14_input_inventory_test.go:424: J4	internal/hostbox/restore.go	loadPinned	C	linux:internal/hostbox/restore.go:ColdRestore.Install	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationpins.go	WithRootGenerationPins	E2	linux:internal/host/agent.go:runAdoptUnderRootRelease	E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode, TestPlan14GenerationProductionModeGate, TestPlan14GenerationSnapshotPermitsFreshTree.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_retirement.go	generationRetirement.closed	E2	linux:internal/host/rootgeneration_retirement.go:generationRetirement.retire	E25: validate installation, controller, exact unit and process before retaining an active or prelaunch pin. Only closed writers plus a settled unit reach durable retirement and independent kernel absence. Use the checked read-only journal and continue past active pins. Fixtures: TestPlan14GenerationRetirementKeepsActivePin, TestPlan14GenerationRetirementKeepsPrelaunchPin, TestPlan14GenerationRetirementContinuesPastActivePin, TestPlan14GenerationRetirementBindingProcessCrash, TestPlan14GenerationRetirementCensusGate. Running-tenant completeness remains unfinished.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationcompleteness.go	const rootGenerationCompletenessLimit	E2	linux:internal/release/rootgenerationcompleteness.go:RootGenerations.Completeness	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/console/apirestartscope.go	restartRouteRows	E1+E3	linux:internal/console/apirestartscope.go:Server.handleAPIRestartScope	root-route
    plan14_input_inventory_test.go:424: J4	internal/rootstate/state_linux.go	directory.Names	A	linux:internal/hostexec/rootbroker.go:RootBroker.Recover	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootrollback_resume.go	resumeRootRestart	B3+E1	linux:internal/host/rootrollback_resume.go:recoverRootRestarts	Signed named-unit recovery is independent of release and health history. Root rechecks canonical source, unit, process, signed target and trusted live pointer; captures attempt authority before publication; verifies readiness and resumes without repeated effects. Fixtures: TestPlan14SignedActiveFixIgnoresHistory, TestPlan14SignedActiveFixAuthority, TestPlan14SignedFixSupersedesOlderAttempt, TestPlan14ActiveRecoveryProcessCrash, TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14SignedRestartRequiresTrustedLiveLink.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootbroker.go	RootBroker.read	D	linux:internal/hostexec/rootbroker.go:RootBroker.Recover	D1/D2 decode the retained root participation record; missing or malformed state grants nothing.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_retirement.go	historyRecoveryDigest	E1	linux:internal/release/roothistory_delivery.go:RootHistory.ReceiveRecoveryRetirements	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	settingsTarget	E3	linux:internal/release/adopt.go:adoptHost	Settings target rejects foreign consumed decisions and forces root-owned settings rebind to the canonical tenant.;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0; legacy agent pass uid carlos;basis=census branch delegates target selection to root inputs before any legacy consumed, good-version or build-state read
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalservice.go	JournalService.executeWithInventory	C	linux:internal/hostbox/journalservice.go:JournalService.ExecuteRootInventory	Journal transaction preserves original request hash while persisting independently derived root inventory and durable replay receipt.
    plan14_input_inventory_test.go:424: J4	internal/host/legacyrestart.go	legacySettleOptions	B3	linux:internal/host/legacyrestart.go:legacyRollbackRestart	rev3=merge-ruling-4;basis=Legacy settle uses main readiness inputs and limits; these do not authorize root health history.
    plan14_input_inventory_test.go:424: J4	internal/activator/workerbuild.go	Service.startWorker	E2	linux:internal/activator/activator.go:Service.doWake	E39: close the unsupported claimed worker path before backend entry, replacement or supervised stop. Claims-off paths remain unchanged. This is refusal coverage, not positive root-reserved worker launch support. Fixtures: TestPlan14GenerationWorkerStartBoundary, TestPlan14GenerationWorkerRealBackendRefusal, TestPlan14GenerationWorkerReplacementBoundary, TestPlan14GenerationWorkerSupervisionBoundary. Pre-flight 29 and E39 worker launch audit.
    plan14_input_inventory_test.go:424: J4	internal/host/buildstate.go	newBuildStates	E3	linux:internal/host/agent.go:runAgent	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	productionSysOps	D+F	linux:internal/host/agent.go:runAdopt	root-input;kept=D,F;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootclient.go	requestIdentity	D	linux:internal/hostexec/rootclient.go:RootClient.close	D1 supplies collision-resistant request correlation only; root authenticates peer and authority independently.
    plan14_input_inventory_test.go:424: J4	internal/host/systemparticipation.go	systemApplier.clearUpdateBegun	D	linux:internal/host/systemparticipation.go:systemApplier.settleUpdateBegun	Claims-on or retained root census uses root exclusion; claims-off with no census preserves main participation and recovery behavior. PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/typedretire.go	writeJournal	C	linux:internal/hostbox/typedretire.go:TypedRetirement.Run	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	heldProofAdmit	C+E1	linux:internal/release/materializeheld.go:StageHeldVerifiedWithPins	root-route;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart.go	rootRestartChecks.runningVersion	B3	linux:internal/host/agent.go:runAdoptUnderRootRelease	rev3=merge-ruling-6;basis=Without a census return no running build, so main's cur stays the rollback target and no record is resolved; census-backed retention unchanged.
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_maintenance.go	rootHistoryMaintenance.run	E1	linux:internal/host/roothistory.go:openRootHistory	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/proofbinding.go	pointerBoundUnit	B3	linux:internal/host/rootrestart.go:restartBoundUnit	rev3=merge-ruling-4;basis=Only PID-zero stopped or restarting states may bind without process identity; inactive units are never woken.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory.go	RootHistory.read	E1	linux:internal/release/roothistory.go:RootHistory.RecordInstalledProgram	Root per-binding refusal/program completeness and pending attempt state; strict decode and exact durable recommit before authority reads. E1 production integration is selected but incomplete.
    plan14_input_inventory_test.go:424: J4	internal/host/caps_pass.go	buildPlans	E4	linux:internal/host/caps_pass.go:capabilityPass	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/renewing.go	RenewingLeases.Acquire	C	linux:internal/host/movespass.go:armPhase1	root-input
    plan14_input_inventory_test.go:424: J4	internal/provision/reconcile.go	RouteFor	C+E3	linux:internal/host/rootupdates.go:rootUpdateSource.resolve	rev3=census-ruling-seeded-instances;basis=the agent (/opt/carlos/carlos agent, carlos-edge.service, user carlos); also root, in the claim root's landing registration (ClaimRootHTTP.rootLandingRoute) and the relocation install (relocationRecord): main's body with one more field: the row's seed column, derived from the record's seed (SeedColumn). Every caller gets it, the two root ones included, so a root-registered row for a seeded record now carries the seed the activator places from; main's C,E3 authority retained
    plan14_input_inventory_test.go:424: J4	internal/host/seedsfloor.go	readLocalSeedsFloor	F	linux:internal/host/seedsfloor.go:withSeedsFields	rev3=census-ruling-seeded-instances;basis=system apply (/opt/carlos/carlos system apply, or carlos.prev system apply, with --recover at boot; carlos-system-update.service and carlos-system-recover.service; root) and the adopt pass (/opt/carlos/carlos adopt in every mode; carlos-adopt.service, carlos-config-sync.service, carlos-restart.service and carlos-stage.service; root); also the agent (/opt/carlos/carlos agent, carlos-edge.service, user carlos), for its hourly refresh and its edges file: seeds twin of the moves floor (F,J4); deny-only; Part 3 F2-F4 must cover the seeds floor alongside the moves floor.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_census_linux.go	productionGenerationKernelCensus	E2	linux:internal/host/rootlaunchverifier.go:registerProductionLaunchVerifier	E24: independent root installation and launch enumeration, exact reservation reconciliation and fresh quiescent whole-version-tree kernel census; missing sources, open unreserved launches, foreign namespaces and uncontained tasks refuse. Production pin source certifies this evidence before returning pins. Fixtures: TestPlan14GenerationInventoryCompleteness, TestPlan14GenerationInventoryPinConsumer, TestPlan14GenerationInventoryLifecycle, TestPlan14GenerationInventoryProcessCrash, TestPlan14GenerationKernelCensusUnknownReference, TestPlan14GenerationLaunchInventory, TestPlan14GenerationReaderDoesNotInitialize, TestPlan14GenerationInstallationInventory. Checked production source/kernel witnesses passed on the E27 root runner. E29 physical-payload and installed-unit witnesses passed on the controller runner; E30 required-artifact witness pending. PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor.go	rootFloorBinary.forSeeds	F	linux:internal/host/rootmovesfloor_boot.go:withRootFloorGuardCandidate	rev3=PROPOSED-p3;identity=carlos system apply/recover and root adopt uid 0;basis=projects signed SeedsProtocol (zero when absent); comparisons are gated by verified signed publication and available certified builds
    plan14_input_inventory_test.go:424: J4	internal/host/guardtransaction.go	installFloorHook	D	linux:internal/host/systemapply.go:RunSystemApply	Claims-on or retained root census uses root exclusion; claims-off with no census preserves main participation and recovery behavior.
    plan14_input_inventory_test.go:424: J4	internal/host/agent.go	agentRollbackUnitRestart	B3	linux:internal/host/agent.go:adoptLoop	kept=B3;scope=agent-only-legacy-behavior-preservation;not-root-authority
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_pass.go	RootHistoryPass.recheck	E1	linux:internal/release/roothistory_pass.go:RootHistoryPass.selectRoute	E1 canonical binding selection and recheck; durable attempt precedes effects; only independent installed observation settles and retires the exact target refusal.
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor.go	rootRefreshAndJudgeSeedsPrev	F	linux:internal/host/movesfloor.go:rootJudgePrevWithSource	rev3=PROPOSED-p3;identity=carlos adopt and system apply refresh, uid 0; no recovery or boot-selector call;basis=normal adopt/update refreshes root seeds state under prev exclusion; recovery never calls this remote path
    plan14_input_inventory_test.go:424: J4	internal/host/rootlaunchverifier.go	rootLaunchVerifier.verify	E2	linux:internal/host/rootlaunchverifier.go:registerProductionLaunchVerifier	PROPOSED E43: root; release-held context and D3 reservation/census verification under release-before-participation exclusion; no-census effects stay on the legacy path. TestPlan14LaunchVerifierToken, TestPlan14LaunchVerifierCallerOrder, TestPlan14LaunchVerifierNoCensus, TestPlan14LaunchVerifierRootRunner. PROPOSED E45: root enforces census-gated release ordering, bounded acquisition and scoped recovery; registry timer primitives preserve supplied identity but producer integration remains pending.
    plan14_input_inventory_test.go:424: J4	internal/host/movesfloor.go	rootJudgePrevWithSource	F	linux:internal/host/movesfloor.go:rootJudgePrev	rev3=PROPOSED-p3;identity=carlos adopt root pass, uid 0;basis=normal adopt path refreshes and judges both independent protocol floors only on census boxes
    plan14_input_inventory_test.go:424: J4	internal/host/movesfloorgate.go	floorGateMain	F	linux:internal/host/movesfloorgate.go:RunSystemFloorAllowsPrev	rev3=PROPOSED-p3;identity=carlos system apply/recover and root adopt, systemd root units or offline CLI, uid 0;basis=dispatches explicit root previous gate; legacy argument shape preserved
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.verifyPointer	F	linux:internal/host/systemapply.go:systemApplier.Run	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=signed pointer verified and independently cached for census target execution before earlier history exists
    plan14_input_inventory_test.go:424: J4	internal/host/heldstage.go	heldStageCheck	C+E1	linux:internal/host/heldstage.go:heldStageAuthority	route-and-input;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimready_linux.go	claimProbePeer	B3	linux:internal/host/claimready_linux.go:claimProbeSocketReady	root-input;kept=B3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootview.go	RootAuthority.View	C	linux:internal/host/rootexecution_settle.go:ClaimRootHTTP.cleanupExecution	Root host lock serializes views; quarantine and pending intent deny admission.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_inventory.go	generationInventoryDigest	E2	linux:internal/host/rootgeneration_inventory.go:generationReconciler.reconcile	E24: independent root installation and launch enumeration, exact reservation reconciliation and fresh quiescent whole-version-tree kernel census; missing sources, open unreserved launches, foreign namespaces and uncontained tasks refuse. Production pin source certifies this evidence before returning pins. Fixtures: TestPlan14GenerationInventoryCompleteness, TestPlan14GenerationInventoryPinConsumer, TestPlan14GenerationInventoryLifecycle, TestPlan14GenerationInventoryProcessCrash, TestPlan14GenerationKernelCensusUnknownReference, TestPlan14GenerationLaunchInventory, TestPlan14GenerationReaderDoesNotInitialize, TestPlan14GenerationInstallationInventory. Checked production source/kernel witnesses passed on the E27 root runner. E29 physical-payload and installed-unit witnesses passed on the controller runner; E30 required-artifact witness pending.
    plan14_input_inventory_test.go:424: J4	internal/provision/rootrecord.go	RecordIndex.Find	B3+C	linux:internal/provision/rootrecord.go:FindRecordByHost	Use cached key identity but read and validate current record body and ETag.
    plan14_input_inventory_test.go:424: J4	internal/host/claimproduction.go	claimInputPolicy	C+G	linux:internal/host/claimproduction.go:ProductionClaimOwnerProvider.OpenClaimOwners	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootinventory_requirements.go	inventoryTimerNames	E2	linux:internal/host/rootgeneration_requirements.go:generationRequiredInventory	E37: retain independently initialized state-directory and timer requirements in the root installation transaction; preserve them through crash/reopen and rebind. Unknown history cannot certify completeness. Recommit under root-host exclusion before generation use. Canonical record and root retained obligations constrain agent candidate lists; timer enumeration is deny-only. Pre-flight 33, 80, 83. Fixtures: TestPlan14GenerationRequiredArtifacts, TestPlan14GenerationRegistryRows, TestPlan14RootTimerInventory, TestPlan14InventoryRequirementsRegistration, TestPlan14InventoryRequirementsUnknownAndRatchet, TestPlan14InventoryArtifactsCrash, TestPlan14InventoryRequirementsHistoryIdentity. Changed RequiredArtifacts and ExactRetirement root-runner witnesses await acceptance; remaining E2 launch/parked/containment integration is incomplete.
    plan14_input_inventory_test.go:424: J4	internal/host/claimproduction.go	productionClaimRegional.Authorize	C+G	linux:internal/host/claimproduction.go:ProductionClaimOwnerProvider.OpenClaimOwners	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/safefile/file_linux.go	writeAtSteps	A+F+G	linux:internal/safefile/file_linux.go:writeAt	rev3=PROPOSED-p3;identity=checked filesystem callers including root control/apply/migration uid 0;basis=checked staged file write, chmod, sync, close, rename and parent sync propagate interruptions before acknowledgement
    plan14_input_inventory_test.go:424: J4	internal/host/recoveryrefusals.go	rootRestartChecks.mintRefusals	B3+E1	linux:internal/host/agent.go:runAdoptUnderRootRelease	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_census.go	rootMigrationCollector.collect	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=signed collecting manifest and actor directory bound complete records/claims census; registry Seeds are refusal-only
    plan14_input_inventory_test.go:424: J4	internal/host/proofask.go	mintAsker.stagedSHA	B3	linux:internal/host/proofask.go:mintAsker.tick	root-input;kept=B3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	heldShape	C+E1	linux:internal/release/materializeheld.go:VerifyHeldLive	root-route;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_readback.go	publishRootHistoryReadback	E1	linux:internal/host/roothistory.go:openRootHistory	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/claimhandover_recovery.go	claimCrossBoxHandover.installRecoveryInventory	C+G	linux:internal/host/claimhandover_recovery.go:claimCrossBoxHandover.afterRecovery	root-route;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/launchjournal.go	LaunchJournal.Create	C	linux:internal/hostbox/launchjournal.go:LaunchJournal.Prelaunch	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	RootRestarts.Bindings	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.run	E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate.
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	ServeHeldStageRequestsWithPins	E2	linux:internal/host/heldstage.go:heldStagePass	E23: old held-stage relay forwards the root generation source before artifact writes and outside publication exclusion. Request fields retain their prior hint/authorization checks; only root pins authorize destructive staging on census boxes. No-census source yields empty pins. Fixtures: TestPlan14GenerationLegacyRelay, TestHeldStagePassIsANoOpWithoutRequests, TestHeldStagePassDropsAnUnauthorizedBuild, TestServeHeldStageRequestsRefusesStaleAndTraversal. Production source wiring is inspected; privileged completeness is not claimed.
    plan14_input_inventory_test.go:424: J4	internal/host/legacyrestart.go	rootRestartChecks.noteLegacy	B3	linux:internal/host/rootrestart.go:rollbackUnitRestart	rev3=merge-ruling-4;basis=Log the no-census legacy restart once through the pass-shared diagnostic latch.
    plan14_input_inventory_test.go:424: J4	internal/instancectl/server.go	runWithClaim	C+D+G	linux:internal/instancectl/claim.go:RunWithClaim	Claim instance controller adds held-release RPC dispatch within existing launch/participation execution boundary.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrollback.go	readRollbackAttempt	B3	linux:internal/host/rootrollback.go:rootRestartChecks.finish	canonical record/unit/executable authority and one-attempt rollback; draft incomplete
    plan14_input_inventory_test.go:424: J4	internal/rootstate/shared_linux.go	ensurePublicChild	A+B4	linux:internal/rootstate/shared_linux.go:EnsurePublicDir	fix1;basis=Creates or descriptor-repairs only a root:root 0700/0755 shared directory, without following symlinks or admitting writable/foreign parents.
    plan14_input_inventory_test.go:424: J4	internal/rollout/failures.go	FailureBook.markLocked	E1+E3	linux:internal/rollout/rootfailures.go:RootFailures.ImportLegacy	fix1-merge-review;basis=Advances durable app restriction generations so old grants cannot clear new failures.
    plan14_input_inventory_test.go:424: J4	internal/host/movesheldrelease.go	newHeldReleaseRequestID	C+E1	linux:internal/host/movesheldrelease.go:heldReleaseVia.request	root-input;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostguard/generationinventory.go	RootAuthority.generationInstallation	E2	linux:internal/hostguard/generationinventory.go:RootAuthority.GenerationInstallations	E37: retain independently initialized state-directory and timer requirements in the root installation transaction; preserve them through crash/reopen and rebind. Unknown history cannot certify completeness. Recommit under root-host exclusion before generation use. Canonical record and root retained obligations constrain agent candidate lists; timer enumeration is deny-only. Pre-flight 33, 80, 83. Fixtures: TestPlan14GenerationRequiredArtifacts, TestPlan14GenerationRegistryRows, TestPlan14RootTimerInventory, TestPlan14InventoryRequirementsRegistration, TestPlan14InventoryRequirementsUnknownAndRatchet, TestPlan14InventoryArtifactsCrash, TestPlan14InventoryRequirementsHistoryIdentity. Changed RequiredArtifacts and ExactRetirement root-runner witnesses await acceptance; remaining E2 launch/parked/containment integration is incomplete.
    plan14_input_inventory_test.go:424: J4	internal/host/proofnamed.go	proofBindingSource.findRecord	B3	linux:internal/host/namedrecovery_active.go:namedUnitRecovery.recover	rev3=merge-ruling-5;basis=Cache index success or failure once per pass; selected records and ETags remain freshly read.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/guard.go	Guard.locked	C	linux:internal/hostguard/fence.go:Guard.CompleteFence	rev3=merge-ruling-4;basis=Only positively unsafe legacy locks durably quarantine; timeout and I/O errors return without changing root installation state.
    plan14_input_inventory_test.go:424: J4	internal/host/claimunit.go	var readClaimUnitFile	C+G	linux:internal/host/claimunit.go:readClaimUnitSettings	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/units/carlos-system-recover.service	external	F	linux:internal/host/bootstrap.go:var unitsFS	rev3=PROPOSED-p3;identity=systemd update/recover oneshot shell uid 0;basis=guard branch is conditional on executable presence; unarmed units retain main selector; installed guard selects from root local floor
    plan14_input_inventory_test.go:424: J4	internal/hostbox/coldhandover.go	writeColdJournal	C	linux:internal/hostbox/coldhandover.go:ColdHandover.Run	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/claimready_linux.go	claimProbeSocketReady	B3	linux:internal/host/claimconstruction.go:claimGroupDWiring	root-route;kept=B3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootfloor_healthy.go	systemApplier.acceptRootFloorHealthy	F	linux:internal/host/systemapply.go:systemApplier.install	rev3=PROPOSED-p3;identity=carlos system apply, root update unit or offline root CLI, uid 0;basis=reads signed installed bytes after the system health gate; writes independent moves and published-seeds root observations
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.decidePrev	F	linux:internal/host/systemapply.go:systemApplier.install	root-input;kept=F;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/namedrecovery.go	namedUnitRecovery.repair	E1	linux:internal/host/namedrecovery_active.go:namedUnitRecovery.recover	E13: signed recovery allows unknown history but preserves usable refusals, including retained originals; verified later promotion clears only D1. Health recording is independent of program recording; minting requires a census. Fixtures: TestPlan14RecoveryUnknownHistory, TestPlan14RecoveryKnownRefusal, TestPlan14RecoveryOriginalRefusalWithUnknownHistory, TestPlan14RootHistoryVerifiedRetryBeforeAttempt, TestPlan14ProgramFailureStillRecordsHealth, TestPlan14RootHistoryMintCensus.
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	StageHeldVerifiedWithPins	E2	linux:internal/host/movesheldrelease_root.go:movesHeldReleaseRoot.stageRelease	E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/host/movesfloor_linux.go	openMovesDir	F	linux:internal/host/movesheldlock.go:withHeldStageLock	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/buildstate.go	Consumed.ForeignTo	E3	linux:internal/host/buildstate.go:buildStates.beforeExec	ForeignTo binds consumed decisions to account/app before root release history can be reused.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootbroker.go	RootBroker.settle	D	linux:internal/hostexec/rootbroker.go:RootBroker.recoverSettlement	On uncertain ETag or delete conflict require both root and remote expiry, then conditionally delete the current ETag.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationStart	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationKernel.controllerGone	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_inventory.go	type generationReconciler	E2	linux:internal/host/rootlaunchverifier.go:registerProductionLaunchVerifier	E24: independent root installation and launch enumeration, exact reservation reconciliation and fresh quiescent whole-version-tree kernel census; missing sources, open unreserved launches, foreign namespaces and uncontained tasks refuse. Production pin source certifies this evidence before returning pins. Fixtures: TestPlan14GenerationInventoryCompleteness, TestPlan14GenerationInventoryPinConsumer, TestPlan14GenerationInventoryLifecycle, TestPlan14GenerationInventoryProcessCrash, TestPlan14GenerationKernelCensusUnknownReference, TestPlan14GenerationLaunchInventory, TestPlan14GenerationReaderDoesNotInitialize, TestPlan14GenerationInstallationInventory. Checked production source/kernel witnesses passed on the E27 root runner. E29 physical-payload and installed-unit witnesses passed on the controller runner; E30 required-artifact witness pending.
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor.go	rootSeedsAllowsBinary	F	linux:internal/host/rootmovesfloor_boot.go:withRootFloorGuardCandidate	rev3=PROPOSED-p3;identity=root adopt refresh, root system update/recovery and root guard floor readers, uid 0;basis=compares signed seeds protocol to published root bound only while a certified current, prev or staged candidate meets it; no remote reads
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor.go	systemApplier.rootProtocolAllowsBinary	F	linux:internal/host/systemapply.go:systemApplier.install	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=final installation restore or forward-completion checks signed image against both local root bounds while activation locks are held
    plan14_input_inventory_test.go:424: J4	internal/host/recoveryrefusals.go	recoveryResultKey	E1	linux:internal/host/rootrollback.go:settleRollbackAttempt	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_root.go	ClaimLaunchRoot.start	E1+E2	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.Serve	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	capabilityPlan	E4	linux:internal/release/adopt.go:adoptHost	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/recoveryrefusals.go	rootRestartChecks.copyRecoveryHistory	E1	linux:internal/host/recoveryrefusals.go:rootRestartChecks.retainRecoveryHistory	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/retention.go	buildStatePins	E2	linux:internal/host/agent.go:runAgent	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostrelocate/participant.go	Participant.sameInstallation	C	linux:internal/hostrelocate/participant.go:Participant.Step	Installation comparison binds fresh operation, executor, phase, prepared object, incarnation, stamp and session.
    plan14_input_inventory_test.go:424: J4	internal/host/restartscope.go	routeByHost	E1+E3	linux:internal/host/restartscope.go:restartScopeLeg	root-route
    plan14_input_inventory_test.go:424: J4	internal/release/buildstate.go	BuildStateCopy.Read	E3	linux:internal/release/heldwake.go:DecideHeldWake	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	RootRestarts.Finish	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.run	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/rootinventory_install.go	rootLandingIdentity	C	linux:internal/host/rootinventory_install.go:ClaimRootHTTP.rootLandingRoute	Landing target identity binds executor, participants, enrollment and region before first root registration.
    plan14_input_inventory_test.go:424: J4	internal/host/roothistory_creation.go	rootHistoryCreation	E1	linux:internal/host/roothistory.go:openRootHistory	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/guard.go	record.admits	G	linux:internal/hostguard/guard.go:Guard.With	rev3=PROPOSED-p3;identity=root claim controller construction uid 0;basis=root admission retains migration denial until the exact predecessor session has a completed retained receipt
    plan14_input_inventory_test.go:424: J4	internal/caps/converge.go	readDropIn	E4	linux:internal/caps/converge.go:Converge	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/image_other.go	Disk.Exec	F	darwin:internal/host/guardexec.go:RunSystemGuardExec	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	VerifyHeldLive	C+E1	linux:internal/host/movesstage.go:heldReleasePublished	Held verification wrapper retains selected held lock and delegates root proof validation of live bytes.
    plan14_input_inventory_test.go:424: J4	internal/host/claimunit_binding.go	claimUnitBindings.check	E2	linux:internal/host/claimunit_placement.go:ClaimLaunchRoot.checkUnitBinding	PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalmigration_linux.go	checkLegacySchema	C	linux:internal/hostbox/journalmigration_linux.go:readLegacyJournals	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostbox/rolelaunch.go	strictRoleLaunch	C	linux:internal/hostbox/rolelaunch.go:DecodeRoleLaunchRequest	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/disk.go	RemoveDurable	F	linux:internal/hostfloor/disk.go:Disk.Begin	root-input
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootbroker.go	RootBroker.Monitor	D	linux:internal/hostexec/rootbroker.go:RootBroker.Run	Exponentially back off lost-record settlement retries; active cutoff monitoring remains independent.
    plan14_input_inventory_test.go:424: J4	internal/host/buildstate.go	buildStateRegions	E3	linux:internal/host/buildstate.go:newBuildStates	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/movesland.go	landingRun.checking	C	linux:internal/host/movesland.go:landingRun.step	Checking registers through root before reading held row; installation and later guarded work retain exact holder tuple.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/guard.go	Guard.readLocked	C	linux:internal/hostguard/recoveryfence.go:Guard.PendingFences	Read-only access takes only the root host lock.
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	validRequest	E1	linux:internal/historyreadback/workflow.go:Operation.checked	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	GenerationProcess.valid	E2	linux:internal/release/rootgenerations.go:validGeneration	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals. PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/host/claimretire_transport.go	retirementAcknowledgement	C+G	linux:internal/host/claimretire_transport.go:ClaimRootHTTP.retire	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/ledger.go	Ledger.Acquire	D	linux:internal/host/rootexecution_runtime.go:newClaimExecutionRuntime	rev3=PROPOSED-p3;identity=root system apply/recover and root participation callers uid 0;basis=retains existing census authority and same-ledger transaction exclusion; nested activation journal completion reuses live root-held context; Clear pending acquisition on a returned commit failure while preserving durable record-based exclusion.
    plan14_input_inventory_test.go:424: J4	internal/rollout/rootfailures.go	OpenRootFailures	E3	linux:internal/host/rootupdates.go:productionRootUpdates	rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=requires exact root migration marker and durable book; rewrites visible state before exposing any retry or failure permission
    plan14_input_inventory_test.go:424: J4	internal/host/claimcleanup_identity.go	verifyClaimCleanupEnrollment	C+G	linux:internal/host/claimproduction.go:ProductionClaimOwnerProvider.OpenClaimOwners	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/pins.go	StagedPaths.addReal	E2	linux:internal/release/pins.go:BoxPins	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_root.go	ClaimLaunchRoot.startRecorded	E1+E2	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.start	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals. PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/host/buildstate.go	buildStates.refreshAll	E3	linux:internal/host/agent.go:fastConvergeLoop	root-route
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalmigration_linux.go	legacyJournalFiles	C	linux:internal/hostbox/journalmigration_linux.go:JournalService.MigrateLegacy	root-input
    plan14_input_inventory_test.go:424: J4	internal/provision/reconcile.go	mintHeld	C	linux:internal/provision/reconcile.go:Reconcile	Held-row mint dispatch now reaches root registration for remote landing; exported canonical route construction preserves local legacy behavior.
    plan14_input_inventory_test.go:424: J4	internal/release/materializeheld.go	publishHeld	C+E1	linux:internal/release/materializeheld.go:materializeHeld	root-route;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/inventory_registration.go	ReconcileAdapter.installRemote	C	linux:internal/hostbox/reconcile_adapter.go:ReconcileAdapter.Install	Remote install snapshots old source inventory outside host lock and rechecks revision in hold-only path.
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/relocation.go	PinAfterRelease	C	linux:internal/hostrelocate/worker.go:Worker.Step	Pin transition verifies source release authority and exact journal phase before removing execution authority.
    plan14_input_inventory_test.go:424: J4	internal/host/recoveryrefusals.go	rootRestartChecks.retainRecoveryHistory	E1	linux:internal/host/recoveryrefusals.go:rootRestartChecks.mintRefusals	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor.go	openRootMovesFloors	F	linux:internal/host/rootmovesfloor_boot.go:withRootFloorGuardCandidate	rev3=PROPOSED-p3;identity=root adopt refresh, root system update/recovery and root guard floor readers, uid 0;basis=selects fixed moves namespace then delegates checked root store opening
    plan14_input_inventory_test.go:424: J4	internal/host/claimparticipation_relocation.go	productionClaimLocal.Acknowledged	D	linux:internal/host/relocatepass.go:NewRelocationRuntime	Relocation acknowledgement waits for bound controller readiness; participates in execution admission.
    plan14_input_inventory_test.go:424: J4	internal/host/claimhandover_crossbox.go	wireClaimAdmission	C+D	linux:internal/host/claimhandover_crossbox.go:wireProductionAdmission	Admission constructor adds completed-relocation recovery owners while retaining typed root recovery rebind.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_status.go	RootHistory.MigrationStatusWithSources	E1	linux:internal/host/roothistory_maintenance.go:rootHistoryMaintenance.run	Exact completion binds the accepted authorization digest from durable private history to enrolled-root signed readback. Pending originals, changed evidence and canonical sources cannot supply retirement completion. Fixtures: TestPlan14HistoryReconstructionCompletion, TestPlan14HistoryRetirementCompletion, TestPlan14ReadReconstructionCompletion, TestPlan14ReadRetirementCompletion, TestPlan14RecoveryRetirementProductionCallback, TestPlan14RootHistoryReconstructionCrash, TestPlan14HistoryRetirementProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	RootGenerations.write	E2	linux:internal/release/rootgenerations.go:RootGenerations.Retire	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_refresh.go	readRootFloorBinary	F	linux:internal/host/rootmovesfloor_boot.go:withRootFloorGuardCandidate	rev3=PROPOSED-p3;identity=root adopt refresh, root system update/recovery and root guard floor readers, uid 0;basis=verifies checked executable and signed system manifest; reads signed moves and seeds protocol numbers rather than version sidecar
    plan14_input_inventory_test.go:424: J4	internal/host/agent.go	makeStartRoute	B3	linux:internal/host/agent.go:adoptLoop	root-route;kept=B3;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_reconstruct.go	RootHistory.reconstructionImages	E1	linux:internal/release/roothistory_reconstruct.go:RootHistory.Reconstruct	E1 signed root-history reconstruction; exact namespace identity, revisions and canonical sources; journaled completion retains denies and stronger bounds. Tests: TestPlan14RootHistoryReconstruction, TestPlan14RootHistoryReconstructionCrash, TestPlan14RootHistoryReconstructionDeliveryPass.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_collect_linux.go	recoverMigrationStop	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=carlos system journal-migrate uid 0;basis=preserves exact signed or retained receipt; absent signed evidence selects fresh collection only from previously authenticated root journals; begins root fence before observation
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journaltrust_linux.go	readTrustedJournalDir	C	linux:internal/hostbox/coldhandover.go:ColdHandover.Recover	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/versions.go	PointLive	B3+E2	linux:internal/host/namedrecovery_active.go:namedUnitRecovery.recover	rev3=merge-ruling-5;basis=Compare resolved current and previous paths before retaining the running build; preserve repoint errors and canonical retained pointers.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart.go	rollbackUnitRestart	B3+E1	linux:internal/host/agent.go:runAdoptUnderRootRelease	Captured canonical rollback authority is unchanged. Durable verified outcome permits later history settlement without another restart. Fixtures: TestPlan14HistoryRollbackLink and TestPlan14HistoryUnavailableCannotBlockCapturedRollback.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationMaps	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationKernel.task	E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.
    plan14_input_inventory_test.go:424: J4	internal/rollout/rootfailures.go	RootFailures.ImportLegacy	E3	linux:internal/host/rootupdates.go:productionRootUpdates	rev3=PROPOSED-p3;run=8;identity=root adoption and migration uid 0;basis=imports bounded negative tuples, hold markers and unresolved intents once; ignores legacy epochs and retries and durably retains import fingerprints
    plan14_input_inventory_test.go:424: J4	internal/rollout/failures.go	newBookID	E1+E3	linux:internal/rollout/failures.go:OpenFailureBook	fix1-merge-review;basis=Uses the named entropy source and propagates failure; retains authority classification despite no scanner-recognized direct read.
    plan14_input_inventory_test.go:424: J4	internal/host/rootinventory_install.go	landingRegistrationMatches	C	linux:internal/host/rootinventory.go:ClaimRootHTTP.commitRootInventoryPending	Root landing metadata binds the original op and minted row; checking/configured require the registration session, while later session phases use the freshly bound authoritative current session.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgenerationpins.go	type generationPinSource	E2	linux:internal/host/rootgenerationpins.go:productionRootGenerationPins	E24: independent root installation and launch enumeration, exact reservation reconciliation and fresh quiescent whole-version-tree kernel census; missing sources, open unreserved launches, foreign namespaces and uncontained tasks refuse. Production pin source certifies this evidence before returning pins. Fixtures: TestPlan14GenerationInventoryCompleteness, TestPlan14GenerationInventoryPinConsumer, TestPlan14GenerationInventoryLifecycle, TestPlan14GenerationInventoryProcessCrash, TestPlan14GenerationKernelCensusUnknownReference, TestPlan14GenerationLaunchInventory, TestPlan14GenerationReaderDoesNotInitialize, TestPlan14GenerationInstallationInventory. Checked production source/kernel witnesses passed on the E27 root runner. E29 physical-payload and installed-unit witnesses passed on the controller runner; E30 required-artifact witness pending.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_inventory.go	openGenerationLaunchInventory	E2	linux:internal/host/rootgeneration_retirement.go:productionRetireGenerations	E33: census-only generation journal reads accept private root-owned ancestry without chmod or repair. Every ancestor remains descriptor-checked, root-owned and non-writable by group/other; leaves remain single-link regular root-owned files, checked for DB/WAL/SHM. Public-file callers remain unchanged. Fixtures: TestPlan14AuthorityFilePrivateAncestors, TestPlan14AuthorityFileAbsoluteBoundary; TestPlan14GenerationPrivateJournalRootRunner and TestPlan14GenerationRequiredArtifactsRootRunner are runner-pending. Pre-flight 76, 78, 82 and 89.
    plan14_input_inventory_test.go:424: J4	internal/host/claimwakestop.go	ClaimAssembly.collectCapturedStop	C+G	linux:internal/host/claimwakestop.go:ClaimAssembly.collectRetirementStop	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_execpermit.go	ClaimLaunchRoot.execPermit	D	linux:internal/host/claimlaunch_root.go:ClaimLaunchRoot.launchLocked	Root participation bounds the executable permit; TestPlan14ExecutionFinalLaunchUsesRootParticipation covers initial and final checks. PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_status.go	HistoryStatusKey	E1	linux:internal/release/roothistory_status.go:RootHistory.ProjectMigrationStatus	Exact signed recovery retirement binds namespace, complete outcome digest and a later root-verified success; pending originals and changed evidence remain restrictive. Independent settlement publishes status without controlling effects. Fixtures: TestPlan14HistoryExactRecoveryRetirement, TestPlan14HistoryRecoveryRetirementAuthority, TestPlan14HistoryRetirementVisibleSync, TestPlan14HistoryRetirementProcessCrash, TestPlan14RecoveryRetirementProductionCallback, TestPlan14IndependentRecoveryPublishesStatus.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgenerations_launch.go	type rootGenerationSource	E2	linux:internal/host/claimlaunch_root.go:type ClaimLaunchRoot	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.;rev3=PROPOSED-p3;run=8;identity=root claim launch assembly uid 0;basis=adds the root-owned persistent file capture capability to production generation binding
    plan14_input_inventory_test.go:424: J4	internal/host/rootseedsfloor.go	readRootSeedsBinary	F	linux:internal/host/rootseedsfloor.go:rootSeedsAllowsBinary	rev3=PROPOSED-p3;identity=carlos adopt seeds judgement and root system apply/recover candidate checks, uid 0;basis=delegates checked signed executable read then selects seeds protocol
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	systemApplier.runWithRelease	D+F	linux:internal/host/systemapply.go:RunSystemApply	rev3=PROPOSED-p3;identity=root system apply/recover or root participation caller uid 0;basis=root CLI carries E release exclusion through apply and recovery; nested guards reuse its token; absent census runs the exact legacy body
    plan14_input_inventory_test.go:424: J4	internal/host/claimhandover_recovery.go	claimInitialSourceRecovery	C+G	linux:internal/host/claimwakestop.go:ClaimAssembly.stopCapturedSession	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_kernel_linux.go	generationTaskFDs	E2	linux:internal/host/rootgeneration_kernel_linux.go:generationKernel.task	E25: keep the descriptor-listing handle open through inspection, including when scanning the current process. Check every listed descriptor against paths and artifact identities. Fixtures: TestPlan14GenerationKernelOwnDescriptors and TestPlan14GenerationKernelReferences. Root-runner acceptance passed at E27: TestPlan14GenerationKernelCensusRootRunner and TestPlan14GenerationKernelRetirementRootRunner.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/reconcile_adapter.go	ReconcileAdapter.ownedRow	C	linux:internal/hostbox/reconcile_adapter.go:ReconcileAdapter.Install	Extracted row writer retains complete typed inventory and immutable route identity around guarded write.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_source.go	readRootProtocolProjection	F	linux:internal/host/rootmovesfloor_source.go:readRootFloorProjection	rev3=PROPOSED-p3;identity=carlos agent in carlos-edge.service uid carlos;basis=checked public root projection must agree with selector and directory sync before advertising acceptance
    plan14_input_inventory_test.go:424: J4	internal/host/claimproduction_linux.go	productionStopControllers.VerifiedController	C+G	linux:internal/host/claimstop_production.go:NewProductionClaimStopHandler	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/image_linux.go	Disk.Exec	F	linux:internal/host/guardexec.go:RunSystemGuardExec	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/relocationreleases.go	ReleaseObligation.Queue	C	linux:internal/host/relocationeffects.go:RelocationEffects.Release	Queues exact relocation release retirement obligation and preserves already discharged receipt replay.
    plan14_input_inventory_test.go:424: J4	internal/hostrelocate/worker.go	Worker.self	C+D	linux:internal/hostrelocate/worker.go:Worker.ConvertLanding	Worker identity requires current active directory enrollment, home-region match and termination-fence check.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_reconstruct.go	RootHistory.Reconstruct	E1	linux:internal/release/roothistory_delivery.go:RootHistory.ReceiveReconstruction	Signed replacement binds the exact pending digest and current sources/revisions; old intended refusals and hold bounds remain restrictive. Fixtures: TestPlan14ReconstructionReplacement, TestPlan14ReconstructionReplacementCrash.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	RootGenerations.Read	E2	linux:internal/release/rootgenerationpins.go:RootGenerations.Reservations	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_requirements.go	productionGenerationCreation	E2	linux:internal/host/rootgeneration_inventory.go:readProductionGenerationInventory	E34: census-only generation completeness requires E1 root creation evidence for an empty installation without retained predecessors. The exact host/account/app/installation must remain fresh on both sides of kernel inspection. Existing predecessor obligations remain mandatory. Production root history uses checked private ancestry and recommits before granting freshness, so read or sync failure refuses. Pre-flight 20, 33, 79 and 80. Fixtures: TestPlan14GenerationEmptyInstallationRequiresCreation, TestPlan14GenerationCreationFromRegistration, TestPlan14GenerationRequiredArtifacts; production checked-path TestPlan14GenerationRequiredArtifactsRootRunner remains runner-pending. No new history initialization or claims-off call.
    plan14_input_inventory_test.go:424: J4	internal/host/rootgeneration_containment_linux.go	generationIdentity	E2	linux:internal/host/rootgeneration_containment_linux.go:generationKernel.containedBinding	PROPOSED E45: root uses retained reservation identities and live kernel containment checks; unrecognized processes still refuse. Current positive root acceptance requires rerun after proc-mount tightening.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_source.go	readRootProtocolBound	F	linux:internal/host/rootmigration_startup.go:verifyRootMigrationFloors	rev3=PROPOSED-p3;identity=root adopt refresh, root system update/recovery and root guard floor readers, uid 0;basis=reads local root accepted and retained deny state; public-only deny survives missing private history; missing unknown history is not acceptance
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_kernel_linux.go	scanRebootCgroups	C+G	linux:internal/host/rootmigration_collect_linux.go:migrationStopKernel.RecoverStopped	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/guardexec.go	RunSystemGuardExec	F	linux:system.go:runSystem	rev3=PROPOSED-p3;identity=carlos system guard-exec apply/recover root units uid 0; edge unit uid carlos; console unit uid carlos-console;basis=root apply/recover selects signed image from local bound; non-root edge bypasses private floor entirely
    plan14_input_inventory_test.go:424: J4	internal/host/rootexecution_settle.go	ClaimRootHTTP.beginExecutionRecoveryFence	D	linux:internal/host/rootexecution_settle.go:ClaimRootHTTP.cleanupExecution	Root cleanup checks exact retained installation, launch journal and kernel evidence; CC9 requires a fresh terminal or exclusion claim.
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	validStatus	E1	linux:internal/historyreadback/readback.go:ReadStatus	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/launchhosts.go	LaunchJournal.HostLaunches	C	linux:internal/host/rootexecution_settle.go:ClaimRootHTTP.cleanupExecution	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	RootGenerations.Check	E2	linux:internal/host/rootgenerations_launch.go:generationLaunchPermit.check	E20: exact reservation closure precedes retirement verification; retained tombstones forbid replay and require sync recommit. Retired records release only their own pins; completeness remains a separate mandatory verifier, still unavailable in production. Fixtures: TestPlan14GenerationRetirementReleasesExactPin, TestPlan14GenerationRetirementRefusals, TestPlan14GenerationClosedReplayRefused, TestPlan14GenerationRetirementProcessCrash, TestPlan14GenerationRetirementKeepsIndependentReference, TestPlan14GenerationClaimsOffRestageMatchesMain.
    plan14_input_inventory_test.go:424: J4	internal/host/rootfloor_available.go	systemApplier.activationFloor	F	linux:internal/host/systemapply.go:systemApplier.activationRule	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=keeps no-census main behavior; logs once and permits repair when no available signed copy supports the bound
    plan14_input_inventory_test.go:424: J4	internal/caps/render.go	RenderService	E4	linux:internal/caps/converge.go:Converge	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/buildstate.go	buildStates.wakeTarget	E3	linux:internal/host/agent.go:runAgent	root-route
    plan14_input_inventory_test.go:424: J4	internal/host/buildstate.go	buildStates.heldWakeInput	E3	linux:internal/host/buildstate.go:buildStates.beforeExec	Held wake reads tenant-bound consumed decisions, refusal ledger and installed release; no downgrade to diagnostic.
    plan14_input_inventory_test.go:424: J4	internal/host/movesheldrelease_production.go	WithProductionMovesHeldRelease	B2+C+E1+E2	linux:internal/host/claimstop_run.go:RunInstanceControl	Root held-release constructor requires root guard and private release store, authenticates peer and reads root health history. E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/host/claimhandover_crossbox.go	relocationAfter	C	linux:internal/host/claimhandover_crossbox.go:wireClaimAdmission	Admission dispatch preserves landing handover and delegates relocating probing to its typed after-admission owner.
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/ledger.go	Ledger.EndUpdateWith	D	linux:internal/hostfloor/disk.go:Disk.EndParticipation	rev3=PROPOSED-p3;identity=root system apply/recover and root participation callers uid 0;basis=retains existing census authority and same-ledger transaction exclusion; nested activation journal completion reuses live root-held context; Root census and transaction lock exclude acquisition and update; interrupted intents clear only after positive launch completeness.
    plan14_input_inventory_test.go:424: J4	internal/host/guardtransaction.go	systemApplier.guardRun	F	linux:internal/host/systemapply.go:systemApplier.onDiskBuild	rev3=PROPOSED-p3;identity=carlos system apply/recover, root systemd units or offline root CLI, uid 0;basis=verifies signed target digest and local retained bounds before executing a version or bootstrap request
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_observations.go	claimUnitStopKernel.VerifyWritersStopped	C+G	linux:internal/host/claimstop_writers.go:ClaimStopCoordinator.WritersStopped	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostbox/roleintention_linux.go	resolveRoleIntention	C	linux:internal/hostbox/roleintention_linux.go:LaunchJournal.ResolveRoleIntentions	root-input
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	RootRestarts.Observe	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.run	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/rootstate/live.go	LiveHeld	A+D	linux:internal/hostexec/rootread.go:ReadRoot	fix1;basis=Requires the store to implement broker-only liveness holding and a non-acquiring query; unsupported stores fail closed.
    plan14_input_inventory_test.go:424: J4	internal/host/movesstage.go	heldReleasePublished	C+E1	linux:internal/host/movesstage.go:heldReleaseHooksVia	root-route;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/hostclaim/relocation.go	FenceSource	C	linux:internal/hostrelocate/worker.go:Worker.Step	Source-loss transition independently verifies termination fence and enrollment before revoking its participation.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_reconstruct.go	RootHistory.resumeReconstruction	E1	linux:internal/release/roothistory_reconstruct.go:RootHistory.Reconstruct	E1 signed root-history reconstruction; exact namespace identity, revisions and canonical sources; journaled completion retains denies and stronger bounds. Tests: TestPlan14RootHistoryReconstruction, TestPlan14RootHistoryReconstructionCrash, TestPlan14RootHistoryReconstructionDeliveryPass.
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	type RestartTarget	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.consume	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/claimroleassembly.go	ClaimRoleAssembly.PreflightLaunch	C+G	linux:internal/host/claimwakeassembly.go:ClaimWakeAssembly.Build	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart_requests_source.go	rootRestartRequestSource.inventory	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.run	E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	type GenerationBinding	E2	linux:internal/host/rootgeneration_inventory.go:generationReconciler.reconcile	E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals. PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.;rev3=PROPOSED-p3;run=8;identity=root generation journal uid 0;basis=additive persistent executable and tree fields preserve historical device and inode records
    plan14_input_inventory_test.go:424: J4	internal/host/rootroute.go	proofBindingSource.claimIdentity	B3	linux:internal/host/rootupdates.go:rootUpdateSource.resolve	canonical record/unit/executable authority and one-attempt rollback; draft incomplete
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart_requests.go	restartRequestPass	E1	linux:internal/host/rootrestart_requests.go:productionRestartRequestPass	E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate.
    plan14_input_inventory_test.go:424: J4	internal/release/rootupdates.go	RootUpdateInputs.routes	E3	linux:internal/release/adopt.go:PassFilter	rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=uses registry hostname only as selector and replaces protected dispatch fields with independently resolved root inputs
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	type GenerationReservation	E2	linux:internal/host/rootgeneration_census_linux.go:productionGenerationKernelCensus	E20: exact reservation closure precedes retirement verification; retained tombstones forbid replay and require sync recommit. Retired records release only their own pins; completeness remains a separate mandatory verifier, still unavailable in production. Fixtures: TestPlan14GenerationRetirementReleasesExactPin, TestPlan14GenerationRetirementRefusals, TestPlan14GenerationClosedReplayRefused, TestPlan14GenerationRetirementProcessCrash, TestPlan14GenerationRetirementKeepsIndependentReference, TestPlan14GenerationClaimsOffRestageMatchesMain.
    plan14_input_inventory_test.go:424: J4	internal/host/proofroot.go	proofRoot.mint	B3+E1	linux:internal/host/proofroot.go:proofRoot.mintAndLog	E1 production uses canonical observed programs and complete root refusal inventory; legacy diagnostics do not grant root mint authority.
    plan14_input_inventory_test.go:424: J4	internal/host/rootexecution_read.go	productionClaimLocal.checkRootParticipation	D	linux:internal/host/rootexecution_client.go:productionClaimLocal.Check	Root observer binds participation to enrolled actor; TestPlan14ExecutionRootLocalIgnoresAgentAbsence.
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_pass.go	type RootHistoryPass	B3+E1	linux:internal/host/agent.go:runAdoptUnderRootRelease	E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/rootmigration.go	migrationAdmissionDenied	G	linux:internal/hostguard/root.go:Guard.CommitRootInventoryArtifacts	rev3=PROPOSED-p3;identity=root claim controller construction uid 0;basis=old migrated sessions remain denied; a newer same-installation session requires completed receipt for every retained migration predecessor
    plan14_input_inventory_test.go:424: J4	internal/rootparticipation/transaction.go	type transactionKey	D+F	linux:internal/rootparticipation/transaction.go:TransactionLedger	rev3=PROPOSED-p3;identity=root system apply/recover uid 0;basis=unexported key prevents callers from forging the held participation scope
    plan14_input_inventory_test.go:424: J4	internal/host/rootrestart.go	restartBoundUnit	B3	linux:internal/host/rootrestart.go:rollbackUnitRestart	E9 merge ruling 6: E effects require a census; no-census recovery delegates to main or records evidence only. Fixtures: TestPlan14ERecoveryNoCensus, TestPlan14ERecoveryNoCensusResume, TestR2ERecoveryFlagWithoutCensus, TestPlan14ERecoveryRestartOutcome. Census-backed recovery retains captured authority and outcome precedence.
    plan14_input_inventory_test.go:424: J4	internal/host/rootrollback.go	captureRollback	B3+E1	linux:internal/host/roothistory_recovery.go:linkRootHistory	Signed named-unit recovery is independent of release and health history. Root rechecks canonical source, unit, process, signed target and trusted live pointer; captures attempt authority before publication; verifies readiness and resumes without repeated effects. Fixtures: TestPlan14SignedActiveFixIgnoresHistory, TestPlan14SignedActiveFixAuthority, TestPlan14SignedFixSupersedesOlderAttempt, TestPlan14ActiveRecoveryProcessCrash, TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14SignedRestartRequiresTrustedLiveLink.
    plan14_input_inventory_test.go:424: J4	internal/hostexec/rootbroker.go	RootBroker.deny	D	linux:internal/hostexec/rootbroker.go:RootBroker.Close	D2 compares the current root token before durable loss and live-lock revocation; cleanup is bounded independently of request cancellation.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationpins.go	RootGenerations.Reservations	E2	linux:internal/host/rootlaunchverifier.go:rootLaunchVerifier.verify	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerationcompleteness.go	RootGenerations.Certify	E2	linux:internal/host/rootlaunchverifier.go:rootLaunchVerifier.verify	E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.
    plan14_input_inventory_test.go:424: J4	internal/host/claimjournal_migration.go	RunSystemJournalMigrate	G	linux:system.go:runSystem	rev3=PROPOSED-p3;identity=carlos system journal-migrate, offline operator CLI, uid 0;basis=explicit offline root operator entry requests full G2 bootstrap after verified claim owner setup
    plan14_input_inventory_test.go:424: J4	internal/release/healthy_root.go	addRootHealthy	B+B4	linux:internal/release/healthy_root.go:recordRootHealthy	root-input
    plan14_input_inventory_test.go:424: J4	internal/rootstate/state_other.go	EnsurePublicDir	A+B4	darwin:internal/host/rootrestart.go:productionRootRestartChecks	fix1;basis=Non-Linux shared-directory setup fails closed.
    plan14_input_inventory_test.go:424: J4	internal/release/adopt.go	backfillManifestDigest	E2	linux:internal/release/adopt.go:adoptHost	E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/host/movesheldrelease_root.go	movesHeldReleaseRoot.publishRelease	C+E1+E2	linux:internal/host/movesheldrelease_root.go:movesHeldReleaseRoot.Serve	Replay and publication re-enter selected root guard and fresh canonical binding; receipt persistence remains inside guarded callback. E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.
    plan14_input_inventory_test.go:424: J4	internal/host/claimlaunch_root.go	claimUnitStopKernel.settleUnits	C+E2+G	linux:internal/host/claimlaunch_root.go:claimUnitStopKernel.RecoverStopped	root-input;kept=C,G;scope=protected-decision-only PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.
    plan14_input_inventory_test.go:424: J4	internal/host/heldstage.go	heldStagePass	E2	linux:internal/host/agent.go:runAdoptUnderRootRelease	E23: old held-stage relay forwards the root generation source before artifact writes and outside publication exclusion. Request fields retain their prior hint/authorization checks; only root pins authorize destructive staging on census boxes. No-census source yields empty pins. Fixtures: TestPlan14GenerationLegacyRelay, TestHeldStagePassIsANoOpWithoutRequests, TestHeldStagePassDropsAnUnauthorizedBuild, TestServeHeldStageRequestsRefusesStaleAndTraversal. Production source wiring is inspected; privileged completeness is not claimed.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_collect_linux.go	type migrationStopKernel	G	linux:internal/host/rootmigration_collect_linux.go:migrationStopKernel.RecoverStopped	rev3=PROPOSED-p3;identity=carlos system journal-migrate uid 0;basis=root-only offline collector owns checked root journals and managed roots; no legacy candidate can supply inventory authority
    plan14_input_inventory_test.go:424: J4	internal/host/buildstate.go	buildStates.refresh	E3	linux:internal/host/buildstate.go:buildStates.wakeTarget	route-and-input
    plan14_input_inventory_test.go:424: J4	internal/host/claimwakewriters.go	claimWakeAttempt.StopWriters	C+G	linux:internal/host/claimstop_writers.go:ClaimAssembly.writersStopped	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/healthy_root.go	readRootHealthy	B+B4	linux:internal/release/healthy.go:ReadHealthy	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/heldstage.go	heldStageAuthority	C+E1	linux:internal/host/heldstage.go:heldStagePass	route-and-input;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	validHex	E1	linux:internal/historyreadback/workflow.go:Operation.checked	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_boot.go	rootFloorBootCandidate	F	linux:internal/host/rootmovesfloor_boot.go:withRootFloorGuardCandidate	rev3=PROPOSED-p3;identity=carlos system guard-exec apply/recover, systemd root units uid 0;basis=selects signed prev under unknown history with no known refusal; always retains certified current executor even when bound exceeds every available build
    plan14_input_inventory_test.go:424: J4	internal/host/rootmovesfloor_source.go	readEffectiveMovesFloor	F	linux:internal/host/systemapply.go:systemApplier.activationRule	rev3=PROPOSED-p3;identity=root adopt refresh, root system update/recovery and root guard floor readers, uid 0;basis=census chooses local root protocol bound; no census chooses existing legacy reader
    plan14_input_inventory_test.go:424: J4	internal/host/claimproduction.go	ProductionClaimOwnerProvider.OpenClaimOwners	C+G	linux:internal/host/claimconstruction.go:OpenProductionClaimAssembly	Production owner factory wires bounded C8 and relocation providers and closes partial construction on error.
    plan14_input_inventory_test.go:424: J4	internal/hostfloor/image_linux.go	OpenProtected	F	linux:internal/host/guardarm.go:RunSystemGuardArm	root-input
    plan14_input_inventory_test.go:424: J4	internal/host/rootrollback.go	settleRollbackAttempt	B3+E1	linux:internal/host/rootrestart.go:rollbackUnitRestart	Independent signed recovery authority and retained attempt outcomes. Fixtures: TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14IndependentRecoveryRetainsMintBarrier, TestPlan14ActiveRecoveryProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop_run.go	claimActivationReady	E2	linux:internal/host/claimstop_run.go:RunInstanceControl	PROPOSED E45: root enforces census-gated release ordering, bounded acquisition and scoped recovery; registry timer primitives preserve supplied identity but producer integration remains pending.
    plan14_input_inventory_test.go:424: J4	internal/host/rootmigration_timers.go	type rootMigrationTimers	G	linux:internal/host/rootmigration_production_linux.go:migrateRootClaimAuthority	rev3=PROPOSED-p3;identity=offline migration root uid 0;basis=holds root-private migration state, root inventory, root fence authority and isolated registry interface under offline exclusion
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/completion.go	ReadReconstruction	E1	linux:internal/historyreadback/workflow.go:Operation.Read	Exact completion binds the accepted authorization digest from durable private history to enrolled-root signed readback. Pending originals, changed evidence and canonical sources cannot supply retirement completion. Fixtures: TestPlan14HistoryReconstructionCompletion, TestPlan14HistoryRetirementCompletion, TestPlan14ReadReconstructionCompletion, TestPlan14ReadRetirementCompletion, TestPlan14RecoveryRetirementProductionCallback, TestPlan14RootHistoryReconstructionCrash, TestPlan14HistoryRetirementProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/systemapply.go	RunSystemApply	D+F	linux:system.go:runSystem	rev3=PROPOSED-p3;identity=carlos system apply/recover root systemd units uid 0;basis=registers local launch verifier and delegates to the census-gated outer release wrapper while retaining local root floor checks and main no-census path
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_pass.go	passConfig.recheckHistory	E1	linux:internal/release/adopt.go:adoptHost	E1 canonical binding selection and recheck; durable attempt precedes effects; only independent installed observation settles and retires the exact target refusal.
    plan14_input_inventory_test.go:424: J4	internal/release/rootgenerations.go	validGeneration	E2	linux:internal/release/rootgenerationpins.go:RootGenerations.Reservations	E20: exact reservation closure precedes retirement verification; retained tombstones forbid replay and require sync recommit. Retired records release only their own pins; completeness remains a separate mandatory verifier, still unavailable in production. Fixtures: TestPlan14GenerationRetirementReleasesExactPin, TestPlan14GenerationRetirementRefusals, TestPlan14GenerationClosedReplayRefused, TestPlan14GenerationRetirementProcessCrash, TestPlan14GenerationRetirementKeepsIndependentReference, TestPlan14GenerationClaimsOffRestageMatchesMain.
    plan14_input_inventory_test.go:424: J4	internal/host/movesheldrelease.go	decodeHeldReleaseRequest	C+E1	linux:internal/host/movesheldrelease_root.go:movesHeldReleaseRoot.ServeHTTP	root-input;kept=C,E1;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/release/rootrestart_history.go	type RestartSnapshot	E1	linux:internal/host/rootrestart_requests.go:rootRestartRequests.run	E14 restart consumption component. Root-only canonical inputs under release exclusion; production wiring remains pending. Fixtures: TestPlan14RootRestartConsumption, TestPlan14RootRestartSelection, TestPlan14RootRestartReadMustSync, TestPlan14RootRestartProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/hostguard/guard.go	StoreReader.Read	C	linux:internal/host/rootinstallation.go:rootInstallationHostApp	root-input
    plan14_input_inventory_test.go:424: J4	internal/historyreadback/readback.go	RequestKey	E1	linux:internal/historyreadback/workflow.go:Operation.Deliver	Challenge-bound release-history readback authenticates the deployment request and active enrolled box key, rereads private history with original recovery restrictions, and rechecks roster/fence state. No status grants completeness or changes service effects. Fixtures: TestPlan14HistoryReadback, TestPlan14HistoryReadbackAuthority, TestPlan14HistoryReadbackReadRace, TestPlan14HistoryReadbackReenrollment, TestPlan14HistoryReadbackRequestRefusal, TestPlan14HistoryReadbackProduction, TestPlan14HistoryReadbackProcessCrash.
    plan14_input_inventory_test.go:424: J4	internal/host/claimstop.go	ClaimStopCoordinator.witnessNoProcess	C+G	linux:internal/host/claimstop.go:ClaimStopCoordinator.FenceAndStop	root-input;kept=C,G;scope=protected-decision-only
    plan14_input_inventory_test.go:424: J4	internal/host/versionsweep.go	sweepStagedVersions	E2	linux:internal/host/versionsweep.go:sweepStagedVersionsPass	root-route E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode.
    plan14_input_inventory_test.go:424: J4	internal/hostbox/journalnamespace_linux.go	prepareJournalDirectory	C+G	linux:internal/hostbox/journalnamespace_linux.go:PrepareRootJournalDirectory	rev3=PROPOSED-p3;identity=offline journal migration and instance-control/adopt startup uid 0;basis=admits only private root-owned authority and held-release alongside existing retire/migration namespaces; every ownership/type/mode check and unknown-directory refusal remains
    plan14_input_inventory_test.go:424: J4	internal/release/roothistory_pass.go	RootHistoryPass.CompleteAttempt	B3+E1	linux:internal/host/roothistory_recovery.go:rootRestartChecks.settleHistory	Root history intent is linked to captured canonical rollback authority before live effects; verified recovery settles only its exact intent. Fixtures: TestPlan14HistoryRollbackLink, TestPlan14HistoryRecoveryRefusesChanges, TestPlan14HistoryRecoveryProcessCrash, TestPlan14HistorySettlementRetriesVisibleSync. E1 migration and restart consumption remain incomplete.
    plan14_input_inventory_test.go:431: family E4 missing erasure fixture 
    plan14_input_inventory_test.go:431: family E4 missing hostile fixture 
    plan14_input_inventory_test.go:431: family E4 missing positive fixture 
    plan14_input_inventory_test.go:431: family E4 missing rename fixture 
    plan14_input_inventory_test.go:431: family E4 missing retry fixture 
    plan14_input_inventory_test.go:435: authority coverage: 16516 reachable declarations; 95 failures
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: refusing to mint route acme.go.tito.io (app "tito" acct "bac"): this box declares CARLOS_INBOUND=none (no-inbound) and cannot serve routed instance traffic
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route console.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted service route svc.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route whole.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route shared.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: converged acme.go.tito.io channel stable -> edge
2026/10/15 22:21:51 provision: converged acme.go.tito.io channel edge -> canary/rehearsal
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: empty channel
2026/10/15 22:21:51 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: converged acme.go.tito.io environment "" -> "staging"
2026/10/15 22:21:51 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: converged acme.go.tito.io steering "" -> "latency"
2026/10/15 22:21:51 provision: converged acme.go.tito.io steering "latency" -> ""
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: converged acme.go.tito.io hibernate false -> true
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: converged acme.go.tito.io hibernate true -> false (replication "daily" cleared: only a hibernating route's rung is read)
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: converged acme.go.tito.io status-named false -> true
2026/10/15 22:21:51 provision: converged acme.go.tito.io status-named true -> false
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted service route ha.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: converged ha.go.tito.io upstreams addr "" -> "", addrs "127.0.0.1:7001,127.0.0.1:7002" -> "127.0.0.1:7001,127.0.0.1:7003" (probe "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}" -> "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}")
2026/10/15 22:21:51 provision: converged ha.go.tito.io upstreams addr "" -> "", addrs "127.0.0.1:7001,127.0.0.1:7003" -> "127.0.0.1:7003,127.0.0.1:7001" (probe "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}" -> "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}")
2026/10/15 22:21:51 provision: converged ha.go.tito.io upstreams addr "" -> "", addrs "127.0.0.1:7003,127.0.0.1:7001" -> "127.0.0.1:7003,127.0.0.1:7001" (probe "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}" -> "{\"path\":\"/healthz\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}")
2026/10/15 22:21:51 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: converged whole.go.tito.io upstreams addr "127.0.0.1:9443" -> "", addrs "" -> "127.0.0.1:9443,127.0.0.1:9444" (probe "" -> "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}")
2026/10/15 22:21:51 provision: converged whole.go.tito.io upstreams addr "" -> "", addrs "127.0.0.1:9443,127.0.0.1:9444" -> "" (probe "{\"path\":\"/\",\"status\":200,\"interval_ms\":2000,\"fail_after\":3,\"rise_after\":2}" -> "")
2026/10/15 22:21:51 provision: whole.go.tito.io: record describes a different route SHAPE than the row (kind "instance"/"service" unit ""/"" socket "/run/carlos/whole.go.tito.io.sock"/"" db "/data/whole.go.tito.io.db"/"") — not converged in place; `carlos remove whole.go.tito.io` purges this route's capability grants (registry.Delete's contract, not a bug) before the next pass re-mints it, so treat that as a last resort, not a routine fix
2026/10/15 22:21:51 provision: minted service route whole.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: skipping accounts/bac/account.json: malformed account manifest: invalid character 'o' in literal null (expecting 'u')
2026/10/15 22:21:51 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: manifest bac/tito: read failed: provision: manifest bac/tito: invalid character 'o' in literal null (expecting 'u')
2026/10/15 22:21:51 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: disagrees with its own path (host="wrong-host.go.tito.io" account="bac" app="tito")
2026/10/15 22:21:51 provision: skipping record apps/bac/tito/instances/acme$evil.go.tito.io.json: host "acme$evil.go.tito.io" is not a hostname
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: skipping record apps/bac/tito/instances/acme$evil.go.tito.io.json: host "acme$evil.go.tito.io" is not a hostname
2026/10/15 22:21:51 provision: not removing acme$evil.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/15 22:21:51 provision: skipping record apps/bac/tito/instances/bad-service.go.tito.io.json: invalid shape: kind service with no addr: the platform only proxies to a service, so the record must name the upstream it proxies to
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: skipping record apps/bac/tito/instances/bad-service.go.tito.io.json: invalid shape: kind service with no addr: the platform only proxies to a service, so the record must name the upstream it proxies to
2026/10/15 22:21:51 provision: not removing bad-service.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/15 22:21:51 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: skipping record apps/bac/tito/instances/no-channel.go.tito.io.json: empty channel
2026/10/15 22:21:51 provision: not removing no-channel.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/15 22:21:51 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:51 provision: skipping record apps/bac/tito/instances/acme.go.tito.io.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/15 22:21:51 provision: not removing acme.go.tito.io: its record exists but could not be read cleanly this pass
2026/10/15 22:21:51 provision: removed retired instance route ghost.go.tito.io (record gone)
2026/10/15 22:21:52 provision: duplicate host dup.go.tito.io: keeping apps/bac/tito/instances/dup.go.tito.io.json, skipping apps/bad/tito/instances/dup.go.tito.io.json
2026/10/15 22:21:52 provision: minted instance route dup.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/15 22:21:52 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/15 22:21:52 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/15 22:21:52 provision: removed retired static route site.go.tito.io (app in the trash)
2026/10/15 22:21:52 provision: trash marker for bac/tito unreadable: release: malformed trash marker for bac/tito: invalid character 'n' looking for beginning of object key string — not minting for this app
2026/10/15 22:21:52 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/15 22:21:52 provision: removed retired instance route acme.go.tito.io (app in the trash)
2026/10/15 22:21:52 provision: bac/tito is in the trash — not minting instance routes for it
2026/10/15 22:21:52 provision: trash marker for bac/tito unreadable: release: malformed trash marker for bac/tito: invalid character 'n' looking for beginning of object key string — not minting for this app
2026/10/15 22:21:52 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/15 22:21:52 provision: converged acme.go.tito.io channel stable -> edge
2026/10/15 22:21:52 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/15 22:21:52 provision: converged acme.go.tito.io channel canary/rehearsal -> edge
2026/10/15 22:21:52 provision: converged acme.go.tito.io environment "staging" -> ""
2026/10/15 22:21:52 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/15 22:21:52 provision: acme.go.tito.io exists but is not the route this record describes (backing "unit" (box-scoped, not expressible in a record)) — leaving it alone
2026/10/15 22:21:52 provision: acme.go.tito.io exists but is not the route this record describes (tunnel "pi-fleet" (box-scoped, not expressible in a record)) — leaving it alone
2026/10/15 22:21:52 provision: acme.go.tito.io exists but is not the route this record describes (caps "port:25" (box-scoped, not expressible in a record)) — leaving it alone
2026/10/15 22:21:52 provision: acme.go.tito.io exists but is not the route this record describes (platform (owned by the domains reconcile pass)) — leaving it alone
2026/10/15 22:21:52 provision: acme.go.tito.io exists but is not the route this record describes (canary (owned by the domains reconcile pass)) — leaving it alone
2026/10/15 22:21:52 provision: acme.go.tito.io exists but is not the route this record describes (db "/data/other.db"/"/data/acme.go.tito.io.db") — leaving it alone
2026/10/15 22:21:52 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/15 22:21:52 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/15 22:21:52 provision: dry-run: would mint instance route acme.go.tito.io (app "tito" acct "bac" channel "stable")
2026/10/15 22:21:52 provision: dry-run: would adopt existing route adopt.go.tito.io (app "tito" acct "bac") — this record would own its channel and environment
2026/10/15 22:21:52 provision: dry-run: would converge adopt.go.tito.io channel stable -> edge
2026/10/15 22:21:52 provision: dry-run: would converge adopt.go.tito.io environment "" -> "staging"
2026/10/15 22:21:52 provision: dry-run: would converge owned.go.tito.io channel stable -> edge
2026/10/15 22:21:52 provision: dry-run: would converge owned.go.tito.io environment "" -> "staging"
2026/10/15 22:21:52 provision: dry-run: would converge owned.go.tito.io hibernate false -> true
2026/10/15 22:21:52 provision: dry-run: would converge owned.go.tito.io seed
2026/10/15 22:21:52 provision: dry-run: would remove retired instance route gone.go.tito.io (record gone)
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: adopted existing route adopt.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/15 22:21:52 provision: converged adopt.go.tito.io channel stable -> edge
2026/10/15 22:21:52 provision: converged adopt.go.tito.io environment "" -> "staging"
2026/10/15 22:21:52 provision: converged owned.go.tito.io channel stable -> edge
2026/10/15 22:21:52 provision: converged owned.go.tito.io environment "" -> "staging"
2026/10/15 22:21:52 provision: converged owned.go.tito.io hibernate false -> true
2026/10/15 22:21:52 provision: removed retired instance route gone.go.tito.io (record gone)
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: adopted existing route story.carlosframework.com (app "story" acct "bad") — this record now owns its channel and environment
2026/10/15 22:21:52 provision: story.carlosframework.com exists but is not the route this record describes (kind "instance"/"static") — leaving it alone
2026/10/15 22:21:52 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted service route pub.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted service route pubs.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route exec.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted service route loop.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted service route named.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted service route priv.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route unit.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted static route pisite.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted static route site.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: removed retired static route site.go.tito.io (record gone)
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: converged acme.go.tito.io replicas "ie,uk" -> "uk"
2026/10/15 22:21:52 provision: converged acme.go.tito.io replicas "uk" -> ""
2026/10/15 22:21:52 provision: minted instance route acme-uk.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: converged acme-uk.go.tito.io replica mark true -> false
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: acme.go.tito.io: row is on the nested layout (db "/data/instances/acme.go.tito.io/acme.go.tito.io.db" socket "/run/carlos/instances/acme.go.tito.io/app.sock"); the record's shared paths are not drift
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: minted instance route router.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:52 provision: acme.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/15 22:21:52 provision: router.go.tito.io: not minting this pass: the box's layout intent could not be read: store down
2026/10/15 22:21:52 provision: adopted existing route acme.go.tito.io (app "tito" acct "bac") — this record now owns its channel and environment
2026/10/15 22:21:52 provision: converged acme.go.tito.io channel stable -> edge
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/15 22:21:52 provision: not removing acme.go.tito.io (record gone): participant of a running operation
2026/10/15 22:21:52 provision: removed retired instance route acme.go.tito.io (record gone)
2026/10/15 22:21:52 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
2026/10/15 22:21:52 provision: refusing to mint held route acme.go.tito.io (app "tito" acct "bac"): this box declares CARLOS_INBOUND=none (no-inbound) and cannot serve routed instance traffic
2026/10/15 22:21:52 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/15 22:21:52 provision: acme.go.tito.io: held restoring by rb_other, not by mv_acme; leaving it
2026/10/15 22:21:52 provision: acme.go.tito.io: the row is not this pass's (app "other" acct ""); not holding it for mv_acme
2026/10/15 22:21:52 provision: acme.go.tito.io exists but is not the route this record describes (app "other"/"tito") — leaving it alone
2026/10/15 22:21:52 provision: dry-run: would mint instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac" channel "stable")
2026/10/15 22:21:52 provision: acme.go.tito.io: not held landing by mv_acme: the row's hold changed under this pass; the next pass judges it afresh
2026/10/15 22:21:53 provision: held acme.go.tito.io landing by mv_acme (was ready)
2026/10/15 22:21:53 provision: minted instance route plain.example.com (app "shop" acct "bac")
2026/10/15 22:21:53 provision: minted instance route acme.example.com (app "shop" acct "bac")
2026/10/15 22:21:53 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/15 22:21:53 provision: skipping record apps/bac/shop/instances/liar.shop.example.com.json: disagrees with its own path (host="other.shop.example.com" account="bac" app="shop")
2026/10/15 22:21:53 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/15 22:21:53 provision: skipping record apps/bac/shop/instances/liar.shop.example.com.json: disagrees with its own path (host="other.shop.example.com" account="bac" app="shop")
2026/10/15 22:21:53 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/15 22:21:53 provision: skipping record apps/bac/shop/instances/liar.shop.example.com.json: disagrees with its own path (host="other.shop.example.com" account="bac" app="shop")
2026/10/15 22:21:53 provision: skipping record apps/bac/shop/instances/garbled.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/15 22:21:53 provision: listing apps/bac/shop/instances/: list refused — its records are unseen this pass
2026/10/15 22:21:53 provision: a.shop.example.com: swapped for import sd_wq52oy3xdekz3ija6g5baqgwci (the original route is journaled)
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_wq52oy3xdekz3ija6g5baqgwci committed: its gate is cleared and its journal row dropped
2026/10/15 22:21:53 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_ehkgxj5sfru7n4lgepk2gl7hwi rolled back to its original route
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_ehkgxj5sfru7n4lgepk2gl7hwi: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_ehkgxj5sfru7n4lgepk2gl7hwi is cleaned up and its journal row retired
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_4txzzmc5tjqc2udfib7vslu6ey rolled back to its original route
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_4txzzmc5tjqc2udfib7vslu6ey: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_4txzzmc5tjqc2udfib7vslu6ey is cleaned up and its journal row retired
2026/10/15 22:21:53 provision: dry-run: would redo a.shop.example.com's swap record CAS for import sd_dkuctw7vtmxrkv5tnyv45gr6oi
2026/10/15 22:21:53 provision: dry-run: would clear a.shop.example.com's import gate
2026/10/15 22:21:53 provision: dry-run: would converge a.shop.example.com seed source
2026/10/15 22:21:53 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/15 22:21:53 provision: a.shop.example.com: the import's record apps/bac/shop/instances/a.shop.example.com.json is not one this pass can use (connection reset)
2026/10/15 22:21:53 provision: a.shop.example.com: the import's record apps/bac/shop/instances/a.shop.example.com.json is not one this pass can use (provision: invalid maintenance projection or protected fields)
2026/10/15 22:21:53 provision: a.shop.example.com: the import's record apps/bac/shop/instances/a.shop.example.com.json is not one this pass can use (the record under apps/bac/shop/instances/a.shop.example.com.json is apps/bac/shop/instances/b.shop.example.com.json's)
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_hdjrqrwht6loanoen2rgu6mvim cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_j66cnxkcnqx2c2umh67ekog4yi cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_y4leax72papm2whkjtvz3lkzrm is journaled, but this box cannot act on imports; its row is left alone
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_ayzjznivykvrx7pqqlsakcccna is journaled, but this box cannot act on imports; its row is left alone
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_tmmjl77qwosfb6whm6jdffvyj4 is journaled, but this box cannot act on imports; its row is left alone
2026/10/15 22:21:53 provision: the import journal could not be read: registry: import journal a.shop.example.com: original row: unexpected end of JSON input (no import is acted on and no route is removed this pass)
2026/10/15 22:21:53 provision: b.shop.example.com: import sd_vce5notkq2mesapqviz36w47d4 left alone this pass: the import journal could not be read
2026/10/15 22:21:53 provision: c.shop.example.com: import sd_5ksrbx2iwjqkljff6xclpqhkp4 left alone this pass: the import journal could not be read
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_wvjjg2kna6gnhiz2ee22wyb75u committed: its gate is cleared and its journal row dropped
2026/10/15 22:21:53 provision: a.shop.example.com: not converging import sd_42sbgpv2vswkxcpeht6oqpfaby: it is swapped but not committed, and the row on this box has no import gate
2026/10/15 22:21:53 provision: a.shop.example.com: not converging import sd_um7eqya3ib2tr63r5bonv37aau: it is swapped but not committed, and the row on this box has no import gate
2026/10/15 22:21:53 provision: a.shop.example.com: not converging import sd_2lywlhvhn2n5k5y3pxt3hvhqr4: it is placed but not committed, and the row on this box has no import gate
2026/10/15 22:21:53 provision: a.shop.example.com: not converging import sd_vxwuvm2nrm7o5cqq3tmcyxfobm: it is placed but not committed, and the row on this box has no import gate
2026/10/15 22:21:53 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/15 22:21:53 provision: converge seed source on a.shop.example.com: constraint failed: seed_source is read-only here (1811)
2026/10/15 22:21:53 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/15 22:21:53 provision: a.shop.example.com: import sd_not7sabopxnvtifpnjofeo762y committed: its gate is cleared and its journal row dropped
2026/10/15 22:21:53 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/15 22:21:53 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:53 provision: acme.go.tito.io: row is on the nested layout (db "/data/instances/acme.go.tito.io/acme.go.tito.io.db" socket "/run/carlos/instances/acme.go.tito.io/app.sock"); the record's shared paths are not drift
2026/10/15 22:21:53 provision: acme.go.tito.io: not minting a seeded instance: this box does not mint nested (<nil>)
2026/10/15 22:21:53 provision: acme.go.tito.io: not minting a seeded instance: claim control is on for this box
2026/10/15 22:21:54 provision: acme.go.tito.io: aborted seed sd_csnvrmhvgjznwlbgssvsmjss4u: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/15 22:21:54 provision: acme.go.tito.io: aborted seed sd_csnvrmhvgjznwlbgssvsmjss4u rolled back (no box had swapped it)
2026/10/15 22:21:54 provision: acme.go.tito.io: not minting a seeded instance: its record does not describe a hibernating instance
2026/10/15 22:21:54 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:54 provision: removed instance route acme.go.tito.io (its seed sd_yobmzdk3robrurv5wihpezmerm was aborted); the next pass rolls it back
2026/10/15 22:21:54 provision: acme.go.tito.io: aborted seed sd_yobmzdk3robrurv5wihpezmerm: this box cannot read seed markers, and places no seed; nothing local is removed
2026/10/15 22:21:54 provision: acme.go.tito.io: aborted seed sd_yobmzdk3robrurv5wihpezmerm rolled back (no box had swapped it)
2026/10/15 22:21:54 provision: acme.go.tito.io: aborted seed sd_5eu2gpu7jw2ozg3zctt33bf46a has a row this pass may not remove; leaving the seed aborted
2026/10/15 22:21:54 provision: acme.go.tito.io: aborted seed sd_vl7xyupgn2aek4j2nw6lgvfv2m rolled back (no box had swapped it)
2026/10/15 22:21:54 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:54 provision: removed instance route acme.go.tito.io (its seed sd_lnp6xb4yp7midfiryektkey7h4 was aborted); the next pass rolls it back
2026/10/15 22:21:54 provision: acme.go.tito.io: aborted seed sd_lnp6xb4yp7midfiryektkey7h4 has no route on this box: its local data is removed
2026/10/15 22:21:54 provision: acme.go.tito.io: aborted seed sd_lnp6xb4yp7midfiryektkey7h4 rolled back (no box had swapped it)
2026/10/15 22:21:54 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_m6hwiinxzo42vkvvmbhl22g7v4 (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_m6hwiinxzo42vkvvmbhl22g7v4 rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_m6hwiinxzo42vkvvmbhl22g7v4 is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_pf2unn57rfqupvjapj7ypmswsi (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_pf2unn57rfqupvjapj7ypmswsi rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_pf2unn57rfqupvjapj7ypmswsi is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_2nffmkcmamkmkjxrt5iycxbhou (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_2nffmkcmamkmkjxrt5iycxbhou rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_2nffmkcmamkmkjxrt5iycxbhou: the host's replica is left alone: its record no longer names this seed
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_2nffmkcmamkmkjxrt5iycxbhou is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_3apfhvpewrhgpcohcsjvstj2xa (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_3apfhvpewrhgpcohcsjvstj2xa rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_3apfhvpewrhgpcohcsjvstj2xa rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_3apfhvpewrhgpcohcsjvstj2xa is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_w23qnn3oebp4k2dxhgfpp2wnge (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_w23qnn3oebp4k2dxhgfpp2wnge rollback deferred: the host is not fenced and stopped yet (stop unproven)
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_eqwq7qq3bgdwqppwud6pm7thq4 (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_eqwq7qq3bgdwqppwud6pm7thq4 is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_obcgc3oinqunmxoipl2esifjza (the original route is journaled)
2026/10/15 22:21:54 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: malformed: provision: invalid maintenance projection or protected fields
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_obcgc3oinqunmxoipl2esifjza left alone this pass: its record could not be read
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_epmvqvpfvzk2bifrfztrwpkq6e (the original route is journaled)
2026/10/15 22:21:54 provision: skipping record apps/bac/shop/instances/a.shop.example.com.json: read failed: connection reset
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_epmvqvpfvzk2bifrfztrwpkq6e left alone this pass: its record could not be read
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_rhvhxyez6g4fzljb6ziticrtuq (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_rhvhxyez6g4fzljb6ziticrtuq: close the import gate: constraint failed: injected (1811)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_rhvhxyez6g4fzljb6ziticrtuq rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_rhvhxyez6g4fzljb6ziticrtuq is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_ehj3fyiskzccfnm6grpblapwjm (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_ehj3fyiskzccfnm6grpblapwjm: close the import gate: constraint failed: injected (1811)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_ehj3fyiskzccfnm6grpblapwjm rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_ehj3fyiskzccfnm6grpblapwjm is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_xrqp2cwshntr3ygnllwo3a2cxy (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_xrqp2cwshntr3ygnllwo3a2cxy rollback deferred: the host is not fenced and stopped yet (injected failure at fence)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_xrqp2cwshntr3ygnllwo3a2cxy rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_xrqp2cwshntr3ygnllwo3a2cxy is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_iyt3ikgyzsaev7n52evo4jaq44 (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_iyt3ikgyzsaev7n52evo4jaq44 rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_iyt3ikgyzsaev7n52evo4jaq44 is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_op2y2hlwrf46kgqr3m6af7rfpu (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_op2y2hlwrf46kgqr3m6af7rfpu: retire its instance key: injected failure at retire-key
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_op2y2hlwrf46kgqr3m6af7rfpu rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_op2y2hlwrf46kgqr3m6af7rfpu is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_3io2jaskppvsttphkckhdz2n7u (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_3io2jaskppvsttphkckhdz2n7u rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_3io2jaskppvsttphkckhdz2n7u is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_hn4babwzayw67rmqlu2n75ss4i (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_hn4babwzayw67rmqlu2n75ss4i: remove its local data: injected failure at remove-local
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_hn4babwzayw67rmqlu2n75ss4i rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_hn4babwzayw67rmqlu2n75ss4i is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_6bu7zv4xxar2zb6sg7xsvlqzf4 (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_6bu7zv4xxar2zb6sg7xsvlqzf4 rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_6bu7zv4xxar2zb6sg7xsvlqzf4 is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_bk55t62uh55ppfxf6d7yxg4cu4 (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_bk55t62uh55ppfxf6d7yxg4cu4: remove its local data: injected failure at remove-local-done
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_bk55t62uh55ppfxf6d7yxg4cu4 rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_bk55t62uh55ppfxf6d7yxg4cu4 is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_brczzaknyciml64tgdlixgxi2e (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_brczzaknyciml64tgdlixgxi2e rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_brczzaknyciml64tgdlixgxi2e is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_yrzsnqt7mzhme7q44ndnmfijzy (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_yrzsnqt7mzhme7q44ndnmfijzy: restore the original route: constraint failed: injected (1811)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_yrzsnqt7mzhme7q44ndnmfijzy rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_yrzsnqt7mzhme7q44ndnmfijzy is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_2ty25ye3eeotr3vvynm7w2iaqq (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_2ty25ye3eeotr3vvynm7w2iaqq: restore the original route: constraint failed: injected (1811)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_2ty25ye3eeotr3vvynm7w2iaqq rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_2ty25ye3eeotr3vvynm7w2iaqq is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_zusw3th45jsnl6czsjewouwoxa (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_zusw3th45jsnl6czsjewouwoxa is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_i22kxga34du25sg3ol6yvxdc7u (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_i22kxga34du25sg3ol6yvxdc7u rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_i22kxga34du25sg3ol6yvxdc7u: delete its snapshot: injected failure at delete-snapshot
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_i22kxga34du25sg3ol6yvxdc7u is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_i24s3sgxzcb7kgfgvxkctyzpua (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_i24s3sgxzcb7kgfgvxkctyzpua rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_i24s3sgxzcb7kgfgvxkctyzpua is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_tycfsogg5hdql3gx3q5uvzfj5i (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_tycfsogg5hdql3gx3q5uvzfj5i rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_tycfsogg5hdql3gx3q5uvzfj5i: delete the host's replica: injected failure at delete-replica
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_tycfsogg5hdql3gx3q5uvzfj5i is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_xmhgbzhtevzfwxluy56ivptjlq (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_xmhgbzhtevzfwxluy56ivptjlq rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_xmhgbzhtevzfwxluy56ivptjlq is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_pttra4u4hfza3orv5nhzcy6r54 (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_pttra4u4hfza3orv5nhzcy6r54 rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_pttra4u4hfza3orv5nhzcy6r54: retire its journal row: constraint failed: injected (1811)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_pttra4u4hfza3orv5nhzcy6r54 is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_rq2t4x6shvmvsrdopfu5pdt6vy (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_rq2t4x6shvmvsrdopfu5pdt6vy rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_rq2t4x6shvmvsrdopfu5pdt6vy: retire its journal row: constraint failed: injected (1811)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_rq2t4x6shvmvsrdopfu5pdt6vy is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_vve2uy5nbj52rir4fsj32nsk2m (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_vve2uy5nbj52rir4fsj32nsk2m rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_vve2uy5nbj52rir4fsj32nsk2m is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: mark import sd_vve2uy5nbj52rir4fsj32nsk2m rolled back: injected failure at cas
2026/10/15 22:21:54 provision: a.shop.example.com: aborted seed sd_vve2uy5nbj52rir4fsj32nsk2m rolled back (no box had swapped it)
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_ynkelgyw57n32cpobtpzuhtdhu (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_ynkelgyw57n32cpobtpzuhtdhu rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_ynkelgyw57n32cpobtpzuhtdhu is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: aborted seed sd_ynkelgyw57n32cpobtpzuhtdhu rolled back (no box had swapped it)
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_36ur7nkcyzsskaqidst6pexxwu (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_36ur7nkcyzsskaqidst6pexxwu rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_36ur7nkcyzsskaqidst6pexxwu rollback deferred: the host is not fenced and stopped yet (<nil>)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_36ur7nkcyzsskaqidst6pexxwu rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_36ur7nkcyzsskaqidst6pexxwu is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_ystmojzyafaxadl2vdocoqojk4 (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_ystmojzyafaxadl2vdocoqojk4 rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_ystmojzyafaxadl2vdocoqojk4 is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_7azztxvutef563bcpskmxbwg2u (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_7azztxvutef563bcpskmxbwg2u rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_7azztxvutef563bcpskmxbwg2u is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_lxd455olw6nnzqopjpwkzhrcry (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_lxd455olw6nnzqopjpwkzhrcry rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_lxd455olw6nnzqopjpwkzhrcry is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/15 22:21:54 provision: a.shop.example.com: swapped for import sd_gzdhfdtjyvfnlv6w6zpzchiczi (the original route is journaled)
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_gzdhfdtjyvfnlv6w6zpzchiczi rolled back to its original route
2026/10/15 22:21:54 provision: a.shop.example.com: import sd_gzdhfdtjyvfnlv6w6zpzchiczi is cleaned up and its journal row retired
2026/10/15 22:21:54 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_folkbpeouvqul4h2bp6kbickv4 (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_folkbpeouvqul4h2bp6kbickv4 rolled back to its original route
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_folkbpeouvqul4h2bp6kbickv4 is cleaned up and its journal row retired
2026/10/15 22:21:55 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_6npx7avynoxaas2srlglslwbai (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_6npx7avynoxaas2srlglslwbai rolled back to its original route
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_6npx7avynoxaas2srlglslwbai is cleaned up and its journal row retired
2026/10/15 22:21:55 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_s6og7cavc63hzxuw54l2xaqj3i (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_s6og7cavc63hzxuw54l2xaqj3i rolled back to its original route
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_s6og7cavc63hzxuw54l2xaqj3i is cleaned up and its journal row retired
2026/10/15 22:21:55 provision: minted instance route a.shop.example.com (app "other" acct "bac")
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_hikv7rg6itsfmqbj7mzcdeicza (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_hikv7rg6itsfmqbj7mzcdeicza has no route on this box: its local data is removed and no route is put back
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_hikv7rg6itsfmqbj7mzcdeicza is cleaned up and its journal row retired
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_qnkvmbz25rvenllodrxxjr2pae (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_67a6tr2sqy5uiumxlp3tzymc4q (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_3vusn6bor4xnxv3sejwe4rrtsy (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_3vusn6bor4xnxv3sejwe4rrtsy cannot roll back on this box: the activator is not wired; it stays journaled and gated
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_sqj4qcslgsk5ziflyngatzoxc4 (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_sqj4qcslgsk5ziflyngatzoxc4 is not rolled back: the route changed under the fence, so nothing there is touched
2026/10/15 22:21:55 provision: a.shop.example.com: import "../not-a-seed" names no snapshot and no replica; only its journal row is cleaned up
2026/10/15 22:21:55 provision: a.shop.example.com: import ../not-a-seed is cleaned up and its journal row retired
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_gstbmgosioy5u23pnndiyrfltq (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_dvar6dcgh2j72fu4fc744kibvu (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_sgarwd7o5mwo6tlf62ysgzwlja (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_deerrme4imbxxh5kc2lwxlhzbq (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_odvg27nfdtmebs2t5a6zp47odi (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_odvg27nfdtmebs2t5a6zp47odi rollback deferred: the host is not fenced and stopped yet (stop evidence unreadable)
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_3vee66h6wmxvbajvgufmuucyvm (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_3vee66h6wmxvbajvgufmuucyvm has no route on this box: its local data is removed and no route is put back
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_3vee66h6wmxvbajvgufmuucyvm is cleaned up and its journal row retired
2026/10/15 22:21:55 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_r7rl6a6msb7ib3chunvtumlktu (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_r7rl6a6msb7ib3chunvtumlktu: remove its local data: injected failure at remove-local
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_r7rl6a6msb7ib3chunvtumlktu is not rolled back: the route at the host is not the import's, so nothing there is touched
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_qkaacgy2qoern5b2e4dv7mmw2q (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_qkaacgy2qoern5b2e4dv7mmw2q: a route appeared at the host, so its local database is left and the rollback waits
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_yvcyevxpycat4hrypvh7dc4srm (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_yvcyevxpycat4hrypvh7dc4srm rollback deferred: no fence generation: registry busy
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_dzertdhnlbuxqbbibnoyt4ov7e (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_dzertdhnlbuxqbbibnoyt4ov7e rollback deferred: no fence generation: the generation source answered 0
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_vjjgj3hauytvrykn6osd47jcgi (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_6zcfm6kewi2ofspepooeukhhri (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_cxohfnhbfdb4hkcoclpvedud7q (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import deferred: this box cannot read the instance's env file
2026/10/15 22:21:55 provision: a.shop.example.com: import deferred: the instance's env file could not be read: a symlink
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_7ezukju6b2fwfgbppnxsr6i6hu (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_7ezukju6b2fwfgbppnxsr6i6hu rolled back to its original route
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_7ezukju6b2fwfgbppnxsr6i6hu is cleaned up and its journal row retired
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_xqcgkjs43xk7laoi4exd4eyr64 (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_xqcgkjs43xk7laoi4exd4eyr64 rolled back to its original route
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_xqcgkjs43xk7laoi4exd4eyr64 is cleaned up and its journal row retired
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_sdj3wq6mj5fxnvmgvnmcabzjha (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_sdj3wq6mj5fxnvmgvnmcabzjha rolled back to its original route
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_sdj3wq6mj5fxnvmgvnmcabzjha is cleaned up and its journal row retired
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_o44wq7j6rq5m57nxqhopdkjawi (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_o44wq7j6rq5m57nxqhopdkjawi: retire its instance key: the env file is a symlink
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_o44wq7j6rq5m57nxqhopdkjawi rolled back to its original route
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_o44wq7j6rq5m57nxqhopdkjawi is cleaned up and its journal row retired
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_vpx66jqsltvl53547xhjoxhkgm (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: row is on the nested layout (db "/data/instances/a.shop.example.com/a.shop.example.com.db" socket "/run/carlos/instances/a.shop.example.com/app.sock"); the record's shared paths are not drift
2026/10/15 22:21:55 provision: a.shop.example.com: swapped for import sd_pifei543myyf65paip44wh5y74 (the original route is journaled)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_dmw7xi34qnlniormg7va2i53ku refused: there is no route at a.shop.example.com to replace
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_4montcqpvdjgv5nttbu7p2oxze refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_t4zc66uukl3ytnn373ykoz2g5q refused: the route's address is 127.0.0.1:8401,127.0.0.1:8402, not 127.0.0.1:8401
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_djuc7p4qjxh7eh5qgbrj7om6py refused: the route's address is 127.0.0.1:9, not 127.0.0.1:8401
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_byksnoc4ol6rohubsaofp3k3a4 refused: the route belongs to app other
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_c5vy6527apj6hx4z2uavx56knm refused: the route is filed under another account
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_jdnvm5k3bky6wi374u5p7vzj74 refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_6aac32m2qn7nrt6bsbxnop7tkm refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_skgmxuwtapfl2ftqi33i6oz6zi refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_r23bj2ag7xzt6sbn3c7fikldde refused: the route is filed under the operator account, and no assignment maps shop to this app
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_luxdvfyhvv6k6kdpzazhfmhg6q refused: the route is not an address route this import can take over (socket)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_2va76lyux7hxyebzpul57hlfei refused: the route is not an address route this import can take over (no address)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_qya77dn6kznqpza5vbavziablq refused: the route is not an address route this import can take over (provisioned)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_j6hy6pg6rglcisf5kfqvzqtrxi refused: the route is not an address route this import can take over (kind static)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_vnrr3kua3rlbtzylq2f6zjtlzq refused: the route is not an address route this import can take over (backing)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_nui6wlbjdihpx4jivuprgvwwpq refused: the route is not an address route this import can take over (tunnel)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_tbrhef6e3ud6ee34lu5keu4a6m refused: the route is not an address route this import can take over (caps)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_kemigv3bcawuxa4r5v25ubzokq refused: the route is not an address route this import can take over (platform)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_ityjt5wrkk6lonezgnwwcux6e4 refused: the route is not an address route this import can take over (canary)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_ktlvj6rr25yk3xf4lmyzw3lbym refused: the route is not an address route this import can take over (kind sidecar)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_dchgzdaq3x26ody5by4dphcbsy refused: the route is not an address route this import can take over (region)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_jbs7pm27yfflzmjfn5z2tpdnf4 refused: the route is not an address route this import can take over (fleet_box)
2026/10/15 22:21:55 provision: a.shop.example.com: import sd_57ecwryjviwytsvr67iiyvqjyu refused: the route is not an address route this import can take over (hibernate)
2026/10/15 22:21:56 provision: a.shop.example.com: import sd_btoxngyb4aldndbgn3qhqjk4om refused: the route is not an address route this import can take over (claim_owner)
2026/10/15 22:21:56 provision: a.shop.example.com: import sd_exh62ntegujdcih5rgataqifky refused: this box does not run instances nested
2026/10/15 22:21:56 provision: a.shop.example.com: import sd_og2nkn4qcx74qdvzmkvg2uqd4a refused: this box does not run instances nested
2026/10/15 22:21:56 provision: a.shop.example.com: import sd_ta4ezxsihxse5xte2zbd5k2zaq refused: claim control is on for this box
2026/10/15 22:21:56 provision: a.shop.example.com: swapped for import sd_46s5c742qvw63ksun674qou4xq (the original route is journaled)
2026/10/15 22:21:56 provision: a.shop.example.com: swapped for import sd_5ggmtvqfiy6yqte5cazqa7h6bm (the original route is journaled)
2026/10/15 22:21:56 provision: a.shop.example.com: import deferred: this box cannot read the legacy route assignments
2026/10/15 22:21:56 provision: a.shop.example.com: import deferred: the legacy route assignments could not be read: store down
2026/10/15 22:21:56 provision: a.shop.example.com: not swapping for import sd_36ocip25lohakhyo2ot7bksjoq: its verify hash is not a sha256
2026/10/15 22:21:56 provision: a.shop.example.com: not swapping for import sd_erluocbqt4kmdkzdmai45y4uhu: its verify hash is not a sha256
2026/10/15 22:21:56 provision: a.shop.example.com: not swapping for import sd_erh323tfjc5gvdqq7qlfznqp5e: its verify hash is not a sha256
2026/10/15 22:21:56 provision: a.shop.example.com: not swapping for import sd_../../x: its host or seed id is malformed (seeds: not a seed id)
2026/10/15 22:21:56 provision: A.shop.example.com/..: not swapping for import sd_c2ehqudjzw6fu4g5hnvxdcliu4: its host or seed id is malformed (seeds: not a host)
2026/10/15 22:21:56 provision: a.shop.example.com: not swapping for import sd_kdnj2tbfziblh2mvobe6favmm4: its record does not describe a nested, hibernating instance
2026/10/15 22:21:56 provision: a.shop.example.com: not swapping for import sd_r4c5swcgezroipgbj7uqrqsara: its record does not describe a nested, hibernating instance
2026/10/15 22:21:56 provision: a.shop.example.com: not swapping for import sd_v52gov65ndiqrok5kvtgxrgjr4: its record does not describe a nested, hibernating instance
2026/10/15 22:21:56 provision: a.shop.example.com: not swapping for import sd_t5l2vt5lh5aa4nm5v4e7hakabm: its record does not describe a nested, hibernating instance
2026/10/15 22:21:56 provision: a.shop.example.com: import deferred: the box's layout intent could not be read: store down
2026/10/15 22:21:56 provision: a.shop.example.com: swapped for import sd_ns6ydwu4p5gktwvwaevnkf3p7u (the original route is journaled)
2026/10/15 22:21:56 provision: a.shop.example.com: import deferred: the box's nested probe did not answer: ready probe timed out
2026/10/15 22:21:56 provision: a.shop.example.com: swapped for import sd_4llnfkljlsk7vtk3r5ukt2daey (the original route is journaled)
2026/10/15 22:21:56 provision: a.shop.example.com: swapped for import sd_5gzygcjlx7krwesmijikeuvwum (the original route is journaled)
2026/10/15 22:21:56 provision: a.shop.example.com: import deferred: the route is held by operation op_1
2026/10/15 22:21:56 provision: dry-run: would consider swapping a.shop.example.com for import sd_5aagasttv4bdfcq2mz5orm3xtm
2026/10/15 22:21:56 provision: a.shop.example.com: import sd_p2o5wc2fihcofrq2mmafjl346q rolled back to its original route
2026/10/15 22:21:56 provision: a.shop.example.com: import sd_p2o5wc2fihcofrq2mmafjl346q: the host's replica is left alone: the record apps/bac/shop/instances/a.shop.example.com.json holds the host
2026/10/15 22:21:56 provision: a.shop.example.com: import sd_p2o5wc2fihcofrq2mmafjl346q is cleaned up and its journal row retired
2026/10/15 22:21:56 provision: a.shop.example.com: import sd_6rewlh3ul75mk5qki7ijv55d4m left alone: the import journal holds seed sd_is25uchnvynpcb63ljbshxvrmi at swapped
2026/10/15 22:21:56 provision: a.shop.example.com: not minting import sd_oo2dvjxzsczoxc2wsbekdb3mue: it is swapped but not committed, and only its swap makes its row
2026/10/15 22:21:56 provision: a.shop.example.com: not minting import sd_kcjpuluw24use4ngfct342d56y: it is placed but not committed, and only its swap makes its row
2026/10/15 22:21:56 provision: a.shop.example.com: swapped for import sd_zs72ttsiawb4uybnlx3ougjfxu (the original route is journaled)
2026/10/15 22:21:56 provision: a.shop.example.com: not minting import sd_zs72ttsiawb4uybnlx3ougjfxu: it is swapped but not committed, and only its swap makes its row
2026/10/15 22:21:56 provision: a.shop.example.com: not minting import sd_zs72ttsiawb4uybnlx3ougjfxu: it is placed but not committed, and only its swap makes its row
2026/10/15 22:21:56 provision: minted instance route a.shop.example.com (app "shop" acct "bac")
2026/10/15 22:21:56 provision: removed retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/15 22:21:56 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/15 22:21:56 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/15 22:21:56 provision: converged sidecar bot.eleven.bac.sidecar.internal args ["sidecar","run"] -> ["worker","run"]
2026/10/15 22:21:56 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/15 22:21:56 provision: converged sidecar bot.eleven.bac.sidecar.internal ceilings 300/3600 -> 60/120
2026/10/15 22:21:56 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/15 22:21:56 provision: converged sidecar bot.eleven.bac.sidecar.internal channel stable -> canary/eleven
2026/10/15 22:21:56 provision: converged sidecar bot.eleven.bac.sidecar.internal environment "other" -> "relay"
2026/10/15 22:21:56 provision: converged sidecar bot.eleven.bac.sidecar.internal hibernate true -> false
2026/10/15 22:21:56 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: read failed: failStore: reads disabled under apps/bac/eleven/sidecars/
2026/10/15 22:21:56 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: malformed: invalid character 'n' looking for beginning of object key string
2026/10/15 22:21:56 provision: not removing sidecar bot.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/15 22:21:56 provision: skipping sidecar record apps/bac/eleven/sidecars/bot.json: empty channel
2026/10/15 22:21:56 provision: skipping sidecar record apps/bac/eleven/sidecars/held.json: empty channel
2026/10/15 22:21:56 provision: not removing sidecar held.eleven.bac.sidecar.internal: its record exists but could not be read cleanly this pass
2026/10/15 22:21:56 provision: removed retired sidecar route old.eleven.bac.sidecar.internal (record gone)
2026/10/15 22:21:56 provision: bac/eleven has sidecar records but no sidecars manifest — not minting
2026/10/15 22:21:56 provision: bac/eleven is in the trash — not minting sidecar routes for it
2026/10/15 22:21:56 provision: sidecar bot.eleven.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/15 22:21:56 provision: sidecar hub.relay.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/15 22:21:56 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/15 22:21:56 provision: minted sidecar route hub.relay.bac.sidecar.internal (app "relay" acct "bac" args ["relay"])
2026/10/15 22:21:56 provision: sidecar bot.eleven.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/15 22:21:56 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/15 22:21:56 provision: sidecar bot.eleven.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/15 22:21:56 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/15 22:21:56 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/15 22:21:56 provision: sidecar bot.eleven.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/15 22:21:56 provision: removed retired sidecar route bot.eleven.bac.sidecar.internal (record gone)
2026/10/15 22:21:56 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/15 22:21:56 provision: sidecar bot.eleven.bac.sidecar.internal is not placeable here: it asks for "no-inbound" placement and this box accepts inbound work (CARLOS_INBOUND="")
2026/10/15 22:21:56 provision: skipping sidecar record apps/bac/relay/sidecars/hub.json: read failed: failStore: reads disabled under apps/bac/relay/sidecars/
2026/10/15 22:21:56 provision: REFUSING to mint sidecar bot.eleven.bac.sidecar.internal: bot.eleven.bac.sidecar.internal-sidecar.env is staged on this box — the legacy file co-spawn and a native sidecar row are two mechanisms for one host; remove the file to migrate this host onto sidecar records
2026/10/15 22:21:56 provision: minted sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" args ["sidecar","run"])
2026/10/15 22:21:56 provision: dry-run: would mint sidecar route bot.eleven.bac.sidecar.internal (app "eleven" acct "bac" channel "stable" args ["sidecar","run"])
2026/10/15 22:21:56 provision: dry-run: would remove retired sidecar route gone.eleven.bac.sidecar.internal (record gone)
2026/10/15 22:21:56 provision: bot.eleven.bac.sidecar.internal exists but is not a sidecar row this pass owns (kind "sidecar" provisioned false app "eleven" acct "bac") — leaving it alone
2026/10/15 22:21:56 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:56 provision: converged acme.go.tito.io update settings "{\"updates\":\"manual\",\"channel\":\"stable\"}" -> ""
2026/10/15 22:21:56 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:56 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:56 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/15 22:21:56 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/15 22:21:56 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/15 22:21:56 provision: minted instance route acme.go.tito.io (app "tito" acct "bac")
2026/10/15 22:21:56 provision: manifest bac/tito: read failed: provision: manifest bac/tito: unexpected end of JSON input
2026/10/15 22:21:56 provision: acme.go.tito.io: not minted this pass: the app's update policy could not be read
2026/10/15 22:21:56 provision: minted instance route acme.go.tito.io held landing by mv_acme (app "tito" acct "bac")
FAIL
FAIL	github.com/carlosframework/platform/internal/provision	65.570s
ok  	github.com/carlosframework/platform/internal/publicrelease	0.009s
?   	github.com/carlosframework/platform/internal/regionname	[no test files]
ok  	github.com/carlosframework/platform/internal/registry	7.448s
ok  	github.com/carlosframework/platform/internal/relay	7.340s
ok  	github.com/carlosframework/platform/internal/release	27.644s
ok  	github.com/carlosframework/platform/internal/rollout	4.963s
ok  	github.com/carlosframework/platform/internal/rolloutwords	0.030s
ok  	github.com/carlosframework/platform/internal/rootaws	0.009s
ok  	github.com/carlosframework/platform/internal/rootparticipation	0.066s
ok  	github.com/carlosframework/platform/internal/rootstate	0.026s
ok  	github.com/carlosframework/platform/internal/runs	0.626s
ok  	github.com/carlosframework/platform/internal/s3compat	0.006s
ok  	github.com/carlosframework/platform/internal/safefile	0.007s
ok  	github.com/carlosframework/platform/internal/schedule	3.551s
ok  	github.com/carlosframework/platform/internal/seeds	0.022s
ok  	github.com/carlosframework/platform/internal/sim/hostlife	25.728s
ok  	github.com/carlosframework/platform/internal/sim/litestreamfacts	3.794s
ok  	github.com/carlosframework/platform/internal/status	0.065s
ok  	github.com/carlosframework/platform/internal/steering	0.008s
ok  	github.com/carlosframework/platform/internal/stopevidence	0.346s
ok  	github.com/carlosframework/platform/internal/svcrole	0.005s
ok  	github.com/carlosframework/platform/internal/telemetry	0.005s
ok  	github.com/carlosframework/platform/internal/termfence	0.004s
ok  	github.com/carlosframework/platform/internal/tunnelclient	0.004s
ok  	github.com/carlosframework/platform/internal/unixdial	0.008s
ok  	github.com/carlosframework/platform/internal/updatewords	0.005s
ok  	github.com/carlosframework/platform/internal/usage	0.006s
ok  	github.com/carlosframework/platform/internal/version	0.002s
ok  	github.com/carlosframework/platform/internal/vet	1.785s
FAIL
make: *** [Makefile:18: test] Error 1

amadan: step gate failed: exit status 2

amadan: job failed at step gate — its output is above, not at the tail of this log
diff --git a/internal/host/agent.go b/internal/host/agent.go
index 257204721..6503d69af 100644
--- a/internal/host/agent.go
+++ b/internal/host/agent.go
@@ -4297,14 +4297,14 @@ func runAdoptWithEnsureSystemUnits(args []string, buildClaims ClaimFactory, ensu
probe = sources[0].Census
}
err := withClaimRootRelease(context.Background(), hostwrite.Enabled(os.Getenv), open, func() error {
- return runAdoptUnderRootRelease(args, buildClaims, ensureUnits)
+ return runAdoptUnderRootRelease(args, buildClaims, ensureUnits, productionRootUpdates(dataDir(), probe))
}, probe)
if err != nil {
log.Fatalf("adopt: %v", err)
}
}
-func runAdoptUnderRootRelease(args []string, buildClaims ClaimFactory, ensureUnits func()) error {
+func runAdoptUnderRootRelease(args []string, buildClaims ClaimFactory, ensureUnits func(), updateProviders ...release.RootUpdateOpener) error {
reapStagingWrites(release.OptDir(), dataDir(), "/etc", log.Printf)
if os.Geteuid() == 0 {
if err := repairOffcloudCredentials("/etc/carlos/credentials"); err != nil {
@@ -4599,7 +4599,7 @@ func runAdoptUnderRootRelease(args []string, buildClaims ClaimFactory, ensureUni
release.WithProofGate(release.NewRootProofGate(release.ProofPolicyPath, dataDir())),
// Settings spec §4.3: root alone resolves install requests and
// writes /opt/carlos/consumed/<host>, before it stages.
- updatesPassOption(dataDir(), true)}
+ updatesPassOption(dataDir(), true, updateProviders...)}
if !*stageOnly {
passOpts = append(passOpts, release.NagExpiredCanaries(os.Stdout))
}
diff --git a/internal/host/plan14_root_failures_root_linux_test.go b/internal/host/plan14_root_failures_root_linux_test.go
new file mode 100644
index 000000000..dcc9844aa
--- /dev/null
+++ b/internal/host/plan14_root_failures_root_linux_test.go
@@ -0,0 +1,137 @@
+//go:build linux && rootrunner
+
+package host
+
+import (
+ "os"
+ "path/filepath"
+ "testing"
+ "time"
+
+ "github.com/carlosframework/platform/internal/release"
+ "github.com/carlosframework/platform/internal/rollout"
+ "github.com/carlosframework/platform/internal/rootstate"
+)
+
+func TestPlan14SwapFailureHostileRootRunner(t *testing.T) {
+ if os.Geteuid() != 0 {
+ t.Fatal("root required")
+ }
+ dir, err := os.MkdirTemp("/var/lib", "carlos-e3-")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.RemoveAll(dir)
+ s, err := rootstate.Open(dir, false, false)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer s.Close()
+ b, err := rollout.InitializeRootFailures(s, "box/en/1", nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ rec := rollout.FailureRecord{Account: "bab", App: "km", Build: "v1", Host: "h.example.com", HeldDown: []string{"h.example.com"}}
+ if _, err = b.Record(rec); err != nil {
+ t.Fatal(err)
+ }
+ if err = os.Chmod(dir, 0777); err != nil {
+ t.Fatal(err)
+ }
+ if bad, err := rootstate.Open(dir, false, false); err == nil {
+ bad.Close()
+ t.Fatal("hostile ancestor admitted")
+ }
+ if err = os.Chmod(dir, 0700); err != nil {
+ t.Fatal(err)
+ }
+ if err = os.Chown(dir, 65534, 65534); err != nil {
+ t.Fatal(err)
+ }
+ if bad, err := rootstate.Open(dir, false, false); err == nil {
+ bad.Close()
+ t.Fatal("foreign owner admitted")
+ }
+ if err = os.Chown(dir, 0, 0); err != nil {
+ t.Fatal(err)
+ }
+ renamed := dir + "-retained"
+ if err = os.Rename(dir, renamed); err != nil {
+ t.Fatal(err)
+ }
+ defer os.RemoveAll(renamed)
+ if err = os.Mkdir(dir, 0700); err != nil {
+ t.Fatal(err)
+ }
+ b, err = rollout.OpenRootFailures(s, "box/en/1")
+ if err != nil {
+ t.Fatal(err)
+ }
+ testRootSettingsPass(t, b, "combined")
+ if !b.HeldDown("bab", "km", "v1", rec.Host) {
+ t.Fatal("rename dropped denial")
+ }
+ if _, err = os.Stat(filepath.Join(dir, "book.json")); !os.IsNotExist(err) {
+ t.Fatal("replacement acquired authority", err)
+ }
+ seed, public, _ := release.GenerateKey()
+ priv, _ := release.ParseSigningKey(seed, "test")
+ pub, _ := release.ParsePublicKey(public, "test")
+ wire, err := release.SignHostRetry(release.RootSigner(priv), "bab", "km", rec.Host, "v1", b.ID(), b.PublishedEpoch("bab", "km", "v1", rec.Host), time.Now())
+ if err != nil {
+ t.Fatal(err)
+ }
+ failing := true
+ fault := rootstate.WithWriteFault(s, func(name, stage string, op func() error) error {
+ if stage == "parent-sync" && failing {
+ return os.ErrPermission
+ }
+ return op()
+ })
+ b, err = rollout.OpenRootFailures(fault, "box/en/1")
+ if err == nil {
+ t.Fatal("owed directory sync admitted")
+ }
+ failing = false
+ b, err = rollout.OpenRootFailures(fault, "box/en/1")
+ if err != nil {
+ t.Fatal(err)
+ }
+ failing = true
+ if err = b.VerifiedRetry(pub, wire, "bab", "km", rec.Host, time.Now()); err == nil {
+ t.Fatal("visible retry reported durable")
+ }
+ if !b.SaveOwed() {
+ t.Fatal("failure disappeared")
+ }
+ if _, err = rollout.OpenRootFailures(fault, "box/en/1"); err == nil {
+ t.Fatal("retry granted while sync still fails")
+ }
+ failing = false
+ b, err = rollout.OpenRootFailures(fault, "box/en/1")
+ if err != nil {
+ t.Fatal(err)
+ }
+ if b.HeldDown("bab", "km", "v1", rec.Host) {
+ t.Fatal("durably recovered retry not applied")
+ }
+}
+
+func TestPlan14SwapFailureNoCensusRootRunner(t *testing.T) {
+ if os.Geteuid() != 0 {
+ t.Fatal("root required")
+ }
+ for _, path := range []string{"/var/lib/carlos-claims/authority/execution/census.json", rollout.RootFailuresDir} {
+ if _, err := os.Lstat(path); !os.IsNotExist(err) {
+ t.Fatal("fixture requires absent authority", path, err)
+ }
+ }
+ p, err := productionRootUpdates(t.TempDir())(t.Context(), nil, nil)
+ if err != nil || p != nil {
+ t.Fatal("no-census branch changed", p, err)
+ }
+ if _, err := os.Lstat(rollout.RootFailuresDir); !os.IsNotExist(err) {
+ t.Fatal("no-census pass created authority", err)
+ }
+ TestUpdatesPassOptionReadsTheBookEveryPass(t)
+}
diff --git a/internal/host/plan14_root_failures_test.go b/internal/host/plan14_root_failures_test.go
new file mode 100644
index 000000000..fcf47ecca
--- /dev/null
+++ b/internal/host/plan14_root_failures_test.go
@@ -0,0 +1,281 @@
+package host
+
+import (
+ "context"
+ "crypto/ed25519"
+ "encoding/json"
+ "github.com/carlosframework/platform/internal/hostclaim"
+ "github.com/carlosframework/platform/internal/hostguard"
+ "github.com/carlosframework/platform/internal/provision"
+ "github.com/carlosframework/platform/internal/registry"
+ "github.com/carlosframework/platform/internal/rootparticipation"
+ "github.com/carlosframework/platform/internal/rootstate"
+ "os"
+ "path/filepath"
+ "testing"
+ "time"
+
+ "github.com/carlosframework/platform/internal/release"
+ "github.com/carlosframework/platform/internal/rollout"
+)
+
+func TestPlan14SwapFailureSurvivesLegacyTampering(t *testing.T) {
+ for _, attack := range []string{"erase", "rename", "retried", "epoch", "served"} {
+ t.Run(attack, func(t *testing.T) {
+ s := testRootFailureStore(t)
+ b, err := rollout.InitializeRootFailures(s, "box/en/1", nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ _, err = b.Record(rollout.FailureRecord{Account: "bab", App: "km", Build: "v1", Host: "h.example.com", HeldDown: []string{"h.example.com"}})
+ if err != nil {
+ t.Fatal(err)
+ }
+ dd := t.TempDir()
+ raw := []byte(`{"schema":3,"records":[{"account":"bab","app":"km","build":"v1","host":"h.example.com","retried":["h.example.com"],"epochs":{"h.example.com":1}}]}`)
+ if err := os.WriteFile(filepath.Join(dd, rollout.FailureFile), raw, 0600); err != nil {
+ t.Fatal(err)
+ }
+ if attack == "erase" {
+ if err := os.Remove(filepath.Join(dd, rollout.FailureFile)); err != nil {
+ t.Fatal(err)
+ }
+ }
+ if attack == "rename" {
+ if err := os.Rename(dd, dd+"-old"); err != nil {
+ t.Fatal(err)
+ }
+ t.Cleanup(func() { os.RemoveAll(dd + "-old") })
+ }
+ legacy, err := rootFailureLegacy(dd)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if err = b.ImportLegacy(legacy); err != nil {
+ t.Fatal(err)
+ }
+ b, err = rollout.OpenRootFailures(s, "box/en/1")
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !b.Blocks("bab", "km", "v1", "sibling.example.com", false) || !b.HeldDown("bab", "km", "v1", "h.example.com") {
+ t.Fatal("root failure lost")
+ }
+ testRootSettingsPass(t, b, attack)
+ })
+ }
+}
+
+func TestPlan14SwapFailureVerifiedRetry(t *testing.T) {
+ s := testRootFailureStore(t)
+ b, err := rollout.InitializeRootFailures(s, "box/en/1", nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ rec := rollout.FailureRecord{Account: "bab", App: "km", Build: "v1", Host: "h.example.com", HeldDown: []string{"h.example.com"}}
+ if _, err = b.Record(rec); err != nil {
+ t.Fatal(err)
+ }
+ seed, public, _ := release.GenerateKey()
+ priv, _ := release.ParseSigningKey(seed, "test")
+ pub, _ := release.ParsePublicKey(public, "test")
+ wire, err := release.SignHostRetry(release.RootSigner(priv), "bab", "km", rec.Host, "v1", b.ID(), b.PublishedEpoch("bab", "km", "v1", rec.Host), time.Now())
+ if err != nil {
+ t.Fatal(err)
+ }
+ if err = b.VerifiedRetry(pub, wire, "bab", "km", rec.Host, time.Now()); err != nil {
+ t.Fatal(err)
+ }
+ if b.HeldDown("bab", "km", "v1", rec.Host) || b.Blocks("bab", "km", "v1", rec.Host, false) {
+ t.Fatal("exact retry did not clear")
+ }
+ if !b.Blocks("bab", "km", "v1", "sibling.example.com", false) {
+ t.Fatal("retry widened")
+ }
+ if _, err = b.Record(rec); err != nil {
+ t.Fatal(err)
+ }
+ if err = b.VerifiedRetry(pub, wire, "bab", "km", rec.Host, time.Now()); err != nil {
+ t.Fatal(err)
+ }
+ if !b.HeldDown("bab", "km", "v1", rec.Host) {
+ t.Fatal("stale retry cleared second failure")
+ }
+}
+
+func TestPlan14SwapFailureMigrationUnknown(t *testing.T) {
+ s := testRootFailureStore(t)
+ if _, err := rollout.OpenRootFailures(s, "box/en/1"); err == nil {
+ t.Fatal("absent marker granted empty history")
+ }
+ b, err := rollout.InitializeRootFailures(s, "box/en/1", nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if b.Blocks("bab", "km", "v2", "h.example.com", false) {
+ t.Fatal("unknown history refused an unfailed signed target")
+ }
+ if _, err := rollout.OpenRootFailures(s, "other/en/1"); err == nil {
+ t.Fatal("foreign migration accepted")
+ }
+}
+
+func testRootSettingsPass(t *testing.T, book *rollout.RootFailures, attack string) {
+ t.Helper()
+ ctx := context.Background()
+ opt := t.TempDir()
+ store := release.NewDirStore(t.TempDir())
+ seed, public, _ := release.GenerateKey()
+ priv, _ := release.ParseSigningKey(seed, "test")
+ pub, _ := release.ParsePublicKey(public, "test")
+ for _, v := range []string{"v1", "v2"} {
+ m := release.Manifest{Schema: 1, App: "km", Version: v, Kind: "binary", Artifacts: map[string]release.Artifact{runtimePlatform(): {}}}
+ if err := release.Ship(ctx, store, "bab", m, map[string][]byte{runtimePlatform(): []byte(v)}); err != nil {
+ t.Fatal(err)
+ }
+ if err := release.Promote(ctx, store, priv, "bab", "km", "canary/x", v); err != nil {
+ t.Fatal(err)
+ }
+ }
+ rec := provision.Record{Schema: 1, Host: "h.example.com", Account: "bab", App: "km", Channel: "canary/x", Pin: "v1", CreatedAt: time.Now().UTC()}
+ body, _ := json.Marshal(rec)
+ if _, err := store.Put(ctx, provision.RecordKey(rec.Account, rec.App, rec.Host), body, ""); err != nil {
+ t.Fatal(err)
+ }
+ inc, _ := hostclaim.Incarnation(rec.Account, rec.App, rec.Host, rec.CreatedAt)
+ state := &rollbackMemory{files: map[string][]byte{}}
+ in := hostguard.RootInstallation{Host: rec.Host, Incarnation: inc, Stamp: 1, Account: rec.Account, App: rec.App, Record: provision.RecordKey(rec.Account, rec.App, rec.Host), Box: "box", Enrollment: "en", Migration: 1, InventoryRevision: 1}
+ if err := hostguard.NewRootAuthority(state).RetainMigrationDeny(ctx, in, 1); err != nil {
+ t.Fatal(err)
+ }
+ census := func() (rootparticipation.Census, error) {
+ return rootparticipation.Census{Schema: 1, Box: "box", Enrollment: "en", Migration: 1, Complete: true}, nil
+ }
+ p := rootUpdateSource{source: rootRestartRequestSource{state: state, store: store, census: census}, state: state, book: book, store: store, pub: pub, binding: &proofBindingSource{}, data: t.TempDir()}
+ rt := provision.RouteFor(rec, p.data, "", false, nil)
+ reg, err := registry.Open(filepath.Join(t.TempDir(), "r.db"))
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer reg.Close()
+ switch attack {
+ case "empty", "erase", "rename":
+ rt.UpdateSettings = ""
+ case "object":
+ rt.UpdateSettings = "{}"
+ case "channel":
+ rt.UpdateSettings = `{"updates":"auto","channel":"canary/forged"}`
+ rt.Channel = "canary/forged"
+ case "served", "retried", "epoch":
+ rt.GoodVersion = "v1"
+ case "digest":
+ rt.GoodDigest = "forged"
+ rt.GoodDemand = "forged"
+ rt.ServingVersion = "v1"
+ case "build":
+ rt.BuildState = release.BuildStateCopy{Known: true, State: &release.BuildState{LastExecuted: "v1", Completed: 99}}.Column()
+ case "combined":
+ rt.UpdateSettings = ""
+ rt.GoodVersion = "v1"
+ rt.BuildState = release.BuildStateCopy{Known: true}.Column()
+ }
+ if err = reg.Upsert(rt); err != nil {
+ t.Fatal(err)
+ }
+ provider := func(context.Context, release.Store, ed25519.PublicKey) (*release.RootUpdateInputs, error) {
+ return &release.RootUpdateInputs{Resolve: p.resolve}, nil
+ }
+ effects := 0
+ pass := func() error {
+ return release.Pass(ctx, reg, store, pub, opt, func(string) error { effects++; return nil }, updatesPassOption(p.data, true, provider))
+ }
+ if err = pass(); err != nil {
+ t.Fatal(err)
+ }
+ if v, _ := release.LiveVersion(opt, rt.Host); v != "" || effects != 0 {
+ t.Fatal("failed build dispatched", v, effects)
+ }
+ raw, _ := state.Read("settings-" + rt.Host + ".json")
+ var saved rootUpdateRecord
+ if json.Unmarshal(raw, &saved) != nil || saved.Consumed == nil || saved.Consumed.Desired != "" || saved.Consumed.Completed != 0 {
+ t.Fatal("forged completion", string(raw))
+ }
+
+ if attack == "verified-retry" {
+ wire, err := release.SignHostRetry(release.RootSigner(priv), rec.Account, rec.App, rec.Host, "v1", book.ID(), book.PublishedEpoch(rec.Account, rec.App, "v1", rec.Host), time.Now())
+ if err != nil {
+ t.Fatal(err)
+ }
+ log := release.ScopedRestartGeneration{Schema: 1, Requests: []release.RestartRequest{{ID: "root-retry", RequestedAt: time.Now().UTC().Format(time.RFC3339), Scope: release.RestartScope{Kind: release.RestartScopeRetry, Value: rec.Host, Signed: wire}}}}
+ raw, _ := json.Marshal(log)
+ if _, err = store.Put(ctx, release.HostRetryKey(rec.Account, rec.App), raw, ""); err != nil {
+ t.Fatal(err)
+ }
+ if err = pass(); err != nil {
+ t.Fatal(err)
+ }
+ if v, _ := release.LiveVersion(opt, rt.Host); v != "v1" {
+ t.Fatal("verified retry did not reach production adoption", v)
+ }
+ }
+ if attack == "provider-missing" {
+ if err := state.Remove(rec.Host + ".json"); err != nil {
+ t.Fatal(err)
+ }
+ if err := pass(); err == nil {
+ t.Fatal("missing root installation fell through")
+ }
+ return
+ }
+ // A different signed build remains available with unknown history.
+ rec.Pin = "v2"
+ body, _ = json.Marshal(rec)
+ _, etag, _ := store.Get(ctx, provision.RecordKey(rec.Account, rec.App, rec.Host))
+ if _, err = store.Put(ctx, provision.RecordKey(rec.Account, rec.App, rec.Host), body, etag); err != nil {
+ t.Fatal(err)
+ }
+ if err = pass(); err != nil {
+ t.Fatal(err)
+ }
+ if v, _ := release.LiveVersion(opt, rt.Host); v != "v2" {
+ t.Fatal("signed positive refused", v)
+ }
+}
+
+func TestPlan14RootSettingsExactRegistryMutations(t *testing.T) {
+ for _, attack := range []string{"empty", "object", "channel", "served", "digest", "build", "combined", "verified-retry", "provider-missing"} {
+ t.Run(attack, func(t *testing.T) {
+ s := testRootFailureStore(t)
+ b, err := rollout.InitializeRootFailures(s, "box/en/1", nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ record := rollout.FailureRecord{Account: "bab", App: "km", Build: "v1", Host: "h.example.com", HeldDown: []string{"h.example.com"}}
+ if attack == "served" || attack == "digest" || attack == "build" {
+ record.HeldDown = nil
+ }
+ if _, err = b.Record(record); err != nil {
+ t.Fatal(err)
+ }
+ testRootSettingsPass(t, b, attack)
+ })
+ }
+}
+
+func testRootFailureStore(t *testing.T) rootstate.Store {
+ t.Helper()
+ if os.Geteuid() != 0 {
+ return &rollbackMemory{files: map[string][]byte{}}
+ }
+ dir, err := os.MkdirTemp("/var/lib", "carlos-e3-book-")
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Cleanup(func() { os.RemoveAll(dir) })
+ s, err := rootstate.Open(dir, false, false)
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Cleanup(func() { s.Close() })
+ return s
+}
diff --git a/internal/host/rootgeneration_kernel_linux.go b/internal/host/rootgeneration_kernel_linux.go
index 50a229a1c..029bfd3d1 100644
--- a/internal/host/rootgeneration_kernel_linux.go
+++ b/internal/host/rootgeneration_kernel_linux.go
@@ -432,6 +432,13 @@ func (k generationKernel) absent(ctx context.Context, r release.GenerationReserv
return "", os.ErrPermission
}
}
+ if r.Binding.TreePersistent.Boot != "" {
+ current, err := generationCurrentBinding(r.Binding, rootstate.OpenTrustedFile)
+ if err != nil {
+ return "", err
+ }
+ r.Binding = current
+ }
refs, err := generationTree(ctx, r.Binding)
if err != nil {
return "", err
@@ -541,27 +548,46 @@ func generationGroupGone(ctx context.Context, root string, r release.GenerationR
}
func generationRetainedFiles(b release.GenerationBinding, open func(string) (*os.File, error)) error {
+ _, err := generationCurrentBinding(b, open)
+ return err
+}
+
+func generationCurrentBinding(b release.GenerationBinding, open func(string) (*os.File, error)) (release.GenerationBinding, error) {
f, err := open(b.Path)
if err != nil {
- return err
- }
- executable, err := rootstate.Identity(f)
- f.Close()
- if err != nil || executable != b.Executable {
- return os.ErrPermission
+ return b, err
}
- // The file opener checked every ancestor. The caller holds release
- // exclusion, so another root release writer cannot replace this directory.
+ defer f.Close()
+ // The trusted executable opener checks every ancestor of its tree.
d, err := os.Open(b.Tree)
if err != nil {
- return err
- }
- tree, err := rootstate.Identity(d)
- d.Close()
- if err != nil || tree != b.TreeIdentity {
- return os.ErrPermission
+ return b, err
+ }
+ defer d.Close()
+ for _, entry := range []struct {
+ file *os.File
+ old rootstate.FileIdentity
+ stable rootstate.PersistentIdentity
+ dest *rootstate.FileIdentity
+ }{
+ {f, b.Executable, b.ExecutablePersistent, &b.Executable},
+ {d, b.TreeIdentity, b.TreePersistent, &b.TreeIdentity},
+ } {
+ id, err := rootstate.Identity(entry.file)
+ if err != nil {
+ return b, err
+ }
+ if entry.stable.Boot != "" {
+ now, err := rootstate.Persistent(entry.file)
+ if err != nil || !entry.stable.Same(now) {
+ return b, os.ErrPermission
+ }
+ } else if id != entry.old {
+ return b, os.ErrPermission
+ }
+ *entry.dest = id
}
- return nil
+ return b, nil
}
func generationTree(ctx context.Context, b release.GenerationBinding) (map[rootstate.FileIdentity]bool, error) {
diff --git a/internal/host/rootgeneration_reboot_devices_root_linux_test.go b/internal/host/rootgeneration_reboot_devices_root_linux_test.go
new file mode 100644
index 000000000..4670975c7
--- /dev/null
+++ b/internal/host/rootgeneration_reboot_devices_root_linux_test.go
@@ -0,0 +1,132 @@
+//go:build linux && rootrunner
+
+package host
+
+import (
+ "encoding/json"
+ "os"
+ "path/filepath"
+ "strings"
+ "testing"
+
+ "github.com/carlosframework/platform/internal/release"
+ "github.com/carlosframework/platform/internal/rootstate"
+ "golang.org/x/sys/unix"
+)
+
+const generationDeviceRebootDir = "/var/lib/carlos-rootrunner-p3-devices"
+
+func TestRootRebootGenerationDevicesPhase1(t *testing.T) {
+ if os.Geteuid() != 0 {
+ t.Fatal("root required")
+ }
+ if err := os.Mkdir(generationDeviceRebootDir, 0755); err != nil {
+ t.Fatal(err)
+ }
+ tree := filepath.Join(generationDeviceRebootDir, "tree")
+ if err := os.Mkdir(tree, 0755); err != nil {
+ t.Fatal(err)
+ }
+ path := filepath.Join(tree, "app")
+ if err := os.WriteFile(path, []byte("retained executable"), 0700); err != nil {
+ t.Fatal(err)
+ }
+ f, err := rootstate.OpenTrustedFile(path)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer f.Close()
+ d, err := os.Open(tree)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer d.Close()
+ id, err := rootstate.Identity(f)
+ if err != nil {
+ t.Fatal(err)
+ }
+ tid, err := rootstate.Identity(d)
+ if err != nil {
+ t.Fatal(err)
+ }
+ persistent, err := rootstate.Persistent(f)
+ if err != nil {
+ t.Fatal(err)
+ }
+ tp, err := rootstate.Persistent(d)
+ if err != nil {
+ t.Fatal(err)
+ }
+ b := release.GenerationBinding{Path: path, Tree: tree, Executable: id, TreeIdentity: tid, ExecutablePersistent: persistent, TreePersistent: tp}
+ s, err := rootstate.Open(filepath.Join(generationDeviceRebootDir, "authority"), true, false)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer s.Close()
+ raw, _ := json.Marshal(b)
+ if err = s.Write("binding.json", raw); err != nil {
+ t.Fatal(err)
+ }
+ t.Logf("boot=%s device=%d mount=%d", persistent.Boot, id.Device, persistent.MountID)
+}
+
+func TestRootRebootGenerationDevicesPhase2(t *testing.T) {
+ defer os.RemoveAll(generationDeviceRebootDir)
+ s, err := rootstate.Open(filepath.Join(generationDeviceRebootDir, "authority"), false, false)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer s.Close()
+ raw, err := s.Read("binding.json")
+ if err != nil {
+ t.Fatal(err)
+ }
+ var b release.GenerationBinding
+ if err = json.Unmarshal(raw, &b); err != nil {
+ t.Fatal(err)
+ }
+ boot, err := os.ReadFile("/proc/sys/kernel/random/boot_id")
+ if err != nil || strings.TrimSpace(string(boot)) == b.ExecutablePersistent.Boot {
+ t.Fatal("actual reboot required", err)
+ }
+ current, err := generationCurrentBinding(b, rootstate.OpenTrustedFile)
+ if err != nil {
+ t.Fatal("retained identity across boot", err)
+ }
+ t.Logf("prior-device=%d current-device=%d", b.Executable.Device, current.Executable.Device)
+ // The reboot need not renumber this particular instance. Exercise that
+ // branch explicitly while retaining the actual previous boot's handles.
+ changed := b
+ changed.Executable.Device++
+ changed.TreeIdentity.Device++
+ changed.ExecutablePersistent.Device++
+ changed.ExecutablePersistent.MountID++
+ changed.TreePersistent.Device++
+ changed.TreePersistent.MountID++
+ if _, err = generationCurrentBinding(changed, rootstate.OpenTrustedFile); err != nil {
+ t.Fatal("boot-local numbers persisted as authority", err)
+ }
+ foreign := b
+ foreign.ExecutablePersistent.Filesystem = "different-filesystem"
+ if _, err = generationCurrentBinding(foreign, rootstate.OpenTrustedFile); err == nil {
+ t.Fatal("foreign filesystem accepted")
+ }
+ if err = unix.Mount(b.Tree, b.Tree, "", unix.MS_BIND, ""); err != nil {
+ t.Fatal(err)
+ }
+ if _, err = generationCurrentBinding(b, rootstate.OpenTrustedFile); err == nil {
+ t.Fatal("substituted mount accepted")
+ }
+ if err = unix.Unmount(b.Tree, 0); err != nil {
+ t.Fatal(err)
+ }
+ if err = os.Rename(b.Path, b.Path+"-old"); err != nil {
+ t.Fatal(err)
+ }
+ if err = os.WriteFile(b.Path, []byte("retained executable"), 0700); err != nil {
+ t.Fatal(err)
+ }
+ if _, err = generationCurrentBinding(b, rootstate.OpenTrustedFile); err == nil {
+ t.Fatal("substituted inode accepted")
+ }
+}
diff --git a/internal/host/rootgenerations_launch.go b/internal/host/rootgenerations_launch.go
index 62ca32720..c1f2b1d05 100644
--- a/internal/host/rootgenerations_launch.go
+++ b/internal/host/rootgenerations_launch.go
@@ -20,15 +20,16 @@ import (
)
type rootGenerationSource struct {
- store release.Store
- optDir string
- pub func() (ed25519.PublicKey, error)
- open func() (rootstate.Store, error)
- openFile func(string) (*os.File, error)
+ persistent func(*os.File) (rootstate.PersistentIdentity, error)
+ store release.Store
+ optDir string
+ pub func() (ed25519.PublicKey, error)
+ open func() (rootstate.Store, error)
+ openFile func(string) (*os.File, error)
}
func productionRootGenerations(store release.Store, optDir string) *rootGenerationSource {
- return &rootGenerationSource{store: store, optDir: optDir,
+ return &rootGenerationSource{store: store, optDir: optDir, persistent: rootstate.Persistent,
pub: func() (ed25519.PublicKey, error) {
return release.ParsePublicKey(os.Getenv("CARLOS_RELEASE_PUBKEY"), "CARLOS_RELEASE_PUBKEY")
},
@@ -114,6 +115,16 @@ func (s *rootGenerationSource) resolve(ctx context.Context, h *ClaimLaunchRoot,
Installation: rootHistoryInstallation(in), Record: in.Record, RecordETag: etag,
Attempt: q.Reservation.ID, Inputs: q.Reservation.Inputs, Invocation: q.Reservation.InvocationID, ControllerPID: peer.PID, ControllerStart: peer.ProcessStart,
Version: version, Digest: q.Spec.Digest, Path: q.Executable, Tree: tree, Executable: id, TreeIdentity: treeID}
+ if s.persistent != nil {
+ b.ExecutablePersistent, err = s.persistent(f)
+ if err != nil {
+ return release.GenerationBinding{}, err
+ }
+ b.TreePersistent, err = s.persistent(d)
+ if err != nil {
+ return release.GenerationBinding{}, err
+ }
+ }
unit, group, err := claimLaunchPlacement(h.Units, t.Host)
if err != nil || group != q.Reservation.Group.RelativePath {
return release.GenerationBinding{}, os.ErrPermission
diff --git a/internal/host/rootmigration_production_linux.go b/internal/host/rootmigration_production_linux.go
index 445eed004..ee107aa2c 100644
--- a/internal/host/rootmigration_production_linux.go
+++ b/internal/host/rootmigration_production_linux.go
@@ -166,6 +166,9 @@ func migrateRootClaimAuthority(ctx context.Context, store release.Store, r Claim
}
return verifyRootMigrationFloors(r.OptDir, rootFloorIdentity{Deployment: id.Deployment, Box: id.Box, Enrollment: id.Enrollment})
}, publish: func(ctx context.Context, report hostops.CensusReport) error {
+ if err := initializeMigrationFailures(r.DataDir, execution); err != nil {
+ return err
+ }
return hostops.PublishCensusReport(ctx, store, owners.RetirementAuthority.Directory, report, owners.EvidenceKey)
}}
return m.run(ctx)
diff --git a/internal/host/rootupdates.go b/internal/host/rootupdates.go
new file mode 100644
index 000000000..8a5d18ebd
--- /dev/null
+++ b/internal/host/rootupdates.go
@@ -0,0 +1,254 @@
+package host
+
+import (
+ "context"
+ "crypto/ed25519"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "time"
+
+ "github.com/carlosframework/platform/internal/hostclaim"
+ "github.com/carlosframework/platform/internal/provision"
+ "github.com/carlosframework/platform/internal/registry"
+ "github.com/carlosframework/platform/internal/release"
+ "github.com/carlosframework/platform/internal/rollout"
+ "github.com/carlosframework/platform/internal/rootparticipation"
+ "github.com/carlosframework/platform/internal/rootstate"
+)
+
+type rootUpdateRecord struct {
+ Schema int
+ Installation string
+ Route registry.Route
+ Build release.BuildStateCopy
+ Consumed *release.Consumed
+ Served map[string]rootServedBuild
+}
+
+type rootServedBuild struct {
+ Digest, Invocation, Source string
+ Epoch uint64
+}
+
+type rootUpdateSource struct {
+ source rootRestartRequestSource
+ binding *proofBindingSource
+ state rootstate.Store
+ book *rollout.RootFailures
+ store release.Store
+ pub ed25519.PublicKey
+ observe func(registry.Route) (liveBuild, error)
+ data string
+}
+
+func rootUpdatesMigration(c rootparticipation.Census) string {
+ return fmt.Sprintf("%s/%s/%d", c.Box, c.Enrollment, c.Migration)
+}
+
+func rootFailureLegacy(data string) ([]byte, error) {
+ f, err := os.Open(filepath.Join(data, rollout.FailureFile))
+ if errors.Is(err, os.ErrNotExist) {
+ return nil, nil
+ }
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+ b, err := io.ReadAll(io.LimitReader(f, rootstate.MaxRecord+1))
+ if len(b) > rootstate.MaxRecord {
+ return nil, os.ErrPermission
+ }
+ return b, err
+}
+
+func productionRootUpdates(dd string, probes ...func() (rootparticipation.Ledger, bool, error)) release.RootUpdateOpener {
+ return func(ctx context.Context, store release.Store, pub ed25519.PublicKey) (*release.RootUpdateInputs, error) {
+ probe := rootparticipation.OpenForUpdate
+ if len(probes) > 1 || len(probes) == 1 && probes[0] == nil {
+ return nil, os.ErrPermission
+ }
+ if len(probes) == 1 {
+ probe = probes[0]
+ }
+ ledger, required, err := probe()
+ if ledger.State != nil {
+ defer ledger.State.Close()
+ }
+ if err != nil {
+ return nil, err
+ }
+ if !required {
+ return nil, nil
+ }
+ c, err := ledger.Census()
+ if err != nil {
+ return nil, err
+ }
+ if !c.Complete || c.NeverEnrolled {
+ return nil, os.ErrPermission
+ }
+ state, err := rootstate.Open(rollout.RootFailuresDir, false, false)
+ if err != nil {
+ return nil, err
+ }
+ fail := func(err error) (*release.RootUpdateInputs, error) { state.Close(); return nil, err }
+ book, err := rollout.OpenRootFailures(state, rootUpdatesMigration(c))
+ if err != nil {
+ return fail(err)
+ }
+ legacy, err := rootFailureLegacy(dd)
+ if err != nil {
+ return fail(err)
+ }
+ if err = book.ImportLegacy(legacy); err != nil {
+ return fail(err)
+ }
+ fences, err := rootstate.Open("/var/lib/carlos-claims/authority/fences", false, false)
+ if err != nil {
+ return fail(err)
+ }
+ binding := productionProofBindingSource(store, systemdUnits{}, release.OptDir())
+ binding.cacheIndex = false
+ binding.claim = func(ctx context.Context, host string) (hostclaim.Observed, error) {
+ return hostclaim.Read(ctx, store, host)
+ }
+ binding.box = func(context.Context) (string, error) { return c.Box, nil }
+ observer := productionProofObserver(release.OptDir())
+ observer.resolve = binding.resolve
+ p := rootUpdateSource{source: rootRestartRequestSource{state: fences, store: store, census: func() (rootparticipation.Census, error) { return c, nil }}, binding: binding, state: state, book: book, store: store, pub: pub, data: dd, observe: func(rt registry.Route) (liveBuild, error) { return observer.observe(rt, 0) }}
+ return &release.RootUpdateInputs{Resolve: p.resolve, Close: func() error { return errors.Join(fences.Close(), state.Close()) }}, nil
+ }
+}
+
+func (p rootUpdateSource) resolve(ctx context.Context, host string) (release.RootUpdateInput, error) {
+ var out release.RootUpdateInput
+ in, err := p.source.installation(ctx, host)
+ if err != nil {
+ return out, err
+ }
+ if in.Empty || in.Record != provision.RecordKey(in.Account, in.App, host) {
+ return out, os.ErrPermission
+ }
+ rec, etag, err := provision.GetRecordETag(ctx, p.store, in.Account, in.App, host)
+ if err != nil {
+ return out, err
+ }
+ inc, err := hostclaim.Incarnation(rec.Account, rec.App, rec.Host, rec.CreatedAt)
+ if err != nil || inc != in.Incarnation || etag == "" {
+ return out, os.ErrPermission
+ }
+ if _, err = p.binding.claimIdentity(ctx, rec); err != nil {
+ return out, err
+ }
+ var policy *provision.UpdatePolicy
+ manifest, err := provision.GetManifest(ctx, p.store, rec.Account, rec.App)
+ if err == nil {
+ policy = manifest.Updates
+ } else if !errors.Is(err, os.ErrNotExist) {
+ return out, err
+ }
+ if err = provision.ValidatePolicy(policy); err != nil {
+ return out, err
+ }
+ rt := provision.RouteFor(*rec, p.data, "", false, policy)
+ // A remote proposal cannot supply protected local lifecycle or served facts.
+ rt.GoodVersion, rt.GoodDigest, rt.GoodDemand, rt.ServingVersion, rt.BuildState = "", "", "", "", ""
+ installation := rootHistoryInstallation(in)
+ key := "settings-" + host + ".json"
+ var saved rootUpdateRecord
+ raw, err := p.state.Read(key)
+ if err == nil {
+ if rootparticipation.Decode(raw, &saved) != nil || saved.Schema != 1 || saved.Installation != installation || saved.Route.Host != host || saved.Route.Account != rec.Account || saved.Route.App != rec.App {
+ return out, os.ErrPermission
+ }
+ } else if errors.Is(err, os.ErrNotExist) {
+ saved = rootUpdateRecord{Schema: 1, Installation: installation, Route: rt, Served: map[string]rootServedBuild{}}
+ } else {
+ return out, err
+ }
+ save := func() error {
+ body, err := json.Marshal(saved)
+ if err != nil {
+ return err
+ }
+ return p.state.Write(key, body)
+ }
+ // Observe canonical process, executable digest and readiness together. Registry
+ // good-build fields and remote build-state never enter this record.
+ if rt.Unit != "" && p.observe != nil {
+ live, e := p.observe(rt)
+ if e == nil && live.binding.authorizedRecovery() && live.binding.RecordKey == in.Record && live.binding.RecordETag == etag && live.binding.Digest == live.SHA256 && live.binding.Version == live.Version && live.binding.Route.Host == host && live.binding.Route.Account == rec.Account && live.binding.Route.App == rec.App && live.Version != "" && live.SHA256 != "" && live.invocation != "" && live.binding.Source != "" {
+ if saved.Served == nil {
+ saved.Served = map[string]rootServedBuild{}
+ }
+ epoch := p.book.RestrictionEpoch(rec.Account, rec.App, live.Version, host)
+ saved.Served[live.Version] = rootServedBuild{live.SHA256, live.invocation, live.binding.Source, epoch}
+ saved.Build = release.BuildStateCopy{Known: true, State: &release.BuildState{Schema: 1, Host: host, LastExecuted: live.Version}}
+ if saved.Consumed != nil && saved.Consumed.Resolved != nil && saved.Consumed.Resolved.Target == live.Version {
+ saved.Build.State.Resolved = saved.Consumed.Resolved
+ saved.Build.State.Completed = saved.Consumed.Resolved.ID
+ }
+ }
+ }
+ saved.Route = rt
+ if err = save(); err != nil {
+ return out, err
+ }
+ retries, _, err := release.LoadHostRetries(ctx, p.store, rec.Account, rec.App)
+ if err != nil {
+ return out, err
+ }
+ for _, r := range retries.Requests {
+ if r.Scope.Kind == release.RestartScopeRetry && r.Scope.Value == host {
+ if _, e := release.VerifyHostRetry(p.pub, r.Scope.Signed, rec.Account, rec.App, host, time.Now()); e == nil {
+ if err = p.book.VerifiedRetry(p.pub, r.Scope.Signed, rec.Account, rec.App, host, time.Now()); err != nil {
+ return out, err
+ }
+ }
+ }
+ }
+ ptr, e := release.Channel(ctx, p.store, p.pub, rec.Account, rec.App, rec.Channel)
+ if e == nil {
+ if _, err = p.book.ClearOnPointer(rec.Account, rec.App, ptr.Version, ptr.PromotedAt); err != nil {
+ return out, err
+ }
+ }
+ out = release.RootUpdateInput{Route: rt, Build: saved.Build, Consumed: saved.Consumed, Failed: func(build string) bool {
+ served, ok := saved.Served[build]
+ ok = ok && served.Digest != "" && served.Invocation != "" && served.Source != "" && served.Epoch == p.book.RestrictionEpoch(rec.Account, rec.App, build, host)
+ if ok {
+ manifest, err := release.AuthorizedManifest(ctx, p.store, p.pub, rec.Account, rec.App, build)
+ ok = err == nil && manifest.Artifacts[release.AdoptPlatform()].SHA256 == served.Digest
+ }
+ return p.book.SaveOwed() || p.book.Blocks(rec.Account, rec.App, build, host, ok) || p.book.HeldDown(rec.Account, rec.App, build, host)
+ }, Save: func(c release.Consumed) error { saved.Consumed = &c; return save() }}
+ if saved.Build.State != nil {
+ out.Installed = saved.Build.State.LastExecuted
+ }
+ return out, nil
+}
+
+func initializeMigrationFailures(dd string, execution rootstate.Store) error {
+ c, err := (rootparticipation.Ledger{State: execution}).Census()
+ if err != nil {
+ return err
+ }
+ if !c.Complete || c.NeverEnrolled {
+ return os.ErrPermission
+ }
+ s, err := rootstate.Open(rollout.RootFailuresDir, true, false)
+ if err != nil {
+ return err
+ }
+ defer s.Close()
+ raw, err := rootFailureLegacy(dd)
+ if err != nil {
+ return err
+ }
+ _, err = rollout.InitializeRootFailures(s, rootUpdatesMigration(c), raw)
+ return err
+}
diff --git a/internal/host/updatesroot.go b/internal/host/updatesroot.go
index 0b9c39f48..c79edced2 100644
--- a/internal/host/updatesroot.go
+++ b/internal/host/updatesroot.go
@@ -26,7 +26,7 @@ import (
// The pass prints the unreadable-book line on root's pass only. The agent's
// opener logs it here once per distinct error, since the fast loop runs a
// pass every few seconds with options built once.
-func updatesPassOption(dd string, root bool) release.PassOption {
+func updatesPassOption(dd string, root bool, providers ...release.RootUpdateOpener) release.PassOption {
var (
mu sync.Mutex
lastErr string
@@ -50,5 +50,13 @@ func updatesPassOption(dd string, root bool) release.PassOption {
return book.Blocks(acct, app, build, host, served) || book.HeldDown(acct, app, build, host)
}, nil
}
- return release.WithUpdateSettings(open, rollout.Managed, root)
+ legacy := release.WithUpdateSettings(open, rollout.Managed, root)
+ if !root {
+ return legacy
+ }
+ provider := productionRootUpdates(dd)
+ if len(providers) == 1 {
+ provider = providers[0]
+ }
+ return release.CombinePassOptions(legacy, release.WithRootUpdateInputs(provider))
}
diff --git a/internal/host/updatesroot_test.go b/internal/host/updatesroot_test.go
index 086b6607b..5ea62b47f 100644
--- a/internal/host/updatesroot_test.go
+++ b/internal/host/updatesroot_test.go
@@ -2,6 +2,7 @@ package host
import (
"context"
+ "crypto/ed25519"
"os"
"path/filepath"
"testing"
@@ -54,7 +55,9 @@ func TestUpdatesPassOptionReadsTheBookEveryPass(t *testing.T) {
}
}
}
- opts := []release.PassOption{updatesPassOption(data, true)} // built once
+ opts := []release.PassOption{updatesPassOption(data, true, func(context.Context, release.Store, ed25519.PublicKey) (*release.RootUpdateInputs, error) {
+ return nil, nil
+ })} // built once
pass := func() {
t.Helper()
if err := release.PassFilter(ctx, reg, store, pub, opt, nil, nil, opts...); err != nil {
diff --git a/internal/provision/plan14_input_inventory_test.go b/internal/provision/plan14_input_inventory_test.go
index 5b76cb765..a0f1ebb42 100644
--- a/internal/provision/plan14_input_inventory_test.go
+++ b/internal/provision/plan14_input_inventory_test.go
@@ -34,7 +34,7 @@ var inputFamilies = map[string]inputFamily{
"D": {"D", "TestPlan14ExecutionHostileCensusRootRunner", "TestPlan14ExecutionServingRequiresRootSettlement", "TestPlan14ExecutionUpdateExclusion", "TestPlan14ExecutionRecoveryAfterProcessCrash", "TestPlan14ExecutionProductionSettlement"},
"E1": {"E", "TestPlan14RootHistoryProductionPass", "TestPlan14RootHistoryLegacyTampering", "TestPlan14RootHistoryLegacyTampering", "TestPlan14HistoryRetirementProcessCrash", "TestPlan14RootHistoryProductionPass"},
"E2": {"E", "TestPlan14GenerationPrivateJournalRootRunner", "TestPlan14GenerationPayloadPhysicalRootRunner", "TestPlan14GenerationDeletionCannotUnpin", "TestPlan14GenerationCompletenessDurability", "TestPlan14GenerationInstalledUnitRootRunner"},
- "E3": {"E", "", "", "", "", ""},
+ "E3": {"E", "TestPlan14SwapFailureHostileRootRunner", "TestPlan14SwapFailureSurvivesLegacyTampering", "TestPlan14SwapFailureSurvivesLegacyTampering", "TestPlan14SwapFailureHostileRootRunner", "TestPlan14SwapFailureVerifiedRetry"},
"E4": {"E", "", "", "", "", ""},
"F": {"F", "TestPlan14RootFloorCrashOrderingRootRunner", "TestPlan14FloorRiseWithoutPlatformUpdateRootRunner", "TestPlan14RootFloorPublicDenySurvivesPrivateLoss", "TestPlan14RootFloorSyscallCrashOrdering", "TestPlan14RootFloorBootSelectors"},
"G": {"G", "TestPlan14RootMigrationHistoricEvidence", "TestPlan14RootMigrationHistoricRootRunner", "TestPlan14RootMigrationHistoricRootRunner", "TestPlan14RootMigrationCrashResume", "TestPlan14RootMigrationBootstrapRootRunner"},
diff --git a/internal/provision/plan14_p3_census_test.go b/internal/provision/plan14_p3_census_test.go
index 88e314b34..b45120b1b 100644
--- a/internal/provision/plan14_p3_census_test.go
+++ b/internal/provision/plan14_p3_census_test.go
@@ -23,12 +23,17 @@ func plan14P3WriteCensusInventory() []censusEntry {
entries := plan14EWriteCensusInventory()
kept := make([]censusEntry, 0, len(entries))
for _, e := range entries {
+ if e.File == "internal/host/rootgenerations_launch.go" && e.Unit == "rootGenerationSource.resolve" {
+ continue
+ }
if e.File == "internal/release/roothistory_delivery.go" && (e.Unit == "PublishHistoryReconstruction" || e.Unit == "PublishHistoryRecoveryRetirement") {
continue
}
kept = append(kept, e)
}
return append(kept,
+ censusEntry{"internal/host/rootgenerations_launch.go", "rootGenerationSource.resolve", "key-site", "key:RecordKey", "578d6a9c37683852391c7ddfc612bb7f7d750b9e4316707daac98dfc5dc2fb88"},
+ censusEntry{"internal/host/rootupdates.go", "rootUpdateSource.resolve", "key-site", "key:RecordKey", "1d925c350f5a23c936c3571da58bbb6252f7c51fed2c43263364b77571fc638a"},
censusEntry{"internal/host/rootmovesfloor.go", "rootMovesFloors.refresh", "key-site", "key:writeRecord", "cb70a1eefbb4f8f243090270f23141c9c9a773ee278af002c79a6c3ef6b7c3b7"},
censusEntry{"internal/host/rootmovesfloor.go", "rootMovesFloors.persist", "key-site", "key:writeRecord", "2c1e0843c5865a31c0fab011d7d4825963bbb5a301727f37f3b1b6c3519eba5e"},
censusEntry{"internal/host/rootmovesfloor.go", "rootMovesFloors.writeRecord", "key-site", "key:writeRecord", "a8a51bdd73f8ab1447edf2241d19a41ba1bcb0084ef045d370e5282aca7e9e66"},
diff --git a/internal/provision/testdata/plan14-root-reads-p3.tsv b/internal/provision/testdata/plan14-root-reads-p3.tsv
index ff8133c7e..ace730c70 100644
--- a/internal/provision/testdata/plan14-root-reads-p3.tsv
+++ b/internal/provision/testdata/plan14-root-reads-p3.tsv
@@ -189,7 +189,7 @@ internal/rootparticipation/ledger.go Ledger.RecoverAcquisition authority D,F,J4
@removed internal/rootparticipation/production.go ActivationReady D,G census-ruling-J4
internal/historyreadback/readback.go RequestStatus diagnostic E1 rev3=PROPOSED-p3;identity=diagnostic request library, no production caller;basis=P3-R8 #2; signed readback request only; no reconstruction or retirement d89052b0cdd12c8c8dcbc353e9ae995005caeb88d8e4c70974cb9e6f4bfd46d7
internal/hostbox/migration_census_other.go CheckMigrationRoots hint G,J4 rev3=PROPOSED-p3;identity=non-Linux offline migration caller;basis=P3-R8 #17; unsupported platform refusal only 594ecda260fcf80baf5a2709c9cc5a04e91c655c8bd2f7ac307eef44216eb9c8
-internal/host/rootmigration_production_linux.go migrateRootClaimAuthority authority G,J4 rev3=PROPOSED-p3;identity=offline migration root uid 0;basis=offline migration adopts pre-claim timers only after verified root stop evidence; resumes its exact saved intention under release and migration exclusion, rechecking kernel absence before completion file:Open@1538,file:Open@302,file:Open@384,file:Open@508,file:Open@6832,file:Read@2490,file:ReadFile@1340,whole:Route@2803 896026523dd3c7a01e41664aa1b233c3de67b093efe8d8f3b778d6dd3c11397a
+internal/host/rootmigration_production_linux.go migrateRootClaimAuthority authority G,J4,E3 rev3=PROPOSED-p3;identity=offline migration root uid 0;basis=offline migration adopts pre-claim timers only after verified root stop evidence; resumes its exact saved intention under release and migration exclusion, rechecking kernel absence before completion;rev3=PROPOSED-p3;run=8;identity=offline journal-migrate uid 0;basis=initializes root failure history after a complete census; legacy bytes add only denies and never retry permission file:Open@1538,file:Open@302,file:Open@384,file:Open@508,file:Open@6832,file:Read@2490,file:ReadFile@1340,whole:Route@2803 5fa77f00f3e451a48064b80111aa4fdd9be26e76621e29e521f93c9abf3033c3
internal/host/rootmigration_timers.go rootMigrationTimers.adopt authority G,J4 rev3=PROPOSED-p3;identity=offline migration root uid 0;basis=offline migration binds the exact observed pre-claim registrations to root retained stop evidence and denies; durable intention precedes conditional registry adoption and root inventory completion registry:ClaimOwner@1997,registry:ClaimOwner@2135,registry:ClaimOwnership@1860,registry:ClaimOwnership@1914,registry:ClaimOwnership@4009,registry:ClaimOwnership@4202,registry:ClaimOwnership@4314,registry:Host@1836,registry:Host@4107,registry:Name@1677,registry:Name@4122,registry:Registration@1153,registry:Registration@1785,registry:Registration@1810,registry:Registration@1962,registry:Registration@2117,registry:Registration@4046,whole:ClaimOwnership@1864,whole:ClaimOwnership@1918,whole:ClaimOwnership@1936,whole:ClaimOwnership@4015,whole:ClaimOwnership@4211,whole:ClaimOwnership@4320,whole:Route@2456,whole:Timer@1067,whole:Timer@1073,whole:Timer@1101,whole:Timer@1663,whole:Timer@2304,whole:Timer@3896,whole:Timer@3911,whole:Timer@3980,whole:Timer@3998,whole:Timer@4179,whole:Timer@4190,whole:Timer@4304,whole:Timer@4383,whole:Timer@4394 35914f3267326de830fb7c149bf330638cb49794a3e8c6f41445078a92669a04
internal/host/rootmigration_timers.go rootMigrationTimers.load authority G,J4 rev3=PROPOSED-p3;identity=offline migration root uid 0;basis=reads only the root-private saved adoption intention, requiring the same host, incarnation, stamp, session and enrolled box; preserves exact registration IDs on retry file:Read@145,registry:Registration@844,whole:Timer@668,whole:Timer@846 f58c918185b3c382e5c1545f441cb589157b0c6cf60bb54322ca7edf40f1c1c9
internal/host/rootmigration_timers.go rootMigrationTimers.key authority G,J4 rev3=PROPOSED-p3;identity=offline migration root uid 0;basis=scopes the durable timer adoption intention to the root-observed installation and denied session 76a349236e49d55a5b9866b86ea60aa56a7a5b179b7b77b82d87535f0a305f0c
@@ -201,12 +201,43 @@ internal/hostguard/rootmigration.go RootAuthority.CompleteMigrationInventory aut
@coverage internal/activator 95ea5c811cee8a679170f708c30b4446021740977474551c1d22bf8afaacf9be
@coverage internal/console 6f4998c39e6d66cd73ea98500000cbecac251dd21dafd58f51a85c2291e0c533
@coverage internal/edgesfile 7b48368150a427e4620f1c9ded49942b688c9e6c9cd983b7da43d3f2c0810b72
-@coverage internal/host c2b410276372d64cbd7fe7d45f2f94db5f322a256fa400d6861d9ccf16b70275
+@coverage internal/host 8ccb2feb1e570d1581d67e9b8815802b52513378cccc71f48c42631483734821
@coverage internal/host/units bf6ae516012701e0ca41908167e4efd60dd3c2c24e9af1555dec077e8be44461
@coverage internal/hostbox 37e91e5b73a48538a69e2a25286e76f740917b29c0fb5f26e32d5f59e3da6e1d
@coverage internal/hostfloor 696e5ea4fa37b924b68e8e262235b99298ee19342d875213ba8209e5287dd3c6
@coverage internal/hostguard 9aa80c14419e017785500e225fef7746ed9af37936ced9c238b9dd3aa5d485c9
-@coverage internal/release 775ec9f26a2d04f1674ce7adfa80472886064b452134ba5dab165d565d90262f
+@coverage internal/release e050a2550df4b95f8c8b45c50c900d3c7404b69a0f91a13bcfe859ba6fbc627b
@coverage internal/rootparticipation ffa18f535e706793976bb235426fa5852e65baba211be5077666c1dc738e7f0b
-@coverage internal/rootstate 8415892a08d6c9c1b2d71aa25b0952cbcaa53e533213b7fac56dd0666ee787cf
+@coverage internal/rootstate 80d6c4dccc6cacd416a2b4c0d3b8efd375ea564488bab7c26cd2f010f4416890
@coverage internal/safefile 7030f312f7a60487381f0dbae2cdecaaa83625b639b6af15104f912592550816
+internal/host/rootgeneration_kernel_linux.go generationCurrentBinding authority E2 rev3=PROPOSED-p3;run=8;identity=root generation recovery uid 0;basis=reopens retained executable through checked ancestry and compares persistent filesystem, handle, ownership and mount attachment before adapting only the transient scanner device identities file:Open@290 c6f4a4c2ae23e2e8bed442ea2062213b4b8253703534d8777539a1c11a878a2a
+internal/host/rootgeneration_kernel_linux.go generationKernel.absent authority E2 E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.;rev3=PROPOSED-p3;run=8;identity=root generation kernel census uid 0;basis=uses current-boot scanner identities only after retained filesystem and handle verification; immutable reservations remain unchanged file:Readlink@312 a017307e56616756a885f7143aeaa8a718a0ea3f8cff2a5f757c9e0f06ec557c
+internal/host/rootgeneration_kernel_linux.go generationRetainedFiles authority E2 E21: bounded kernel reader retains executable, sibling, descriptor, mapping and mount references; checks controller boot/start and cgroup emptiness. Unknown nonroot tasks, foreign namespaces, missing kernel state or renamed trees refuse. Fixtures: TestPlan14GenerationKernelReferences, TestPlan14GenerationKernelMappingIdentity, TestPlan14GenerationKernelControllerIdentity, TestPlan14GenerationKernelRunningExecutable, TestPlan14GenerationKernelCgroup, TestPlan14GenerationKernelRetainedFiles, TestPlan14GenerationKernelSiblingAlias. Real proc executable tests are not full privileged namespace acceptance.;rev3=PROPOSED-p3;run=8;identity=root generation recovery uid 0;basis=requires verified persistent executable and tree identity through generationCurrentBinding e3a390aa9b689fca331fb853f0f49c9f09dbb0793a8a3d93ff53f66fab5c8251
+internal/host/rootgenerations_launch.go productionRootGenerations authority E2 E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.;rev3=PROPOSED-p3;run=8;identity=root claim launch uid 0;basis=installs mandatory persistent identity capture for root generation reservations file:Open@380 efb8b122b8c3f347d47b5423503bb6f56e3a215c710ff28045c828be2b524782
+internal/host/rootgenerations_launch.go rootGenerationSource.resolve authority E2 E20: read the atomic root installation under the existing host exclusion without recursive lock acquisition; retain fresh claim, canonical record, signed artifact and final reservation checks. Fixtures: TestPlan14GenerationLaunchDoesNotReenterRootLock, TestPlan14GenerationLaunchRefusals, TestPlan14RootDispatchRejectsRegistryMutation. PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.;rev3=PROPOSED-p3;run=8;identity=root claim launch uid 0;basis=captures persistent executable and tree proofs only after canonical installation and signed artifact verification under exclusion file:Open@2501 578d6a9c37683852391c7ddfc612bb7f7d750b9e4316707daac98dfc5dc2fb88
+internal/host/rootgenerations_launch.go type rootGenerationSource authority E2 E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals.;rev3=PROPOSED-p3;run=8;identity=root claim launch assembly uid 0;basis=adds the root-owned persistent file capture capability to production generation binding 8fe347db33e65766fd2d8378becd1668eb60367d1d8710f4d7593facafa3ad6d
+internal/host/rootupdates.go initializeMigrationFailures authority G,E3 rev3=PROPOSED-p3;run=8;identity=offline journal-migrate uid 0;basis=requires complete root census before creating migration-bound root failure book; missing legacy history supplies no known refusal file:Open@254 5f7f652988f3def733e1b525260a52fac3568242960468e5457975ced1cd41d8
+internal/host/rootupdates.go productionRootUpdates authority E3 rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=checks census before opening any new authority; retains root failure book and installation store and installs canonical inputs;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=checks census before opening any new authority; retains root failure book and installation store and installs canonical inputs file:Open@1243,file:Open@765,file:Read@1566,whole:Route@2083 1906f47f244cfdbe0f7ca58eeab9168e05856b517cfc28f9ad27b7c711ae03e9
+internal/host/rootupdates.go rootFailureLegacy authority E3 rev3=PROPOSED-p3;run=8;identity=carlos adopt and offline migration uid 0;basis=bounded legacy byte read feeds only failure tuples and unresolved intents to the root deny importer; no legacy book opener or retry grant file:Open@65,file:ReadAll@239 313d92c63ac120966bbe6ad50de446c7a92e2d69d5e18b1b300fd724b3098f78
+internal/host/rootupdates.go rootUpdateSource.resolve authority E3,J1,J3 rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=binds fresh record and policy to root installation and claim; reads root consumed and served evidence, verifies signed retry and pointer transitions, persists decisions before dispatch file:Read@1368,registry:Account@1543,registry:Account@2428,registry:App@1581,registry:App@2473,registry:BuildState@1210,registry:GoodDemand@1176,registry:GoodDigest@1161,registry:GoodVersion@1145,registry:Host@1515,registry:Host@2393,registry:ServingVersion@1191,registry:Unit@2124,whole:Route@1521,whole:Route@1549,whole:Route@1587,whole:Route@1756,whole:Route@1763,whole:Route@2183,whole:Route@2406,whole:Route@2441,whole:Route@2486,whole:Route@3254,whole:Route@3262,whole:Route@4066,whole:Route@4073 1d925c350f5a23c936c3571da58bbb6252f7c51fed2c43263364b77571fc638a
+internal/host/updatesroot.go updatesPassOption authority E3 rev3=PROPOSED-p3;run=8;identity=root adopt uid 0; unchanged agent opener uid carlos;basis=installs census-only root input provider while preserving the legacy failure-book opener for nonparticipating passes 4f66774059952bda531435d68487fa032a95b8d1c8ca33ec8b71b6639fa117e3
+internal/release/adopt.go PassFilter authority B3,E3,J1,E1,E2 Signed named-unit recovery is independent of release and health history. Root rechecks canonical source, unit, process, signed target and trusted live pointer; captures attempt authority before publication; verifies readiness and resumes without repeated effects. Fixtures: TestPlan14SignedActiveFixIgnoresHistory, TestPlan14SignedActiveFixAuthority, TestPlan14SignedFixSupersedesOlderAttempt, TestPlan14ActiveRecoveryProcessCrash, TestPlan14SignedRestartWithoutHealthHistory, TestPlan14CapturedRollbackWithoutHealthHistory, TestPlan14SignedRestartRequiresTrustedLiveLink. E7 applies merge ruling 4: unbound no-census routes use the legacy pass and restart; ordinary candidates make no binding store call. Fixtures: TestR2UnguardedERecoveryUpdate, TestR2UnguardedERecoveryIncidentRecipe, TestPlan14ERecoveryBindingRefusalKeepsPromotedFix. E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode.;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0; legacy agent pass uid carlos;basis=resolves protected route inputs before filters, recovery and dispatch on census boxes and bypasses service-owned failure opener only there registry:App@26795,registry:App@29252,registry:App@29744,registry:App@29981,registry:App@31388,registry:App@6590,registry:App@9615,registry:App@9756,registry:Hibernate@29627,registry:Host@1061,registry:Host@1426,registry:Host@29797,registry:Host@30713,registry:Host@31441,registry:Host@3263,registry:Host@3330,registry:Host@3426,registry:Host@3461,registry:UpdateSettings@9493,whole:Route@1046,whole:Route@1164,whole:Route@1188,whole:Route@1461,whole:Route@1622,whole:Route@26790,whole:Route@2726,whole:Route@2768,whole:Route@2877,whole:Route@2901,whole:Route@29247,whole:Route@2932,whole:Route@29505,whole:Route@29527,whole:Route@29574,whole:Route@29592,whole:Route@29602,whole:Route@29645,whole:Route@29666,whole:Route@29679,whole:Route@29739,whole:Route@29765,whole:Route@29839,whole:Route@29878,whole:Route@2989,whole:Route@29894,whole:Route@29922,whole:Route@29976,whole:Route@30002,whole:Route@3075,whole:Route@30755,whole:Route@30809,whole:Route@30825,whole:Route@3097,whole:Route@31332,whole:Route@31383,whole:Route@31409,whole:Route@31483,whole:Route@31518,whole:Route@31534,whole:Route@3197,whole:Route@4280,whole:Route@4927,whole:Route@6512,whole:Route@6534,whole:Route@6585,whole:Route@6611,whole:Route@761,whole:Route@803,whole:Route@9444,whole:Route@950,whole:Route@9558,whole:Route@9603,whole:Route@9751,whole:Route@988 270763804170539d06afd58252d86e1a8ff692ab4d9355be3a2127e9efc9d4a2
+internal/release/adopt.go adoptHost authority B3,E1,E2,E3,E4,J1 E16: root first-registration creation evidence under release exclusion; exact installation identity is required for first-program adoption and is consumed before an attempt. Installed-program history comes from the verified claim launch. Fixtures: TestPlan14FreshInstallRegistration, TestPlan14FreshInstallProgramGate, TestPlan14FreshInstallCanonicalIdentity, TestPlan14FreshInstallLaunchObservation, TestPlan14InstalledLaunchProgramEvidence, TestPlan14FreshInstallProcessCrash, TestPlan14FreshInstallVisibleSync, TestClaimControlUnitInstallers. E22: root generation pins guard existing-tree artifact and manifest writes in adoption and moves-held staging/publication. Held snapshot is read under release exclusion before the leaf held-stage lock; failures remain restrictive for writes. Claims-off source returns no root pins. Fresh wholly absent version trees retain signed staging. Fixtures: TestPlan14GenerationSiblingWrites, TestPlan14GenerationVerifiedSiblingWrites, TestPlan14GenerationHeldStage (production source assembly, both flag values without census, lock order, pin/error/fresh cases). Production completeness remains unavailable; no new completeness grant.;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0; legacy agent pass uid carlos;basis=applies root settings to canonically resolved routes including named units while legacy settings eligibility remains unchanged registry:App@10936,registry:App@11096,registry:App@12125,registry:App@13051,registry:App@14633,registry:App@19792,registry:App@25268,registry:App@3144,registry:App@33027,registry:App@6758,registry:App@8059,registry:App@8253,registry:Hibernate@33888,registry:Host@10816,registry:Host@10849,registry:Host@10949,registry:Host@11109,registry:Host@11211,registry:Host@11243,registry:Host@11308,registry:Host@11758,registry:Host@11891,registry:Host@12338,registry:Host@12447,registry:Host@12649,registry:Host@13141,registry:Host@13927,registry:Host@14405,registry:Host@14619,registry:Host@14961,registry:Host@15551,registry:Host@19282,registry:Host@19390,registry:Host@19760,registry:Host@20580,registry:Host@20738,registry:Host@2105,registry:Host@21200,registry:Host@21252,registry:Host@21399,registry:Host@21486,registry:Host@22592,registry:Host@22836,registry:Host@2294,registry:Host@23496,registry:Host@2375,registry:Host@23881,registry:Host@24022,registry:Host@25236,registry:Host@25363,registry:Host@26705,registry:Host@27355,registry:Host@30588,registry:Host@31206,registry:Host@31531,registry:Host@3157,registry:Host@31605,registry:Host@31852,registry:Host@32003,registry:Host@33199,registry:Host@33366,registry:Host@33473,registry:Host@33701,registry:Host@33844,registry:Host@34589,registry:Host@34715,registry:Host@34803,registry:Host@4469,registry:Host@4583,registry:Host@5546,registry:Host@5651,registry:Host@6870,registry:Host@6918,registry:Host@7035,registry:Host@7067,registry:Host@7945,registry:Host@8113,registry:Host@8239,registry:Host@8358,registry:Host@8836,registry:Host@9223,registry:Host@9449,registry:Host@9545,registry:Host@9636,registry:Kind@554,registry:Unit@31751,registry:Unit@579,whole:Route@10073,whole:Route@10931,whole:Route@11091,whole:Route@12115,whole:Route@13041,whole:Route@14601,whole:Route@15166,whole:Route@15527,whole:Route@16750,whole:Route@17053,whole:Route@17209,whole:Route@19539,whole:Route@19683,whole:Route@19782,whole:Route@2206,whole:Route@22321,whole:Route@22720,whole:Route@25258,whole:Route@30159,whole:Route@3139,whole:Route@33175,whole:Route@3595,whole:Route@4347,whole:Route@6753 a9672d71a3d70ab0bcc2b257daebb974da0f0bf67731303f51221b216f06eff6
+internal/release/adopt.go settingsTarget authority E3 Settings target rejects foreign consumed decisions and forces root-owned settings rebind to the canonical tenant.;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0; legacy agent pass uid carlos;basis=census branch delegates target selection to root inputs before any legacy consumed, good-version or build-state read registry:App@2977,registry:App@3077,registry:App@3362,registry:BuildState@2680,registry:GoodVersion@3387,registry:Host@1313,registry:Host@1723,registry:Host@2241,registry:Host@2488,registry:Host@2777,registry:Host@3373,registry:Host@3785,registry:Host@429,registry:Host@4440,registry:Host@4628,registry:Host@702,registry:UpdateSettings@556,whole:Route@1187,whole:Route@2277,whole:Route@2284,whole:Route@2842,whole:Route@2849,whole:Route@301,whole:Route@495,whole:Route@513,whole:Route@658 420982c2cbde642ae3008b61f93dc514defb527c05b20203864de8d052621599
+internal/release/adopt.go type passConfig authority E2,E3 E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode, TestPlan14GenerationProductionModeGate, TestPlan14GenerationSnapshotPermitsFreshTree.;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0; legacy agent pass uid carlos;basis=stores the typed census-only root update provider and per-pass resolved input authority 7a405d8b9a24ccb4c9f09f91ca468f74a1e9b4a8b960b430dc3a6290a6b310cd
+internal/release/rootgenerationpins.go RootGenerationPins.StagedPins authority E2 E23: versioned generation completeness binds exact reservations to independently supplied installation, launch and kernel evidence. Reservation mutations invalidate before commit; every destructive read reconciles again and retries sync. Production reconciliation remains unavailable. Fixtures: TestPlan14GenerationCompleteness, TestPlan14GenerationCompletenessInvalidation, TestPlan14GenerationCompletenessDurability, TestPlan14GenerationCompletenessCertificateSyncFailure, TestPlan14GenerationCompletenessPinConsumer, TestPlan14GenerationCompletenessProcessCrash; TestPlan14GenerationCompletenessCheckedRootStore passed on the E25 root runner.;rev3=PROPOSED-p3;run=8;identity=root release retention uid 0;basis=verifies persistent executable and tree proofs before retaining staged pins across reboot ef00e1932f03df622e7a6af4195f93da772982539eec4a88beb2056b685c2da9
+internal/release/rootgenerationpins.go generationFileIdentity authority E2 E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode, TestPlan14GenerationProductionModeGate, TestPlan14GenerationSnapshotPermitsFreshTree.;rev3=PROPOSED-p3;run=8;identity=root release retention uid 0;basis=persistent filesystem and handle evidence supersedes boot-local device equality for new root generation records;rev3=PROPOSED-p3;run=8;identity=root release retention uid 0;basis=persistent filesystem and handle evidence supersedes boot-local device equality for new root generation records file:Lstat@316,file:Open@198,file:Open@442 ae15d4811588e28de96750de2ff27144096543d0cf51b5f5ef44b9b7762d6833
+internal/release/rootgenerations.go type GenerationBinding authority E2 E18: claims-on launch records the canonical installation, deployment revision, signed build, executable and containing tree before start under release exclusion; both final spawn checks reread the same reservation and identities. Root process evidence never retires the reservation. This is the launch prerequisite only; complete pins and retirement remain pending. Fixtures: TestPlan14GenerationReservedBeforeClaimSpawn, TestPlan14GenerationLaunchRefusals, TestPlan14GenerationStartedSyncFailureRetainsPin, TestPlan14GenerationReservationProcessCrash, TestPlan14GenerationProductionWiring, TestPlan14GenerationReservationDurability, TestPlan14GenerationReservationConflicts, TestPlan14GenerationObservationKeepsReservation, TestPlan14GenerationRecordRefusals. PROPOSED E47: root-owned immutable unit/shape binding, reserved launch placement and exact invocation stop; retained generation binding carries the canonical unit. Default unit paths remain unchanged. Production named-route wiring and unit/env/timer retirement are not complete.;rev3=PROPOSED-p3;run=8;identity=root generation journal uid 0;basis=additive persistent executable and tree fields preserve historical device and inode records 24c31b4dc084ee2ea86b9ddf70842b795d3242f761529c2d1b07acd84fb4582e
+internal/release/rootupdates.go RootUpdateInputs.routes authority E3,J1 rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=uses registry hostname only as selector and replaces protected dispatch fields with independently resolved root inputs registry:Host@308,registry:Host@365,registry:Host@382,registry:Host@481,whole:Route@244,whole:Route@273,whole:Route@368,whole:Route@499,whole:Route@512,whole:Route@520,whole:Route@538 c75f2735786a9185baf8c54ea14a6c2adbe387a84cfec92585faba2163d95a67
+internal/release/rootupdates.go RootUpdateInputs.target authority E3 rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=re-resolves canonical route before selection and persists root request decision before permitting adoption registry:Account@747,registry:Account@857,registry:App@759,registry:App@872,registry:Channel@767,registry:Host@248,registry:Host@341,registry:UpdateSettings@467,whole:Route@364,whole:Route@382,whole:Route@470,whole:Route@571,whole:Route@581 cb946ee06c8c53e26c13bb910f9a6d9c526b593a8b0d4fed7be1f42275faa727
+internal/rollout/failures.go FailureBook.saveLocked authority E3 rev3=PROPOSED-p3;run=8;identity=root adoption uid 0 or legacy rollout uid carlos;basis=root instance uses checked store writer; legacy instances retain the original atomic file writer and epoch semantics 83b3b6847b3d5573946f635c5c8f006e96648da5dd592cd65987a16f24c0e0c2
+internal/rollout/rootfailures.go InitializeRootFailures authority E3,G rev3=PROPOSED-p3;run=8;identity=offline root migration uid 0;basis=creates a new random root book only under explicit migration authority, preserving bounded legacy denies without legacy clears 603064dc39f5c7d7c4cce90ab9a90ab4c4d6ec8dd9e6c4ca5b6bfc072979a644
+internal/rollout/rootfailures.go OpenRootFailures authority E3 rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=requires exact root migration marker and durable book; rewrites visible state before exposing any retry or failure permission file:Read@165 2f586cb1812ded0911e0353658660403caa8e0427fdb7684ed63cc016fac01b4
+internal/rollout/rootfailures.go RootFailures.ImportLegacy authority E3 rev3=PROPOSED-p3;run=8;identity=root adoption and migration uid 0;basis=imports bounded negative tuples, hold markers and unresolved intents once; ignores legacy epochs and retries and durably retains import fingerprints 11f48c92fc6399ce6a748153fd20630b4a16378741b4f3ecdd34e9dd7b2b87f3
+internal/rollout/rootfailures.go RootFailures.VerifiedRetry authority E3 rev3=PROPOSED-p3;run=8;identity=root adoption uid 0;basis=verifies deployment-root signature, tuple, freshness and exact root book epoch before existing durable retry transition f4ab9edee069dedf8748055ee612a6ef8905b9770718c82378cfc15b0316810e
+internal/rollout/rootfailures.go rootFailureWriter authority E3 rev3=PROPOSED-p3;run=8;identity=root adoption and migration uid 0;basis=writes migration identity, failure epochs and import fingerprints atomically through checked private root store e32ffb3459fe2b13e0ecbe7b364bd405ef25325ed8cbd685b9ac1e076a8c197a
+internal/rootstate/persistent.go PersistentIdentity.Same authority A,E2 rev3=PROPOSED-p3;run=8;identity=root generation verification uid 0;basis=device and mount numbers are exact only within one boot; cross-boot equality requires persistent evidence and unchanged attachment topology;rev3=PROPOSED-p3;run=8;identity=root generation verification uid 0;basis=device and mount numbers are exact only within one boot; cross-boot equality requires persistent evidence and unchanged attachment topology 05794ea9031ebd75241e294c4a7acc0cd0c1ca390f52983556f951d696762254
+internal/rootstate/persistent_linux.go Persistent authority A,E2 rev3=PROPOSED-p3;run=8;identity=root generation capture and verification uid 0;basis=captures filesystem ID, export handle, boot, inode, ownership and stable mount attachment from caller-checked descriptor;rev3=PROPOSED-p3;run=8;identity=root generation capture and verification uid 0;basis=captures filesystem ID, export handle, boot, inode, ownership and stable mount attachment from caller-checked descriptor file:Fstat@117,file:Fstatfs@214,file:ReadFile@412,file:ReadFile@510 d505ef9740195ea550eb40c98964d33a41fbe42229ee0dbd183e5075be90fd64
+@coverage internal/rollout 2eb6f16155889a1f30595f8f197d4155b0211320dae8eee317898895c937c462
+internal/host/agent.go runAdoptUnderRootRelease authority B3,E1,E2,E3 E13: signed recovery allows unknown history but preserves usable refusals, including retained originals; verified later promotion clears only D1. Health recording is independent of program recording; minting requires a census. Fixtures: TestPlan14RecoveryUnknownHistory, TestPlan14RecoveryKnownRefusal, TestPlan14RecoveryOriginalRefusalWithUnknownHistory, TestPlan14RootHistoryVerifiedRetryBeforeAttempt, TestPlan14ProgramFailureStillRecordsHealth, TestPlan14RootHistoryMintCensus. E15: census-only root unit-restart consumption uses retained installations, canonical records, exact requests, invocation evidence and admission after durable intent under release exclusion. No-census effects use the original consumer. Fixtures: TestPlan14RootRestartProductionConsumption, TestPlan14RootRestartProductionHeldRollover, TestPlan14RootRestartProductionAdmissionAfterIntent, TestPlan14RootRestartProductionUnknown, TestPlan14RootRestartProductionSyncFailure, TestPlan14RootRestartProductionCrash, TestPlan14RootRestartRequestCensusGate. E19: both destructive readers use the root reservation snapshot under existing release exclusion. Exact artifact and containing-tree identities are retained; missing completeness refuses destruction. Production installation/launch/kernel completeness and verified retirement remain unfinished. Fixtures: TestPlan14GenerationDeletionCannotUnpin, TestPlan14GenerationSnapshotCompleteness, TestPlan14GenerationSnapshotPermitsUnreservedRestage, TestPlan14GenerationSnapshotPinsContainingTree, TestPlan14GenerationSnapshotEmptyIsUnknown, TestPlan14GenerationConsumerMode.;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=wires the census-specific update authority under existing root release exclusion whole:Route@10811,whole:Route@18259,whole:Route@18295,whole:Route@8113 08246cfeb979e625154867453493dfe25195477f63adfe5cb2eb610ea69f136f
+internal/host/agent.go runAdoptWithEnsureSystemUnits authority B3,C,D,E1,E2,E3,E4,F,J1 PROPOSED E45 / R-E45-3: root checks census presence before opening release exclusion; absent census uses main adoption with no release directory or lock. Retained census remains protected with either flag value. PROPOSED E45: root enforces census-gated release ordering, bounded acquisition and scoped recovery; registry timer primitives preserve supplied identity but producer integration remains pending.;rev3=PROPOSED-p3;run=8;identity=carlos adopt uid 0;basis=passes the same census source to release exclusion and root settings to preserve the no-census branch file:Open@176 24e2e1caa9ee1d2d1c681cb6d78bebc10e5772fdb1e7a193cd4d77ffb5a0f672
diff --git a/internal/release/adopt.go b/internal/release/adopt.go
index 9f2707f3b..6aa7eda01 100644
--- a/internal/release/adopt.go
+++ b/internal/release/adopt.go
@@ -37,6 +37,8 @@ var adoptPlatform = runtime.GOOS + "-" + runtime.GOARCH
type PassOption func(*passConfig)
type passConfig struct {
+ openRootUpdates RootUpdateOpener
+ rootUpdates *RootUpdateInputs
legacyRecovery func() (bool, error)
recovery func(context.Context, registry.Route) (bool, error)
rootHistory *RootHistoryPass
@@ -453,6 +455,16 @@ func PassFilter(ctx context.Context, reg *registry.Registry, s Store, pub ed2551
if cfg.propagateRestarts || cfg.requireRootHistory {
cfg.restartErrors = new([]error)
}
+ if cfg.openRootUpdates != nil {
+ var err error
+ cfg.rootUpdates, err = cfg.openRootUpdates(ctx, s, pub)
+ if err != nil {
+ return err
+ }
+ if cfg.rootUpdates != nil && cfg.rootUpdates.Close != nil {
+ defer cfg.rootUpdates.Close()
+ }
+ }
cfg.pub = pub
cfg.route = reg.Get
if cfg.recovery != nil {
@@ -460,6 +472,12 @@ func PassFilter(ctx context.Context, reg *registry.Registry, s Store, pub ed2551
if err != nil {
return err
}
+ if cfg.rootUpdates != nil {
+ routes, err = cfg.rootUpdates.routes(ctx, routes)
+ if err != nil {
+ return err
+ }
+ }
handled := map[string]bool{}
var failures []error
remaining := false
@@ -505,7 +523,7 @@ func PassFilter(ctx context.Context, reg *registry.Registry, s Store, pub ed2551
}
// Settings spec §4.3: the failure book is read fresh for every pass, so a
// record the agent persisted since the last one counts now.
- if cfg.settings && cfg.openFailed != nil {
+ if cfg.rootUpdates == nil && cfg.settings && cfg.openFailed != nil {
cfg.failed, cfg.failedErr = cfg.openFailed()
if cfg.failedErr != nil && cfg.resolve {
fmt.Printf(" failure book unreadable (%v): routes with update settings and managed routes install nothing this pass\n", cfg.failedErr)
@@ -518,6 +536,12 @@ func PassFilter(ctx context.Context, reg *registry.Registry, s Store, pub ed2551
if err != nil {
return err
}
+ if cfg.rootUpdates != nil {
+ routes, err = cfg.rootUpdates.routes(ctx, routes)
+ if err != nil {
+ return err
+ }
+ }
adopts := func(rt registry.Route) bool {
return (Adoptable(rt) || SidecarAdoptable(rt)) && (extra == nil || extra(rt))
}
@@ -1263,7 +1287,7 @@ func adoptHost(ctx context.Context, work hostwrite.Work, reg *registry.Registry,
// settings: this route's build is the instance update settings' decision
// (settings spec §4.3). Rules 1-3 need no channel head, so a route with
// settings is not skipped when the pointer is unreadable (Astra I1 #9).
- settings := cfg.settings && rt.Kind == "instance" && rt.Unit == ""
+ settings := cfg.settings && ((rt.Kind == "instance" && rt.Unit == "") || cfg.rootUpdates != nil)
if ptr == nil && !settings {
return
}
@@ -2380,6 +2404,9 @@ func backfillManifestDigest(ctx context.Context, s Store, optDir, acct, app, ver
// none, and root's write replaces it (ruling R26).
func settingsTarget(ctx context.Context, optDir string, bake *FirstSeen, rt registry.Route, ptr *ChannelPointer, cur string, now time.Time,
cfg passConfig, holds map[string]time.Duration, ignore bool) (string, TargetDecision, bool) {
+ if cfg.rootUpdates != nil {
+ return cfg.rootUpdates.target(ctx, rt, ptr, bake, now, cfg, holds, ignore)
+ }
stop := func(dec TargetDecision) (string, TargetDecision, bool) {
cfg.proof.clear(rt.Host)
return "", dec, true
diff --git a/internal/release/rootgenerationpins.go b/internal/release/rootgenerationpins.go
index 6c2617d5d..b516748be 100644
--- a/internal/release/rootgenerationpins.go
+++ b/internal/release/rootgenerationpins.go
@@ -38,7 +38,7 @@ func (s RootGenerationPins) StagedPins(ctx context.Context, optDir string) (Stag
continue
}
for path, expected := range map[string]rootstate.FileIdentity{b.Path: b.Executable, b.Tree: b.TreeIdentity} {
- if err := generationFileIdentity(path, expected); err != nil {
+ if err := generationFileIdentity(path, expected, map[string]rootstate.PersistentIdentity{b.Path: b.ExecutablePersistent, b.Tree: b.TreePersistent}[path]); err != nil {
return nil, err
}
}
@@ -60,7 +60,14 @@ func (s RootGenerationPins) StagedPins(ctx context.Context, optDir string) (Stag
return pins, nil
}
-func generationFileIdentity(path string, expected rootstate.FileIdentity) error {
+func generationFileIdentity(path string, expected rootstate.FileIdentity, persistent ...rootstate.PersistentIdentity) error {
+ if len(persistent) == 1 && persistent[0].Boot != "" {
+ parent, err := rootstate.Open(filepath.Dir(path), false, true)
+ if err != nil {
+ return err
+ }
+ parent.Close()
+ }
info, err := os.Lstat(path)
if err != nil {
return err
@@ -77,6 +84,13 @@ func generationFileIdentity(path string, expected rootstate.FileIdentity) error
if err != nil {
return err
}
+ if len(persistent) == 1 && persistent[0].Boot != "" {
+ current, err := rootstate.Persistent(f)
+ if err != nil || !persistent[0].Same(current) {
+ return os.ErrPermission
+ }
+ return nil
+ }
if actual != expected {
return os.ErrPermission
}
diff --git a/internal/release/rootgenerations.go b/internal/release/rootgenerations.go
index 1207316c0..7596e1624 100644
--- a/internal/release/rootgenerations.go
+++ b/internal/release/rootgenerations.go
@@ -22,7 +22,8 @@ type GenerationOwner struct {
}
type GenerationBinding struct {
- Unit string `json:",omitempty"`
+ ExecutablePersistent, TreePersistent rootstate.PersistentIdentity `json:",omitzero"`
+ Unit string `json:",omitempty"`
Binding HistoryBinding
Target GenerationOwner
Installation, Attempt, Inputs, Invocation string
diff --git a/internal/release/rootupdates.go b/internal/release/rootupdates.go
new file mode 100644
index 000000000..edd15713d
--- /dev/null
+++ b/internal/release/rootupdates.go
@@ -0,0 +1,84 @@
+package release
+
+import (
+ "context"
+ "crypto/ed25519"
+ "os"
+ "time"
+
+ "github.com/carlosframework/platform/internal/registry"
+)
+
+type RootUpdateInput struct {
+ Route registry.Route
+ Build BuildStateCopy
+ Consumed *Consumed
+ Installed string
+ Failed func(string) bool
+ Save func(Consumed) error
+}
+
+type RootUpdateInputs struct {
+ Resolve func(context.Context, string) (RootUpdateInput, error)
+ Close func() error
+ selected map[string]RootUpdateInput
+}
+
+type RootUpdateOpener func(context.Context, Store, ed25519.PublicKey) (*RootUpdateInputs, error)
+
+func WithRootUpdateInputs(open RootUpdateOpener) PassOption {
+ return func(c *passConfig) { c.openRootUpdates = open }
+}
+
+func (r *RootUpdateInputs) routes(ctx context.Context, rows []registry.Route) ([]registry.Route, error) {
+ if r.Resolve == nil {
+ return nil, os.ErrPermission
+ }
+ r.selected = map[string]RootUpdateInput{}
+ out := make([]registry.Route, 0, len(rows))
+ for _, hint := range rows {
+ in, err := r.Resolve(ctx, hint.Host)
+ if err != nil {
+ return nil, err
+ }
+ if in.Route.Host != hint.Host || in.Failed == nil || in.Save == nil {
+ return nil, os.ErrPermission
+ }
+ r.selected[hint.Host] = in
+ out = append(out, in.Route)
+ }
+ return out, nil
+}
+
+func (r *RootUpdateInputs) target(ctx context.Context, rt registry.Route, ptr *ChannelPointer, bake *FirstSeen, now time.Time, cfg passConfig, holds map[string]time.Duration, ignore bool) (string, TargetDecision, bool) {
+ in, err := r.Resolve(ctx, rt.Host)
+ if err != nil {
+ return "", TargetDecision{}, true
+ }
+ selected, ok := r.selected[rt.Host]
+ if !ok || in.Route != selected.Route {
+ return "", TargetDecision{}, true
+ }
+ u, err := ParseUpdateSettingsLenient(in.Route.UpdateSettings)
+ if err != nil {
+ return "", TargetDecision{}, true
+ }
+ target := TargetInput{Route: in.Route, Pointer: ptr, Settings: u, Build: in.Build, Consumed: in.Consumed, Installed: in.Installed, Failed: in.Failed}
+ if ptr != nil {
+ target.HeadHeld = Hold(bake, rt.Account, rt.App, rt.Channel, ptr.Version, holds, ignore || ptr.FastTrack, now)
+ target.HeadTag = cfg.tags[rt.Account+"/"+rt.App][ptr.Version]
+ }
+ dec := Target(target)
+ if err := in.Save(NextConsumed(target, dec)); err != nil {
+ return "", dec, true
+ }
+ return dec.Version, dec, dec.Version == ""
+}
+
+func CombinePassOptions(options ...PassOption) PassOption {
+ return func(c *passConfig) {
+ for _, option := range options {
+ option(c)
+ }
+ }
+}
diff --git a/internal/rollout/failures.go b/internal/rollout/failures.go
index c3933f8b1..04b50f5d7 100644
--- a/internal/rollout/failures.go
+++ b/internal/rollout/failures.go
@@ -376,9 +376,10 @@ func genKey(acct, app string) string { return acct + "/" + app }
// fails). Restoring or cloning a data dir must give the copy a new
// identity: drop the file's "book" key, and the open makes one (rule 4).
type FailureBook struct {
- path string
- mu sync.Mutex
- recs []FailureRecord
+ write func([]byte) error
+ path string
+ mu sync.Mutex
+ recs []FailureRecord
// held is the hold-ran markers by host (HoldRan), saved with the records.
held map[string]HoldRan
// intents are the executions in flight by host (Intent), saved with the
@@ -736,13 +737,17 @@ func (b *FailureBook) saveLocked() error {
b.dirty = true
return ErrSeqExhausted
}
- if b.path == "" {
+ if b.path == "" && b.write == nil {
return nil
}
raw, err := json.MarshalIndent(failureFile{Schema: failureSchema, Records: b.recs, HoldRan: b.held, Seq: b.seq, Intents: b.intents,
Book: b.idLocked(), Gens: b.gens, Durable: true}, "", " ")
if err == nil {
- err = release.WriteFileAtomic(b.path, raw, 0o644)
+ if b.write != nil {
+ err = b.write(raw)
+ } else {
+ err = release.WriteFileAtomic(b.path, raw, 0o644)
+ }
}
b.dirty = err != nil
return err
diff --git a/internal/rollout/rootfailures.go b/internal/rollout/rootfailures.go
new file mode 100644
index 000000000..72ab8c9bb
--- /dev/null
+++ b/internal/rollout/rootfailures.go
@@ -0,0 +1,156 @@
+package rollout
+
+import (
+ "crypto/ed25519"
+ "crypto/sha256"
+ "encoding/hex"
+ "encoding/json"
+ "errors"
+ "os"
+ "time"
+
+ "github.com/carlosframework/platform/internal/release"
+ "github.com/carlosframework/platform/internal/rootstate"
+)
+
+const RootFailuresDir = "/var/lib/carlos-release/private/swap-failures"
+const rootFailuresName = "book.json"
+
+type rootFailureRecord struct {
+ Schema int `json:"schema"`
+ Migration string `json:"migration"`
+ Book failureFile `json:"book"`
+ Seen map[string]bool `json:"seen"`
+}
+
+type RootFailures struct {
+ *FailureBook
+ seen map[string]bool
+}
+
+func rootFailureWriter(s rootstate.Store, migration string, seen map[string]bool) func([]byte) error {
+ return func(raw []byte) error {
+ var f failureFile
+ if json.Unmarshal(raw, &f) != nil {
+ return os.ErrPermission
+ }
+ body, err := json.Marshal(rootFailureRecord{1, migration, f, seen})
+ if err != nil {
+ return err
+ }
+ if len(body) > rootstate.MaxRecord {
+ return os.ErrPermission
+ }
+ return s.Write(rootFailuresName, body)
+ }
+}
+
+func OpenRootFailures(s rootstate.Store, migration string) (*RootFailures, error) {
+ if s == nil || migration == "" {
+ return nil, os.ErrPermission
+ }
+ raw, err := s.Read(rootFailuresName)
+ if err != nil {
+ return nil, err
+ }
+ var r rootFailureRecord
+ if len(raw) > rootstate.MaxRecord || json.Unmarshal(raw, &r) != nil || r.Schema != 1 || r.Migration != migration || r.Book.Schema != failureSchema || !r.Book.Durable || r.Book.Book == "" {
+ return nil, os.ErrPermission
+ }
+ f := r.Book
+ if r.Seen == nil {
+ r.Seen = map[string]bool{}
+ }
+ b := &FailureBook{write: rootFailureWriter(s, migration, r.Seen), recs: f.Records, held: f.HoldRan, intents: f.Intents, gens: f.Gens, id: f.Book, seq: f.highestSaved()}
+ b.epochOlderLocked()
+ b.reconcileLocked()
+ // Re-persist even an unchanged visible record before granting anything.
+ // The prior writer may have died after rename and before directory fsync.
+ if err := b.Flush(); err != nil {
+ return nil, err
+ }
+ return &RootFailures{b, r.Seen}, nil
+}
+
+func InitializeRootFailures(s rootstate.Store, migration string, legacy []byte) (*RootFailures, error) {
+ if b, err := OpenRootFailures(s, migration); err == nil {
+ return b, nil
+ } else if !errors.Is(err, os.ErrNotExist) {
+ return nil, err
+ }
+ if migration == "" || len(legacy) > rootstate.MaxRecord {
+ return nil, os.ErrPermission
+ }
+ id, err := newBookID()
+ if err != nil {
+ return nil, err
+ }
+ seen := map[string]bool{}
+ b := &FailureBook{write: rootFailureWriter(s, migration, seen), id: id}
+ root := &RootFailures{b, seen}
+ if err := root.ImportLegacy(legacy); err != nil {
+ return nil, err
+ }
+ if err := b.Flush(); err != nil {
+ return nil, err
+ }
+ return root, nil
+}
+
+func (b *RootFailures) ImportLegacy(raw []byte) error {
+ if len(raw) > rootstate.MaxRecord {
+ return os.ErrPermission
+ }
+ var f failureFile
+ if len(raw) == 0 || json.Unmarshal(raw, &f) != nil || (f.Schema != 1 && f.Schema != 2 && f.Schema != failureSchema) {
+ return b.Flush()
+ }
+ b.mu.Lock()
+ defer b.mu.Unlock()
+ add := func(value any, effect func()) {
+ data, _ := json.Marshal(value)
+ sum := sha256.Sum256(data)
+ key := hex.EncodeToString(sum[:])
+ if !b.seen[key] {
+ b.seen[key] = true
+ effect()
+ }
+ }
+ for _, r := range f.Records {
+ if !release.ValidAccount(r.Account) || !release.ValidApp(r.App) || !release.ValidVersion(r.Build) {
+ continue
+ }
+ r.Retried = nil
+ r.Epochs = nil
+ r.Seq = 0
+ add(r, func() { b.recordLocked(r) })
+ }
+ for host, h := range f.HoldRan {
+ add(struct {
+ Host string
+ Mark HoldRan
+ }{host, h}, func() { b.markLocked(host, h) })
+ }
+ for host, i := range f.Intents {
+ add(struct {
+ Host string
+ Intent Intent
+ }{host, i}, func() {
+ r := FailureRecord{Account: i.Account, App: i.App, Build: i.Build, Host: host, At: i.Start, Mode: i.Mode}
+ if i.Mode == "hold" {
+ r.HeldDown = []string{host}
+ }
+ b.recordLocked(r)
+ })
+ }
+ return b.saveLocked()
+}
+
+func (b *RootFailures) VerifiedRetry(pub ed25519.PublicKey, wire, acct, app, host string, now time.Time) error {
+ g, err := release.VerifyHostRetry(pub, wire, acct, app, host, now)
+ if err != nil {
+ return err
+ }
+ _, _, _, err = b.RetryHostAt(acct, app, g.Build, host, g.Book, g.Epoch)
+ return err
+}
diff --git a/internal/rootstate/persistent.go b/internal/rootstate/persistent.go
new file mode 100644
index 000000000..372d4bf1c
--- /dev/null
+++ b/internal/rootstate/persistent.go
@@ -0,0 +1,18 @@
+package rootstate
+
+type PersistentIdentity struct {
+ Boot, Filesystem, Handle, Mount string
+ Device, Inode uint64
+ MountID uint64
+ UID, GID, Type, Mode uint32
+}
+
+func (p PersistentIdentity) Same(q PersistentIdentity) bool {
+ if p.Boot == "" || q.Boot == "" || p.Filesystem == "" || p.Handle == "" || p.Mount == "" {
+ return false
+ }
+ if p.Filesystem != q.Filesystem || p.Handle != q.Handle || p.Mount != q.Mount || p.Inode != q.Inode || p.UID != q.UID || p.GID != q.GID || p.Type != q.Type || p.Mode != q.Mode {
+ return false
+ }
+ return p.Boot != q.Boot || (p.Device == q.Device && p.MountID == q.MountID)
+}
diff --git a/internal/rootstate/persistent_linux.go b/internal/rootstate/persistent_linux.go
new file mode 100644
index 000000000..023c89f6d
--- /dev/null
+++ b/internal/rootstate/persistent_linux.go
@@ -0,0 +1,66 @@
+package rootstate
+
+import (
+ "encoding/hex"
+ "fmt"
+ "os"
+ "strconv"
+ "strings"
+
+ "golang.org/x/sys/unix"
+)
+
+// Persistent captures filesystem/handle evidence from an already checked open
+// descriptor. The caller owns ancestry and write exclusion, as for Identity.
+func Persistent(f *os.File) (PersistentIdentity, error) {
+ var out PersistentIdentity
+ var st unix.Stat_t
+ if err := unix.Fstat(int(f.Fd()), &st); err != nil {
+ return out, err
+ }
+ var fs unix.Statfs_t
+ if err := unix.Fstatfs(int(f.Fd()), &fs); err != nil {
+ return out, err
+ }
+ handle, mount, err := unix.NameToHandleAt(int(f.Fd()), "", unix.AT_EMPTY_PATH)
+ if err != nil {
+ return out, err
+ }
+ boot, err := os.ReadFile("/proc/sys/kernel/random/boot_id")
+ if err != nil {
+ return out, err
+ }
+ raw, err := os.ReadFile("/proc/self/mountinfo")
+ if err != nil {
+ return out, err
+ }
+ mountID := strconv.Itoa(mount)
+ for _, line := range strings.Split(string(raw), "\n") {
+ fields := strings.Fields(line)
+ if len(fields) < 10 || fields[0] != mountID {
+ continue
+ }
+ separator := -1
+ for i := 6; i < len(fields); i++ {
+ if fields[i] == "-" {
+ separator = i
+ break
+ }
+ }
+ if separator < 6 || len(fields) != separator+4 {
+ return out, os.ErrPermission
+ }
+ // Stable attachment topology rejects a substituted bind, even on the same
+ // filesystem. Device and kernel mount numbers have no cross-boot authority.
+ out.Mount = fields[3] + "\x00" + fields[4] + "\x00" + fields[separator+1]
+ }
+ out.Boot = strings.TrimSpace(string(boot))
+ out.Filesystem = fmt.Sprintf("%x:%x", fs.Fsid.Val[0], fs.Fsid.Val[1])
+ out.Handle = fmt.Sprintf("%d:%s", handle.Type(), hex.EncodeToString(handle.Bytes()))
+ out.Device, out.Inode, out.MountID = uint64(st.Dev), st.Ino, uint64(mount)
+ out.UID, out.GID, out.Type, out.Mode = st.Uid, st.Gid, st.Mode&unix.S_IFMT, st.Mode&07777
+ if out.Boot == "" || out.Mount == "" || len(handle.Bytes()) == 0 {
+ return PersistentIdentity{}, os.ErrPermission
+ }
+ return out, nil
+}
diff --git a/internal/rootstate/persistent_other.go b/internal/rootstate/persistent_other.go
new file mode 100644
index 000000000..cdd510bc1
--- /dev/null
+++ b/internal/rootstate/persistent_other.go
@@ -0,0 +1,7 @@
+//go:build !linux
+
+package rootstate
+
+import "os"
+
+func Persistent(*os.File) (PersistentIdentity, error) { return PersistentIdentity{}, os.ErrPermission }
diff --git a/internal/rootstate/persistent_test.go b/internal/rootstate/persistent_test.go
new file mode 100644
index 000000000..947a3d3cd
--- /dev/null
+++ b/internal/rootstate/persistent_test.go
@@ -0,0 +1,48 @@
+package rootstate
+
+import "testing"
+
+func TestPlan14PersistentIdentityBootLocalNumbers(t *testing.T) {
+ p := PersistentIdentity{Boot: "boot-one", Filesystem: "fs", Handle: "handle", Mount: "/ / ext4", Device: 1, Inode: 2, MountID: 3, UID: 4, GID: 5, Type: 0100000}
+ if !p.Same(p) {
+ t.Fatal("same identity refused")
+ }
+ next := p
+ next.Boot = "boot-two"
+ next.Device = 7
+ next.MountID = 8
+ if !p.Same(next) {
+ t.Fatal("cross-boot device numbers used as identity")
+ }
+ next.Boot = p.Boot
+ if p.Same(next) {
+ t.Fatal("same-boot replacement accepted")
+ }
+ for _, field := range []string{"filesystem", "handle", "mount", "inode", "uid", "gid", "type", "mode", "absent"} {
+ next = p
+ next.Boot = "boot-two"
+ switch field {
+ case "filesystem":
+ next.Filesystem = "other"
+ case "handle":
+ next.Handle = "other"
+ case "mount":
+ next.Mount = "other"
+ case "inode":
+ next.Inode++
+ case "uid":
+ next.UID++
+ case "gid":
+ next.GID++
+ case "type":
+ next.Type++
+ case "mode":
+ next.Mode++
+ case "absent":
+ next.Boot = ""
+ }
+ if p.Same(next) {
+ t.Fatal("substitution accepted", field)
+ }
+ }
+}