Implement lifecycle workspace publication and audit delivery
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a10780-6d41-7952-9718-dfbc1f41236f
This commit is contained in:
parent
ee472acc87
commit
5fec7de4cb
21 changed files with 1022 additions and 78 deletions
|
|
@ -6,6 +6,8 @@ existing browser app or public ingress.
|
|||
|
||||
| Method and path | Input | Result |
|
||||
| --- | --- | --- |
|
||||
| `GET /v1/decisions` | Optional `q` (up to 200 characters), opaque `cursor` | Authorized current revision summaries and `next_cursor` |
|
||||
| `POST /v1/decisions/{id}/publications` | `version`, `audience` with explicit `subjects` and `groups` lists | Durable publication event receipt |
|
||||
| `POST /v1/decisions` | `memo`, optional `documents` | Register an unbound version-one memo and return event/record/revision/resource receipt |
|
||||
| `POST /v1/decisions/{id}/revisions` | `memo`, `expected_version`, `summary`, optional `documents` | Compare-and-append successor revision; same receipt shape |
|
||||
| `GET /v1/decisions/{id}` | Optional positive integer `version` | Existing Memo JSON for the current or specified revision |
|
||||
|
|
@ -19,7 +21,7 @@ Ids are 1–256 ASCII letters/digits or `.`, `_`, `:`, `-`. POST requires exact
|
|||
nonempty `Idempotency-Key` up to 256 characters. Mutation receipts are HTTP 200
|
||||
for both first submission and replay, with `event_id`, `memo_id`, `version`.
|
||||
Unknown fields, duplicate JSON/query keys, non-finite JSON values, boolean
|
||||
revision numbers and truncated bodies are rejected. Search, publication and disposition routes are not yet exposed.
|
||||
revision numbers and truncated bodies are rejected. Disposition routes are not exposed.
|
||||
|
||||
Authentication runs before routing or reading a mutation body. The composition
|
||||
must explicitly supply a bearer-token verifier returning an authenticated
|
||||
|
|
@ -40,8 +42,9 @@ identity, 403 policy denial, 404 unavailable record/route, 405 unsupported metho
|
|||
service or unusable policy evidence. Raw exception text and credentials are never
|
||||
returned. Upstream raw diagnostics are not forwarded.
|
||||
|
||||
T04 remains in progress: search/publication contracts, admitted authenticators,
|
||||
canonical browser URLs and runtime wiring. Current
|
||||
T04 remains in progress: admitted workload authenticators and API listener
|
||||
composition. The browser workspace uses verified sessions through a separate
|
||||
adapter (see LifecycleWorkspaceDelivery.md). Current
|
||||
tests use the real service/repository/PolicyClient with synthetic authenticator
|
||||
and PDP transport; they establish adapter behavior, not live identity admission.
|
||||
Runtime must not expose this adapter before lifecycle policy and independent
|
||||
|
|
@ -64,8 +67,11 @@ Registration is `{ "memo": <Memo JSON>, "documents": [...] }`. Revision adds
|
|||
`expected_version` and a nonempty `summary`; its memo id must match the path and
|
||||
its version must be exactly expected_version + 1. Every mutation requires
|
||||
Idempotency-Key. Register/revise receipts include a relative API resource link
|
||||
`/v1/decisions/{id}?version={version}`. This does not claim that an unpublished
|
||||
draft has a human review URL or that the API is publicly mounted.
|
||||
`/v1/decisions/{id}?version={version}` and a `workspace_url` at
|
||||
`https://decisions.coulomb.social/decisions/{id}?version={version}`. The latter
|
||||
is an authorized authoring workspace, not a binding review link. The API remains
|
||||
unmounted. Search cursors are caller/tenant/query scoped, expire after five
|
||||
minutes and are invalidated on process restart. Every page rechecks policy.
|
||||
|
||||
Each document has exactly `digest`, `media_type`, `content_base64`. At most 100
|
||||
documents are allowed; the total JSON request remains bounded at 256 KiB and
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue