From a388c9477d75881a4fdd2502c284effed3390ce8 Mon Sep 17 00:00:00 2001 From: Pierre Martin Date: Mon, 23 Mar 2026 17:47:27 +0100 Subject: [PATCH] docs(02-02): complete i3 bridge plan - SUMMARY.md with 2 tasks, 15 tests, 4 TDD commits - STATE.md updated: plan 2/3, decisions recorded - ROADMAP.md: phase 02 progress 2/3 - REQUIREMENTS.md: I3-01, I3-02 marked complete --- .planning/REQUIREMENTS.md | 8 +- .../02-daemon-et-i3-bridge/02-02-SUMMARY.md | 123 ++++++++++++++++++ 2 files changed, 127 insertions(+), 4 deletions(-) create mode 100644 .planning/phases/02-daemon-et-i3-bridge/02-02-SUMMARY.md diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md index f7cca39..c829cf1 100644 --- a/.planning/REQUIREMENTS.md +++ b/.planning/REQUIREMENTS.md @@ -23,8 +23,8 @@ Requirements for initial release. Each maps to roadmap phases. ### i3 Integration -- [ ] **I3-01**: vmux mappe chaque session à son workspace i3 -- [ ] **I3-02**: vmux permet de switcher vers le workspace i3 d'une session en une action +- [x] **I3-01**: vmux mappe chaque session à son workspace i3 +- [x] **I3-02**: vmux permet de switcher vers le workspace i3 d'une session en une action - [ ] **I3-03**: vmux fournit un widget i3bar affichant le statut des sessions en temps réel ### Notifications @@ -74,8 +74,8 @@ Which phases cover which requirements. Updated during roadmap creation. | STATE-02 | Phase 1 | Pending | | STATE-03 | Phase 3 | Pending | | STATE-04 | Phase 2 | Complete | -| I3-01 | Phase 2 | Pending | -| I3-02 | Phase 2 | Pending | +| I3-01 | Phase 2 | Complete | +| I3-02 | Phase 2 | Complete | | I3-03 | Phase 4 | Pending | | NOTIF-01 | Phase 4 | Pending | | NOTIF-02 | Phase 4 | Pending | diff --git a/.planning/phases/02-daemon-et-i3-bridge/02-02-SUMMARY.md b/.planning/phases/02-daemon-et-i3-bridge/02-02-SUMMARY.md new file mode 100644 index 0000000..89144cf --- /dev/null +++ b/.planning/phases/02-daemon-et-i3-bridge/02-02-SUMMARY.md @@ -0,0 +1,123 @@ +--- +phase: 02-daemon-et-i3-bridge +plan: 02 +subsystem: i3-bridge +tags: [i3, x11, ppid, workspace, fuzzy-match, xgbutil, ewmh] + +requires: + - phase: 01-session-discovery + provides: "Process struct, FindClaudeProcesses, /proc scanning pattern" +provides: + - "PPID chain walk (ReadPPID, ResolveWorkspace)" + - "Terminal-workspace map via i3 tree + X11 _NET_WM_PID (BuildTerminalWorkspaceMap)" + - "Fuzzy match sessions by label/branch/cwd (FuzzyMatch)" + - "Switch workspace via i3 IPC (SwitchToWorkspace)" + - "Interfaces I3TreeProvider, X11PIDResolver, I3Commander pour testabilite" +affects: [02-daemon-et-i3-bridge/02-03, 03-hooks] + +tech-stack: + added: [go.i3wm.org/i3/v4, BurntSushi/xgbutil, BurntSushi/xgb] + patterns: [interface-based i3/X11 abstraction for testing, PPID chain walk with depth limit] + +key-files: + created: [workspace.go, workspace_test.go, i3bridge.go, i3bridge_test.go, x11_resolver.go] + modified: [go.mod, go.sum] + +key-decisions: + - "X11PIDResolver interface pour abstraire ewmh.WmPidGet et tester sans serveur X11" + - "I3TreeProvider interface pour mocker i3.GetTree dans les tests" + - "maxPPIDDepth = 20 pour securiser la remontee de chaine PPID" + - "Priorite fuzzy match : label > branche > cwd (label plus intentionnel)" + +patterns-established: + - "Interface injection pour i3 et X11 : meme pattern que procDir injectable en Phase 1" + - "walkI3Tree recursif avec tracking du workspace courant" + +requirements-completed: [I3-01, I3-02] + +duration: 4min +completed: 2026-03-23 +--- + +# Phase 02 Plan 02: i3 Bridge Summary + +**Mapping PID-workspace via PPID chain + X11 _NET_WM_PID, fuzzy match label/branche/cwd, switch workspace i3 IPC** + +## Performance + +- **Duration:** 4 min +- **Started:** 2026-03-23T16:41:16Z +- **Completed:** 2026-03-23T16:45:53Z +- **Tasks:** 2 +- **Files modified:** 7 + +## Accomplishments +- Resolution PID Claude -> workspace i3 via chaine PPID (ReadPPID + ResolveWorkspace) +- Construction de la map terminal-workspace en combinant i3 GetTree et X11 _NET_WM_PID +- Fuzzy match case-insensitive avec priorite label > branche > cwd +- Switch workspace via i3 IPC avec gestion d'erreurs +- 15 tests couvrant tous les cas (depth limit, not found, priorite, case-insensitive, erreurs i3) + +## Task Commits + +Each task was committed atomically: + +1. **Task 1: PPID chain walk + workspace resolution** + - `c9a28df` (test: failing tests for ReadPPID, ResolveWorkspace, BuildTerminalWorkspaceMap) + - `a2fb37e` (feat: implement workspace resolution + X11 resolver) +2. **Task 2: Fuzzy match + switch workspace + i3 client interface** + - `4a298d5` (test: failing tests for FuzzyMatch, SwitchToWorkspace) + - `9427dd3` (feat: implement fuzzy match + switch workspace) + +## Files Created/Modified +- `workspace.go` - ReadPPID, ResolveWorkspace, BuildTerminalWorkspaceMap, interfaces I3TreeProvider/X11PIDResolver +- `workspace_test.go` - 6 tests : ReadPPID, ResolveWorkspace (chain, not found, max depth), BuildTerminalWorkspaceMap +- `i3bridge.go` - FuzzyMatch, SwitchToWorkspace, interfaces I3Commander, RealI3Commander +- `i3bridge_test.go` - 9 tests : fuzzy match (label, branch, cwd, priority, no result, case), switch workspace (ok, error, i3 error) +- `x11_resolver.go` - RealX11Resolver avec xgbutil/ewmh pour production +- `go.mod` - Ajout go.i3wm.org/i3/v4 + deps transitives (xgb, xgbutil) +- `go.sum` - Hashes des nouvelles deps + +## Decisions Made +- X11PIDResolver et I3TreeProvider comme interfaces pour tester sans X11/i3 +- windowID en int64 (alignement avec le type Window du Node i3) +- walkI3Tree parcourt aussi les FloatingNodes pour ne pas rater de fenetres flottantes +- maxPPIDDepth = 20 contre les boucles de PPID (securite) + +## Deviations from Plan + +### Auto-fixed Issues + +**1. [Rule 3 - Blocking] Fix unused imports in daemon.go** +- **Found during:** Task 1 (build verification) +- **Issue:** daemon.go importait fmt et net sans les utiliser (etat intermediaire du plan 02-01 parallele) +- **Fix:** Retrait des imports inutilises +- **Files modified:** daemon.go +- **Verification:** `go build ./...` passe +- **Note:** L'agent parallele 02-01 a ensuite ajoute du code qui utilise ces imports, rendant le fix obsolete + +--- + +**Total deviations:** 1 auto-fixed (1 blocking) +**Impact on plan:** Fix necessaire pour que le build passe. Aucun impact sur le scope. + +## Issues Encountered +- Tests daemon_test.go (plan 02-01) echouent (TestDaemonListOverSocket, TestDaemonLabelOverSocket) mais hors scope de ce plan. Tests 02-02 passent tous avec -race. + +## User Setup Required +None - no external service configuration required. + +## Next Phase Readiness +- workspace.go et i3bridge.go sont prets pour integration dans le daemon (plan 02-03) +- Le daemon pourra utiliser `BuildTerminalWorkspaceMap` + `ResolveWorkspace` comme workspaceResolver +- `FuzzyMatch` + `SwitchToWorkspace` seront cables sur l'action "switch" du socket + +## Known Stubs +None - all functions are fully implemented with real logic. + +--- +*Phase: 02-daemon-et-i3-bridge* +*Completed: 2026-03-23* + +## Self-Check: PASSED +All files found. All commit hashes verified.