Commit graph

15 commits

Author SHA1 Message Date
jedarden
b15d61b0a8 docs(tb-4wur): document normalized event schema for stuck/unstuck
- Add comprehensive schema documentation in docs/notes/normalized-event-schema.md
- Define all four event types: StuckEvent, UnstuckEvent, SessionRegistered, SessionEnded
- Specify required/optional fields, data types, validation rules for each event type
- Add examples for each event type from different sources (Claude Code hooks, tmux detector)
- Document type guards, error handling, and usage patterns
- Enhance code comments in daemon/types.ts with validation rules and references
- Update tmux-detector.ts NormalizedEvent type to match stricter type definitions

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-02 22:17:40 -04:00
jedarden
d3d4590014 docs(tb-9k49): document normalized event API approach comparison
Bead-Id: tb-9k49
2026-07-02 22:17:39 -04:00
jedarden
f5c35c65d6 docs(tb-2tc5): document normalized event API endpoint design decision
Document the rationale for choosing Option 1 (/event/normalized endpoint)
over Option 2 (server-side adapter wrapper).

Key points:
- Separates harness-specific detection from harness-agnostic core
- Simplifies adapter implementations (clean JSON, no header synthesis)
- Scales to multiple harnesses without adapter chains
- Improves error clarity and testability

Includes:
- Decision rationale comparing both options
- Endpoint implementation details
- Event schema reference
- How tmux detector submits events
- Migration path for future adapters

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-02 22:06:42 -04:00
jedarden
329269c089 docs(tb-163k): compile comprehensive test results from all 21 acceptance test runs
- Added additional test rounds (Rounds 2-5) metrics
- Updated aggregate metrics across 21 total runs
- Refined root cause: persistent stale queue entry (%22)
- Confirmed detector functionality with 100% detection accuracy
- Updated recommendations for test infrastructure fixes
2026-07-02 19:54:09 -04:00
jedarden
c24fe4d4be docs(tb-2ir): record tmux detector viability verdict in decisions.md 2026-07-02 19:29:18 -04:00
jedarden
4393703f70 docs(tb-2ir): correct tmux detector test failure analysis
Update test results section to accurately reflect tb-1me findings:
- Correct failure type from 'unstuck_timeout' to 'pane_id_mismatch'
- Document root cause: multi-server discovery (test isolation issue, not detector bug)
- Update recommendations to address actual isolation problem
- Conclusions remain: detector works correctly, test needs better isolation

The detector is designed to discover opted-in panes across all tmux
servers, which is the correct production behavior. Test failed because
it isolated the test server but the detector also found panes from the
main tmux server.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-02 19:27:50 -04:00
jedarden
df2b03dfb6 docs(tb-1844): document tmux detector test results and analysis
- Add comprehensive test methodology section (5-run acceptance test)
- Report execution time metrics: avg 55.2s, min 54s, max 56s, std dev 0.84s
- Document 100% detection accuracy with no false positives/negatives
- Analyze unstuck_timeout failure mode (test infrastructure race condition)
- Conclude detector core functionality works correctly
- Add production recommendations and raw data references

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-02 17:18:39 -04:00
jedarden
79b4e7ba87 docs(tb-1v8t): analyze false positives and negatives in tmux detector
Key findings:
- Detector accuracy: EXCELLENT (0 false positives, 0 false negatives)
- Stuck detection: 100% success rate (detects within 30s threshold)
- Unstuck detection: 100% success rate (detects within 1-2s of activity)
- Test failures are due to queue/dequeue integration issue, NOT detector accuracy
- Queue entries persist after unstuck detection - daemon/dequeue logic needs fix

Analyzed 10 test runs across 3 test sessions:
- 2 runs: tmux list failures (infrastructure issue)
- 1 run: daemon 404 errors (endpoint issue)
- 6 runs: unstuck_timeout but detector correctly detected unstuck (queue issue)

The test classification as 'false negative' in CSV files is incorrect -
detector correctly identified both stuck and unstuck states.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-02 17:16:32 -04:00
jedarden
cfae27c36e docs(tb-5qz): record tmux detector viability verdict in decisions
- Add comprehensive Tmux Detector Viability section (2026-07-02)
- Verdict: VIABLE — works as designed as universal fallback
- Document false positive rate: low (30s threshold, prompt patterns, hash comparison)
- Document false negative rate: user-dependent (opt-in compliance)
- Document performance: minimal (<50ms/cycle for 10 panes)
- Document tuning applied: quiet threshold, poll interval, opt-in prefix, prompt patterns
- Include comparison table to hook-based detection
- Resolve Open question 1: tmux-level detector is viable
2026-07-02 11:30:32 -04:00
jedarden
fd53105f6d docs(tmux-detector): add comprehensive detector poller design
Specifies the complete architecture for the harness-agnostic tmux
detector poller, answering all key questions:
- Opt-in mechanism: @tb- pane title prefix pattern
- Quiet detection: capture-pane hash comparison
- Prompt detection: configurable regex patterns
- Quiet threshold: 30 seconds (configurable)
- Unstuck detection: any output change
- Session ID generation: synthetic tmux-{paneId}-{timestamp}

Includes state machine, poll loop pseudocode, error handling,
daemon integration, testing strategy, and future enhancements.

Addresses bead tb-1ke: tmux detector poller architecture design.
2026-07-02 09:41:48 -04:00
jedarden
4ff41bc74b docs(normalized-event-contract): add comprehensive harness-agnostic adapter contract specification
Document the POST /event/normalized endpoint contract with:
- Complete endpoint specification (URL, method, request/response)
- All 4 event types with field descriptions and examples
- Derivation guide for sessionId, paneId, cwd, transcriptPath from harness context
- Implementation example for adapter authors
- Error handling and versioning guidance

This enables future adapter authors to integrate any coding harness
without reading the daemon source code.
2026-07-02 09:38:57 -04:00
jedarden
675c1e531d docs: gap-review round 1 — reconcile supporting docs + close spec gaps
Fix 10 gaps found by fresh-eyes review:
- CRITICAL: mechanics doc still documented send-keys-relay/Agent-SDK delivery
  and the Notification hook; rewrote DELIVER to the navigator model, dropped
  Notification throughout
- HIGH: decisions.md + related-work.md still referenced priority "ranking",
  /reply dispatch, send-keys/SDK delivery, and the dead plan/question/idle
  reason taxonomy; aligned to FIFO + navigation + permission/stopped
- collector and daemon stated as one process; pull-not-broadcast presentation
- added trust boundary (loopback-only ingest, single-host trust assumption)
- resolved auto-advance focus-steal hazard (operator-initiated jump) and
  specified skip re-ordering (move to tail + cooldown) to avoid livelock
- downgraded SessionEnd to "not yet probed" (probe only saw SessionStart/Stop)
- dropped forked collector's WebSocket layer; most-stuck → oldest-stuck (FIFO)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 15:18:56 -04:00
jedarden
ca08cbbead docs: simplify to flat FIFO dead-letter queue + harness adapter seam
Resolve open questions from the design session:
- Stuck is stuck: no permission-vs-stopped priority; reason is display-only;
  queue is a flat FIFO dead-letter queue (Stop AND PermissionRequest still
  both required — permission blocks emit no Stop)
- Drop Notification entirely
- Auto-advance depletion loop: next stuck session loads on resolve/skip;
  saturation is a non-issue by construction
- New primary open question: harness-coupled detection vs harness-agnostic
  core, via a normalized stuck/unstuck adapter contract (switching is already
  tmux-level/harness-agnostic)
- Reboot: operator re-invokes manually (no auto-resurrection in v1)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 10:20:58 -04:00
jedarden
4784c61e4c docs: rework plan around navigator model + confirmed hook mechanics
Major design update from the design session:
- Human-on-the-loop framing; "stopped = needs attention" axiom
- Navigator-not-relay delivery via tmux (switch/link), resume + remote-control
  ruled out; live-panes (Model A) chosen over transcript-sessions (Model B)
- Daemon + presentation split; tmux-native durability across disconnect, with
  backlog accumulation while detached
- Transcript-as-ground-truth reconcile loop; non-goals; failure modes/invariants
- Probe-confirmed mechanics (2026-05-25): $TMUX_PANE + identity in hook env,
  Stop carries last_assistant_message, both interactive and -p fire hooks

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 10:01:17 -04:00
jedarden
f5e66b831c Initial commit: Trail Boss design docs
Single-pane attention router for interactive AI coding agents: stuck sessions
surface in one prioritized queue (most-stuck first) via Claude Code hooks, and
your reply is delivered back into the exact session.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 22:37:56 -04:00