Files
2026-03-19 08:00:43 +10:00

4.8 KiB

Task Tracking Example: End-to-End Walkthrough

This example traces a complete task lifecycle from user request to final delivery. Every state transition includes the actual report that triggered it.

Scenario: "Audit the API rate-limiting code, fix any bugs you find, and add tests."


1. User Request → planneddispatching

User submits the request. Main agent registers the task and dispatches to worker-a.

Main agent → User:

who:    T-007 / worker-a
status: dispatching
output: none yet
next:   worker-a to confirm acceptance

2. Worker Receives Task → in_progress

Worker-a reads the relevant files and sends accepted immediately.

Worker-a → Main agent:

status:   accepted
summary:  audit src/middleware/rateLimit.ts for bugs, fix issues, add regression tests
evidence: read rateLimit.ts (312 lines) and tests/rateLimit.test.ts (88 lines)
risk:     none — read-only phase, no changes yet
next:     scan for off-by-one errors, clock skew, missing edge cases

Main agent transitions to in_progress and reports:

Main agent → User:

who:    T-007 / worker-a
status: in_progress
output: rateLimit.ts (312 lines) and test file read
next:   auditing for bug patterns

3. Worker Finds Issues → milestone

Audit complete. Worker-a reports findings.

Worker-a → Main agent:

status:   milestone
summary:  audit complete — 2 bugs found
evidence:
  - line 87: Date.now() used for window reset → vulnerable to clock skew
  - line 134: counter not reset on IP ban lift → legit users permanently limited after unban
risk:     medium — correctness bugs in production, not data-loss severity
next:     fix line 87 (clock skew), then line 134 (counter reset), then add tests

Main agent → User:

who:    T-007 / worker-a
status: milestone
output: audit done — 2 bugs found (clock skew line 87, counter reset line 134)
next:   worker-a fixing both bugs, then adding regression tests

4. Worker Gets Blocked → blocked

While fixing Bug 2, worker-a hits a dependency barrier.

Worker-a → Main agent:

status:   blocked
summary:  fixing counter reset on IP unban (line 134)
evidence: IPBanService.onUnban() callback is not exported — cannot hook from rateLimit.ts without modifying IPBanService
risk:     high — blocked task cannot proceed
next:     need decision: (A) export the callback from IPBanService, or (B) poll for ban status

Main agent → User:

who:    T-007 / worker-a
status: blocked
output: Bug 1 fixed (clock skew). Bug 2 blocked: IPBanService.onUnban() not exported
next:   user decision required — export callback (A) or poll for ban status (B)?

User: "Go with option A — export the callback."


5. Blocker Resolved → Back to in_progress, then done

Main agent relays the decision. Worker-a resumes and completes the task.

Worker-a → Main agent:

status:   milestone
summary:  IPBanService updated, Bug 2 fixed, regression tests written
evidence:
  - src/services/IPBanService.ts: onUnban() now exported
  - src/middleware/rateLimit.ts: line 134 updated to call onUnban()
  - tests/rateLimit.test.ts: 4 new tests added
risk:     low — change is backward-compatible
next:     running full test suite

Worker-a → Main agent:

status:   done
summary:  both bugs fixed, 4 regression tests added, all 47 tests passing
evidence:
  - src/middleware/rateLimit.ts (fixes at lines 87 and 134)
  - src/services/IPBanService.ts (onUnban exported)
  - tests/rateLimit.test.ts (4 new: clock-skew, unban-reset, concurrent, zero-limit)
  - test run output: 47 passed, 0 failed
risk:     none
next:     none

6. Main Agent Verifies → done

Main agent enters reviewing state and checks:

  • rateLimit.ts line 87 uses process.hrtime() — correct
  • rateLimit.ts line 134 calls onUnban() to reset counter — correct
  • IPBanService export is backward-compatible — correct
  • 4 new tests present, all passing — confirmed

Verification passed. Main agent reports completion.

Main agent → User:

who:    T-007 / worker-a
status: done
output:
  - 2 bugs fixed in src/middleware/rateLimit.ts
  - src/services/IPBanService.ts updated (onUnban exported)
  - 4 regression tests added (47 total, all passing)
next:   task complete

State Transition Summary

planned
  → dispatching      main dispatches to worker-a
  → in_progress      worker-a: accepted (evidence: files read)
  → milestone        worker-a: audit done, 2 bugs found
  → blocked          worker-a: IPBanService.onUnban() not exported
  → in_progress      user unblocks, worker-a resumes
  → milestone        bugs fixed, tests written
  → reviewing        worker-a: done (47 tests passing)
  → done             main verifies artifacts and reports to user

Every state had evidence. No silent gaps. No mystery.