|
2 | 2 | {"id":"claude_code_bridge-4","title":"Multi-session: multiple independent Codex+Claude pairs per repo","description":"Enable multiple independent Code Quorum sessions (each a Codex+Claude pair) in the same repo/working directory without collisions.\n\n## Goals\n- Allow concurrent sessions: `cq --session A codex,claude` and `cq --session B codex,claude`\n- Route commands correctly: `ask --session A codex ...` targets A\n- In-pane defaulting: panes launched by session A export `CQ_SESSION=A` so `ask codex ...` “just works”\n- Session-scoped persistence: session files/state do not overwrite each other\n- No pane marker collisions: title markers include session namespace\n- Backwards compatible: current behavior remains the default session\n\n## Non-goals\n- Cross-directory routing changes (already isolated by cq_project_id)\n- New daemon or pane scraping\n\n## Acceptance\n- Two sessions can run concurrently in the same `.cq_config` project\n- `ask` and skills can target a session explicitly and auto-target implicitly\n- Existing users running `cq codex,claude` (no `--session`) see no behavior change\n","status":"open","priority":2,"issue_type":"epic","owner":"stefanc@allenai.org","created_at":"2026-02-03T18:50:03.867109-08:00","created_by":"stefanc-ai2","updated_at":"2026-02-03T18:50:03.867109-08:00","labels":["sessions","multi-session","routing"]} |
3 | 3 | {"id":"claude_code_bridge-4.1","title":"Session scoping helpers (CQ_SESSION / --session)","description":"Add shared helpers to select/validate a session name and resolve session-scoped config paths.\n\n## Notes\n- Selection precedence (everywhere): `--session` \u003e `CQ_SESSION` env \u003e `default`\n- Session name must be filesystem-safe (no traversal). Prefer `[A-Za-z0-9._-]`.\n- Introduce helpers like:\n - `resolve_session_name(explicit: str|None, env: dict) -\u003e str`\n - `project_session_dir(work_dir: Path, session: str) -\u003e Path`\n - `find_project_session_file(work_dir: Path, session: str, filename: str) -\u003e Optional[Path]`\n\n## Acceptance\n- A single helper API is used by `cq`, `ask`, `cq-mounted`, and session loaders.\n","status":"closed","priority":1,"issue_type":"task","owner":"stefanc@allenai.org","created_at":"2026-02-03T18:50:38.661935-08:00","created_by":"stefanc-ai2","updated_at":"2026-02-03T19:10:47.829512-08:00","closed_at":"2026-02-03T19:10:47.829512-08:00","close_reason":"Added shared session-scoping helpers (CQ_SESSION/--session) for safe name resolution + session-scoped config paths; routed session_utils/cq-mounted through them; made explicit named sessions strict (no fallback to default); added unit tests covering precedence + legacy fallbacks.","labels":["sessions","refactor"],"dependencies":[{"issue_id":"claude_code_bridge-4.1","depends_on_id":"claude_code_bridge-4","type":"parent-child","created_at":"0001-01-01T00:00:00Z"}]} |
4 | 4 | {"id":"claude_code_bridge-4.2","title":"cq: add --session and make lock per (cwd,session)","description":"Allow running multiple `cq` instances for the same repo by namespacing the per-directory lock.\n\n## Scope\n- Add `--session \u003cname\u003e` to `cq` (default `default`)\n- Change the `ProviderLock(\"cq\", cwd=...)` key to include session name (e.g. `f\"{cwd}::{session}\"`).\n- Export `CQ_SESSION=\u003cname\u003e` in managed env so child panes inherit it.\n\n## Acceptance\n- `cq --session A ...` and `cq --session B ...` can run concurrently in the same directory.\n","status":"closed","priority":1,"issue_type":"task","owner":"stefanc@allenai.org","created_at":"2026-02-03T18:50:38.852098-08:00","created_by":"stefanc-ai2","updated_at":"2026-02-03T19:27:11.073595-08:00","closed_at":"2026-02-03T19:27:11.073595-08:00","close_reason":"Added (default: or 'default'), exported CQ_SESSION into managed pane env, and namespaced launcher locking per (cwd,session) while also acquiring the legacy per-directory lock for the default session to avoid mixed-version double-launch. Added tests + README notes.","labels":["sessions","cli"],"dependencies":[{"issue_id":"claude_code_bridge-4.2","depends_on_id":"claude_code_bridge-4","type":"parent-child","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"claude_code_bridge-4.2","depends_on_id":"claude_code_bridge-4.1","type":"blocks","created_at":"0001-01-01T00:00:00Z"}],"comments":[{"id":1,"issue_id":"claude_code_bridge-4.2","author":"stefanc-ai2","text":"Summary: added cq --session (default from CQ_SESSION env var, else default); launcher lock is now per (cwd,session) and default session also acquires the legacy per-directory lock to prevent mixed-version double-launch; CQ_SESSION is exported into managed env for child panes; added tests + README docs. Note: close-reason string lost the 'cq --session' snippet due to shell backtick substitution.","created_at":"2026-02-03T19:27:47.680199-08:00"}]} |
5 | | -{"id":"claude_code_bridge-4.3","title":"Session-scoped session files under .cq_config/sessions/\u003cname\u003e/","description":"Persist provider session files per session name.\n\n## Scope\n- New layout: `.cq_config/sessions/\u003cname\u003e/.codex-session` and `.cq_config/sessions/\u003cname\u003e/.claude-session`\n- Backcompat:\n - If no session specified, keep using existing `.cq_config/.codex-session` / `.cq_config/.claude-session` (default session)\n - Optionally migrate legacy root files into sessions/default/ (best-effort)\n\n## Acceptance\n- Starting a second session does not overwrite the first session's session files.\n","status":"open","priority":1,"issue_type":"task","owner":"stefanc@allenai.org","created_at":"2026-02-03T18:50:39.013882-08:00","created_by":"stefanc-ai2","updated_at":"2026-02-03T18:50:39.013882-08:00","labels":["sessions","state"],"dependencies":[{"issue_id":"claude_code_bridge-4.3","depends_on_id":"claude_code_bridge-4","type":"parent-child","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"claude_code_bridge-4.3","depends_on_id":"claude_code_bridge-4.1","type":"blocks","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"claude_code_bridge-4.3","depends_on_id":"claude_code_bridge-4.2","type":"blocks","created_at":"0001-01-01T00:00:00Z"}]} |
| 5 | +{"id":"claude_code_bridge-4.3","title":"Session-scoped session files under .cq_config/sessions/\u003cname\u003e/","description":"Persist provider session files per session name.\n\n## Scope\n- New layout: `.cq_config/sessions/\u003cname\u003e/.codex-session` and `.cq_config/sessions/\u003cname\u003e/.claude-session`\n- Backcompat:\n - If no session specified, keep using existing `.cq_config/.codex-session` / `.cq_config/.claude-session` (default session)\n - Optionally migrate legacy root files into sessions/default/ (best-effort)\n\n## Acceptance\n- Starting a second session does not overwrite the first session's session files.\n","status":"closed","priority":1,"issue_type":"task","owner":"stefanc@allenai.org","created_at":"2026-02-03T18:50:39.013882-08:00","created_by":"stefanc-ai2","updated_at":"2026-02-03T19:44:26.180797-08:00","closed_at":"2026-02-03T19:44:26.180797-08:00","close_reason":"Implemented session-scoped provider session files for named sessions under .cq_config/sessions/\u003cname\u003e/ while keeping default session in .cq_config/. Updated AILauncher to create session dirs before writes, updated README, and added tests ensuring sessions don’t clobber each other.","labels":["sessions","state"],"dependencies":[{"issue_id":"claude_code_bridge-4.3","depends_on_id":"claude_code_bridge-4","type":"parent-child","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"claude_code_bridge-4.3","depends_on_id":"claude_code_bridge-4.1","type":"blocks","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"claude_code_bridge-4.3","depends_on_id":"claude_code_bridge-4.2","type":"blocks","created_at":"0001-01-01T00:00:00Z"}]} |
6 | 6 | {"id":"claude_code_bridge-4.4","title":"Namespace pane_title_marker per session","description":"Prevent pane marker collisions across sessions.\n\n## Scope\n- Include session name (and ideally a short run id) in `pane_title_marker` for each provider.\n- Ensure the *full marker* is stored in the session file and used for rediscovery.\n\n## Acceptance\n- Two sessions in the same project do not share markers like `CQ-Codex` / `CQ-Claude`.\n- Rediscovery finds the correct pane when a pane_id changes.\n","status":"open","priority":1,"issue_type":"task","owner":"stefanc@allenai.org","created_at":"2026-02-03T18:50:39.180659-08:00","created_by":"stefanc-ai2","updated_at":"2026-02-03T18:50:39.180659-08:00","labels":["sessions","tmux","wezterm"],"dependencies":[{"issue_id":"claude_code_bridge-4.4","depends_on_id":"claude_code_bridge-4","type":"parent-child","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"claude_code_bridge-4.4","depends_on_id":"claude_code_bridge-4.3","type":"blocks","created_at":"0001-01-01T00:00:00Z"}]} |
7 | 7 | {"id":"claude_code_bridge-4.5","title":"ask: add --session and route using session-scoped session files","description":"Make `ask` able to target a specific session.\n\n## Scope\n- Add `--session \u003cname\u003e` to `bin/ask` (default from `CQ_SESSION`, else `default`).\n- Load the provider session for the selected session.\n\n## Acceptance\n- `ask --session A codex ...` routes to A.\n- Running `ask codex ...` inside session A routes to A (via `CQ_SESSION`).\n","status":"open","priority":1,"issue_type":"task","owner":"stefanc@allenai.org","created_at":"2026-02-03T18:50:39.371587-08:00","created_by":"stefanc-ai2","updated_at":"2026-02-03T18:50:39.371587-08:00","labels":["sessions","cli","routing"],"dependencies":[{"issue_id":"claude_code_bridge-4.5","depends_on_id":"claude_code_bridge-4","type":"parent-child","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"claude_code_bridge-4.5","depends_on_id":"claude_code_bridge-4.1","type":"blocks","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"claude_code_bridge-4.5","depends_on_id":"claude_code_bridge-4.6","type":"blocks","created_at":"0001-01-01T00:00:00Z"}]} |
8 | 8 | {"id":"claude_code_bridge-4.6","title":"Make codex/claude session loaders + registry session-aware","description":"Update session resolution so multiple sessions can coexist.\n\n## Scope\n- Update `lib/codex_session.py` + `lib/claude_session.py` to accept a `session` parameter (or read `CQ_SESSION`).\n- Update `lib/claude_session_resolver.py` so it prefers session-scoped files/registry records and avoids cross-session collisions.\n- Consider adding `cq_session_name` to registry records for additional disambiguation.\n\n## Acceptance\n- With two active sessions, `ask --session A claude ...` never resolves B's pane.\n","status":"open","priority":1,"issue_type":"task","owner":"stefanc@allenai.org","created_at":"2026-02-03T18:50:39.542717-08:00","created_by":"stefanc-ai2","updated_at":"2026-02-03T18:50:39.542717-08:00","labels":["sessions","registry"],"dependencies":[{"issue_id":"claude_code_bridge-4.6","depends_on_id":"claude_code_bridge-4","type":"parent-child","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"claude_code_bridge-4.6","depends_on_id":"claude_code_bridge-4.1","type":"blocks","created_at":"0001-01-01T00:00:00Z"},{"issue_id":"claude_code_bridge-4.6","depends_on_id":"claude_code_bridge-4.3","type":"blocks","created_at":"0001-01-01T00:00:00Z"}]} |
|
0 commit comments