Skip to content

Integration batch: duplicates 5-8, root runtime owner, interrupted rollback, installer file identity - #2709

Merged
trissim merged 29 commits into
mainfrom
integration/all-5
Oct 23, 2026
Merged

trissim merged 29 commits into
mainfrom
integration/all-5

Conversation

@trissim

@trissim trissim commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

One batch: #2705 (Duplicates groups 5-8), #2702 (one recorded runtime owner per root), #2699 (resume interrupted rollback), #2691 (declared file owners identify installer rewrites).

Conflicts resolved once: backup.py keeps #2699 registry-last restore ordering over #2691 typed selected_files(); upgrade.py takes both import sets; carry_finished_turns.py keeps main no-early-registry-decode with #2691 Path type.

Install 12 refusal fixed here: ClaimFields.convert(RegistryDocument) crashed in FieldCodec.contains_records because the ReportedTurnState family root inherited SingleValueEncoding.wire_structure, which needs one dataclass field. JsonShapeFamily now derives wire_structure from _json_owners, the same map schema() reads. Verified: RetiredClaimFields.convert on the live registry.json (read-only) succeeds; ReportedTurnState decodes str and null.

Left out: #2683 (its title says five import cycles first; conflicts in store_order.py), #2603 (against the direction), #2527/#2556/#2469 (943-1325 commits stale; #2702 ports #2527).

🤖 Generated with Claude Code

trissim and others added 29 commits October 23, 2026 04:52
Ported from #2527 onto current main. RootRuntime records the runtime prefix
that owns a root; Comms refuses a foreign runtime unless the maintenance hold
targets it. MaintenanceTarget is a declared family on the hold (no target, or
TargetRuntime); a phase that ends maintenance drops the target, and every
rewrite of a hold goes through MaintenanceState.advanced. retarget takes only
the registry lock, like begin and clear. RuntimeProcesses reports old-runtime
applications without signalling them.

The installer wiring follows on this branch after the batch carrying #2698
lands, because it rewrites the same upgrade.py sites.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Stack.publish(root) publishes the root's owner, on success and on restore.
A live install adopts the root for the installed runtime before it stops
owners; once they stop, the hold targets the staged runtime and its holder
is re-entered with the new nonce before the first staged CLI call. The
rehearsal holds its copy for the staged stack the same way. InstalledUpgrade
reports the RuntimeProcesses still on an outgoing runtime after the bridges
resume; RuntimeProcesses owns its lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…to integration/all-5

# Conflicts:
#	src/agent_comms/installer/backup.py
#	src/agent_comms/installer/upgrade.py
#	tools/cutover/carry_finished_turns.py
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 23, 2026 09:09
@trissim
trissim merged commit 5e21d82 into main Oct 23, 2026
2 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

@github-actions

Copy link
Copy Markdown

debt-src at 450af9e, every finding:

grew FamilyFlattened:src/agent_comms/installer/upgrade.py +2
grew LintFindings:src/agent_comms/field_codec.py +2
grew LintFindings:src/agent_comms/installer/backup.py +2
grew LintFindings:src/agent_comms/installer/upgrade.py +1
grew TypeErrors:src/agent_comms/maintenance_barrier.py +6
grew TypeErrors:src/agent_comms/turn_context.py +4

@github-actions

Copy link
Copy Markdown

debt-tools at 450af9e, every finding:

grew LintFindings:tools/cutover/carry_bus_history.py +1

trissim pushed a commit that referenced this pull request Oct 23, 2026
…wners

- RetiredCommanderFile is retained bus state its carry consumes: a DurableFile,
  so every declared root file is durable or runtime again (a012a03, #2743).
- The ratchet guard composes owners through Black, so the formatting measure
  counts nothing and each comparison measures only the classes; 97256db
  flipped the expectation to status 0 while the fixture stayed unformatted.
- bus_files keys are DeclaredFile since #2709: assert the declared owner.
- Routes are written owner-only by their owner; the backup reads the saved
  route through read_active_route since #2731.
- The bus-history round trip runs every step the chain orders before the
  goal-request carry, under the maintenance hold, instead of a hand-picked
  subset that #2701's claim-field carry fell between.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
trissim pushed a commit that referenced this pull request Oct 23, 2026
#2713 (c3bd967) made SessionBridge.pause return one ResumableBridge; the
tests still unpacked a tuple. Since #2709 (4cad001) a root belongs to one
runtime: session_bridge now publishes its bus to the runtime serving the
bridge, and the swap test hands it to the new runtime at publication, as the
installer does. SourcePrograms reports its runtime. RootFile.__init_subclass__
annotates its keyword arguments.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants