feat(dashboard): /config form — thresholds + container sections #459

Closed
opened 2026-04-27 13:50:40 +00:00 by claude-desktop · 1 comment
Collaborator

User story

As an operator, I want number inputs for every threshold (stall_ms, review_threshold_ms, max_review_rounds, wip_soft_limit, max_escalations_per_day, dead_letter_threshold, watchdog intervals) and text inputs for container settings (image, env vars), so that I can tune SLAs and runtime config without touching JSON.

Acceptance criteria

Thresholds tab

  • Per-type fields: wip_soft_limit, max_escalations_per_day, model (dropdown of known model IDs)
  • Pipeline-global section: stall_threshold_ms, ci_threshold_ms, review_threshold_ms, implement_threshold_ms, default_threshold_ms, max_review_rounds
  • Watchdogs-global section: container_interval_sec, tail_pr_rebase_interval_ms, dead_letter_threshold, janitor_interval_ms
  • Each field shows current value, default, and unit
  • Reset-to-default button per field

Container tab

  • container_image: string text input (with default fallback to agents.json::container_image_default)
  • env: Record<string, string> row-per-key editor
  • Per-type override toggle (when off → inherits global default)

Tests

  • Number inputs reject non-numeric input
  • Reset button restores default

Out of scope

  • Live-reload preview of a running container
  • Validation against a live-running watchdog (just schema bounds)

References

  • Depends on Phase 2d (thresholds schema) — #453
  • Depends on Phase 2e (container_image_default) — #454
  • Depends on Phase 4a skeleton — #456
## User story As an operator, I want number inputs for every threshold (stall_ms, review_threshold_ms, max_review_rounds, wip_soft_limit, max_escalations_per_day, dead_letter_threshold, watchdog intervals) and text inputs for container settings (image, env vars), so that I can tune SLAs and runtime config without touching JSON. ## Acceptance criteria ### Thresholds tab - [ ] Per-type fields: `wip_soft_limit`, `max_escalations_per_day`, `model` (dropdown of known model IDs) - [ ] Pipeline-global section: `stall_threshold_ms`, `ci_threshold_ms`, `review_threshold_ms`, `implement_threshold_ms`, `default_threshold_ms`, `max_review_rounds` - [ ] Watchdogs-global section: `container_interval_sec`, `tail_pr_rebase_interval_ms`, `dead_letter_threshold`, `janitor_interval_ms` - [ ] Each field shows current value, default, and unit - [ ] Reset-to-default button per field ### Container tab - [ ] `container_image: string` text input (with default fallback to `agents.json::container_image_default`) - [ ] `env: Record<string, string>` row-per-key editor - [ ] Per-type override toggle (when off → inherits global default) ### Tests - [ ] Number inputs reject non-numeric input - [ ] Reset button restores default ## Out of scope - Live-reload preview of a running container - Validation against a live-running watchdog (just schema bounds) ## References - Depends on Phase 2d (thresholds schema) — `#453` - Depends on Phase 2e (container_image_default) — `#454` - Depends on Phase 4a skeleton — `#456`
Collaborator

🤖 Auto-assigned to dev (heuristic: area:dashboard + body 1515 bytes (≤ 2 KB) — dev). Reply /unassign to reroute.

🤖 Auto-assigned to **dev** (heuristic: area:dashboard + body 1515 bytes (≤ 2 KB) — dev). Reply `/unassign` to reroute.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/claude-hooks#459
No description provided.