Repository navigation
Open
Labels
executor::claudeExecutor: the Claude runner does this workExecutor: the Claude runner does this workpriority::highDo first: major token/API savings, unattended blockers, or safe parallel executionDo first: major token/API savings, unattended blockers, or safe parallel executionproject::InfrastructureArea: hosting, networking, server commsArea: hosting, networking, server commsstatus::readytype::backendLayer: Rust/Axum backend (handlers, DB, integrations)Layer: Rust/Axum backend (handlers, DB, integrations)
Description
O1.2.5 lets Anton deploy the API by hand without cutting a show. Right before a deploy, the host asks the API whether anything is still running. This ticket adds the state the API needs to answer that truthfully. It is work package B1 of the O1.2.5 contract.
The contract is the spec. This ticket only gives B1 its own claim:
- Contract v2: [O1.2] Remove the unsafe deployment trigger and bootstrap the gate #381 (comment)
- Dependency update: [O1.2] Remove the unsafe deployment trigger and bootstrap the gate #381 (comment)
- Claude's confirmation with three notes: [O1.2] Remove the unsafe deployment trigger and bootstrap the gate #381 (comment)
Already done: check-config in #745.
Done when:
- One RAII work tracker in
AppStatereports every background write. Spawned tasks carry it, with no moment where it reads zero. A test rejects new unclassifiedtokio::spawnsites. - One route layer guards every upload route (init, chunk, file, finalize and single-step uploads), from entry to the last write.
- State accessors exist for every precheck field in the contract: active producer (including
is_test), recording, finalization in progress (including leftovers on disk), pending uploads (RFC3339 expiry parsed in Rust), scheduler start in progress, catch-up pending (one eligibility function shared with the scheduler) and next scheduled start. - Missing instrumentation never reads as idle. Unknown state means refuse.
- The contract's fixtures pass.
Parent: #381
Notes
- Lane: backend (Claude), leaf O1.2.5. Codex reviews. B1 is a work package inside O1.2.5, not a new leaf.
- The work tracker follows the atomic waiting-to-finalizing state machine from fix(recording): finalize safely on reconnect, stop and show changeover #724, including stop paths and different-show changeover.
- Unfinished artifacts from crash recovery (fix(recording): recover finalized audio that has no recording row #728) still block until they are recovered or reconciled. Never delete them to get an idle answer.
- B2 (the endpoint) and Codex's ops wiring start after this is merged.
Metadata
Metadata
Assignees
Labels
executor::claudeExecutor: the Claude runner does this workExecutor: the Claude runner does this workpriority::highDo first: major token/API savings, unattended blockers, or safe parallel executionDo first: major token/API savings, unattended blockers, or safe parallel executionproject::InfrastructureArea: hosting, networking, server commsArea: hosting, networking, server commsstatus::readytype::backendLayer: Rust/Axum backend (handlers, DB, integrations)Layer: Rust/Axum backend (handlers, DB, integrations)
Activity
anneoneone commentedon Oct 14, 2026
Ready, executor Claude. Anton approved Ready on 2026-10-14. No open dependencies: the main-to-interim sync (#734) and #724 are done.
Scope is work package B1 of the O1.2.5 contract v2 (#381 (comment)). Codex reviews. Branch from and target
dev/312-interim.