Implement ACTIVITY-WP-0024 operator automation console
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
Build and Publish Container Image / build-and-push (push) Successful in 36s

Add /ops REST inventory, status, runs, and fail-closed operator-token
mutations (trigger, enable/disable, pause/unpause) with audit trail.
Ship thin HTML UI at /ops/ui, runbook/k8s access docs, and contract tests.
This commit is contained in:
tegwick 2026-07-21 23:51:39 +02:00
parent 81d350de71
commit 71027f0a67
11 changed files with 1494 additions and 20 deletions

View file

@ -4,7 +4,7 @@ type: workplan
title: "Operator automation console (status API + control plane + thin UI)"
domain: infotech
repo: activity-core
status: proposed
status: finished
owner: codex
topic_slug: activity-core
created: "2026-07-21"
@ -107,7 +107,7 @@ Deep-links into State Hub / edge when evidence lives there (G9-aware).
```task
id: ACTIVITY-WP-0024-T01
status: todo
status: done
priority: high
state_hub_task_id: "d8830c31-bbcd-41d4-b74b-e1632d8d0257"
```
@ -124,7 +124,7 @@ state_hub_task_id: "d8830c31-bbcd-41d4-b74b-e1632d8d0257"
```task
id: ACTIVITY-WP-0024-T02
status: todo
status: done
priority: high
state_hub_task_id: "a94decc6-8ac9-4738-823a-6c7b19dade80"
```
@ -143,7 +143,7 @@ runbook describes custody without leaking secrets.
```task
id: ACTIVITY-WP-0024-T03
status: todo
status: done
priority: high
state_hub_task_id: "ed665a54-0a5c-4d35-b47d-50de77ef91d6"
```
@ -163,7 +163,7 @@ window within documented field mapping.
```task
id: ACTIVITY-WP-0024-T04
status: todo
status: done
priority: high
state_hub_task_id: "720e0783-93b8-480a-8bfb-00a6aae592a1"
```
@ -179,7 +179,7 @@ state_hub_task_id: "720e0783-93b8-480a-8bfb-00a6aae592a1"
```task
id: ACTIVITY-WP-0024-T05
status: todo
status: done
priority: high
state_hub_task_id: "2673bd8e-f746-428a-9a20-79336dcad9d4"
```
@ -200,7 +200,7 @@ evidence; pause/disable visible in inventory/status; unauthenticated mutate fail
```task
id: ACTIVITY-WP-0024-T06
status: todo
status: done
priority: high
state_hub_task_id: "8b10eb8f-90d1-498b-a0a3-5444c590a691"
```
@ -215,7 +215,7 @@ state_hub_task_id: "8b10eb8f-90d1-498b-a0a3-5444c590a691"
```task
id: ACTIVITY-WP-0024-T07
status: todo
status: done
priority: medium
state_hub_task_id: "32c695ac-f208-4540-b2fa-199a3f83c4c9"
```
@ -232,7 +232,7 @@ state_hub_task_id: "32c695ac-f208-4540-b2fa-199a3f83c4c9"
```task
id: ACTIVITY-WP-0024-T08
status: todo
status: done
priority: medium
state_hub_task_id: "032f7485-3cf6-4ec2-a076-cbf82312a63c"
```
@ -250,7 +250,7 @@ still deferred with a clear follow-up note.
```task
id: ACTIVITY-WP-0024-T09
status: todo
status: done
priority: low
state_hub_task_id: "1a937c1a-6534-467e-94fb-8ba54e18236e"
```
@ -263,13 +263,13 @@ state_hub_task_id: "1a937c1a-6534-467e-94fb-8ba54e18236e"
## Success criteria
- [ ] `GET /ops/automations/status?since=…` matches CLI automation-status semantics
- [ ] Operator can list last N runs for a definition without SSH/SQL
- [ ] Authenticated Run now returns workflow_id and produces `activity_runs` evidence
- [ ] Pause/disable visible in inventory/status and Temporal schedule state
- [ ] Unauthenticated mutation returns 401/403 when token is configured
- [ ] Thin UI usable via port-forward for the above flows
- [ ] Runbook documents token custody without secrets in git
- [x] `GET /ops/automations/status?since=…` matches CLI automation-status semantics
- [x] Operator can list last N runs for a definition without SSH/SQL
- [x] Authenticated Run now returns workflow_id and produces `activity_runs` evidence
- [x] Pause/disable visible in inventory/status and Temporal schedule state
- [x] Unauthenticated mutation returns 401/403 when token is configured
- [x] Thin UI usable via port-forward for the above flows
- [x] Runbook documents token custody without secrets in git
## Implementation order
@ -286,3 +286,10 @@ state_hub_task_id: "1a937c1a-6534-467e-94fb-8ba54e18236e"
- `src/activity_core/automation_status.py`, `src/activity_core/api.py`
- `docs/runbook.md`, `SCOPE.md` G10
- ACTIVITY-WP-0018, ACTIVITY-WP-0019, ACTIVITY-WP-0021
## Closeout 2026-07-21
Implemented `/ops` console: auth (fail-closed operator token), inventory/status/runs
REST, Run now + enable/disable/pause with audit buffer + optional State Hub progress,
thin HTML UI at `/ops/ui`, runbook + k8s access docs. Tests: `tests/test_ops_auth.py`,
`tests/test_ops_console_api.py`.