tlc-claude-code 2.9.0 → 2.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -174,50 +174,85 @@ If orchestrator is down, dispatch directly via tmux on the host:
174
174
 
175
175
  ```bash
176
176
  tmux new-session -d -s <task-id> -c $(pwd)
177
- tmux send-keys -t <task-id> "/opt/homebrew/bin/codex --full-auto '<prompt>'" Enter
177
+ tmux send-keys -t <task-id> "/opt/homebrew/bin/codex --dangerously-bypass-approvals-and-sandbox '<prompt>'" Enter
178
178
  ```
179
179
 
180
- ### Step O4: Report and Free
180
+ ### Step O4: Report and Monitor
181
181
 
182
- After dispatching all tasks, report:
182
+ After dispatching all tasks, report the initial state:
183
183
 
184
184
  ```
185
185
  Dispatched N tasks to orchestrator:
186
- ses_abc123 Task 1: Create schema codex running monitor=running
187
- ses_def456 Task 2: Add validation codex running monitor=running
186
+ ses_abc123 Task 1: Create schema codex running
187
+ ses_def456 Task 2: Add validation codex running
188
188
 
189
- Run /tlc:status to check progress.
190
- I'm free — what would you like to work on?
189
+ Monitoring for completion...
191
190
  ```
192
191
 
193
- Include each session's current monitor state in the status display. When available, prefer the same session-status formatting used by orchestration status views so monitor values stay consistent across commands.
192
+ **Do NOT stop here. Do NOT say "I'm free". Enter the monitoring loop immediately.**
194
193
 
195
- **STOP HERE.** Do not write code. Do not execute inline mode. Claude is the PM, not the coder.
194
+ ### Step O5: Auto-Monitor Loop (Mandatory)
196
195
 
197
- ### Step O5: Monitor (When User Asks)
196
+ After dispatching, poll all sessions every 30 seconds until all reach terminal states. This loop runs automatically — do not wait for the user to ask.
198
197
 
199
- When the user asks for status or agents complete, check:
198
+ ```
199
+ Poll cycle:
200
+ 1. For each dispatched session, check: GET /sessions/:id/status (or tmux capture-pane)
201
+ 2. Classify each session:
202
+ - completed → ready for merge-back
203
+ - stuck → send Enter once, re-check next cycle. After 3 attempts, ask user: "Session stuck. Retry or cancel?"
204
+ - budget_exhausted → ask user: "Budget exhausted. Re-dispatch or skip?"
205
+ - crashed / errored → log error, mark task as failed, continue with others
206
+ - timed_out → log timeout, mark task as failed
207
+ - running → continue monitoring
208
+ 3. When ANY session completes, report immediately: "✅ ses_abc123 Task 1 complete"
209
+ 4. When ALL dispatched sessions reach terminal states, exit the loop
210
+ ```
200
211
 
201
- ```bash
202
- # Check all sessions
203
- curl -s http://localhost:3100/sessions | node -e "
204
- const d=require('fs').readFileSync('/dev/stdin','utf8');
205
- JSON.parse(d).forEach(s=>console.log(s.id, s.status, s.project));
206
- "
212
+ **Use Bash `sleep 30` between poll cycles. Do not use background tasks for this — poll sequentially in the main conversation so results are visible.**
207
213
 
208
- # Check specific session output (inside container)
209
- docker exec tlc-agent-runner tmux capture-pane -t <session_id> -p -S -20
210
- ```
214
+ Surface progress at natural milestones:
215
+ - When a session completes: one-line status update
216
+ - When all sessions in a parallel batch complete: summary + trigger next batch
217
+ - When a session fails: immediate report with error details
211
218
 
212
- Auto-approve any prompts found in tmux sessions:
219
+ ### Step O5a: Dispatch Dependent Tasks
220
+
221
+ When a batch of tasks completes, check the dependency graph for newly unblocked tasks. Dispatch them immediately without asking.
213
222
 
214
- ```bash
215
- docker exec tlc-agent-runner tmux send-keys -t <session_id> Enter
216
223
  ```
224
+ Example:
225
+ Tasks 1+2 dispatched (parallel, no deps)
226
+ Task 1 completes → check if any task depends only on Task 1 → dispatch it
227
+ Task 2 completes → check if remaining tasks are unblocked → dispatch them
228
+ Tasks 3+4 now unblocked → dispatch immediately
229
+ ...continue until all tasks dispatched and completed
230
+ ```
231
+
232
+ ### Step O5b: Auto Merge-Back
233
+
234
+ When all tasks in the phase complete (or all non-failed tasks complete):
235
+
236
+ 1. Pull all commits from container worktrees to the host phase branch
237
+ 2. Run the full test suite: `cd server && npx vitest run` (or project's test command)
238
+ 3. If tests pass → continue to Step O5c
239
+ 4. If tests fail → report failures, attempt auto-fix (one round), re-run tests
240
+
241
+ ### Step O5c: Auto Review + PR
242
+
243
+ After tests pass:
244
+
245
+ 1. Run auto-review (same checks as Step 10 in Inline Mode)
246
+ 2. If review passes → push branch and create PR (ask user before pushing per project rules)
247
+ 3. If review fails → fix issues, re-run tests, re-review (max 3 iterations)
217
248
 
218
249
  ### Step O6: Cleanup
219
250
 
220
- When all tasks complete, remove `.tlc/.build-routing-active` and report results.
251
+ After PR is created (or phase completes):
252
+ - Remove `.tlc/.build-routing-active`
253
+ - Remove `.tlc/.active-sessions.json`
254
+ - Mark completed tasks `[x]` in PLAN.md
255
+ - Report final summary
221
256
 
222
257
  ## INLINE MODE
223
258
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tlc-claude-code",
3
- "version": "2.9.0",
3
+ "version": "2.9.1",
4
4
  "description": "TLC - Test Led Coding for Claude Code",
5
5
  "bin": {
6
6
  "tlc-claude-code": "./bin/install.js",