detached f923d9b

chore(repo): ignore agent review artifacts

commit
f923d9b7ebd27974e5c9da5798a125cd884527f7
author
brice · · 2026-08-24 17:05 UTC
parent
e23c635
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · 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 @@
22 *.test
33 .superpowers/
44 docs/superpowers/
5+.agent-reviews/
56 .worktrees/
67 scripts/demo/out/
78 /.worktrees/
@@ -2,6 +2,7 @@
2 *.test2 *.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/

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 12

Tags 11

↑↓ moveenter openesc close