Repository navigation
Conversation
…ime-recovery # Conflicts: # src/agent_comms/installer/upgrade.py
This was referenced Oct 23, 2026
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
P404: install reporting lifetime and runtime-safe outcomes
Draft at
c6cd8d4f92bb10a7015ffdf8e49359f537627b5e, pushed and freshly remote-verified. Its hosted candidate passed all six executed rehearsal/publication/native tests. Not merged or installed; the separate watch-discovery gap below remains open.Implementation and ownership
InstallReport.running()spans target-tree cleanup and posts one starting message and one terminal result. Missing completion becomes a failure. The original exception and cause propagate;Repo.module_file()maps actual checkout/wheel frames to source locations.RootWriterowns schema permission independently of the terminal outcome. The outgoingStacksupplies the starting writer.CarriedPass.writer()is the sole installerCarriedWriterconstructor; carried completion failures retain that proof.CreatingInstallshares creation while fresh and retiring siblings keep their different initial permissions.UpgradeRefused(InstallFailure, CoordinationError)supplies its own failure lines. DeletedRefusedInstall, its forwarding method and the refusal-specific handler.CrashedInstallderives type/message from its original exception.FailedInstallis not another refusal adapter: it combines the failure with the observed live result, so failed exits retain bridge lines.InstallOutcomeowns progress.ObservedInstallshares the live observation between unfinished and failed states; finished state derives it from the completedUpgrade. There is no secondInstallReport.liveor bridge tuple.LiveRun.bridgesandbridge_lines()are declared once on their parent.Install.install()resumes already-paused bridges in its resource lifetime even if a later pause/live operation fails.BridgeResumemembers own their report lines: resumed, owner exited, replaced identity, or unobserved with its actual diagnostic and re-arm instruction.ProcessIdentityretains PID and start time. Deleted tuple sentinel/string outcomes, accumulator, callback failure andrequire_resumedpaths.BoundListener.of(site)observes real accepting sockets and retains the site. Direct construction is closed; only that factory produces the witness. The connector passes it immediately toSystemdUserService.ready, without sleeps or retries.AbsolutePathTextowns path normalization for install arguments, repository decoding and install scratch ingress. The OS-created scratch string and target-child payload use that codec, not another builder-sideresolve(). RemovedRepoChoice.resolved, caller resolution/replacement and import-timeHOME. Staged builds derive home from the captured outgoingStack.SessionBridgeand owns its binding, state path, process and log. Consumers no longer reconstruct state paths or unpack positional records. Short aliases are now confined to bridge socket lifetimes; CLI rehearsal storage keeps its physical trusted home. No private-registry or native qualification guard was weakened.Pattern closure: IMPL-4/IMPL-9 move outcome decisions into nominal variants; IMPL-12 shares creation and live-result rendering on their parents. The existing
MroDispatchgainedclass_handlers_for, which owns class-factory lookup for all three FieldCodec consumers. A new bridge outcome or reportable refusal extends its declaration, not a consumer roster.Source evidence and deletion
Against fetched
origin/mainat46391711d: 20 files, +1121/-362; production 12 files, +578/-187; tests 8 files, +543/-175. These are measurements, not a budget gate.The ordered whole-source check reproduces 10 at
a520d0d9d, 9 at the actual fresh based55533885, and 0 now. Main had already deletedresources.callback(paused.resume)before this branch started; that deletion is not credited to this PR.Existing refactor-audit
Package.loadsupplied the original-class/declaration/write/decision/import/caller census: before atf0d2d91d7, 443 production and 475 test modules, no parse omissions. After-census atc6cd8d4f9again parsed 443 production and 475 test modules with zero omissions; overlays also used published source. These are syntactic evidence, not global semantic proof. NRA native family projection could not import because this permitted worker interpreter lackstree_sitter; no packages were installed to work around that. Dynamic bindings and external dependency projection remain unproved. No executable proof script was added to the repository.Checks and actual execution
c6cd8d4f9: hosted run 39706061830, job 119586259416 executed 6 tests, all passed in 274.05s. Both CLI rehearsal variants now passed, all three real-publication variants passed, and the saved-owner DM/reply/native-input proof passed with one input proof, 2.050s startup and zero tree hashes. Native children were retired. This is the hosted synthetic mergeb9aea276413a, not a machine installation. All five substantive hosted checks passed. The greenreview-verdictjob contained only setup/cleanup, with no head-review step executed; it is not review acceptance. Full logs are retained asp404-c6-hosted.logandp404-c6-review-push.logunder the owned scratch directory.f5ba9f269: 83 passed, 3 skipped, 2 deselected in 84.21s across touched install announcements/paths, FieldCodec, bound-listener, real session bridge and bridge-owner tests. Five-file targeted mypy and touched Ruff checks passed. The skips are the built-runtime publication cases, not successes.f5ba9f269, run 39704219516, job 119580321168: 4 passed, 2 failed in 241.17s. All threetest_live_upgrade_family_after_real_publicationvariants actually passed: finished, RuntimeError and KeyboardInterrupt. They performed real build/carry/publication, retained data, selected the new runtime, resumed the same copied bridge process, asserted exactly two lifecycle posts and exactly one bridge line, and checked original exception identity and source file:line. The fourth pass was the actual saved-owner DM/reply/native-input proof, startup 1.680s with zero tree-hash calls and retired children.Private registry guard has an untrusted directory ancestor: my module fixture had applied the bridge socket alias to all HOME storage. This head limits that alias to the bridge fixture. The precedingf74d44526candidate also passed all three publication variants, but its two CLI rehearsals failed earlier at native-package alias-versus-canonicalrelative_to; scratch ingress was subsequently corrected through the existing codec.Family entrypoints:
test_install_failure_family_through_upgrade,test_root_writer_family_through_upgrade,test_live_result_family_survives_codec_and_retained_history,test_live_upgrade_family_after_real_publication,test_copied_sessions_share_a_short_home_without_rebinding, andtest_readiness_requires_the_started_sites_listening_socket.Still open
Serve.runningscans only~/.local/state/agent-comms/*-bridge-*, whereasclaude.maindefaults to~/.local/state/claude-comms-inboxand accepts arbitrary--state. The retained watch claim promises state-path independence but its record only has bus/root/argv.unit-heartbeatretains this P404 finding; extending the shared WatchRecord/CLI ownership is outside the functions released in the order. A scope request timed out and is unconfirmed. Do not call this broad discovery complete or add a second argv parser/glob authority. Acceptance is one captured outcome for each default/custom-state live watch.DatabaseError database disk image is malformed. That evidence was read, but this worker issued no database command. No further Core writes, live install or repair will be attempted against that store. No Core delivery claim was made.Assumed: [] No skipped, unexecuted, older-head or private-hosted result is counted as current machine acceptance.