chore(repo): ignore agent review artifacts
- commit
- f923d9b7ebd27974e5c9da5798a125cd884527f7
- author
- brice · · 2026-08-24 17:05 UTC
- parent
- e23c635
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
2 files · +1 -32
D .agent-reviews/redteam.md +0 -32
| @@ -1,32 +0,0 @@ | |||
| 1 | - | # Remote down-session lifecycle refactor | |
| 2 | - | ||
| 3 | - | ## Decision | |
| 4 | - | ||
| 5 | - | - Keep remote catalogue state as a dedicated string-backed JSON contract with `up`, `down`, and `broken` constants. Do not couple it to the binary `SessionState` enum. Require exact catalogue schema version 3 and cache version 3. | |
| 6 | - | - Keep `RemoteSessionTarget.Stopped` on the wire. It describes the selected down-row resume intent across the transition to a live runtime; it is not a claim that the destination remains stopped. | |
| 7 | - | - For structured remote picker rows, derive picker presentation state from `RemoteSessionTarget`; local rows retain their presentation flag. Remove pre-parity count-only catalogue rows and `ConnectOnly`. | |
| 8 | - | - Rename the daemon's non-live durable registry representation to `inactiveSession`/`inactive`, then add narrow predicates for visibility, resumability, broken/degraded state, purge fencing, and restore waiting rather than one broad state check. | |
| 9 | - | - Route remote down targets through exact inactive-record fencing. Recheck lifecycle and resumability after catalogue I/O before publishing a runtime. | |
| 10 | - | - Support a healthy down record with no retained tabs as an exact default-tab resume target. A missing stopped selector is valid only when the authoritative inactive metadata has at most one default tab; it must not ambiguously select among multiple tabs. | |
| 11 | - | ||
| 12 | - | ## Resolved objections | |
| 13 | - | ||
| 14 | - | - **Lifecycle TOCTOU:** use the expected inactive entry with the fenced creation helper and map stale-fence failures to `ErrNoSuchTarget`. | |
| 15 | - | - **Target state transition:** document and test `down catalogue row -> exact same-lifecycle resume -> live runtime`; preserve the stopped intent through initial attach. | |
| 16 | - | - **Typed-state compatibility:** retain JSON state tokens, bump the changed catalogue and cache contracts to version 3, and preserve ingress validation/error taxonomy. | |
| 17 | - | - **Broken and obsolete rows:** map only exact-schema `down` entries to resumable targets; broken remains unavailable and older peers fail with a catalogue version mismatch. | |
| 18 | - | - **Cross-host identity:** validate endpoint, name, lifecycle, and picker row identity together; never authorize a route from a display label. | |
| 19 | - | - **Protocol layout:** retain the existing target boolean and wire layout, so no protocol bump is required. | |
| 20 | - | ||
| 21 | - | ## Accepted risks | |
| 22 | - | ||
| 23 | - | - Renaming the inactive registry is mechanically broad inside the daemon package. It will be isolated from behavior changes where practical and verified with focused recovery tests plus the race suite. | |
| 24 | - | - Older count-only catalogue peers and cache files are rejected rather than exposed as partial routes. Remote discovery starts empty when an obsolete local cache is encountered. | |
| 25 | - | ||
| 26 | - | ## Evidence | |
| 27 | - | ||
| 28 | - | - `internal/usecase/daemon/remote_attach.go`: exact remote route and initial attach transition. | |
| 29 | - | - `internal/usecase/daemon/session.go`: expected inactive lifecycle fence around catalogue I/O. | |
| 30 | - | - `internal/usecase/daemon/coderabbit_regression_test.go`: existing same-name replacement race shape. | |
| 31 | - | - `internal/usecase/daemon/remote_picker_test.go`: remote catalogue-to-picker-to-route seam. | |
| 32 | - | - Critic and Go review passes: subagent `77a5f587-1e4f-40cb-b90b-44dde1598fbc`. | |
| @@ -1,32 +0,0 @@ | |||||
| 1 | - | # Remote down-session lifecycle refactor | |||
| 2 | - | ||||
| 3 | - | ## Decision | |||
| 4 | - | ||||
| 5 | - | - Keep remote catalogue state as a dedicated string-backed JSON contract with `up`, `down`, and `broken` constants. Do not couple it to the binary `SessionState` enum. Require exact catalogue schema version 3 and cache version 3. | |||
| 6 | - | - Keep `RemoteSessionTarget.Stopped` on the wire. It describes the selected down-row resume intent across the transition to a live runtime; it is not a claim that the destination remains stopped. | |||
| 7 | - | - For structured remote picker rows, derive picker presentation state from `RemoteSessionTarget`; local rows retain their presentation flag. Remove pre-parity count-only catalogue rows and `ConnectOnly`. | |||
| 8 | - | - Rename the daemon's non-live durable registry representation to `inactiveSession`/`inactive`, then add narrow predicates for visibility, resumability, broken/degraded state, purge fencing, and restore waiting rather than one broad state check. | |||
| 9 | - | - Route remote down targets through exact inactive-record fencing. Recheck lifecycle and resumability after catalogue I/O before publishing a runtime. | |||
| 10 | - | - Support a healthy down record with no retained tabs as an exact default-tab resume target. A missing stopped selector is valid only when the authoritative inactive metadata has at most one default tab; it must not ambiguously select among multiple tabs. | |||
| 11 | - | ||||
| 12 | - | ## Resolved objections | |||
| 13 | - | ||||
| 14 | - | - **Lifecycle TOCTOU:** use the expected inactive entry with the fenced creation helper and map stale-fence failures to `ErrNoSuchTarget`. | |||
| 15 | - | - **Target state transition:** document and test `down catalogue row -> exact same-lifecycle resume -> live runtime`; preserve the stopped intent through initial attach. | |||
| 16 | - | - **Typed-state compatibility:** retain JSON state tokens, bump the changed catalogue and cache contracts to version 3, and preserve ingress validation/error taxonomy. | |||
| 17 | - | - **Broken and obsolete rows:** map only exact-schema `down` entries to resumable targets; broken remains unavailable and older peers fail with a catalogue version mismatch. | |||
| 18 | - | - **Cross-host identity:** validate endpoint, name, lifecycle, and picker row identity together; never authorize a route from a display label. | |||
| 19 | - | - **Protocol layout:** retain the existing target boolean and wire layout, so no protocol bump is required. | |||
| 20 | - | ||||
| 21 | - | ## Accepted risks | |||
| 22 | - | ||||
| 23 | - | - Renaming the inactive registry is mechanically broad inside the daemon package. It will be isolated from behavior changes where practical and verified with focused recovery tests plus the race suite. | |||
| 24 | - | - Older count-only catalogue peers and cache files are rejected rather than exposed as partial routes. Remote discovery starts empty when an obsolete local cache is encountered. | |||
| 25 | - | ||||
| 26 | - | ## Evidence | |||
| 27 | - | ||||
| 28 | - | - `internal/usecase/daemon/remote_attach.go`: exact remote route and initial attach transition. | |||
| 29 | - | - `internal/usecase/daemon/session.go`: expected inactive lifecycle fence around catalogue I/O. | |||
| 30 | - | - `internal/usecase/daemon/coderabbit_regression_test.go`: existing same-name replacement race shape. | |||
| 31 | - | - `internal/usecase/daemon/remote_picker_test.go`: remote catalogue-to-picker-to-route seam. | |||
| 32 | - | - Critic and Go review passes: subagent `77a5f587-1e4f-40cb-b90b-44dde1598fbc`. | |||
M .gitignore +1 -0
| @@ -2,6 +2,7 @@ | |||
| 2 | 2 | *.test | |
| 3 | 3 | .superpowers/ | |
| 4 | 4 | docs/superpowers/ | |
| 5 | + | .agent-reviews/ | |
| 5 | 6 | .worktrees/ | |
| 6 | 7 | scripts/demo/out/ | |
| 7 | 8 | /.worktrees/ | |
| @@ -2,6 +2,7 @@ | |||||
| 2 | *.test | 2 | *.test | ||
| 3 | .superpowers/ | 3 | .superpowers/ | ||
| 4 | docs/superpowers/ | 4 | docs/superpowers/ | ||
| 5 | + | .agent-reviews/ | |||
| 5 | .worktrees/ | 6 | .worktrees/ | ||
| 6 | scripts/demo/out/ | 7 | scripts/demo/out/ | ||
| 7 | /.worktrees/ | 8 | /.worktrees/ | ||