Complete release dispatch groundwork and mark remaining work blocked
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Container Image / build-and-push (push) Successful in 1m32s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0e429-436c-73f1-9144-bac4336c06e8
This commit is contained in:
tegwick 2026-09-27 20:51:56 +02:00
parent 9ebe56bb4f
commit 7b55261bd7
9 changed files with 385 additions and 21 deletions

View file

@ -1,7 +1,7 @@
# Image-only release broker core
ACTIVITY-WP-0041-T03 owns this implementation. **Not activated in production.**
The new modules are not wired to an API, worker, schedule or credential source.
The modules are not wired to a production API, worker, schedule or credential source.
Construction requires `admitted=True` from trusted deployment configuration; that
switch is a local guard, not proof that an identity has actually been admitted.
The current deployed revision is unchanged, so this code does not restart soak.
@ -62,8 +62,8 @@ production credentials and live Git/ArgoCD rollback are **not** proven by these
custody/rotation. The observer must measure continuous health; it must not
manufacture a 24-hour interval from two snapshots. Preserve signing public
keys for audit and protect the ledger from producer writes.
4. Connect the durable dispatcher through activity-core/Temporal and sanitized
evidence sinks. Prove authenticated transport failure, concurrency with other
4. Deploy/register the implemented Temporal dispatcher and supply its bounded,
idempotent sanitized evidence sink. Prove authenticated transport failure, concurrency with other
publishers, restart, denial and rollback in an isolated deployment environment.
Then finish the production observation gate and enable the bounded scope.
@ -103,6 +103,40 @@ snapshots cannot establish the interval. New observers start from their first ac
sample; they do not backfill the earlier deployment timestamp.
Neither module is connected to a production schedule, endpoint or credential source.
Trusted signer custody, real invariant probes, Temporal dispatch and isolated
Trusted signer custody, real invariant probes, production Temporal registration and isolated
Kubernetes authorization/rollback tests remain required before activation. Production
revision and the deployment observation clock are unchanged by this source-only work.
## Temporal dispatch and durable audit delivery
`release_dispatch.ReleaseDispatchWorkflow` resumes an already-admitted release ID.
`ReleaseActivities` binds its broker, backend factory and audit sink at trusted worker
construction; Temporal inputs cannot supply manifests, keys, transport configuration
or an admission flag. `release_worker` constructs a separate
`activity-core-release-tq` worker, which the admitted deployment must explicitly run.
It does not modify the ordinary orchestrator worker or start a workflow/schedule.
Use a stable workflow ID such as `activity-core-release:<ledger release ID>` when
starting it. Broker serialization remains authoritative even with duplicate dispatch.
Adapter calls run outside the workflow and resume from the durable ledger after
activity retry or restart. Failed rollback keeps the release slot and is retried
with durable timers; continue-as-new bounds workflow history. Temporal receives
sanitized errors rather than raw transport exceptions. Disabling the broker's
trusted admission setting prevents subsequent activity calls; operational revocation
still requires the admitted worker/credential lifecycle, not a workflow input.
The transition ledger is also the audit outbox. Acknowledgements are persisted only
after the configured sink returns. Delivery is at least once with stable event IDs;
the sink must durably upsert those IDs and use bounded I/O. It receives only release
ID, phase, time, candidate/rollback commits and the fixed application name. Sink
credentials, signed envelopes and transport output never enter these events.
Nonterminal sink failure retains pending events and permits recovery to proceed;
terminal workflow completion waits for acknowledged audit delivery. One ledger is
bound to one logical audit sink; changing sinks requires an explicit replay/migration
of delivery acknowledgements. The sink can fan out to approved evidence destinations.
Tests exercise the real ledger through the activities and validate Temporal sandbox
construction, with in-memory transports/sinks and orchestration stubs. This does not
prove a deployed Temporal server, real Kubernetes authorization or production sinks.
Continuous observer scheduling, actual sink adapters, admission credentials and
authenticated deployment proof remain activation prerequisites in T03.