ADR-0115: Review each authoring and contribution effect independently¶
Status: Implementation; maintainer and release acceptance remain pending
Date: 2026-10-30
Related: ADR-0111, ADR-0114, #829, #830.
Context and decision¶
Pure scaffold and local diff builders do not provide observed test evidence or authority to activate or publish code. Complete these workflows through bounded single-effect services behind the existing pending-action review surface, not another model runtime. Reuse the checked owned Node runner for reviewed fixture execution and existing configured drop-in, agent-permission and repository paths. Do not install packages, change core code, widen allowlists or alter trust policy.
Each operation is bound to the exact artifact/diff, agent, canonical workspace, destination and observed baseline. Source, configuration, worktree or permission changes invalidate affected review. Only an unlocked local user approval applies an operation; agent tools can request, inspect or cancel, never approve it. Staging, tests, installation, configuration, enablement and actual capability verification are distinct effects. Contribution tests, commit, push and draft PR likewise have distinct approvals. Tests/imports/hooks are full-trust execution, not sandboxed. Missing support or credentials is an explicit blocker.
Executable grants and operation/session state remain bounded and ephemeral. The existing pending-action table stores identifiers, not runnable snapshots; authoring results use the existing encrypted-envelope mechanism. Startup fails abandoned authoring approvals, including unknown outcomes for accepted writes. Cancellation never rolls back effects. Keep actual host ownership until settlement and drain it before closing persistence; do not retry an uncertain remote write based on a cancelled HTTP request or an inferred result.
Retained source amendment to existing staging ownership¶
Reuse skill-runs/run-* and skill-run-owners, rather than introducing another
directory layout. Extend the existing version-1 ownership record's state enum
with retained. A separately approved inert authoring stage explicitly retains
its source. Automatic abandoned-run cleanup must report and preserve retained
source even after its original process died. This state grants no execution,
installation or publication authority. Existing prepared/launched/verified
runner cleanup is unchanged. Older versions that cannot parse retained fail
closed and retain the directory.
Removal of an installed tool does not delete user-owned staged source. A separately approved discard can delete only the captured staging directory with its unchanged identity, never an arbitrary user path. After restart the operator can inspect retained source and request a new session/review; no consent is recovered from its ownership record.
Contribution testing uses a user-owned Git topic worktree under the selected
repository's already ignored node_modules/.cache/jarela-contributions, not a
new app-state directory. This is a reviewed repository artifact, not durable
executable consent. Operation grants remain ephemeral; ambiguous worktrees are
retained for explicit inspection rather than removed or replayed automatically.
Inert repository discovery disables executable Git helpers. Approved mutations,
hooks, transports and credential helpers use the existing native process owner.
Push is atomic create-only with an empty expected-value lease, so a remote topic
created during review is never overwritten.
Validation and release boundary¶
Require actual synthetic-service/loader tests, installation denial, stale review, failed tests and updates, disable/removal/restoration, repository isolation, privacy blockers, hook/test failure, missing credentials, cancellation and single-use approval tests. Execute deterministic successes repeatedly. Verify local API guards, exact review UI, restart invalidation and owned process cleanup. Live remote publication requires a separately authorized test repository. Second-author walkthrough, maintainer ownership and release sign-off remain human acceptance gates; neither a version number nor green tests substitutes.