Skip to content

feat: terminal outcome integrity - #38

Merged
marcioaltoe merged 17 commits into
mainfrom
ma/terminal-outcome-integrity
Jul 27, 2026
Merged

feat: terminal outcome integrity#38
marcioaltoe merged 17 commits into
mainfrom
ma/terminal-outcome-integrity

Conversation

@marcioaltoe

@marcioaltoe marcioaltoe commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Implements spec 0037-terminal-outcome-integrity (archived in this branch after a passing QA gate) plus post-review hardening.

What changed

  • Compare-and-set Run completion — ordinary completion moves only a non-terminal Run to a terminal outcome; identical replay is idempotent; a competing outcome returns a typed conflict without touching the stored Run, its lock, or its journal. The sole terminal-to-terminal transition is the evidence-backed IntegrationPending → Clean reconciliation (ADR-0052).
  • Force Stop proves owner exit — sessions are cancelled first, then the recorded owner process is terminated and its exit proven before Stopped is reported and the Active Run lock released; unprovable exit fails closed and keeps the Run Active.
  • Owner identity proof (review follow-up) — Runs record an opaque owner start-time identity token beside the PID (schema v10); Force Stop refuses to signal a recycled PID whose live identity mismatches the recorded token. Legacy token-less rows keep prior behavior per ADR-0044's precedent.
  • Stop-aware Review Source waits — status, retry, quiet-period, and merge-readiness waits observe a Stop Request at every poll boundary; a stopping watch Run performs no later fetch, check, commit, push, or Review Source mutation.
  • Registered-session-only cleanup — Agent Session cleanup targets only scopes whose latest lifecycle is active; absent registered sessions close idempotently; primary failures print before secondary cleanup warnings (now typed instead of substring-classified).
  • Winner-only publication — exactly one terminal outcome event and notification per Run; losers observe the stored outcome and exit without publishing.
  • Settle preserves history — the Settle Command no longer rewrites a recovered Run's terminal outcome; recovery is expressed through its report and commits.
  • Docs/skill alignment — operator guidance, the roundfix Skill pair (with maintainer-authorized digest-pin fallout), Stop exit codes, and archived-spec link traceability.

Verification

  • Full gate green: make verify — 2,484 Go tests across 23 packages, skill contract checks, build.
  • Race detector clean on the touched cli/store packages; Windows compile-only builds verified.
  • QA gate executed the full 72-row matrix on the spec build: verdict pass (docs/specs/_archived/0037-terminal-outcome-integrity/qa/qa-report-2026-07-27.md); the earlier fail report is preserved in history.
  • Two-axis post-implementation review ran; all findings fixed or dispositioned in a66e7a5/a4365f6.

https://claude.ai/code/session_01KwYiSLnmzdHmrmV4XWmQge

Summary by CodeRabbit

  • New Features

    • Added reliable stop-request handling during monitoring, quiet periods, retry sleeps, and merge-readiness checks.
    • Enhanced stop --force to require a provable owner process exit before completion; safer behavior to avoid PID-reuse hazards.
  • Bug Fixes

    • Standardized terminal completion so outcomes and outcome notifications are published exactly once; repeated/conflicting terminal attempts are safely idempotent.
    • stop --force now reports cleanup issues with clearer secondary-cleanup diagnostics, and preserves Active runs/locks when verification fails.
    • Corrected settle behavior so “kept” unresolved runs remain Unresolved.

Roundfix-Spec: 0037-terminal-outcome-integrity
Roundfix-Task: task_01
Roundfix-Spec: 0037-terminal-outcome-integrity
Roundfix-Task: task_02
Roundfix-Spec: 0037-terminal-outcome-integrity
Roundfix-Task: task_03
Roundfix-Spec: 0037-terminal-outcome-integrity
Roundfix-Task: task_04
Roundfix-Spec: 0037-terminal-outcome-integrity
Roundfix-Task: task_05
Roundfix-Spec: 0037-terminal-outcome-integrity
Roundfix-Task: task_06
Roundfix-Spec: 0037-terminal-outcome-integrity
Roundfix-Task: task_07
Roundfix-Spec: 0037-terminal-outcome-integrity
The 2026-07-26 tooling authorization covered exactly the two roundfix
SKILL.md files. The authorized skill edit deterministically changes the
skill contentDigest, which five baseline/catalog identity artifacts pin,
and QA finding F-01 blocked the gate because those paths were outside the
recorded bounds. Record the maintainer's 2026-07-27 express authorization
of exactly those five derived paths in both active Spec artifacts and
align task_07's changed-path criterion.

Claude-Session: https://claude.ai/code/session_01KwYiSLnmzdHmrmV4XWmQge
Roundfix-Spec: 0037-terminal-outcome-integrity
Review follow-up for spec 0037: the reused-PID conservative refusal only
existed behind an injected controller error. Runs now record an opaque
owner start-time identity token (ps -o lstart=) beside owner_pid (schema
v10); Force Stop compares the live token before any signal and fails
closed through the existing owner-proof path on mismatch or unprovable
identity, while token-less legacy rows keep the prior behavior per
ADR-0044's degradation precedent. Orphan reclamation is unaffected: it
acts only on proven absence, which a recycled PID cannot fake.

Also replaces the substring-matched cleanup-warning classification with
typed warning kinds; every printed byte is unchanged.

Claude-Session: https://claude.ai/code/session_01KwYiSLnmzdHmrmV4XWmQge
Review follow-up for spec 0037: point the four Spec 0037 links in the
user guide, the Vortex finding, and the implementation-sequence inbox
note at the archived path; document the Stop Command's public exit
codes in the command reference; and flip archived task_07's last
acceptance checkbox, which its recorded gate evidence had already
satisfied.

Claude-Session: https://claude.ai/code/session_01KwYiSLnmzdHmrmV4XWmQge
@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (9)
  • docs/specs/_reviews/pr-38/round-001/issue_001.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-001/issue_002.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-001/issue_003.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-001/issue_004.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-001/issue_005.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-001/issue_006.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-002/issue_001.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-002/issue_002.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-002/round.md is excluded by none and included by none

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: a6e876b3-3d17-48b0-ade2-ff55df79b9c2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Walkthrough

The change adds owner-process identity persistence and verified termination, compare-and-set terminal completion, stop-aware watch polling, registered agent-session cleanup, centralized outcome notification, integration reconciliation updates, and expanded tests and operational documentation.

Changes

Run persistence and terminal transitions

Layer / File(s) Summary
Run persistence and terminal transitions
internal/store/store.go, internal/store/agent_selection.go, internal/store/*_test.go
Run ownership and terminal outcomes are persisted with schema version 10; terminal and reconciliation updates use guarded transitions, while active agent-selection scopes are returned in stable order and covered by tests.

Owner-process proof and session cleanup

Layer / File(s) Summary
Owner-process proof and session cleanup
internal/store/process*.go, internal/agent/sessions.go, internal/cli/cli.go
Force stop validates recorded process identity, waits for owner absence, and cleans only active registered agent sessions with idempotent missing-session handling.

Watch stop-request observation

Layer / File(s) Summary
Watch stop-request observation
internal/watch/*
Watch loops observe stop requests around Review Source checks, quiet periods, retries, and merge-readiness waits, mapping requested stops to stopped outcomes.

CLI force-stop orchestration

Layer / File(s) Summary
CLI force-stop orchestration
internal/cli/cli.go, internal/cli/implement.go, internal/cli/*_test.go
Force stop separates primary failures from cleanup warnings, proves owner exit before releasing locks, and publishes terminal outcomes and notifications only for winning transitions.

Integration settlement and supporting artifacts

Layer / File(s) Summary
Integration settlement and supporting artifacts
internal/cli/settle.go, internal/cli/settle_test.go, internal/baseline/**
Settlement preserves unresolved state for kept runs and baseline digest records are updated.

Operational contracts

Layer / File(s) Summary
Operational contracts
.agents/skills/roundfix/SKILL.md
Operational documentation specifies stop polling, owner-exit proof, lock retention, terminal idempotency, and detached notification behavior.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant StopCommand
  participant OwnerProcessControl
  participant AgentSessions
  participant RunStore
  StopCommand->>OwnerProcessControl: Prove and terminate recorded owner
  OwnerProcessControl-->>StopCommand: Confirm owner absence
  StopCommand->>AgentSessions: Cancel and close active registered sessions
  StopCommand->>RunStore: CompleteRun as Stopped
  RunStore-->>StopCommand: Return transitioned result
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 10.50% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the PR’s main theme: enforcing terminal outcome integrity through compare-and-set completion and conflict handling.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ma/terminal-outcome-integrity

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/cli/cli_test.go`:
- Around line 4036-4049: Guard the agentStarted channel close in the
fakeAgentRunner onRun callback with its own sync.Once, mirroring releaseOnce, so
repeated Agent executions under --round all do not panic. Keep the existing
release synchronization and callback behavior unchanged.

In `@internal/cli/cli.go`:
- Around line 633-655: Reorder the stop flow so active agent sessions are
cleaned up only after the recorded owner identity has been validated and
TerminateAndWait succeeds. In the surrounding force-stop logic, move
bestEffortForceStopAgentSessions after the activeOwnerPID check and
ownerProcesses.TerminateAndWait call, while preserving warnings and error
results for validation or termination failures.

In `@internal/cli/orphan_unix_test.go`:
- Around line 248-282: The startCLIForceStopOwnerProcess helper currently starts
cmd.Wait in a goroutine before reading the helper’s readiness line. Move waiter
creation until after scanner.Scan and the "ready" validation complete, while
preserving cleanup’s ability to wait for the process and report early helper
failures accurately.

In `@internal/store/process_unix.go`:
- Around line 38-51: Update processStartIdentity to make the ps output
deterministic by setting TZ=UTC and LC_ALL=C in the command environment before
execution, while preserving the existing verbatim identity comparison and error
handling.

In `@internal/store/process_windows.go`:
- Around line 18-28: Update processAbsent to verify the opened process’s
liveness after syscall.OpenProcess succeeds, using GetExitCodeProcess or
WaitForSingleObject; treat only STILL_ACTIVE as present and return absent for
terminated processes, while preserving existing error handling and closing the
handle.

In `@internal/store/store.go`:
- Around line 376-395: The terminal-state list is duplicated across
compare-and-set updates and IsTerminalState, allowing future additions to become
inconsistent. In internal/store/store.go lines 376-395, create shared
terminalStates-derived placeholders and arguments for the state NOT IN clause;
in lines 752-789, reuse that generated clause and arguments and update
IsTerminalState to range over terminalStates.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 521c3618-b9fa-4117-8759-aa2aa66d6b34

📥 Commits

Reviewing files that changed from the base of the PR and between 95a2c0d and a4365f6.

⛔ Files ignored due to path filters (29)
  • docs/_inbox/2026-07-24-spec-implementation-sequence.md is excluded by none and included by none
  • docs/findings/2026-07-16-vortex-pr87-detached-watch-notification.md is excluded by none and included by none
  • docs/specs/0037-terminal-outcome-integrity/task_01.md is excluded by none and included by none
  • docs/specs/0037-terminal-outcome-integrity/task_02.md is excluded by none and included by none
  • docs/specs/0037-terminal-outcome-integrity/task_03.md is excluded by none and included by none
  • docs/specs/0037-terminal-outcome-integrity/task_04.md is excluded by none and included by none
  • docs/specs/0037-terminal-outcome-integrity/task_05.md is excluded by none and included by none
  • docs/specs/0037-terminal-outcome-integrity/task_06.md is excluded by none and included by none
  • docs/specs/0037-terminal-outcome-integrity/task_07.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/_prd.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/_tasks.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/_techspec.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/qa/evidence/2026-07-27-terminal-outcome-integrity-rerun/constraint-audit.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/qa/evidence/2026-07-27-terminal-outcome-integrity-rerun/docs-and-scope.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/qa/evidence/2026-07-27-terminal-outcome-integrity-rerun/focused-regressions.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/qa/evidence/2026-07-27-terminal-outcome-integrity-rerun/live-cli-flows.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/qa/evidence/2026-07-27-terminal-outcome-integrity-rerun/static-gate.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/qa/qa-report-2026-07-27.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/task_01.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/task_02.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/task_03.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/task_04.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/task_05.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/task_06.md is excluded by none and included by none
  • docs/specs/_archived/0037-terminal-outcome-integrity/task_07.md is excluded by none and included by none
  • docs/user-guide/commands.md is excluded by none and included by none
  • docs/user-guide/usage.md is excluded by none and included by none
  • internal/baseline/testdata/catalog.digest is excluded by !**/*.digest and included by none
  • skills/roundfix/SKILL.md is excluded by !skills/** and included by none
📒 Files selected for processing (24)
  • .agents/skills/roundfix/SKILL.md
  • internal/agent/sessions.go
  • internal/baseline/assets/setups/typescript-bun.json
  • internal/baseline/testdata/catalog.normalized.json
  • internal/baseline/testdata/parity-corpus/v1/fixtures/asset-sync.json
  • internal/baseline/testdata/parity-corpus/v1/manifest.json
  • internal/cli/cli.go
  • internal/cli/cli_test.go
  • internal/cli/implement.go
  • internal/cli/orphan_unix_test.go
  • internal/cli/settle.go
  • internal/cli/settle_test.go
  • internal/store/agent_selection.go
  • internal/store/agent_selection_test.go
  • internal/store/journal_test.go
  • internal/store/process.go
  • internal/store/process_other.go
  • internal/store/process_unix.go
  • internal/store/process_unix_test.go
  • internal/store/process_windows.go
  • internal/store/store.go
  • internal/store/store_test.go
  • internal/watch/watch.go
  • internal/watch/watch_test.go
💤 Files with no reviewable changes (1)
  • internal/cli/settle.go

Comment thread internal/cli/cli_test.go
Comment thread internal/cli/cli.go Outdated
Comment thread internal/cli/orphan_unix_test.go
Comment thread internal/store/process_unix.go
Comment thread internal/store/process_windows.go
Comment thread internal/store/store.go Outdated
Dogfooding the v10 upgrade crashed watch preflight with a raw
'no such column: owner_identity': inspectBranchIntegrity scanned Active
Runs through the never-migrates OpenReader before any operational Open
had upgraded the live v9 database. The preflight now uses the migrating
Open when a Run Database exists while preserving the conservative
no-database branch, and OpenReader guards the schema version with a
typed SchemaVersionError naming the found and supported versions and
the operational-command remediation instead of leaking SQL errors from
runs list, attach, events, gc, and settle.

Claude-Session: https://claude.ai/code/session_01KwYiSLnmzdHmrmV4XWmQge
Round 1 on PR #38 raised six findings, all on this branch's own code:

- Force Stop cancelled Agent Sessions before the owner was proven, so a
  fail-closed proof left a still-owned Active Run with its sessions torn
  down. The ownership rule is now a shared proof that TerminateAndWait
  and a new read-only ProveOwner both use, and Force Stop proves the
  owner first, then cancels sessions, then terminates. This keeps the
  spec's documented order (sessions cancelled before termination) while
  closing the degraded-state gap.
- owner_identity is compared verbatim, so ps now runs under TZ=UTC and
  LC_ALL=C; a timezone or locale change no longer blocks a genuine owner.
- The Windows liveness probe treated any OpenProcess success as alive;
  it now reads GetExitCodeProcess and treats STILL_ACTIVE as the only
  live state.
- The terminal-state set was enumerated three times; both compare-and-set
  guards and IsTerminalState now share one slice.
- Two test helpers were hardened: a sync.Once guard on the agent-started
  channel, and reading the readiness line before waiting on the helper.

The Skill pair re-sync carries its derived digest pins through the
baseline setup asset, catalog identity, and parity corpus, under the
authorization recorded in the archived Spec's Tooling authority entries.

Claude-Session: https://claude.ai/code/session_01KwYiSLnmzdHmrmV4XWmQge

@coderabbitai coderabbitai Bot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
internal/store/process.go (1)

126-148: 🩺 Stability & Availability | 🔴 Critical | ⚡ Quick win

Re-prove owner identity before the force-kill escalation.

TerminateAndWait proves ownership once at entry, then waits up to gracePeriod for the graceful SIGTERM to take effect before escalating to SIGKILL (Line 143). If the owner exits during that wait and the OS recycles the PID for an unrelated process before waitForAbsence notices, the force-kill signal is sent to that unrelated process — precisely the PID-reuse hazard the owner-identity token was introduced to prevent. The proof is not re-checked anywhere between the graceful wait and the force kill.

🛠️ Proposed fix: re-prove ownership immediately before force-kill
 	case errors.Is(gracefulErr, errGracefulSignalUnsupported):
 	default:
 		return ownerProcessControlError(pid, "send graceful termination", gracefulErr)
 	}
 
+	// The owner may have exited and had its PID recycled during the grace
+	// wait; a stale proof must not license a kill of an unrelated process.
+	absent, err = controller.proveOwner(ctx, pid, recordedIdentity)
+	if err != nil {
+		return err
+	}
+	if absent {
+		return nil
+	}
 	if err := signalOwnerProcess(pid, true); err != nil {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/store/process.go` around lines 126 - 148, Update TerminateAndWait to
re-prove the owner identity immediately before signalOwnerProcess(pid, true),
reusing the existing ownership token/proof mechanism established at entry. Abort
or return the appropriate absence/error result when re-validation fails, and
only perform the force-kill after ownership is confirmed.
internal/cli/cli.go (1)

2607-2632: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Handle terminal-outcome conflicts in watch completion. runStore.CompleteRun(...) can return store.TerminalOutcomeConflictError when another terminal operation wins the race; treat that as the winning terminal state instead of printing a run failure and returning exitRunFailed.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/cli/cli.go` around lines 2607 - 2632, Update the run completion flow
around runStore.CompleteRun to detect store.TerminalOutcomeConflictError and
treat it as the winning terminal state: skip the failure UI, close/publish using
the already-established terminal outcome and run identity, and return the
corresponding successful/stopped result instead of exitRunFailed. Preserve the
existing error path for all other completion errors.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@internal/cli/cli.go`:
- Around line 2607-2632: Update the run completion flow around
runStore.CompleteRun to detect store.TerminalOutcomeConflictError and treat it
as the winning terminal state: skip the failure UI, close/publish using the
already-established terminal outcome and run identity, and return the
corresponding successful/stopped result instead of exitRunFailed. Preserve the
existing error path for all other completion errors.

In `@internal/store/process.go`:
- Around line 126-148: Update TerminateAndWait to re-prove the owner identity
immediately before signalOwnerProcess(pid, true), reusing the existing ownership
token/proof mechanism established at entry. Abort or return the appropriate
absence/error result when re-validation fails, and only perform the force-kill
after ownership is confirmed.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 2ec69301-b81a-483d-8856-7380fad3fbf0

📥 Commits

Reviewing files that changed from the base of the PR and between 9ed5762 and 233964d.

⛔ Files ignored due to path filters (9)
  • docs/specs/_reviews/pr-38/round-001/issue_001.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-001/issue_002.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-001/issue_003.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-001/issue_004.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-001/issue_005.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-001/issue_006.md is excluded by none and included by none
  • docs/specs/_reviews/pr-38/round-001/round.md is excluded by none and included by none
  • internal/baseline/testdata/catalog.digest is excluded by !**/*.digest and included by none
  • skills/roundfix/SKILL.md is excluded by !skills/** and included by none
📒 Files selected for processing (14)
  • .agents/skills/roundfix/SKILL.md
  • internal/baseline/assets/setups/typescript-bun.json
  • internal/baseline/testdata/catalog.normalized.json
  • internal/baseline/testdata/parity-corpus/v1/fixtures/asset-sync.json
  • internal/baseline/testdata/parity-corpus/v1/manifest.json
  • internal/cli/cli.go
  • internal/cli/cli_test.go
  • internal/cli/orphan_unix_test.go
  • internal/store/process.go
  • internal/store/process_unix.go
  • internal/store/process_unix_test.go
  • internal/store/process_windows.go
  • internal/store/process_windows_test.go
  • internal/store/store.go

@marcioaltoe
marcioaltoe merged commit 8ec92ad into main Jul 27, 2026
2 checks passed
@marcioaltoe
marcioaltoe deleted the ma/terminal-outcome-integrity branch July 27, 2026 17:31
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.

1 participant