?
AUTO-11
backend api
Created: 2026-02-03 Updated: 2026-02-03
Relationships Loading...
Attachments
Loading...
Comments (10)
qa-agent · 2026-02-03
## QA PASSED See QA report document: 3a9d7825-7225-4ecc-a33b-5f99ad1eb149 **Summary:** All 9 phase gate tests pass with the init + daemon workflow. The schema mismatch between CLI init and LocalStore has been resolved. **Tests verified:** - automations table has max_budget_usd (not max_budget) - automation_runs table has id as PK (not thread_id) - automation_runs has all required columns including archived_at - All CRUD operations work correctly - Mark as read, archive, pause/resume all work - Error handling returns proper HTTP status codes - 155 unit tests pass Fix verified working.
agent · 2026-02-03
## Schema Mismatch Fix Complete **Problem Found:** The CLI init command's AutomateDB.SCHEMA defined the automation_runs table with a different schema than what client/schema.py (used by LocalStore) expected: 1. **Primary key mismatch**: CLI used `thread_id`, LocalStore expected `id` 2. **Missing columns**: finding_status, worktree_path, worktree_branch, session_id, output_json, trckr_issue_id, trckr_issue_identifier, cost_usd, tokens_input, tokens_output, started_at, completed_at, duration_seconds, archived_at 3. **Extra obsolete columns**: thread_title, archived_user_message, archived_assistant_message This caused API endpoints to fail with `sqlite3.OperationalError: table automations has no column named id` or `no such column: archived_at` when users ran `init` followed by `daemon`. **Changes Made (automate.py):** - Lines 98-132: Updated automation_runs table schema to match client/schema.py exactly - Lines 119-122: Added missing indexes for status, read_at, created_at - Lines 333-340: Updated create_run INSERT to use `id` and include `started_at` - Lines 345-355: Updated get_run to query by `id` instead of `thread_id` - Lines 420-450: Updated update_run allowed_fields and WHERE clause - Lines 473, 500, 512: Changed archived_reason IS NULL to archived_at IS NULL - Lines 777, 837, 857, 896: Changed all thread_id references to id in CLI commands - Line 933: Archive command now sets archived_at timestamp **Verification:** - All 155 unit tests pass - All 9 phase gate tests pass with init + daemon workflow: - Phase 1: Init and start server - PASS - Phase 2: Create automation via API - PASS (returns automation with ID) - Phase 3: List automations - PASS (returns array with 1 item) - Phase 4: Get single automation - PASS (returns correct name) - Phase 5: Update automation - PASS (status changed to "paused") - Phase 6: Trigger run - PASS (returns run_id) - Phase 7: List runs - PASS (returns array) - Phase 8: Triage endpoint - PASS (returns array) - Phase 9: Stats endpoint - PASS (returns stats object)
agent · 2026-02-03
Agent assignment: worker-AUTO-11-fix2 assigned to this issue. Worktree: /tmp/agent-automations-AUTO-11
qa-agent · 2026-02-03
## QA FAILED (Re-verification) See QA report document: bec7fe52-45fb-4d10-b563-1cc480d08e12 **Issues found:** The original max_budget_usd fix in the automations table is working correctly. However, there is a **critical schema mismatch in the automation_runs table** that was not addressed: 1. **Primary key mismatch**: CLI init uses `thread_id`, LocalStore expects `id` 2. **Missing columns**: finding_status, worktree_path, worktree_branch, session_id, output_json, trckr_issue_id, trckr_issue_identifier, cost_usd, tokens_input, tokens_output, started_at, completed_at, duration_seconds, archived_at 3. **Extra columns** in CLI schema: thread_title, archived_user_message, archived_assistant_message **Failing endpoints:** - POST /api/automations/{id}/run - `no column named id` - GET /api/triage - `no such column: archived_at` - GET /api/stats - `no such column: archived_at` **Fix required:** Update automate.py lines 98-118 to match client/schema.py lines 37-70. Returning to todo for fixes.
agent · 2026-02-03
## Fix Applied **Problem Found:** The CLI init command's AutomateDB.SCHEMA used max_budget as the column name, but: - client/schema.py uses max_budget_usd - client/store.py INSERT uses max_budget_usd - server/models/schemas.py Pydantic models use max_budget_usd When users ran automate.py init followed by automate.py daemon, API create operations failed with: sqlite3.OperationalError: table automations has no column named max_budget_usd **Changes Made:** - automate.py line 91: Changed max_budget REAL to max_budget_usd REAL in schema - automate.py line 188: Updated INSERT statement to use max_budget_usd - automate.py line 240: Updated allowed_fields in update_automation to use max_budget_usd - automate.py lines 638-639: Updated show command to read from max_budget_usd - automate.py line 737: Updated dry-run display to read from max_budget_usd - automate.py line 766: Updated runner call to read from max_budget_usd - tests/test_cli.py line 115: Updated test to check max_budget_usd instead of max_budget **Verification:** - All 155 unit tests pass - Live API test: init + daemon + POST /api/automations works correctly - Automation with max_budget_usd: 5.5 was created and returned correctly
worker-AUTO-11-fix · 2026-02-03
Assigned to worker-AUTO-11-fix in worktree /tmp/agent-automations-AUTO-11
qa-agent · 2026-02-03
## QA FAILED See QA report document: e5af0c67-dce2-4c61-8f05-0c69d81b30cd **Critical Issue Found:** **Schema mismatch between `init` CLI command and `LocalStore` schema** - `automate.py` line 91: Uses column `max_budget` - `client/schema.py` line 24: Uses column `max_budget_usd` - `client/store.py` INSERT uses `max_budget_usd` **Result:** When user runs `automate.py init` then `automate.py daemon`, API returns 500 Internal Server Error on any create operation: ``` sqlite3.OperationalError: table automations has no column named max_budget_usd ``` **Workaround:** Start daemon without `init` - daemon creates DB with correct schema. **Fix Required:** Unify schema to use `max_budget_usd` everywhere (matches Pydantic models). All 9 phase gate tests PASS when daemon creates its own database. Returning to todo for fixes.
agent · 2026-02-03
## Implementation Complete **What was implemented:** 1. **Pydantic Models** (`server/models/schemas.py`): - AutomationCreate, AutomationUpdate, AutomationResponse - for automation CRUD - RunResponse, RunListParams - for runs management - TriageItem, StatsResponse - for triage inbox and dashboard stats - TriggerRunResponse, MessageResponse - for action responses 2. **Automations Routes** (`server/routes/automations.py`) - 9 endpoints: - GET /api/automations - List all automations (with status filter) - POST /api/automations - Create automation - GET /api/automations/{id} - Get single automation - PUT /api/automations/{id} - Update automation - DELETE /api/automations/{id} - Delete automation (with cascade delete of runs) - POST /api/automations/{id}/run - Trigger manual run - POST /api/automations/{id}/pause - Pause automation - POST /api/automations/{id}/resume - Resume automation 3. **Runs Routes** (`server/routes/runs.py`) - 4 endpoints: - GET /api/runs - List runs (filters: automation_id, status, limit) - GET /api/runs/{id} - Get run detail - POST /api/runs/{id}/read - Mark as read - POST /api/runs/{id}/archive - Archive run 4. **Triage Routes** (`server/routes/triage.py`) - 2 endpoints: - GET /api/triage - Get unread actionable findings - GET /api/stats - Dashboard statistics 5. **Supporting Changes**: - Created `server/state.py` to avoid circular imports - Updated `server/main.py` to include API routers - Updated `automate.py` daemon command to use LocalStore schema - Created comprehensive test suite (`tests/test_api_routes.py`) **Verification:** - All 9 phase gate tests from the issue pass - All 155 unit tests pass - Live API testing verified all endpoints work correctly **Files Changed:** - /server/models/__init__.py (new) - /server/models/schemas.py (new) - /server/routes/__init__.py (updated) - /server/routes/automations.py (new) - /server/routes/runs.py (new) - /server/routes/triage.py (new) - /server/state.py (new) - /server/main.py (updated) - /automate.py (updated daemon command) - /tests/test_api_routes.py (new - 31 tests)
worker-AUTO-11 · 2026-02-03
Agent assigned: worker-AUTO-11 | Worktree: /tmp/agent-automations-AUTO-11
triage-agent · 2026-02-03
## Feature Triage Complete **Status:** NOT IMPLEMENTED **Summary:** This issue requests REST API endpoints for automations and runs management. The project is greenfield - no Python code exists yet. This issue depends on AUTO-1 (Project Setup), AUTO-2 (Database Schema), and AUTO-10 (FastAPI Server Core) being completed first. **Implementation Location:** - `server/routes/automations.py` - 9 endpoints (CRUD + run/pause/resume) - `server/routes/runs.py` - 4 endpoints (list, detail, read, archive) - `server/routes/triage.py` - 2 endpoints (triage inbox, stats) - `server/models/schemas.py` - Pydantic request/response models **Dependencies:** - AUTO-1: Project Setup (prerequisite) - AUTO-2: Database Schema + LocalStore (prerequisite) - AUTO-10: FastAPI Server Core (prerequisite) **Complexity:** Medium - straightforward CRUD patterns with 15 total endpoints See attached triage report for full details including implementation approach and research findings.