diff options
| author | soryu <soryu@soryu.co> | 2026-05-08 12:12:21 +0100 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2026-05-08 12:12:21 +0100 |
| commit | bd1f21fe387ec57da76c300cbb1ebc0db48553a7 (patch) | |
| tree | 1ffe451c3dec2fbb91f1e71f55abed37083ec62a /makima/src/server/openapi.rs | |
| parent | e00be74c8b575c725829677aadeb755ee81454d0 (diff) | |
| download | soryu-contract-lifecycle.tar.gz soryu-contract-lifecycle.zip | |
feat(contracts): lifecycle — Lock/Start/Pause/Complete/Unlock + queue schedulercontract-lifecycle
Adds the contract lifecycle layer on top of the unified-contracts
backbone (#128). State machine:
draft → queued → active → shipped → archived
At most one contract per directive sits in `active` at any time —
the queue is serialised because each directive owns a single shared
worktree. Repository helpers handle the transition checks AND
auto-promote the next-up `queued` contract whenever the active slot
frees (pause / complete / unlock-from-active / archive-from-active).
Endpoints (all under /api/v1/contracts/{id}):
POST /start draft → queued | active (depending on slot)
POST /pause active → queued; promotes next queued
POST /complete active → shipped; optional pr_url + pr_branch
POST /unlock queued | active → draft; promotes if was active
Frontend wiring:
* `DirectiveContractStatus` now includes `queued`.
* Migration adds `queued` to the CHECK constraint on
directive_documents.status.
* `ContractHeader` component renders breadcrumb + status pill +
status-driven action buttons + a merge-mode (shared / own_pr)
radio. Merge mode is editable only while draft / queued so a
running flow's branch target can't change mid-stream.
* RepositoryError gains a `Validation(String)` arm; the three
existing exhaustive matches (files, mesh, versions) get a
400 BAD_REQUEST response for it.
Drag-to-reorder UI deferred to a small follow-up — the backend
endpoint already exists from the backbone PR.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'makima/src/server/openapi.rs')
| -rw-r--r-- | makima/src/server/openapi.rs | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/makima/src/server/openapi.rs b/makima/src/server/openapi.rs index 7ddaf1b..184d12a 100644 --- a/makima/src/server/openapi.rs +++ b/makima/src/server/openapi.rs @@ -124,6 +124,10 @@ use crate::server::messages::{ApiError, AudioEncoding, StartMessage, StopMessage directive_documents::ship_document, directive_documents::archive_document, directive_documents::reorder_contract, + directive_documents::start_contract, + directive_documents::pause_contract, + directive_documents::complete_contract, + directive_documents::unlock_contract, directive_documents::list_document_tasks, // Order endpoints orders::list_orders, @@ -233,6 +237,7 @@ use crate::server::messages::{ApiError, AudioEncoding, StartMessage, StopMessage directive_documents::UpdateDirectiveDocumentRequest, directive_documents::ShipDirectiveDocumentRequest, directive_documents::ReorderDirectiveDocumentRequest, + directive_documents::CompleteContractRequest, directive_documents::DocumentTasksResponse, // Order schemas Order, |
