126 โ€” Integrate analysis publications by default

Type: reference/types/adr.md ยท Status: accepted

Status: accepted Date: 2026-11-09 Amends: ADR 106 and ADR 125: new high-level invocations include integration authority. Acceptance, advisory audit independence and separately authorized cleanup remain unchanged.

Context

The operator wants an analysis request to deliver accepted results into main, not leave a second routine integration decision for each publication. Publication and delivery can nevertheless fail independently. A dirty origin, competing publication or interrupted Git command must not turn an accepted analysis into a reason to repeat expensive workers or overwrite another result.

Several analyses can finish together. A worktree-local publication lock does not serialize their changes to a shared origin. Reentry also needs evidence that distinguishes this operation's branch or merge from an unrelated branch with the same name.

Decision

New analyse and batch invocations authorize guarded integration as their final phase. After analysis children drain, the controller integrates complete publications serially through their prepared commands and environments. Low-level prepare and run remain the publication-only route. Existing controllers retain their recorded policy and pinned code; a new outer command does not grant old runs automatic commit authority. New controllers refuse a method without the required integration protocol before allocating work.

Record publication and integration independently. Integration refusal preserves the accepted bytes, receipt, audit evidence and worktree. It does not withdraw acceptance, run another analyst, copy outputs into main, choose a conflict side or authorize cleanup. A local blocked or out-of-scope result has no publication to integrate.

The integration command retains clean-origin, main, method ancestry, publication binding and affected-path guards. Exact-byte checks extend through Git staging and transfer. All cooperating integrations into one Git repository share a lock covering inspection and mutation. Durable intent and result records bind the effect to its run, method, publication and origin. Resume recognizes proven committed or merged effects without duplicating them; ambiguous partial effects require operator repair. Non-cooperating Git writers must still be excluded.

A published but unintegrated result is unfinished delivery and returns nonzero. Advisory audit findings are not an integration veto; unsettled process ownership remains a reason to stop new effects. Explicit initiating-agent attribution may supply a model trailer. A tool-only call does not infer it from the analyst's profile.

Considered alternatives

Keep a separate routine authorization. Rejected for new high-level calls: the operator explicitly wants delivery into main to finish the request. Separate authority remains appropriate for old publications and cleanup.

Append an unrecorded merge command. Rejected: interruption after a commit or merge would leave replay unable to distinguish completion from a pending effect. A deterministic branch name alone does not prove ownership.

Integrate concurrently as workers finish. Unneeded. Serial finalization after the analysis pool drains avoids mixing this controller's preparation and origin changes. A repository-wide lock is still needed for other controllers and manual integrations.

Repair conflicts or dirty state automatically. Rejected: stashing, resetting, rebasing or choosing a side would exceed the accepted publication transfer and could conceal competing work. Preserve evidence instead.

Consequences

The high-level CLI and durable controller enforce the default and report publication separately from integration. Prepared integration commands enforce Git ownership, byte and recovery guards. The canonical analysis skill, publication instruction and command reference teach invoking agents and operators the same authority boundary. Worker packets and accepted member contracts do not change.

Analyses can now finish routine delivery unattended when origin state permits it. Origin dirt or competing publications can still require operator action; that action does not require repeating analysis. Cross-system comparisons and landscape synthesis still need their own commission after integration.

Limits: local deterministic tests establish lifecycle and Git behavior, not analytical quality or provider performance. POSIX local-filesystem locks do not establish safety against arbitrary Git writers or network-filesystem locking. The change does not rewrite existing method checkouts or receipts, and a clean merge does not certify validity under newer analysis contracts.