Implement local decision delivery and reconcile blocked workplan requirements
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 1m1s

Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a1046e-fcad-7ea3-bf36-361fc8d679e8
This commit is contained in:
tegwick 2026-10-04 11:40:37 +02:00
parent 257a83e997
commit 3cb1cfaedf
25 changed files with 1258 additions and 50 deletions

View file

@ -0,0 +1,40 @@
# Blocked task review — 2026-10-04
Review scope: all nonterminal task blocks in access-engine workplans. Changes
are confined to this repository and its State Hub projection. Owner source
records were inspected read-only. This record establishes acceptance
requirements; it records no new live approval, credential, identity or window.
| Our task | Owner dependency and record | Required return / acceptance evidence |
| --- | --- | --- |
| FLEX-WP-0031-T02 | audit-core, accepted AUDIT-IN-0006 | Exact sender rows for `flex-auth.ops-warden`, `.tenant-engine`, `.user-engine`, `.secrets-engine`, `.informed-decision-t03`, `.informed-decision-sitting`; `may_write: true`, `may_read: false`, `tenants: ["*"]` with the accepted deny-for-not-yet-created-tenant justification, load-bearing evidence kind, redact policy, four heartbeat classes at 86400s, and the source-owned wire cadence declaration. Return owning revision, registration references, token custody/mount references, and native acceptance status; prepared rows alone do not establish live admission. The new fetch pin needs separate admission if it is added to the emission rollout; the six-pin intake does not cover it. |
| FLEX-WP-0031-T02 | gate-house, GH-WP-0004-T12 (todo in owner source) | A published decision disposing of FLEX-DEC-2026-018: deny/redact/not_applicable may leave after outbox failure while allow/audit_only are withheld. audit-core's accepted intake is not a statutory waiver. State whether the direction-limited exception is admitted, its declaration/detection conditions, or the required replacement semantics. |
| FLEX-WP-0031-T02 / T08 | railiance-platform custody; ops-warden routing | AUDIT-IN-0006 names the attended OpenBao sender mint into `platform/data/workloads/audit-core/senders`, using the platform attended helper. Supply the governed lane and per-pin token mount/rotation references plus owner admission receipts; never send token values to Git, State Hub or chat. Before any credential request, run `warden route find` and `warden route show` as AGENTS.md requires. No credential request or mint was made by this review. |
| FLEX-WP-0031-T06 | audit-core, reconciliation contract | Current `audit_core/postgres_backend.py:event_counts` and `sqlite_backend.py:event_counts` count **accepted_at** in `[since, until)`. Our log has **CommittedAt/OccurredAt**. Ingest returns only status/reference, with no acceptance timestamp. Return an approved matching basis: counts by source event time, or stable per-event acceptance timestamps (including duplicates) that our sender can persist. Define bounds, clock/late-delivery handling, source/tenant scope and retry/crash treatment. Identical bounds alone cannot reconcile these two clocks; missing admission is not the only blocker. |
| FLEX-WP-0031-T08 | operator, platform/network owners and audit-core observer | Approve exact immutable image, enabled pin/source, PVC size/node capacity, storage growth/retention, governed token mount and ingress/egress changes. Return native 202/duplicate-200 delivery, restart/cursor and lag evidence, plus an audit-core silence finding in a separately authorized non-production exercise. This review sets no test window or engagement. The optional chart and worker remain disabled on every pin. |
| FLEX-WP-ADHOC-2026-10-03-T02 | operator decision 877c268b-2089-42f1-a811-d98f549c1cb2, ops-bridge, ops-warden WARDEN-WP-0039-T03 | Decision is still open. Approve the exact CI digest and live install; record headroom/dry-run/rollout, Service IP and ops-bridge tunnel on 19091. ops-warden's unread return 26992e49 confirms fetch URL separation is implemented at 7d4381e/88c22d4; its task now needs configured `policy.fetch_flex_auth_url`, native health/allow/wrong-owner/fail-closed receipts. This is deployment acceptance, not missing evaluator code. |
| FLEX-WP-0020-T11 | sbom-nexus, open SBOM-IN-0001 | Owner receipt of the scheduled catch-up ingest: `access-engine` snapshot, frozen source SHA, repository UUID `fda8ad85-a7d7-4055-8f21-902a533e59df`. Owner source still shows open; elapsed time is not an ingest receipt. No manual production ingest was attempted. |
| FLEX-WP-0020-T11 | secrets-engine; railiance-fabric | secrets-engine still has `../flex-auth` in `docs/exec-owner-binding.md:89`; return the source-coordinate correction and existing handoff completion reference. railiance-fabric must return the owning residual record for its historical `repo:flex-auth` discovery node and explicitly state historical retention vs canonical mapping. No receiving task ID or completion is invented for either return. |
| FLEX-WP-0020-T11 | operator decision e071b34e-c4d4-49d0-824d-2c58bb0ae496 | Decision remains open. Name the soak bounds, observed deployment/decision/telemetry/package/automation evidence and residual owner receipts, then approve the exact obsolete checkout to remove. No soak success or cleanup is inferred. The protected flex-auth alias remains retained. |
The three remaining root workplans are `blocked`, with task status `wait` and
explicit dependency/human gates. Completed local work is not blocked on remote
registration: FLEX-WP-0031-T05 now covers the implementation, T07 the optional
PVC and profile validation, and T08 the remaining native delivery acceptance.
T06 retains the valid-window comparator and native acceptance requirements.
FLEX-WP-0027 is finished on the original task scope. secrets-engine's terminal
SECRETS-WP-0010-T03 and hashed native completion receipt establish human
acceptance/consumption for the September 16 version-2 cycle, actor `worsch`.
See `evidence/2026-10-04-t03-owner-completion-review.json`. The version-3
records now in access-engine are the separate IR-WP-0005-T02 cycle; consumed
approvals cannot be replayed. The old open human decision remains recorded as
history; this review does not answer a fresh human decision for the operator.
The whitehat return from this session also remains a gap: no recorded E2
tenant-A identity establishes absence of tenant-B authority. Reply
`ec96e1ba-27bd-4faa-8773-55ffeaba095c` on thread
`bd8cf37e-80e8-4df9-9181-1441b31baa30` returns that gap as access-engine. E2 and
ASM targets remain pending; terminal engagements were not reused and no test
packet was sent. A real tenant-scoped identity/authority receipt must come from
its identity/surface owner before access-engine can confirm it.

View file

@ -56,7 +56,7 @@ review date.
| # | Gap | Owner | Blocked on | Review |
| --- | --- | --- | --- | --- |
| G1 | Registry-snapshot digest absent from decision provenance. §9.7.2 promotes it to a conformance prerequisite: a decision that turned on registry content must be replayable from its own record. | `flex-auth` | implementation | `FLEX-WP-0019` |
| G2 | **Emission guarantee declared, not delivered.** Ruled 2026-09-21 (`GH-DEC-2026-018`): flex-auth is the source; custody is never source; `audit-core` confirmed its half and declined the role (`AUDIT-IN-0005`). The per-event-class inventory and classification are **published** in [`cadence.yaml`](../../cadence.yaml) and named from `INTENT.md` (`source_of_evidence: true`, `emission_guarantee`). Five decision classes are load-bearing; `deny`, `redact`, `not_applicable`, `audit_only` are **rare** — heartbeat **and** reconciliation, rate monitoring forbidden; `allow` is **volume** — expected-rate **and** reconciliation. Nothing emits yet: no sender is registered with `audit-core`, no outbox, no heartbeat. | `flex-auth` | outbox + heartbeat implementation, and an `audit-core` sender registration (intake + token lane, per `AUDIT-IN-0002`/`0003`) — `FLEX-WP-0031` | **2026-10-19** |
| G2 | **Emission guarantee declared, not delivered.** Ruled 2026-09-21 (`GH-DEC-2026-018`): flex-auth is the source; custody is never source; `audit-core` confirmed its half and declined the role (`AUDIT-IN-0005`). The per-event-class inventory and classification are **published** in [`cadence.yaml`](../../cadence.yaml) and named from `INTENT.md` (`source_of_evidence: true`, `emission_guarantee`). Five decision classes are load-bearing; `deny`, `redact`, `not_applicable`, `audit_only` are **rare** — heartbeat **and** reconciliation, rate monitoring forbidden; `allow` is **volume** — expected-rate **and** reconciliation. No production pin emits yet. Durable outbox, per-class heartbeat/drain and optional PVC are implemented and locally tested; sender admission, compatible reconciliation windows and native observer evidence remain pending. | `flex-auth` | audit-core `AUDIT-IN-0006` admission/token delivery, gate-house `GH-WP-0004-T12` ruling, compatible count windows and approved native heartbeat/reconciliation/silence-finding evidence — `FLEX-WP-0031` | **2026-10-19** |
| G3 | Published stance-register review is stale: written at two register rows, §13.1 now carries five, and its Finding 1 was ruled by v0.8 §6.4 obligation 3. | `flex-auth` | second edition | `FLEX-WP-0029` |
**G2 fails closed.** A stream with no delivered cadence produces no silence
@ -96,3 +96,10 @@ heartbeat and reconciliation and forbidding rate monitoring. That is the same pr
praised in `ops-warden`'s stance map: the published artifact is asserted equal to
the shipped one by test, rather than merely written down. It does **not** assert
the contents below the declaration — a reviewer still has to read this file.
2026-10-04 implementation review: source-owned
`docs/contracts/decision-emission-cadence.json` passes the supplied InfoTechCanon
schema and NetKingdom security profile. This is declaration validity, not native
emission evidence. `FLEX-DEC-2026-018` supplies the local release rule;
`GH-WP-0004-T12` still owes the statutory disposition of its failure-path
exception. G2 remains open and no atomicity waiver is inferred.

View file

@ -0,0 +1,178 @@
{
"schema_version": "0.1",
"declaration_id": "flex-auth-decision-emission-cadence-v0.1",
"source": "flex-auth",
"sources": [
{
"source_id": "flex-auth:deny",
"event_class": "flex-auth.decision.deny",
"form": "heartbeat-or-reconciliation",
"reconciliation": {
"compare_local": "committed outbox counts per class, tenant and explicit since/until window, with pending deliveries counted as lag",
"compare_observed": "audit-core GET /v1/reconciliation for the exact pin source and tenant, once receiver acceptance-time windows are compatible with local counts; time-basis contract pending",
"divergence": "finding",
"undrained_local": "lag-not-divergence"
},
"extensions": {
"netkingdom": {
"evidence_class": "load-bearing",
"rate_monitoring": "forbidden"
}
},
"heartbeat": {
"event_class": "audit-core.heartbeat",
"interval_seconds": 86400,
"assertion": "nothing-to-report",
"missing": "finding",
"extensions": {
"flex-auth": {
"asserted_class": "flex-auth.decision.deny",
"observer_registration_status": "pending"
}
}
}
},
{
"source_id": "flex-auth:redact",
"event_class": "flex-auth.decision.redact",
"form": "heartbeat-or-reconciliation",
"reconciliation": {
"compare_local": "committed outbox counts per class, tenant and explicit since/until window, with pending deliveries counted as lag",
"compare_observed": "audit-core GET /v1/reconciliation for the exact pin source and tenant, once receiver acceptance-time windows are compatible with local counts; time-basis contract pending",
"divergence": "finding",
"undrained_local": "lag-not-divergence"
},
"extensions": {
"netkingdom": {
"evidence_class": "load-bearing",
"rate_monitoring": "forbidden"
}
},
"heartbeat": {
"event_class": "audit-core.heartbeat",
"interval_seconds": 86400,
"assertion": "nothing-to-report",
"missing": "finding",
"extensions": {
"flex-auth": {
"asserted_class": "flex-auth.decision.redact",
"observer_registration_status": "pending"
}
}
}
},
{
"source_id": "flex-auth:not_applicable",
"event_class": "flex-auth.decision.not_applicable",
"form": "heartbeat-or-reconciliation",
"reconciliation": {
"compare_local": "committed outbox counts per class, tenant and explicit since/until window, with pending deliveries counted as lag",
"compare_observed": "audit-core GET /v1/reconciliation for the exact pin source and tenant, once receiver acceptance-time windows are compatible with local counts; time-basis contract pending",
"divergence": "finding",
"undrained_local": "lag-not-divergence"
},
"extensions": {
"netkingdom": {
"evidence_class": "load-bearing",
"rate_monitoring": "forbidden"
}
},
"heartbeat": {
"event_class": "audit-core.heartbeat",
"interval_seconds": 86400,
"assertion": "nothing-to-report",
"missing": "finding",
"extensions": {
"flex-auth": {
"asserted_class": "flex-auth.decision.not_applicable",
"observer_registration_status": "pending"
}
}
}
},
{
"source_id": "flex-auth:audit_only",
"event_class": "flex-auth.decision.audit_only",
"form": "heartbeat-or-reconciliation",
"reconciliation": {
"compare_local": "committed outbox counts per class, tenant and explicit since/until window, with pending deliveries counted as lag",
"compare_observed": "audit-core GET /v1/reconciliation for the exact pin source and tenant, once receiver acceptance-time windows are compatible with local counts; time-basis contract pending",
"divergence": "finding",
"undrained_local": "lag-not-divergence"
},
"extensions": {
"netkingdom": {
"evidence_class": "load-bearing",
"rate_monitoring": "forbidden"
}
},
"heartbeat": {
"event_class": "audit-core.heartbeat",
"interval_seconds": 86400,
"assertion": "nothing-to-report",
"missing": "finding",
"extensions": {
"flex-auth": {
"asserted_class": "flex-auth.decision.audit_only",
"observer_registration_status": "pending"
}
}
}
},
{
"source_id": "flex-auth:allow:rate",
"event_class": "flex-auth.decision.allow",
"form": "expected-rate",
"window_seconds": 3600,
"expected_min": 1,
"drop_below": "finding",
"extensions": {
"netkingdom": {
"evidence_class": "load-bearing",
"rate_monitoring": "permitted"
},
"flex-auth": {
"reconciliation": {
"compare_local": "committed outbox counts per class, tenant and explicit since/until window, with pending deliveries counted as lag",
"compare_observed": "audit-core GET /v1/reconciliation for the exact pin source and tenant, once receiver acceptance-time windows are compatible with local counts; time-basis contract pending",
"divergence": "finding",
"undrained_local": "lag-not-divergence"
},
"reason": "The generic expected-rate form forbids a reconciliation block; this source-owned extension preserves the additional reconciliation guarantee without a duplicate event class."
}
}
}
],
"extensions": {
"flex-auth": {
"state": "declared-not-yet-emitting",
"gap": "G2",
"inventory": {
"load_bearing": [
"flex-auth.decision.deny",
"flex-auth.decision.redact",
"flex-auth.decision.not_applicable",
"flex-auth.decision.audit_only",
"flex-auth.decision.allow"
],
"rare_load_bearing": [
"flex-auth.decision.deny",
"flex-auth.decision.redact",
"flex-auth.decision.not_applicable",
"flex-auth.decision.audit_only"
],
"attributive": []
},
"contract": {
"owner": "info-tech-canon",
"schema_sha256": "6d52692eb1e4d1325e0d6062d95acded98beddaae5bcfe24c6f0e91f1b6be6ae"
},
"lag_bound": {
"outbox_depth": 100,
"outbox_age": "1h",
"exceed": "finding"
},
"bound": "Heartbeat and reconciliation detect loss, outage, drain failure and accident. Neither detects a compromised source suppressing an event and its own count together \u2014 \u00a79.6's stated residual, and \u00a716 puts the independent observer outside audit-core's scope. Conformance to this declaration is not a claim of stream completeness."
}
}
}

View file

@ -0,0 +1,70 @@
# Decision emission preparation
FLEX-WP-0031 implements a durable local outbox, daily per-class heartbeats,
asynchronous delivery and optional PVC. Every pin still defaults to no outbox
and no delivery worker. `cadence.yaml` remains declared-not-yet-emitting; G2
does not close on local tests or chart rendering.
After sender admission and the exact approved rollout, enable the chart's
`outbox.enabled`, choose a unique `outbox.source` for the pin, and set
`outbox.size` against measured capacity and expected cumulative log growth.
`outbox.existingClaim` can reuse its own retained claim. New claims carry Helm's keep policy so uninstall does not remove the
evidence log; any eventual claim cleanup needs its own reviewed action.
The chart enforces one
replica and Recreate; each source requires its own outbox. Never run two
processes against one outbox directory. The fsGroup permits the non-root
process to write the mount while keeping its root filesystem read-only.
Delivery requires explicit serve flags:
```text
--audit-url <admitted audit-core http(s) /v1/events endpoint>
--audit-token-file <governed mounted sender token path>
```
Neither flag is enabled by the chart or any checked-in production pin. These
flags require `--outbox-dir`; the source is supplied by `--emission-source`.
The worker reads the token file per event to support rotation, refuses HTTP
redirects, and does not log tokens or receiver response bodies. Receiver
authentication/network admission and token mounts remain owner dependencies.
The worker commits due heartbeats into the same log as decisions, then drains
bounded batches in order. The daily timestamp is recovered from the committed
log after restart. Each heartbeat has its own event/correlation ID and carries
`data.class`, committed count and the process's released-uncommitted count.
Known uncommitted releases produce `released-uncommitted-finding` instead of a
nothing-to-report assertion. This count is volatile across restart, as the
existing atomicity ruling states; the heartbeat does not strengthen that bound.
Only documented 200 (duplicate) and 202 (accepted) responses advance
`drain.json`. The cursor is fsynced, atomically replaced and its directory
synced. A rejection, timeout or cursor-write failure retains the event and
replays its original idempotency key. A failing head event blocks subsequent
delivery rather than being dropped. HTTP occurs outside the decision lock.
`GET /v1/emission` reports committed and released-uncommitted decision counts,
pending event depth, oldest pending commit time and `lag_exceeded` when depth
exceeds 100 or age exceeds 1h. Counts include no record payload. The drain
cursor advances over heartbeats as well as decisions; pending depth includes
both. Acknowledged entries are retained in the append-only log. There is no
compaction/retention worker, so operators must plan storage and monitoring for
cumulative log growth before rollout.
`docs/contracts/decision-emission-cadence.json` is the schema-valid wire
declaration for receiver registration. It names all five classes explicitly;
allow's additional reconciliation obligation is in a source extension because
the generic expected-rate form prohibits a reconciliation block and the
security profile prohibits duplicate classes. audit-core's parser accepts the
declaration; that does not prove native sender admission or evaluation of the
source extension.
Run `make verify-emission-cadence` against the sibling InfoTechCanon schema and
NetKingdom profile checker. The declaration pins the schema SHA-256 and the
check rejects drift. Go tests check inventory/heartbeat parity; chart checks
exercise auth on/off, existing/new PVCs and refusal of multiple replicas.
A valid remote comparator remains blocked: audit-core windows use receiver
accepted_at, and local windows would use commit time. The current ingest
receipt contains no acceptance timestamp. Comparing these directly would
manufacture divergence after delayed delivery. Requirements and native
acceptance gates are in `blocked-task-dependencies-2026-10-04.md`.

View file

@ -0,0 +1,33 @@
{
"assessment_scope": "supplied-inventory",
"conformant": true,
"contract_schema": "/home/worsch/info-tech-canon/infospace/schemas/emission-cadence.schema.yaml",
"contract_valid": true,
"declaration": "/home/worsch/access-engine/docs/contracts/decision-emission-cadence.json",
"findings": [],
"inventory": {
"attributive": [],
"load_bearing": [
"flex-auth.decision.allow",
"flex-auth.decision.audit_only",
"flex-auth.decision.deny",
"flex-auth.decision.not_applicable",
"flex-auth.decision.redact"
],
"rare_load_bearing": [
"flex-auth.decision.audit_only",
"flex-auth.decision.deny",
"flex-auth.decision.not_applicable",
"flex-auth.decision.redact"
]
},
"profile": "netkingdom-emission-cadence-security-profile-v0.1",
"profile_assessed": true,
"summary": {
"must": 0,
"should": 0
},
"reviewed": "2026-10-04",
"declaration_sha256": "6a4af47ebeab0d387d7088adb9601a79fa8a1eeb5c581ec9e15f0ace2977ccc5",
"scope": "Source declaration/schema/profile only; no native audit-core delivery or silence finding claimed."
}

View file

@ -0,0 +1,47 @@
{
"reviewed": "2026-10-04",
"task": "FLEX-WP-0027-T03",
"owner_record": "SECRETS-WP-0010-T03",
"source_receipt": "secrets-engine/docs/evidence/2026-09-16-t03-completion.json",
"source_sha256": "f68b38a3968373fa0811a5906756b63d9dade40475b341b12937c3668b182b3f",
"scope": "Original three T03 reviews, renewed version-2 approvals completed on 2026-09-16; excludes later version-3 IR-WP-0005 run",
"owner_human_acceptance_record": "secrets-engine/workplans/SECRETS-WP-0010-openrouter-native-access.md, T03 completed with native delivery \u2014 2026-09-16",
"native_actions": [
{
"action": "apply",
"actor": "worsch",
"result": "applied",
"record_id": "fb256f9f-303b-4a7f-a060-71b713e2c085",
"decision_id": "decision:dc57b3b9614aa15b",
"ts": "2026-09-16T00:05:09.827448+00:00",
"approval_id": "9935335c-8e9a-566e-a48e-6a5b5f4882eb",
"approval_consumed_at": "2026-09-16T00:05:09+00:00",
"request_digest": "sha256:c5c44adc715385640dffeb3305ff854fc69bd800929f8c31f93a536524089831"
},
{
"action": "verify",
"actor": "worsch",
"result": "pass",
"record_id": "39f8084d-c3f4-443a-8272-2cda87c46c89",
"decision_id": "decision:b4fca706e4c55b9a",
"ts": "2026-09-16T00:05:12.565647+00:00",
"approval_id": "273d6882-6253-5dc9-ac54-544f92ef5e56",
"approval_consumed_at": "2026-09-16T00:05:11+00:00",
"request_digest": "sha256:a735896e9d208032ea08b073bcc819864b12116bdf60852fcdd2e54dad2e62bf"
},
{
"action": "exec",
"actor": "worsch",
"result": "exit-0",
"record_id": "3823a903-1a13-4d85-aef0-cc2e05c477a0",
"decision_id": "decision:82cec64febcf635f",
"ts": "2026-09-16T00:08:30.937892+00:00",
"approval_id": "7ba0c13b-68cd-5b3e-9481-42ba9e385e68",
"approval_consumed_at": "2026-09-16T00:08:32+00:00",
"request_digest": "sha256:4082d2ccad78097a8be34ff0b0221ed2c4b6407fdbaf36e4a583927ae9acc820"
}
],
"approval_state": "All three native claims inspected as consumed after completion",
"new_execution_performed": false,
"consumed_approvals_reused": false
}