Prepare the STATE-WP-0094 exact-record admission and store load (v10, not executed).

Bound copies of the four memos carry the receipt's approval ids and
engine-computed binding digests. DEPLOY-v10.md proposes the flex-auth v10
upgrade, the review ConfigMap informed-decision-runtime-75ab117cc787, a
self-contained store load and recovery to revision 9. Nothing is deployed,
admitted or loaded. Approvals expire 2026-10-05T12:19:09Z.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 692292@bnt-lap001
Assistant-Session: 89c7d8e8-e1b3-47eb-9411-a0ab227fca2f
This commit is contained in:
tegwick 2026-10-04 14:47:02 +02:00
parent e3b92e389c
commit 470b372202
15 changed files with 725 additions and 6 deletions

View file

@ -0,0 +1,159 @@
# STATE-WP-0094 memo admission — PROPOSED, NOT EXECUTED
> **Approvals expire `2026-10-05T12:19:09Z`.** All four (`974eae4d`, `77993081`,
> `4ae04c8e`, `b75752d1`) must be answered before then. If they lapse, none of
> this package applies: new approvals mean new digests, new bound memos and a
> new policy version.
Status: prepared by an agent on 2026-10-04. Nothing below has been run. It needs
the founder's separate "yes, deploy it". It admits four exact records and loads
four unanswered memos. It does not accept, decline or seal any memo, and it
does not resolve hub decision `7b19de6c-72a1-409e-89a9-ec3ac09c03fd`.
## Live state read before preparation (read-only, 2026-10-04)
- Helm release `flex-auth-informed-decision-sitting`, namespace `flex-auth`:
**revision 9**, `deployed` 2026-10-04T02:06:18+02:00, chart `flex-auth-0.2.0`.
Image `forgejo.coulomb.social/coulomb/flex-auth@sha256:aa7ccbafb2a8f884c97119e295fd168fa4e67e974682a8c30b35149201469eff`
(v9, CI build of access-engine `103d8b6`). `helm get values` equals
access-engine `values/informed-decision-sitting.yaml` at `58e33d2`.
- Deployment `informed-decision` (ns `informed-decision`): volume
`configuration` → ConfigMap `informed-decision-runtime-35b00b8608e0` (v9 pin;
`tools/render_deployment.py` on `deploy/sitting-admission.json` reproduces
it byte for byte). Image
`forgejo.coulomb.social/coulomb/informed-decision@sha256:ccca0b377bb8ba6af52a37edc453b5b51c96e380840ec8243ffaab3ac2170885`, unchanged by this package.
## Inputs prepared
| Item | Value |
|---|---|
| Receipt | `docs/evidence/2026-10-04-state-hub-wp0094-approval-create.json` |
| Bound memos | `bound/` (4 memos + packets + `index.json`), principal `uid=platform-root,ou=people,dc=netkingdom,dc=local` |
| Policy source | access-engine `58026ea34a13f0bef103957e10818ea3b1d4458a` (local, **not pushed**) |
| Policy version / digest | `v10` / `sha256:ede11f888d57809dfce1b04d2323708c7244f36187fd5a58dd738437a05e7e91` (computed with `policy.Package.Digest()`; the same method reproduces live v9 `sha256:28fcb6c0…e148f`) |
| Runtime input | `proposed/sitting-admission-v10.json` (only `policy.version` and `policy.package_digest` differ from `deploy/sitting-admission.json`) |
| New ConfigMap | `informed-decision-runtime-75ab117cc787` in `proposed/review-rollout-v10.json` |
| Store load | `proposed/store-load-v10.py` (self-contained, embeds `bound/`; tested on a scratch store only) |
| Memo | Approval | Binding digest |
|---|---|---|
| `state-hub-edge-receiving-rollout-c287ed8` | `974eae4d-782d-41ed-93be-e34433b5fe59` | `sha256:84735b88b2db20d9445af369e28a8d40bd495dd20c0303ff3a764666ec976dde` |
| `owner-return-pickup-plan-b6222af` | `77993081-1db2-4bba-99f2-74ca1f8652b1` | `sha256:e745ef64658e77e41b2a5ef569ec0f6986e120d338656d75749425f5f29b7ca0` |
| `freshness-runner-deploy-trial-e77f8b4` | `4ae04c8e-d604-4d8b-b166-693eef855da8` | `sha256:f8ff89dd353c1d2006622c45996c0f05f050865f8c203373dc74da1ba3f05e24` |
| `freshness-schedule-enable-retire-sweep` | `b75752d1-bab6-4cf3-9308-5368c1d5aa91` | `sha256:cc3e8fe6ace5438f19d647d3de226407c8b009985c82ad9a993e81226e6f316f` |
## Steps (in order)
**0. Build the v10 image.** Push access-engine `58026ea` through its normal sync
(`statehub fix-consistency --repo access-engine`, which pushes main). The
change touches `examples/**` and `internal/**`, so `.forgejo/workflows/image.yaml`
builds `forgejo.coulomb.social/coulomb/flex-auth:main-58026ea`. Obtain the
digest from the CI step "Report immutable digest" (`docker inspect` RepoDigests
line), and confirm it independently:
```bash
docker pull forgejo.coulomb.social/coulomb/flex-auth:main-58026ea
docker inspect --format='{{index .RepoDigests 0}}' forgejo.coulomb.social/coulomb/flex-auth:main-58026ea
```
Both must agree. Call it `<V10_DIGEST>` below. Verify the image carries v10:
```bash
docker run --rm --entrypoint cat forgejo.coulomb.social/coulomb/flex-auth@<V10_DIGEST> \
/opt/flex-auth/examples/informed-decision-sitting/policy.md | grep -E '^version: v10$|974eae4d|b75752d1'
```
**1. Pin and upgrade the policy release.** In access-engine set
`values/informed-decision-sitting.yaml` `image.digest: <V10_DIGEST>` (comment:
"CI image of 58026ea (v10 adds the four STATE-WP-0094 memos)") and update
`TestSittingImagePinMatchesRecordedBuild` to the same digest; commit. Checked on 2026-10-04: `helm template` of the current chart
(access-engine `charts/flex-auth`, changed in `3cb1cfa` after v9) with these values
renders identical to the live revision-9 manifest, so the upgrade changes only the
image digest. Re-run that comparison against the edited values before upgrading:
```bash
cd /home/worsch/access-engine
diff <(helm -n flex-auth get manifest flex-auth-informed-decision-sitting) \
<(helm template flex-auth-informed-decision-sitting charts/flex-auth -n flex-auth \
-f values/informed-decision-sitting.yaml) # expect only the image line
```
Then:
```bash
helm upgrade flex-auth-informed-decision-sitting /home/worsch/access-engine/charts/flex-auth \
-n flex-auth -f /home/worsch/access-engine/values/informed-decision-sitting.yaml
helm -n flex-auth history flex-auth-informed-decision-sitting # expect revision 10 deployed
kubectl -n flex-auth rollout status deploy/flex-auth-informed-decision-sitting
```
**2. Policy checks.**
- Published image (offline, mirrors v9): extract the binary and run
`python3 tools/exercise_sitting_review_policy.py --binary <extracted flex-auth> --receipt /tmp/v10-image-exercise.json`
in access-engine. Expected: every check passes (the source build gave 1005).
This covers, for each of the four records, exact read allow
`operator_admitted_compact_sitting`; wrong binding digest deny; and the
`TestWP0094ExactRecords` cases (foreign approval id deny, v9 record still
allowed, attribute-shaped unlisted memo deny `unknown_class`).
- Live service, from inside the review pod with the image's policy client as
for v9: the v10 pin (`v10`, `sha256:ede11f88…7e91`) returns allow; the old v9
pin returns `invalid_decision`. Until step 3 the review pod still holds the
v9 pin, so live reads fail closed in that window — keep it short.
**3. Swap the review runtime ConfigMap.**
```bash
cd /home/worsch/informed-decision
python3 - <<'EOF' > /tmp/cm-v10.json
import json; l=json.load(open('docs/batches/2026-10-04-state-hub-wp0094/proposed/review-rollout-v10.json'))
print(json.dumps([i for i in l['items'] if i['kind']=='ConfigMap'][0]))
EOF
kubectl -n informed-decision create -f /tmp/cm-v10.json # immutable informed-decision-runtime-75ab117cc787
kubectl -n informed-decision patch deploy informed-decision --type strategic -p \
'{"spec":{"template":{"spec":{"volumes":[{"name":"configuration","configMap":{"name":"informed-decision-runtime-75ab117cc787","defaultMode":292}}]}}}}'
kubectl -n informed-decision rollout status deploy/informed-decision
```
The rendered Deployment in `review-rollout-v10.json` differs from live only in
that volume. Keep `informed-decision-runtime-35b00b8608e0`. Then in this repo set
`deploy/sitting-admission.json` to the contents of
`proposed/sitting-admission-v10.json` and commit.
**4. Back up the store, then load.**
```bash
kubectl -n informed-decision exec deploy/informed-decision -- \
informed-decision-admin backup --db /data/private/review.sqlite \
--output /data/private/review-20261004-pre-wp0094.sqlite
kubectl -n informed-decision exec -i deploy/informed-decision -- \
/opt/venv/bin/python - --db /data/private/review.sqlite \
< docs/batches/2026-10-04-state-hub-wp0094/proposed/store-load-v10.py
```
Expected output: `"status": "loaded"`, the four memo ids, memos +4, and
`presentations`, `acknowledgments`, `dispositions` unchanged
(`no_presentation_or_disposition_created: true`). The script refuses, changing
nothing, if any memo id is already stored, a packet hash differs, or the store's
presentations are not exactly the bound principal. Do not retry a refusal
without reading it.
**5. Record.** Write `docs/evidence/2026-10-04-state-hub-wp0094-v10-rollout.json`
(shape of `2026-10-04-emergent-profile-v9-rollout.json`, one row per memo),
set `sitting.json` status `loaded` with `policy_version: v10` and the digest, and
rewrite this file's header as deployed.
## Recovery
```bash
helm rollback flex-auth-informed-decision-sitting 9 -n flex-auth
kubectl -n informed-decision patch deploy informed-decision --type strategic -p \
'{"spec":{"template":{"spec":{"volumes":[{"name":"configuration","configMap":{"name":"informed-decision-runtime-35b00b8608e0","defaultMode":292}}]}}}}'
```
and revert `deploy/sitting-admission.json` to v9. The v9 profile memo keeps
working under v9. The four loaded memos would then fail the v9 exact-record rule
until v10 is restored; they stay unanswered. The pre-load backup restores the
store per `deploy/README.md` if ever needed. No automatic approval recreation.
The founder answers each memo at https://decisions.coulomb.social/ with fresh
MFA, before **2026-10-05T12:19:09Z**.

View file

@ -39,10 +39,13 @@ admitted or loaded.
```
Read warden's printed line, not its exit code. Do not retry when a receipt
was not retained.
3. Exact-record admission and store load: a new access-engine policy version
that admits exactly these four memos, plus the review runtime ConfigMap,
following the v9 pattern in `../2026-10-04-emergent-profile/DEPLOY-v9.md`.
This is its own deploy and needs your separate "yes, deploy it".
3. Exact-record admission and store load: **prepared, not executed** in
`DEPLOY-v10.md`. Policy v10 (access-engine `58026ea`) admits exactly these
four memos; review runtime pin `informed-decision-runtime-75ab117cc787`;
bound memos in `bound/`. Approvals `974eae4d`, `77993081`, `4ae04c8e`,
`b75752d1` (receipt `docs/evidence/2026-10-04-state-hub-wp0094-approval-create.json`)
expire **2026-10-05T12:19:09Z**. This is its own deploy and needs your
separate "yes, deploy it".
4. Answer each memo at the surface with fresh MFA.
## After an answer

View file

@ -0,0 +1 @@
{"approval_binding_digest":"sha256:f8ff89dd353c1d2006622c45996c0f05f050865f8c203373dc74da1ba3f05e24","approval_id":"4ae04c8e-d604-4d8b-b166-693eef855da8","binding":{"justification":null,"principal":{"display_name":"uid=platform-root,ou=people,dc=netkingdom,dc=local","id":"uid=platform-root,ou=people,dc=netkingdom,dc=local","identifiers":[],"kind":"person","role":"reviewer"},"target":{"environment":"production","id":"repo-manager:source:e77f8b457647ff23697e45a74615edde5f42d39d","kind":"service-release","label":"rmgr freshness runner","requires_new_bind":true},"terms":null},"binding_level":"organizational","brief":"Deployment and limited data-writing trials; no schedule.","highlights":[{"id":"no-schedule","item_id":"freshness-runner-deploy-trial-e77f8b4-packet","locator":{"kind":"work_record","task":"RMGR-WP-0020-T04","workplan":"RMGR-WP-0020"},"note":"Trial fires write projections through the normal reconcile endpoint; no schedule is enabled by this answer and packaging is shown before execution.","required_ack":true,"severity":"critical"}],"id":"freshness-runner-deploy-trial-e77f8b4","locale":"en","packet":[{"hash":"sha256:2873f6deadd938ec07e1a4d5f314f8dbf456a00893d06cf89ce7eecb14bf9985","item_id":"freshness-runner-deploy-trial-e77f8b4-packet","label":"Change, evidence, rollback and limits"}],"question":"Deploy the repo-manager bounded freshness runner (e77f8b4) to the Activity Core worker and run up to three --limit 3 trial fires?","requested_act":"approve","sealed":false,"step_kind":"approve","ui_release":"informed-decision@0.2.0","version":1}

View file

@ -0,0 +1,39 @@
# Deploy the bounded freshness runner and run limited trials (RMGR-WP-0020-T04)
Approve deploying repo-manager e77f8b457647ff23697e45a74615edde5f42d39d
(rmgr freshness run) for use by the Activity Core worker, and up to three
operator-triggered fires with --limit 3, plus dry runs.
What the runner does: picks the stalest repositories, skips repositories whose
Forge HEAD equals their last successful receipt, and calls the existing
POST /repos/{slug}/work-record-projection/reconcile for the immutable Forge
commit. It never reads a checkout, never uses --all --remote or the sweep
endpoints, never forces past a refusal, and writes no receipt unless the hub is
verified as the primary on railiance01. Receipts are an append-only JSON Lines
file (repo-manager.freshness-receipt.v1).
What deployment includes:
- Packaging rmgr onto the Activity Core worker (method still to be chosen and
shown in the rollout document before execution).
- A persistent volume for the receipt file.
- A read-only Forgejo token routed through warden route/OpenBao; no secret is
placed in Git, the hub or this memo.
- The code-reviewed Activity Core bounded operation repo_manager_freshness
(activity-core b2c6c5613218dea9dbaef303aff22a8d1b07f074): fixed command line,
limit 1 to 12, max_seconds 1 to 270, no retry, 300 s timeout, stores counts only.
Evidence: 226 repo-manager tests pass; ruff clean on changed files. A read-only
dry run against the primary verified the hub, saw 141 repositories and planned
clay-borg, python-snake, repo-scoping, shard-wiki, tele-mcp, citation-work.
Activity Core reads the runner's results[] (fixed in b2c6c56; 35 tests pass).
Stop conditions: a receipt from an unverified primary, any checkout read, a fire
exceeding max_seconds twice, or any refusal pattern not explained by known holes
(RMGR-WP-0019-T03 duplicate projections, RMGR-WP-0014/0015 refusals).
Rollback: remove the operation from the worker; receipts are kept; projections
are idempotent per commit, so no data rollback is needed.
Alternatives: approve deploy and trials; approve dry runs only; return; decline.
This answer does not enable any schedule and does not resolve hub decision
7b19de6c-72a1-409e-89a9-ec3ac09c03fd.

View file

@ -0,0 +1 @@
{"approval_binding_digest":"sha256:cc3e8fe6ace5438f19d647d3de226407c8b009985c82ad9a993e81226e6f316f","approval_id":"b75752d1-bab6-4cf3-9308-5368c1d5aa91","binding":{"justification":null,"principal":{"display_name":"uid=platform-root,ou=people,dc=netkingdom,dc=local","id":"uid=platform-root,ou=people,dc=netkingdom,dc=local","identifiers":[],"kind":"person","role":"reviewer"},"target":{"environment":"production","id":"activity-core:definition:repo-manager-bounded-freshness:b2c6c5613218dea9dbaef303aff22a8d1b07f074","kind":"activity-schedule","label":"Bounded freshness schedule","requires_new_bind":true},"terms":null},"binding_level":"organizational","brief":"Recurring schedule activation after clean trials, and permanent retirement of the legacy sweep.","highlights":[{"id":"after-clean-trials","item_id":"freshness-schedule-enable-retire-sweep-packet","locator":{"kind":"work_record","task":"RMGR-WP-0020-T04","workplan":"RMGR-WP-0020"},"note":"Only after memo 3 trials completed without a stop condition; retirement removes the legacy --all --remote path.","required_ack":true,"severity":"critical"}],"id":"freshness-schedule-enable-retire-sweep","locale":"en","packet":[{"hash":"sha256:8389b3fbf7b4b5267b7ed9f8ad0381c88600181f112148736e9e81a4df579c5c","item_id":"freshness-schedule-enable-retire-sweep-packet","label":"Change, evidence, rollback and limits"}],"question":"Enable the repo-manager-bounded-freshness schedule and retire the paused state-hub-consistency-sweep definition?","requested_act":"approve","sealed":false,"step_kind":"approve","ui_release":"informed-decision@0.2.0","version":1}

View file

@ -0,0 +1,33 @@
# Enable the bounded freshness schedule and retire the legacy sweep (RMGR-WP-0020-T04/T05)
Approve setting the Activity Core definition repo-manager-bounded-freshness
(activity-core b2c6c5613218dea9dbaef303aff22a8d1b07f074, ACTIVITY-WP-0044-T03)
to enabled: true, and formally retiring the paused state-hub-consistency-sweep
definition (enabled: false since RMGR-WP-0005-T11).
Only after memo 3's trial fires completed without hitting a stop condition and
their receipts are recorded as evidence.
Schedule: cron 40 */2 * * * UTC, misfire skip, limit 6, max_seconds 240. This
rotates the 141 active repositories in about two days, against a 48 h target.
Why: on 2026-10-04 only 35 of 141 repositories (25 %) had synced within 24 h;
median age 109 h, p90 292 h, maximum about 39.5 days. No supported schedule
exists and nothing records per-repository source commits or failures
(repo-manager docs/evidence/2026-10-04-freshness-coverage.md).
After two days, the evidence is re-measured and handed back to STATE-WP-0094-T05:
runner revision, active definition, per-repository commit, last successful and
failed receipts, measured freshness window. Coverage holes stay listed.
Stop and disable conditions: as in memo 3, plus any fire overlapping the next.
Rollback: set enabled: false; nothing else to undo.
Retiring the legacy sweep means its definition is removed or marked retired, so
the --all --remote path cannot be re-enabled by a values change. ADR-002 already
forbids its checkout reads.
Alternatives: approve both; approve the schedule but keep the legacy definition
paused; return; decline. This answer does not resolve hub decision
7b19de6c-72a1-409e-89a9-ec3ac09c03fd.

View file

@ -0,0 +1,33 @@
{
"kind": "informed-decision-bound-sitting",
"sitting_id": "infd-sitting-2026-10-04-state-hub-wp0094",
"principal": "uid=platform-root,ou=people,dc=netkingdom,dc=local",
"submitted": false,
"agent_disposition_forbidden": true,
"memos": [
{
"memo_id": "state-hub-edge-receiving-rollout-c287ed8",
"approval_id": "974eae4d-782d-41ed-93be-e34433b5fe59",
"memo": "state-hub-edge-receiving-rollout-c287ed8.memo.json",
"packet": "state-hub-edge-receiving-rollout-c287ed8.packet.md"
},
{
"memo_id": "owner-return-pickup-plan-b6222af",
"approval_id": "77993081-1db2-4bba-99f2-74ca1f8652b1",
"memo": "owner-return-pickup-plan-b6222af.memo.json",
"packet": "owner-return-pickup-plan-b6222af.packet.md"
},
{
"memo_id": "freshness-runner-deploy-trial-e77f8b4",
"approval_id": "4ae04c8e-d604-4d8b-b166-693eef855da8",
"memo": "freshness-runner-deploy-trial-e77f8b4.memo.json",
"packet": "freshness-runner-deploy-trial-e77f8b4.packet.md"
},
{
"memo_id": "freshness-schedule-enable-retire-sweep",
"approval_id": "b75752d1-bab6-4cf3-9308-5368c1d5aa91",
"memo": "freshness-schedule-enable-retire-sweep.memo.json",
"packet": "freshness-schedule-enable-retire-sweep.packet.md"
}
]
}

View file

@ -0,0 +1 @@
{"approval_binding_digest":"sha256:e745ef64658e77e41b2a5ef569ec0f6986e120d338656d75749425f5f29b7ca0","approval_id":"77993081-1db2-4bba-99f2-74ca1f8652b1","binding":{"justification":null,"principal":{"display_name":"uid=platform-root,ou=people,dc=netkingdom,dc=local","id":"uid=platform-root,ou=people,dc=netkingdom,dc=local","identifiers":[],"kind":"person","role":"reviewer"},"target":{"environment":"production","id":"activity-core:source:b6222af2cfd1094360a0d430e3907e8788a3acf9:owner-return-pickup","kind":"activity-plan","label":"Owner-return pickup","requires_new_bind":true},"terms":null},"binding_level":"organizational","brief":"Plan approval plus a gated single-repo trial; the definition stays disabled and wakeups never clear waits.","highlights":[{"id":"preconditions-open","item_id":"owner-return-pickup-plan-b6222af-packet","locator":{"kind":"work_record","task":"ACTIVITY-WP-0043-T04","workplan":"ACTIVITY-WP-0043"},"note":"submit: true only after memo 1 is deployed and a plan-only run was reviewed; the C-25 report is operator-produced and only public repositories can be targeted.","required_ack":true,"severity":"critical"}],"id":"owner-return-pickup-plan-b6222af","locale":"en","packet":[{"hash":"sha256:dacfb39b22a578d8c6ce3bdf7bd90a6ba8f1612a500b8336355ca5ec02816b9d","item_id":"owner-return-pickup-plan-b6222af-packet","label":"Change, evidence, rollback and limits"}],"question":"Approve the owner-return pickup plan, definition, grant and worker operation, and one single-repository trial (plan-only, then submit)?","requested_act":"approve","sealed":false,"step_kind":"approve","ui_release":"informed-decision@0.2.0","version":1}

View file

@ -0,0 +1,55 @@
# Approve the owner-return pickup plan and a gated trial (STATE-WP-0094-T03, ACTIVITY-WP-0043)
Approve, at activity-core b6222af2cfd1094360a0d430e3907e8788a3acf9, the
owner-return pickup activation plan (docs/owner-return-pickup-activation-plan.md),
its ActivityDefinition owner-return-pickup (stays enabled: false), harness
profile harness.agent-dev-local@1.0.0, repository grant v1 (workplans path only,
exactly one commit, no publish), and the worker operation owner_return_pickup.
Also approve one operator-triggered trial for a single public repository: first
with submit: false (plan only, no writes), then once with submit: true.
What this does: when an agent replied to a task that waits on it, the owner is
woken once through an Activity Core ops run. The wakeup ID is a sha256 of repo,
task and message; the database unique key stops duplicates. A wakeup never
clears a wait, task status, human gate or any other field. Tasks needing a
human, unresolved or unknown decisions, residual work, nonterminal or unknown
predecessors and future wait windows are stopped.
How a run is bound (built and tested at source level):
- The operator runs the State Hub checker (state-hub 150cb0b or later) for the
target repository on a clean tree and supplies its JSON, pinned by sha256.
- The report and every C-25 finding must carry the same full commit SHA; a null
revision refuses with its reason (for example dirty_workplans).
- Task state is read through Forge at exactly that commit, which must still be
the default-branch HEAD. Unknown predecessors and decisions stop the task.
- The State Hub planner runs as a drift-checked vendored copy; only reviewable
candidates are submitted, and only when ACTIVITY_CORE_OWNER_RETURN_PICKUP_ENABLED
is set. Evidence holds IDs and counts only, never message bodies.
- Triggered by POST /ops/automations/{id}/trigger with confirm_side_effect: true.
No schedule.
Preconditions before submit: true:
1. State Hub with paginated C-25 is deployed (memo 1).
2. A read-only plan run (submit: false) has produced reviewed evidence.
Gaps you accept with this answer:
- The C-25 report is produced by the operator on the workstation, not in the
cluster; no Forge-reading C-25 exists yet.
- Reply-collection completeness is inferred from the absence of the checker's
incomplete-collection warning; there is no structured per-agent page count.
- Forge reads are unauthenticated, so only public repositories can be targeted.
Trial evidence: planner input and output, receipts, and a re-run of the same
input showing every insert becomes duplicate; stored as activity-core
docs/evidence/ACTIVITY-WP-0043-*.md with a hub progress event.
Rollback: unset the flag (the operation refuses before any read); close open
rows through the normal ops-run close path, never delete them.
Evidence so far: 27 runner tests, 91 focused tests, full activity-core suite
764 passed, 1 skipped; State Hub C-25 binding 214 tests passed. No dispatch has
happened.
Alternatives: approve plan and both trial steps; approve plan and the plan-only
run; return for changes; decline. This answer does not enable the definition,
add a schedule, or resolve hub decision 7b19de6c-72a1-409e-89a9-ec3ac09c03fd.

View file

@ -0,0 +1 @@
{"approval_binding_digest":"sha256:84735b88b2db20d9445af369e28a8d40bd495dd20c0303ff3a764666ec976dde","approval_id":"974eae4d-782d-41ed-93be-e34433b5fe59","binding":{"justification":null,"principal":{"display_name":"uid=platform-root,ou=people,dc=netkingdom,dc=local","id":"uid=platform-root,ou=people,dc=netkingdom,dc=local","identifiers":[],"kind":"person","role":"reviewer"},"target":{"environment":"production","id":"state-hub:source:c287ed82594313394ca8e67ce40714c90e744af6","kind":"service-release","label":"State Hub main-c287ed8","requires_new_bind":true},"terms":null},"binding_level":"organizational","brief":"Production rollout of tested source; rollback is helm rollback to revision 72 without schema downgrade.","highlights":[{"id":"deploy-only","item_id":"state-hub-edge-receiving-rollout-c287ed8-packet","locator":{"kind":"work_record","task":"STATE-WP-0094-T05","workplan":"STATE-WP-0094"},"note":"Approves this deployment and its post-deploy proof only; it does not mark T05 done, schedule freshness, or adopt existing C-20/API edges.","required_ack":true,"severity":"critical"}],"id":"state-hub-edge-receiving-rollout-c287ed8","locale":"en","packet":[{"hash":"sha256:7fbc4b37d513e711cf1b62e393f2f060df378975efab4d11473fd8b1567cd0dd","item_id":"state-hub-edge-receiving-rollout-c287ed8-packet","label":"Change, evidence, rollback and limits"}],"question":"Deploy State Hub c287ed8 (source-owned dependency-edge receiving, paginated C-25, additive migration) to railiance01?","requested_act":"approve","sealed":false,"step_kind":"approve","ui_release":"informed-decision@0.2.0","version":1}

View file

@ -0,0 +1,43 @@
# Deploy State Hub dependency-edge receiving (STATE-WP-0094-T05)
Deploy State Hub source c287ed82594313394ca8e67ce40714c90e744af6 (CI image
main-c287ed8, digest verified before use) to railiance01, replacing Helm
revision 72 (main-5dd3df9).
What ships:
- Forge receiving derives depends_on edges from the immutable source commit and
reconciles only rows it owns (source_owner = forge:<repo>). Rows created by
the API, MCP or the C-20 fix are never changed or adopted. Missing, ambiguous
or self targets are listed as unresolved, never dropped. One transaction per
receive; a repeat receive of the same commit is a noop.
- The projection dry run previews edge create/remove/unresolved/external.
- C-25 owner-reply collection pages through all replies (200 per page, at most
50 pages); GET /messages/ gains a stable offset.
- Additive migration b3c4d5e6f7a8: two nullable columns and one index on
workplan_dependencies. Upgrade, downgrade and re-upgrade verified on a scratch
PostgreSQL database; existing rows keep owner NULL.
Evidence: full suite 1018 passed; 138 passed in the projection suites; the
consistency checker gives byte-identical findings before and after these commits
(27 C-03 failures are pre-existing). Ruff was not available; no lint claim.
Procedure: state-hub docs/rollout-dependency-edge-receiving.md. Helm upgrade
with --reuse-values --set image.tag --atomic --timeout 3m; migration in the
pre-upgrade hook. Proof: a normal immutable receive of state-hub must create the
STATE-WP-0095-T04 edges and list ACTIVITY-WP-0026 as unresolved, then a repeat
receive must return noop. No task PATCH or direct consistency repair counts as proof.
Rollback: helm rollback to revision 72. The schema is not downgraded: the
columns are additive and nullable, and dropping source_owner would orphan the
ownership marker.
Known limits you accept with this answer:
- Edges created earlier by C-20 or the API are never adopted, so deleting their
line from a workplan file does not remove them.
- The dry-run preview does not model receiving's refusal when a commit has no
workplans/ directory.
- This schedules nothing. Freshness stays manual until memos 3 and 4.
Alternatives: approve this rollout; return it for changes; decline it.
Approving this does not resolve hub decision 7b19de6c-72a1-409e-89a9-ec3ac09c03fd
and does not mark STATE-WP-0094-T05 done.

View file

@ -0,0 +1,219 @@
{
"apiVersion": "v1",
"kind": "List",
"items": [
{
"apiVersion": "v1",
"kind": "ConfigMap",
"metadata": {
"name": "informed-decision-runtime-75ab117cc787",
"namespace": "informed-decision",
"annotations": {
"informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08"
}
},
"immutable": true,
"data": {
"runtime.json": "{\"approval_origin\":\"http://approval-engine.approval-engine.svc.cluster.local:8080\",\"audit\":{\"origin\":\"http://audit-core.audit-core.svc.cluster.local:8080\",\"sender_token_file\":\"/var/run/secrets/informed-decision/audit/token\"},\"evidence_db\":\"/data/private/review.sqlite\",\"ordinary_approval_ids\":[\"2ce76d7f-01c3-4b63-8476-8d1230679769\",\"c2af4bcf-15b4-4305-aac1-acc7e4dcb099\",\"dc22666a-d5d7-46bc-9490-ebe9fe09dc38\"],\"policy\":{\"caller_token_file\":\"/var/run/secrets/informed-decision/policy/token\",\"origin\":\"http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080\",\"package\":\"informed-decision.compact-sitting\",\"package_digest\":\"sha256:ede11f888d57809dfce1b04d2323708c7244f36187fd5a58dd738437a05e7e91\",\"version\":\"v10\"},\"schema\":\"informed-decision.review-runtime.v1\"}"
}
},
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "informed-decision",
"namespace": "informed-decision",
"annotations": {
"informed-decision.coulomb.social/admission": "review-only; INFD-WP-0001-T08"
}
},
"spec": {
"replicas": 1,
"strategy": {
"type": "Recreate"
},
"progressDeadlineSeconds": 600,
"selector": {
"matchLabels": {
"app.kubernetes.io/name": "informed-decision"
}
},
"template": {
"metadata": {
"labels": {
"app.kubernetes.io/name": "informed-decision",
"app.kubernetes.io/component": "review"
}
},
"spec": {
"automountServiceAccountToken": false,
"serviceAccountName": "review",
"terminationGracePeriodSeconds": 45,
"securityContext": {
"runAsNonRoot": true,
"runAsUser": 10001,
"runAsGroup": 10001,
"fsGroup": 10001,
"fsGroupChangePolicy": "OnRootMismatch",
"seccompProfile": {
"type": "RuntimeDefault"
}
},
"containers": [
{
"name": "informed-decision",
"image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:ccca0b377bb8ba6af52a37edc453b5b51c96e380840ec8243ffaab3ac2170885",
"securityContext": {
"allowPrivilegeEscalation": false,
"readOnlyRootFilesystem": true,
"capabilities": {
"drop": [
"ALL"
]
}
},
"env": [
{
"name": "INFD_KEYCAPE_ISSUER",
"value": "https://kc.coulomb.social"
},
{
"name": "INFD_CONTAINER_CONFIG",
"value": "/configuration/runtime.json"
}
],
"ports": [
{
"name": "http",
"containerPort": 8080
}
],
"startupProbe": {
"httpGet": {
"path": "/healthz",
"port": "http"
},
"periodSeconds": 10,
"timeoutSeconds": 2,
"failureThreshold": 12
},
"readinessProbe": {
"httpGet": {
"path": "/healthz",
"port": "http"
},
"periodSeconds": 10,
"timeoutSeconds": 2
},
"livenessProbe": {
"httpGet": {
"path": "/healthz",
"port": "http"
},
"periodSeconds": 10,
"timeoutSeconds": 2
},
"resources": {
"requests": {
"cpu": "5m",
"memory": "64Mi"
},
"limits": {
"cpu": "500m",
"memory": "256Mi"
}
},
"volumeMounts": [
{
"name": "data",
"mountPath": "/data"
},
{
"name": "runtime",
"mountPath": "/run/informed-decision"
},
{
"name": "tmp",
"mountPath": "/tmp"
},
{
"name": "configuration",
"mountPath": "/configuration",
"readOnly": true
},
{
"name": "caller",
"mountPath": "/var/run/secrets/informed-decision/policy",
"readOnly": true
},
{
"name": "audit",
"mountPath": "/var/run/secrets/informed-decision/audit",
"readOnly": true
}
]
}
],
"volumes": [
{
"name": "data",
"persistentVolumeClaim": {
"claimName": "informed-decision-data"
}
},
{
"name": "runtime",
"emptyDir": {
"medium": "Memory",
"sizeLimit": "16Mi"
}
},
{
"name": "tmp",
"emptyDir": {
"medium": "Memory",
"sizeLimit": "16Mi"
}
},
{
"name": "configuration",
"configMap": {
"name": "informed-decision-runtime-75ab117cc787",
"defaultMode": 292
}
},
{
"name": "caller",
"projected": {
"defaultMode": 288,
"sources": [
{
"serviceAccountToken": {
"path": "token",
"audience": "flex-auth",
"expirationSeconds": 3600
}
}
]
}
},
{
"name": "audit",
"secret": {
"secretName": "informed-decision-audit",
"defaultMode": 288,
"items": [
{
"key": "token",
"path": "token"
}
]
}
}
]
}
}
}
}
]
}

View file

@ -0,0 +1,19 @@
{
"image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:ccca0b377bb8ba6af52a37edc453b5b51c96e380840ec8243ffaab3ac2170885",
"policy": {
"origin": "http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080",
"package": "informed-decision.compact-sitting",
"version": "v10",
"package_digest": "sha256:ede11f888d57809dfce1b04d2323708c7244f36187fd5a58dd738437a05e7e91",
"pod_name": "flex-auth-informed-decision-sitting"
},
"keycape_egress_ips": [
"92.205.62.239"
],
"storage_class": "local-path",
"ordinary_approval_ids": [
"2ce76d7f-01c3-4b63-8476-8d1230679769",
"c2af4bcf-15b4-4305-aac1-acc7e4dcb099",
"dc22666a-d5d7-46bc-9490-ebe9fe09dc38"
]
}

View file

@ -0,0 +1,85 @@
"""PROPOSED store load for infd-sitting-2026-10-04-state-hub-wp0094 (DEPLOY-v10.md step 5). NOT RUN.
Generated from bound/ by an agent. Runs inside the informed-decision review pod
with the image's own package:
kubectl -n informed-decision exec -i deploy/informed-decision -- \
/opt/venv/bin/python - --db /data/private/review.sqlite < proposed/store-load-v10.py
Saves four memos and their packets. Creates no presentation, acknowledgement,
disposition or approval entry. Refuses if a memo id is already in the store,
if a packet hash differs from the memo, or if the store's presentations do not
belong to exactly the bound principal.
"""
import argparse, base64, json, sys
from informed_decision.records import memo_from
from informed_decision.store import Store
PAYLOAD = json.loads(r"""{
"principal": "uid=platform-root,ou=people,dc=netkingdom,dc=local",
"sitting_id": "infd-sitting-2026-10-04-state-hub-wp0094",
"memos": [
{
"memo_id": "state-hub-edge-receiving-rollout-c287ed8",
"approval_id": "974eae4d-782d-41ed-93be-e34433b5fe59",
"memo": "{\"approval_binding_digest\":\"sha256:84735b88b2db20d9445af369e28a8d40bd495dd20c0303ff3a764666ec976dde\",\"approval_id\":\"974eae4d-782d-41ed-93be-e34433b5fe59\",\"binding\":{\"justification\":null,\"principal\":{\"display_name\":\"uid=platform-root,ou=people,dc=netkingdom,dc=local\",\"id\":\"uid=platform-root,ou=people,dc=netkingdom,dc=local\",\"identifiers\":[],\"kind\":\"person\",\"role\":\"reviewer\"},\"target\":{\"environment\":\"production\",\"id\":\"state-hub:source:c287ed82594313394ca8e67ce40714c90e744af6\",\"kind\":\"service-release\",\"label\":\"State Hub main-c287ed8\",\"requires_new_bind\":true},\"terms\":null},\"binding_level\":\"organizational\",\"brief\":\"Production rollout of tested source; rollback is helm rollback to revision 72 without schema downgrade.\",\"highlights\":[{\"id\":\"deploy-only\",\"item_id\":\"state-hub-edge-receiving-rollout-c287ed8-packet\",\"locator\":{\"kind\":\"work_record\",\"task\":\"STATE-WP-0094-T05\",\"workplan\":\"STATE-WP-0094\"},\"note\":\"Approves this deployment and its post-deploy proof only; it does not mark T05 done, schedule freshness, or adopt existing C-20/API edges.\",\"required_ack\":true,\"severity\":\"critical\"}],\"id\":\"state-hub-edge-receiving-rollout-c287ed8\",\"locale\":\"en\",\"packet\":[{\"hash\":\"sha256:7fbc4b37d513e711cf1b62e393f2f060df378975efab4d11473fd8b1567cd0dd\",\"item_id\":\"state-hub-edge-receiving-rollout-c287ed8-packet\",\"label\":\"Change, evidence, rollback and limits\"}],\"question\":\"Deploy State Hub c287ed8 (source-owned dependency-edge receiving, paginated C-25, additive migration) to railiance01?\",\"requested_act\":\"approve\",\"sealed\":false,\"step_kind\":\"approve\",\"ui_release\":\"informed-decision@0.2.0\",\"version\":1}\n",
"packet_b64": "IyBEZXBsb3kgU3RhdGUgSHViIGRlcGVuZGVuY3ktZWRnZSByZWNlaXZpbmcgKFNUQVRFLVdQLTAwOTQtVDA1KQoKRGVwbG95IFN0YXRlIEh1YiBzb3VyY2UgYzI4N2VkODI1OTQzMTMzOTRjYThlNjdjZTQwNzE0YzkwZTc0NGFmNiAoQ0kgaW1hZ2UKbWFpbi1jMjg3ZWQ4LCBkaWdlc3QgdmVyaWZpZWQgYmVmb3JlIHVzZSkgdG8gcmFpbGlhbmNlMDEsIHJlcGxhY2luZyBIZWxtCnJldmlzaW9uIDcyIChtYWluLTVkZDNkZjkpLgoKV2hhdCBzaGlwczoKLSBGb3JnZSByZWNlaXZpbmcgZGVyaXZlcyBkZXBlbmRzX29uIGVkZ2VzIGZyb20gdGhlIGltbXV0YWJsZSBzb3VyY2UgY29tbWl0IGFuZAogIHJlY29uY2lsZXMgb25seSByb3dzIGl0IG93bnMgKHNvdXJjZV9vd25lciA9IGZvcmdlOjxyZXBvPikuIFJvd3MgY3JlYXRlZCBieQogIHRoZSBBUEksIE1DUCBvciB0aGUgQy0yMCBmaXggYXJlIG5ldmVyIGNoYW5nZWQgb3IgYWRvcHRlZC4gTWlzc2luZywgYW1iaWd1b3VzCiAgb3Igc2VsZiB0YXJnZXRzIGFyZSBsaXN0ZWQgYXMgdW5yZXNvbHZlZCwgbmV2ZXIgZHJvcHBlZC4gT25lIHRyYW5zYWN0aW9uIHBlcgogIHJlY2VpdmU7IGEgcmVwZWF0IHJlY2VpdmUgb2YgdGhlIHNhbWUgY29tbWl0IGlzIGEgbm9vcC4KLSBUaGUgcHJvamVjdGlvbiBkcnkgcnVuIHByZXZpZXdzIGVkZ2UgY3JlYXRlL3JlbW92ZS91bnJlc29sdmVkL2V4dGVybmFsLgotIEMtMjUgb3duZXItcmVwbHkgY29sbGVjdGlvbiBwYWdlcyB0aHJvdWdoIGFsbCByZXBsaWVzICgyMDAgcGVyIHBhZ2UsIGF0IG1vc3QKICA1MCBwYWdlcyk7IEdFVCAvbWVzc2FnZXMvIGdhaW5zIGEgc3RhYmxlIG9mZnNldC4KLSBBZGRpdGl2ZSBtaWdyYXRpb24gYjNjNGQ1ZTZmN2E4OiB0d28gbnVsbGFibGUgY29sdW1ucyBhbmQgb25lIGluZGV4IG9uCiAgd29ya3BsYW5fZGVwZW5kZW5jaWVzLiBVcGdyYWRlLCBkb3duZ3JhZGUgYW5kIHJlLXVwZ3JhZGUgdmVyaWZpZWQgb24gYSBzY3JhdGNoCiAgUG9zdGdyZVNRTCBkYXRhYmFzZTsgZXhpc3Rpbmcgcm93cyBrZWVwIG93bmVyIE5VTEwuCgpFdmlkZW5jZTogZnVsbCBzdWl0ZSAxMDE4IHBhc3NlZDsgMTM4IHBhc3NlZCBpbiB0aGUgcHJvamVjdGlvbiBzdWl0ZXM7IHRoZQpjb25zaXN0ZW5jeSBjaGVja2VyIGdpdmVzIGJ5dGUtaWRlbnRpY2FsIGZpbmRpbmdzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlc2UgY29tbWl0cwooMjcgQy0wMyBmYWlsdXJlcyBhcmUgcHJlLWV4aXN0aW5nKS4gUnVmZiB3YXMgbm90IGF2YWlsYWJsZTsgbm8gbGludCBjbGFpbS4KClByb2NlZHVyZTogc3RhdGUtaHViIGRvY3Mvcm9sbG91dC1kZXBlbmRlbmN5LWVkZ2UtcmVjZWl2aW5nLm1kLiBIZWxtIHVwZ3JhZGUKd2l0aCAtLXJldXNlLXZhbHVlcyAtLXNldCBpbWFnZS50YWcgLS1hdG9taWMgLS10aW1lb3V0IDNtOyBtaWdyYXRpb24gaW4gdGhlCnByZS11cGdyYWRlIGhvb2suIFByb29mOiBhIG5vcm1hbCBpbW11dGFibGUgcmVjZWl2ZSBvZiBzdGF0ZS1odWIgbXVzdCBjcmVhdGUgdGhlClNUQVRFLVdQLTAwOTUtVDA0IGVkZ2VzIGFuZCBsaXN0IEFDVElWSVRZLVdQLTAwMjYgYXMgdW5yZXNvbHZlZCwgdGhlbiBhIHJlcGVhdApyZWNlaXZlIG11c3QgcmV0dXJuIG5vb3AuIE5vIHRhc2sgUEFUQ0ggb3IgZGlyZWN0IGNvbnNpc3RlbmN5IHJlcGFpciBjb3VudHMgYXMgcHJvb2YuCgpSb2xsYmFjazogaGVsbSByb2xsYmFjayB0byByZXZpc2lvbiA3Mi4gVGhlIHNjaGVtYSBpcyBub3QgZG93bmdyYWRlZDogdGhlCmNvbHVtbnMgYXJlIGFkZGl0aXZlIGFuZCBudWxsYWJsZSwgYW5kIGRyb3BwaW5nIHNvdXJjZV9vd25lciB3b3VsZCBvcnBoYW4gdGhlCm93bmVyc2hpcCBtYXJrZXIuCgpLbm93biBsaW1pdHMgeW91IGFjY2VwdCB3aXRoIHRoaXMgYW5zd2VyOgotIEVkZ2VzIGNyZWF0ZWQgZWFybGllciBieSBDLTIwIG9yIHRoZSBBUEkgYXJlIG5ldmVyIGFkb3B0ZWQsIHNvIGRlbGV0aW5nIHRoZWlyCiAgbGluZSBmcm9tIGEgd29ya3BsYW4gZmlsZSBkb2VzIG5vdCByZW1vdmUgdGhlbS4KLSBUaGUgZHJ5LXJ1biBwcmV2aWV3IGRvZXMgbm90IG1vZGVsIHJlY2VpdmluZydzIHJlZnVzYWwgd2hlbiBhIGNvbW1pdCBoYXMgbm8KICB3b3JrcGxhbnMvIGRpcmVjdG9yeS4KLSBUaGlzIHNjaGVkdWxlcyBub3RoaW5nLiBGcmVzaG5lc3Mgc3RheXMgbWFudWFsIHVudGlsIG1lbW9zIDMgYW5kIDQuCgpBbHRlcm5hdGl2ZXM6IGFwcHJvdmUgdGhpcyByb2xsb3V0OyByZXR1cm4gaXQgZm9yIGNoYW5nZXM7IGRlY2xpbmUgaXQuCkFwcHJvdmluZyB0aGlzIGRvZXMgbm90IHJlc29sdmUgaHViIGRlY2lzaW9uIDdiMTlkZTZjLTcyYTEtNDA5ZS04OWE5LWVjM2FjMDljMDNmZAphbmQgZG9lcyBub3QgbWFyayBTVEFURS1XUC0wMDk0LVQwNSBkb25lLgo="
},
{
"memo_id": "owner-return-pickup-plan-b6222af",
"approval_id": "77993081-1db2-4bba-99f2-74ca1f8652b1",
"memo": "{\"approval_binding_digest\":\"sha256:e745ef64658e77e41b2a5ef569ec0f6986e120d338656d75749425f5f29b7ca0\",\"approval_id\":\"77993081-1db2-4bba-99f2-74ca1f8652b1\",\"binding\":{\"justification\":null,\"principal\":{\"display_name\":\"uid=platform-root,ou=people,dc=netkingdom,dc=local\",\"id\":\"uid=platform-root,ou=people,dc=netkingdom,dc=local\",\"identifiers\":[],\"kind\":\"person\",\"role\":\"reviewer\"},\"target\":{\"environment\":\"production\",\"id\":\"activity-core:source:b6222af2cfd1094360a0d430e3907e8788a3acf9:owner-return-pickup\",\"kind\":\"activity-plan\",\"label\":\"Owner-return pickup\",\"requires_new_bind\":true},\"terms\":null},\"binding_level\":\"organizational\",\"brief\":\"Plan approval plus a gated single-repo trial; the definition stays disabled and wakeups never clear waits.\",\"highlights\":[{\"id\":\"preconditions-open\",\"item_id\":\"owner-return-pickup-plan-b6222af-packet\",\"locator\":{\"kind\":\"work_record\",\"task\":\"ACTIVITY-WP-0043-T04\",\"workplan\":\"ACTIVITY-WP-0043\"},\"note\":\"submit: true only after memo 1 is deployed and a plan-only run was reviewed; the C-25 report is operator-produced and only public repositories can be targeted.\",\"required_ack\":true,\"severity\":\"critical\"}],\"id\":\"owner-return-pickup-plan-b6222af\",\"locale\":\"en\",\"packet\":[{\"hash\":\"sha256:dacfb39b22a578d8c6ce3bdf7bd90a6ba8f1612a500b8336355ca5ec02816b9d\",\"item_id\":\"owner-return-pickup-plan-b6222af-packet\",\"label\":\"Change, evidence, rollback and limits\"}],\"question\":\"Approve the owner-return pickup plan, definition, grant and worker operation, and one single-repository trial (plan-only, then submit)?\",\"requested_act\":\"approve\",\"sealed\":false,\"step_kind\":\"approve\",\"ui_release\":\"informed-decision@0.2.0\",\"version\":1}\n",
"packet_b64": "IyBBcHByb3ZlIHRoZSBvd25lci1yZXR1cm4gcGlja3VwIHBsYW4gYW5kIGEgZ2F0ZWQgdHJpYWwgKFNUQVRFLVdQLTAwOTQtVDAzLCBBQ1RJVklUWS1XUC0wMDQzKQoKQXBwcm92ZSwgYXQgYWN0aXZpdHktY29yZSBiNjIyMmFmMmNmZDEwOTQzNjBhMGQ0MzBlMzkwN2U4Nzg4YTNhY2Y5LCB0aGUKb3duZXItcmV0dXJuIHBpY2t1cCBhY3RpdmF0aW9uIHBsYW4gKGRvY3Mvb3duZXItcmV0dXJuLXBpY2t1cC1hY3RpdmF0aW9uLXBsYW4ubWQpLAppdHMgQWN0aXZpdHlEZWZpbml0aW9uIG93bmVyLXJldHVybi1waWNrdXAgKHN0YXlzIGVuYWJsZWQ6IGZhbHNlKSwgaGFybmVzcwpwcm9maWxlIGhhcm5lc3MuYWdlbnQtZGV2LWxvY2FsQDEuMC4wLCByZXBvc2l0b3J5IGdyYW50IHYxICh3b3JrcGxhbnMgcGF0aCBvbmx5LApleGFjdGx5IG9uZSBjb21taXQsIG5vIHB1Ymxpc2gpLCBhbmQgdGhlIHdvcmtlciBvcGVyYXRpb24gb3duZXJfcmV0dXJuX3BpY2t1cC4KQWxzbyBhcHByb3ZlIG9uZSBvcGVyYXRvci10cmlnZ2VyZWQgdHJpYWwgZm9yIGEgc2luZ2xlIHB1YmxpYyByZXBvc2l0b3J5OiBmaXJzdAp3aXRoIHN1Ym1pdDogZmFsc2UgKHBsYW4gb25seSwgbm8gd3JpdGVzKSwgdGhlbiBvbmNlIHdpdGggc3VibWl0OiB0cnVlLgoKV2hhdCB0aGlzIGRvZXM6IHdoZW4gYW4gYWdlbnQgcmVwbGllZCB0byBhIHRhc2sgdGhhdCB3YWl0cyBvbiBpdCwgdGhlIG93bmVyIGlzCndva2VuIG9uY2UgdGhyb3VnaCBhbiBBY3Rpdml0eSBDb3JlIG9wcyBydW4uIFRoZSB3YWtldXAgSUQgaXMgYSBzaGEyNTYgb2YgcmVwbywKdGFzayBhbmQgbWVzc2FnZTsgdGhlIGRhdGFiYXNlIHVuaXF1ZSBrZXkgc3RvcHMgZHVwbGljYXRlcy4gQSB3YWtldXAgbmV2ZXIKY2xlYXJzIGEgd2FpdCwgdGFzayBzdGF0dXMsIGh1bWFuIGdhdGUgb3IgYW55IG90aGVyIGZpZWxkLiBUYXNrcyBuZWVkaW5nIGEKaHVtYW4sIHVucmVzb2x2ZWQgb3IgdW5rbm93biBkZWNpc2lvbnMsIHJlc2lkdWFsIHdvcmssIG5vbnRlcm1pbmFsIG9yIHVua25vd24KcHJlZGVjZXNzb3JzIGFuZCBmdXR1cmUgd2FpdCB3aW5kb3dzIGFyZSBzdG9wcGVkLgoKSG93IGEgcnVuIGlzIGJvdW5kIChidWlsdCBhbmQgdGVzdGVkIGF0IHNvdXJjZSBsZXZlbCk6Ci0gVGhlIG9wZXJhdG9yIHJ1bnMgdGhlIFN0YXRlIEh1YiBjaGVja2VyIChzdGF0ZS1odWIgMTUwY2IwYiBvciBsYXRlcikgZm9yIHRoZQogIHRhcmdldCByZXBvc2l0b3J5IG9uIGEgY2xlYW4gdHJlZSBhbmQgc3VwcGxpZXMgaXRzIEpTT04sIHBpbm5lZCBieSBzaGEyNTYuCi0gVGhlIHJlcG9ydCBhbmQgZXZlcnkgQy0yNSBmaW5kaW5nIG11c3QgY2FycnkgdGhlIHNhbWUgZnVsbCBjb21taXQgU0hBOyBhIG51bGwKICByZXZpc2lvbiByZWZ1c2VzIHdpdGggaXRzIHJlYXNvbiAoZm9yIGV4YW1wbGUgZGlydHlfd29ya3BsYW5zKS4KLSBUYXNrIHN0YXRlIGlzIHJlYWQgdGhyb3VnaCBGb3JnZSBhdCBleGFjdGx5IHRoYXQgY29tbWl0LCB3aGljaCBtdXN0IHN0aWxsIGJlCiAgdGhlIGRlZmF1bHQtYnJhbmNoIEhFQUQuIFVua25vd24gcHJlZGVjZXNzb3JzIGFuZCBkZWNpc2lvbnMgc3RvcCB0aGUgdGFzay4KLSBUaGUgU3RhdGUgSHViIHBsYW5uZXIgcnVucyBhcyBhIGRyaWZ0LWNoZWNrZWQgdmVuZG9yZWQgY29weTsgb25seSByZXZpZXdhYmxlCiAgY2FuZGlkYXRlcyBhcmUgc3VibWl0dGVkLCBhbmQgb25seSB3aGVuIEFDVElWSVRZX0NPUkVfT1dORVJfUkVUVVJOX1BJQ0tVUF9FTkFCTEVECiAgaXMgc2V0LiBFdmlkZW5jZSBob2xkcyBJRHMgYW5kIGNvdW50cyBvbmx5LCBuZXZlciBtZXNzYWdlIGJvZGllcy4KLSBUcmlnZ2VyZWQgYnkgUE9TVCAvb3BzL2F1dG9tYXRpb25zL3tpZH0vdHJpZ2dlciB3aXRoIGNvbmZpcm1fc2lkZV9lZmZlY3Q6IHRydWUuCiAgTm8gc2NoZWR1bGUuCgpQcmVjb25kaXRpb25zIGJlZm9yZSBzdWJtaXQ6IHRydWU6CjEuIFN0YXRlIEh1YiB3aXRoIHBhZ2luYXRlZCBDLTI1IGlzIGRlcGxveWVkIChtZW1vIDEpLgoyLiBBIHJlYWQtb25seSBwbGFuIHJ1biAoc3VibWl0OiBmYWxzZSkgaGFzIHByb2R1Y2VkIHJldmlld2VkIGV2aWRlbmNlLgoKR2FwcyB5b3UgYWNjZXB0IHdpdGggdGhpcyBhbnN3ZXI6Ci0gVGhlIEMtMjUgcmVwb3J0IGlzIHByb2R1Y2VkIGJ5IHRoZSBvcGVyYXRvciBvbiB0aGUgd29ya3N0YXRpb24sIG5vdCBpbiB0aGUKICBjbHVzdGVyOyBubyBGb3JnZS1yZWFkaW5nIEMtMjUgZXhpc3RzIHlldC4KLSBSZXBseS1jb2xsZWN0aW9uIGNvbXBsZXRlbmVzcyBpcyBpbmZlcnJlZCBmcm9tIHRoZSBhYnNlbmNlIG9mIHRoZSBjaGVja2VyJ3MKICBpbmNvbXBsZXRlLWNvbGxlY3Rpb24gd2FybmluZzsgdGhlcmUgaXMgbm8gc3RydWN0dXJlZCBwZXItYWdlbnQgcGFnZSBjb3VudC4KLSBGb3JnZSByZWFkcyBhcmUgdW5hdXRoZW50aWNhdGVkLCBzbyBvbmx5IHB1YmxpYyByZXBvc2l0b3JpZXMgY2FuIGJlIHRhcmdldGVkLgoKVHJpYWwgZXZpZGVuY2U6IHBsYW5uZXIgaW5wdXQgYW5kIG91dHB1dCwgcmVjZWlwdHMsIGFuZCBhIHJlLXJ1biBvZiB0aGUgc2FtZQppbnB1dCBzaG93aW5nIGV2ZXJ5IGluc2VydCBiZWNvbWVzIGR1cGxpY2F0ZTsgc3RvcmVkIGFzIGFjdGl2aXR5LWNvcmUKZG9jcy9ldmlkZW5jZS9BQ1RJVklUWS1XUC0wMDQzLSoubWQgd2l0aCBhIGh1YiBwcm9ncmVzcyBldmVudC4KClJvbGxiYWNrOiB1bnNldCB0aGUgZmxhZyAodGhlIG9wZXJhdGlvbiByZWZ1c2VzIGJlZm9yZSBhbnkgcmVhZCk7IGNsb3NlIG9wZW4Kcm93cyB0aHJvdWdoIHRoZSBub3JtYWwgb3BzLXJ1biBjbG9zZSBwYXRoLCBuZXZlciBkZWxldGUgdGhlbS4KCkV2aWRlbmNlIHNvIGZhcjogMjcgcnVubmVyIHRlc3RzLCA5MSBmb2N1c2VkIHRlc3RzLCBmdWxsIGFjdGl2aXR5LWNvcmUgc3VpdGUKNzY0IHBhc3NlZCwgMSBza2lwcGVkOyBTdGF0ZSBIdWIgQy0yNSBiaW5kaW5nIDIxNCB0ZXN0cyBwYXNzZWQuIE5vIGRpc3BhdGNoIGhhcwpoYXBwZW5lZC4KCkFsdGVybmF0aXZlczogYXBwcm92ZSBwbGFuIGFuZCBib3RoIHRyaWFsIHN0ZXBzOyBhcHByb3ZlIHBsYW4gYW5kIHRoZSBwbGFuLW9ubHkKcnVuOyByZXR1cm4gZm9yIGNoYW5nZXM7IGRlY2xpbmUuIFRoaXMgYW5zd2VyIGRvZXMgbm90IGVuYWJsZSB0aGUgZGVmaW5pdGlvbiwKYWRkIGEgc2NoZWR1bGUsIG9yIHJlc29sdmUgaHViIGRlY2lzaW9uIDdiMTlkZTZjLTcyYTEtNDA5ZS04OWE5LWVjM2FjMDljMDNmZC4K"
},
{
"memo_id": "freshness-runner-deploy-trial-e77f8b4",
"approval_id": "4ae04c8e-d604-4d8b-b166-693eef855da8",
"memo": "{\"approval_binding_digest\":\"sha256:f8ff89dd353c1d2006622c45996c0f05f050865f8c203373dc74da1ba3f05e24\",\"approval_id\":\"4ae04c8e-d604-4d8b-b166-693eef855da8\",\"binding\":{\"justification\":null,\"principal\":{\"display_name\":\"uid=platform-root,ou=people,dc=netkingdom,dc=local\",\"id\":\"uid=platform-root,ou=people,dc=netkingdom,dc=local\",\"identifiers\":[],\"kind\":\"person\",\"role\":\"reviewer\"},\"target\":{\"environment\":\"production\",\"id\":\"repo-manager:source:e77f8b457647ff23697e45a74615edde5f42d39d\",\"kind\":\"service-release\",\"label\":\"rmgr freshness runner\",\"requires_new_bind\":true},\"terms\":null},\"binding_level\":\"organizational\",\"brief\":\"Deployment and limited data-writing trials; no schedule.\",\"highlights\":[{\"id\":\"no-schedule\",\"item_id\":\"freshness-runner-deploy-trial-e77f8b4-packet\",\"locator\":{\"kind\":\"work_record\",\"task\":\"RMGR-WP-0020-T04\",\"workplan\":\"RMGR-WP-0020\"},\"note\":\"Trial fires write projections through the normal reconcile endpoint; no schedule is enabled by this answer and packaging is shown before execution.\",\"required_ack\":true,\"severity\":\"critical\"}],\"id\":\"freshness-runner-deploy-trial-e77f8b4\",\"locale\":\"en\",\"packet\":[{\"hash\":\"sha256:2873f6deadd938ec07e1a4d5f314f8dbf456a00893d06cf89ce7eecb14bf9985\",\"item_id\":\"freshness-runner-deploy-trial-e77f8b4-packet\",\"label\":\"Change, evidence, rollback and limits\"}],\"question\":\"Deploy the repo-manager bounded freshness runner (e77f8b4) to the Activity Core worker and run up to three --limit 3 trial fires?\",\"requested_act\":\"approve\",\"sealed\":false,\"step_kind\":\"approve\",\"ui_release\":\"informed-decision@0.2.0\",\"version\":1}\n",
"packet_b64": "IyBEZXBsb3kgdGhlIGJvdW5kZWQgZnJlc2huZXNzIHJ1bm5lciBhbmQgcnVuIGxpbWl0ZWQgdHJpYWxzIChSTUdSLVdQLTAwMjAtVDA0KQoKQXBwcm92ZSBkZXBsb3lpbmcgcmVwby1tYW5hZ2VyIGU3N2Y4YjQ1NzY0N2ZmMjM2OTdlNDVhNzQ2MTVlZGRlNWY0MmQzOWQKKHJtZ3IgZnJlc2huZXNzIHJ1bikgZm9yIHVzZSBieSB0aGUgQWN0aXZpdHkgQ29yZSB3b3JrZXIsIGFuZCB1cCB0byB0aHJlZQpvcGVyYXRvci10cmlnZ2VyZWQgZmlyZXMgd2l0aCAtLWxpbWl0IDMsIHBsdXMgZHJ5IHJ1bnMuCgpXaGF0IHRoZSBydW5uZXIgZG9lczogcGlja3MgdGhlIHN0YWxlc3QgcmVwb3NpdG9yaWVzLCBza2lwcyByZXBvc2l0b3JpZXMgd2hvc2UKRm9yZ2UgSEVBRCBlcXVhbHMgdGhlaXIgbGFzdCBzdWNjZXNzZnVsIHJlY2VpcHQsIGFuZCBjYWxscyB0aGUgZXhpc3RpbmcKUE9TVCAvcmVwb3Mve3NsdWd9L3dvcmstcmVjb3JkLXByb2plY3Rpb24vcmVjb25jaWxlIGZvciB0aGUgaW1tdXRhYmxlIEZvcmdlCmNvbW1pdC4gSXQgbmV2ZXIgcmVhZHMgYSBjaGVja291dCwgbmV2ZXIgdXNlcyAtLWFsbCAtLXJlbW90ZSBvciB0aGUgc3dlZXAKZW5kcG9pbnRzLCBuZXZlciBmb3JjZXMgcGFzdCBhIHJlZnVzYWwsIGFuZCB3cml0ZXMgbm8gcmVjZWlwdCB1bmxlc3MgdGhlIGh1YiBpcwp2ZXJpZmllZCBhcyB0aGUgcHJpbWFyeSBvbiByYWlsaWFuY2UwMS4gUmVjZWlwdHMgYXJlIGFuIGFwcGVuZC1vbmx5IEpTT04gTGluZXMKZmlsZSAocmVwby1tYW5hZ2VyLmZyZXNobmVzcy1yZWNlaXB0LnYxKS4KCldoYXQgZGVwbG95bWVudCBpbmNsdWRlczoKLSBQYWNrYWdpbmcgcm1nciBvbnRvIHRoZSBBY3Rpdml0eSBDb3JlIHdvcmtlciAobWV0aG9kIHN0aWxsIHRvIGJlIGNob3NlbiBhbmQKICBzaG93biBpbiB0aGUgcm9sbG91dCBkb2N1bWVudCBiZWZvcmUgZXhlY3V0aW9uKS4KLSBBIHBlcnNpc3RlbnQgdm9sdW1lIGZvciB0aGUgcmVjZWlwdCBmaWxlLgotIEEgcmVhZC1vbmx5IEZvcmdlam8gdG9rZW4gcm91dGVkIHRocm91Z2ggd2FyZGVuIHJvdXRlL09wZW5CYW87IG5vIHNlY3JldCBpcwogIHBsYWNlZCBpbiBHaXQsIHRoZSBodWIgb3IgdGhpcyBtZW1vLgotIFRoZSBjb2RlLXJldmlld2VkIEFjdGl2aXR5IENvcmUgYm91bmRlZCBvcGVyYXRpb24gcmVwb19tYW5hZ2VyX2ZyZXNobmVzcwogIChhY3Rpdml0eS1jb3JlIGIyYzZjNTYxMzIxOGRlYTlkYmFlZjMwM2FmZjIyYThkMWIwN2YwNzQpOiBmaXhlZCBjb21tYW5kIGxpbmUsCiAgbGltaXQgMSB0byAxMiwgbWF4X3NlY29uZHMgMSB0byAyNzAsIG5vIHJldHJ5LCAzMDAgcyB0aW1lb3V0LCBzdG9yZXMgY291bnRzIG9ubHkuCgpFdmlkZW5jZTogMjI2IHJlcG8tbWFuYWdlciB0ZXN0cyBwYXNzOyBydWZmIGNsZWFuIG9uIGNoYW5nZWQgZmlsZXMuIEEgcmVhZC1vbmx5CmRyeSBydW4gYWdhaW5zdCB0aGUgcHJpbWFyeSB2ZXJpZmllZCB0aGUgaHViLCBzYXcgMTQxIHJlcG9zaXRvcmllcyBhbmQgcGxhbm5lZApjbGF5LWJvcmcsIHB5dGhvbi1zbmFrZSwgcmVwby1zY29waW5nLCBzaGFyZC13aWtpLCB0ZWxlLW1jcCwgY2l0YXRpb24td29yay4KQWN0aXZpdHkgQ29yZSByZWFkcyB0aGUgcnVubmVyJ3MgcmVzdWx0c1tdIChmaXhlZCBpbiBiMmM2YzU2OyAzNSB0ZXN0cyBwYXNzKS4KClN0b3AgY29uZGl0aW9uczogYSByZWNlaXB0IGZyb20gYW4gdW52ZXJpZmllZCBwcmltYXJ5LCBhbnkgY2hlY2tvdXQgcmVhZCwgYSBmaXJlCmV4Y2VlZGluZyBtYXhfc2Vjb25kcyB0d2ljZSwgb3IgYW55IHJlZnVzYWwgcGF0dGVybiBub3QgZXhwbGFpbmVkIGJ5IGtub3duIGhvbGVzCihSTUdSLVdQLTAwMTktVDAzIGR1cGxpY2F0ZSBwcm9qZWN0aW9ucywgUk1HUi1XUC0wMDE0LzAwMTUgcmVmdXNhbHMpLgoKUm9sbGJhY2s6IHJlbW92ZSB0aGUgb3BlcmF0aW9uIGZyb20gdGhlIHdvcmtlcjsgcmVjZWlwdHMgYXJlIGtlcHQ7IHByb2plY3Rpb25zCmFyZSBpZGVtcG90ZW50IHBlciBjb21taXQsIHNvIG5vIGRhdGEgcm9sbGJhY2sgaXMgbmVlZGVkLgoKQWx0ZXJuYXRpdmVzOiBhcHByb3ZlIGRlcGxveSBhbmQgdHJpYWxzOyBhcHByb3ZlIGRyeSBydW5zIG9ubHk7IHJldHVybjsgZGVjbGluZS4KVGhpcyBhbnN3ZXIgZG9lcyBub3QgZW5hYmxlIGFueSBzY2hlZHVsZSBhbmQgZG9lcyBub3QgcmVzb2x2ZSBodWIgZGVjaXNpb24KN2IxOWRlNmMtNzJhMS00MDllLTg5YTktZWMzYWMwOWMwM2ZkLgo="
},
{
"memo_id": "freshness-schedule-enable-retire-sweep",
"approval_id": "b75752d1-bab6-4cf3-9308-5368c1d5aa91",
"memo": "{\"approval_binding_digest\":\"sha256:cc3e8fe6ace5438f19d647d3de226407c8b009985c82ad9a993e81226e6f316f\",\"approval_id\":\"b75752d1-bab6-4cf3-9308-5368c1d5aa91\",\"binding\":{\"justification\":null,\"principal\":{\"display_name\":\"uid=platform-root,ou=people,dc=netkingdom,dc=local\",\"id\":\"uid=platform-root,ou=people,dc=netkingdom,dc=local\",\"identifiers\":[],\"kind\":\"person\",\"role\":\"reviewer\"},\"target\":{\"environment\":\"production\",\"id\":\"activity-core:definition:repo-manager-bounded-freshness:b2c6c5613218dea9dbaef303aff22a8d1b07f074\",\"kind\":\"activity-schedule\",\"label\":\"Bounded freshness schedule\",\"requires_new_bind\":true},\"terms\":null},\"binding_level\":\"organizational\",\"brief\":\"Recurring schedule activation after clean trials, and permanent retirement of the legacy sweep.\",\"highlights\":[{\"id\":\"after-clean-trials\",\"item_id\":\"freshness-schedule-enable-retire-sweep-packet\",\"locator\":{\"kind\":\"work_record\",\"task\":\"RMGR-WP-0020-T04\",\"workplan\":\"RMGR-WP-0020\"},\"note\":\"Only after memo 3 trials completed without a stop condition; retirement removes the legacy --all --remote path.\",\"required_ack\":true,\"severity\":\"critical\"}],\"id\":\"freshness-schedule-enable-retire-sweep\",\"locale\":\"en\",\"packet\":[{\"hash\":\"sha256:8389b3fbf7b4b5267b7ed9f8ad0381c88600181f112148736e9e81a4df579c5c\",\"item_id\":\"freshness-schedule-enable-retire-sweep-packet\",\"label\":\"Change, evidence, rollback and limits\"}],\"question\":\"Enable the repo-manager-bounded-freshness schedule and retire the paused state-hub-consistency-sweep definition?\",\"requested_act\":\"approve\",\"sealed\":false,\"step_kind\":\"approve\",\"ui_release\":\"informed-decision@0.2.0\",\"version\":1}\n",
"packet_b64": "IyBFbmFibGUgdGhlIGJvdW5kZWQgZnJlc2huZXNzIHNjaGVkdWxlIGFuZCByZXRpcmUgdGhlIGxlZ2FjeSBzd2VlcCAoUk1HUi1XUC0wMDIwLVQwNC9UMDUpCgpBcHByb3ZlIHNldHRpbmcgdGhlIEFjdGl2aXR5IENvcmUgZGVmaW5pdGlvbiByZXBvLW1hbmFnZXItYm91bmRlZC1mcmVzaG5lc3MKKGFjdGl2aXR5LWNvcmUgYjJjNmM1NjEzMjE4ZGVhOWRiYWVmMzAzYWZmMjJhOGQxYjA3ZjA3NCwgQUNUSVZJVFktV1AtMDA0NC1UMDMpCnRvIGVuYWJsZWQ6IHRydWUsIGFuZCBmb3JtYWxseSByZXRpcmluZyB0aGUgcGF1c2VkIHN0YXRlLWh1Yi1jb25zaXN0ZW5jeS1zd2VlcApkZWZpbml0aW9uIChlbmFibGVkOiBmYWxzZSBzaW5jZSBSTUdSLVdQLTAwMDUtVDExKS4KCk9ubHkgYWZ0ZXIgbWVtbyAzJ3MgdHJpYWwgZmlyZXMgY29tcGxldGVkIHdpdGhvdXQgaGl0dGluZyBhIHN0b3AgY29uZGl0aW9uIGFuZAp0aGVpciByZWNlaXB0cyBhcmUgcmVjb3JkZWQgYXMgZXZpZGVuY2UuCgpTY2hlZHVsZTogY3JvbiA0MCAqLzIgKiAqICogVVRDLCBtaXNmaXJlIHNraXAsIGxpbWl0IDYsIG1heF9zZWNvbmRzIDI0MC4gVGhpcwpyb3RhdGVzIHRoZSAxNDEgYWN0aXZlIHJlcG9zaXRvcmllcyBpbiBhYm91dCB0d28gZGF5cywgYWdhaW5zdCBhIDQ4IGggdGFyZ2V0LgoKV2h5OiBvbiAyMDI2LTEwLTA0IG9ubHkgMzUgb2YgMTQxIHJlcG9zaXRvcmllcyAoMjUgJSkgaGFkIHN5bmNlZCB3aXRoaW4gMjQgaDsKbWVkaWFuIGFnZSAxMDkgaCwgcDkwIDI5MiBoLCBtYXhpbXVtIGFib3V0IDM5LjUgZGF5cy4gTm8gc3VwcG9ydGVkIHNjaGVkdWxlCmV4aXN0cyBhbmQgbm90aGluZyByZWNvcmRzIHBlci1yZXBvc2l0b3J5IHNvdXJjZSBjb21taXRzIG9yIGZhaWx1cmVzCihyZXBvLW1hbmFnZXIgZG9jcy9ldmlkZW5jZS8yMDI2LTEwLTA0LWZyZXNobmVzcy1jb3ZlcmFnZS5tZCkuCgpBZnRlciB0d28gZGF5cywgdGhlIGV2aWRlbmNlIGlzIHJlLW1lYXN1cmVkIGFuZCBoYW5kZWQgYmFjayB0byBTVEFURS1XUC0wMDk0LVQwNToKcnVubmVyIHJldmlzaW9uLCBhY3RpdmUgZGVmaW5pdGlvbiwgcGVyLXJlcG9zaXRvcnkgY29tbWl0LCBsYXN0IHN1Y2Nlc3NmdWwgYW5kCmZhaWxlZCByZWNlaXB0cywgbWVhc3VyZWQgZnJlc2huZXNzIHdpbmRvdy4gQ292ZXJhZ2UgaG9sZXMgc3RheSBsaXN0ZWQuCgpTdG9wIGFuZCBkaXNhYmxlIGNvbmRpdGlvbnM6IGFzIGluIG1lbW8gMywgcGx1cyBhbnkgZmlyZSBvdmVybGFwcGluZyB0aGUgbmV4dC4KClJvbGxiYWNrOiBzZXQgZW5hYmxlZDogZmFsc2U7IG5vdGhpbmcgZWxzZSB0byB1bmRvLgoKUmV0aXJpbmcgdGhlIGxlZ2FjeSBzd2VlcCBtZWFucyBpdHMgZGVmaW5pdGlvbiBpcyByZW1vdmVkIG9yIG1hcmtlZCByZXRpcmVkLCBzbwp0aGUgLS1hbGwgLS1yZW1vdGUgcGF0aCBjYW5ub3QgYmUgcmUtZW5hYmxlZCBieSBhIHZhbHVlcyBjaGFuZ2UuIEFEUi0wMDIgYWxyZWFkeQpmb3JiaWRzIGl0cyBjaGVja291dCByZWFkcy4KCkFsdGVybmF0aXZlczogYXBwcm92ZSBib3RoOyBhcHByb3ZlIHRoZSBzY2hlZHVsZSBidXQga2VlcCB0aGUgbGVnYWN5IGRlZmluaXRpb24KcGF1c2VkOyByZXR1cm47IGRlY2xpbmUuIFRoaXMgYW5zd2VyIGRvZXMgbm90IHJlc29sdmUgaHViIGRlY2lzaW9uCjdiMTlkZTZjLTcyYTEtNDA5ZS04OWE5LWVjM2FjMDljMDNmZC4K"
}
]
}""")
def counts(store):
with store._connection() as db:
return {t: db.execute(f"SELECT count(*) FROM {t}").fetchone()[0]
for t in ("memos", "presentations", "acknowledgments", "dispositions")}
def load(db_path):
store = Store(db_path)
with store._connection() as db:
subs = {json.loads(b)["principal_sub"] for (b,) in db.execute("SELECT body FROM presentations")}
present = {m for (m,) in db.execute("SELECT id FROM memos")}
if subs != {PAYLOAD["principal"]}:
raise SystemExit("refused: store presentations are not exactly the bound principal")
memos = []
for row in PAYLOAD["memos"]:
memo = memo_from(json.loads(row["memo"]))
if memo.id != row["memo_id"] or memo.approval_id != row["approval_id"]:
raise SystemExit(f"refused: payload mismatch for {row['memo_id']}")
if memo.id in present:
raise SystemExit(f"refused: {memo.id} already in store")
memos.append((memo, base64.b64decode(row["packet_b64"])))
before = counts(store)
for memo, packet in memos:
if store.put_document(packet) != memo.packet[0].hash:
raise SystemExit(f"refused: packet digest mismatch for {memo.id}")
store.save_memo(memo)
after = counts(store)
unchanged = all(after[k] == before[k] for k in ("presentations", "acknowledgments", "dispositions"))
report = {"status": "loaded", "sitting_id": PAYLOAD["sitting_id"], "memo_ids": [m.id for m, _ in memos],
"before": before, "after": after, "no_presentation_or_disposition_created": unchanged}
print(json.dumps(report, indent=2))
return 0 if unchanged and after["memos"] == before["memos"] + len(memos) else 1
if __name__ == "__main__":
p = argparse.ArgumentParser()
p.add_argument("--db", required=True)
sys.exit(load(p.parse_args().db))

View file

@ -3,7 +3,7 @@
"id": "infd-sitting-2026-10-04-state-hub-wp0094",
"review_group": "net-kingdom-admins",
"principal": "uid=platform-root,ou=people,dc=netkingdom,dc=local",
"status": "prepared",
"status": "approval-created",
"hub_decision": "7b19de6c-72a1-409e-89a9-ec3ac09c03fd",
"resolves_hub_decision": "never",
"batches": [
@ -17,5 +17,32 @@
"freshness-schedule-enable-retire-sweep"
],
"bind_path": "founder creates the approvals in an attended terminal, then exact-record admission, store load, and the founder's own answer per memo",
"note": "Prepared by an agent. Not posted, not admitted, not loaded. No answer exists."
"note": "Four native approvals are requested with no human entry. Bound copies are in bound/. Policy v10 and the store load are prepared in DEPLOY-v10.md and not executed. Nothing is admitted or loaded; no answer exists. The hub decision is not resolved.",
"approvals": [
{
"memo_id": "state-hub-edge-receiving-rollout-c287ed8",
"approval_id": "974eae4d-782d-41ed-93be-e34433b5fe59",
"approval_binding_digest": "sha256:84735b88b2db20d9445af369e28a8d40bd495dd20c0303ff3a764666ec976dde"
},
{
"memo_id": "owner-return-pickup-plan-b6222af",
"approval_id": "77993081-1db2-4bba-99f2-74ca1f8652b1",
"approval_binding_digest": "sha256:e745ef64658e77e41b2a5ef569ec0f6986e120d338656d75749425f5f29b7ca0"
},
{
"memo_id": "freshness-runner-deploy-trial-e77f8b4",
"approval_id": "4ae04c8e-d604-4d8b-b166-693eef855da8",
"approval_binding_digest": "sha256:f8ff89dd353c1d2006622c45996c0f05f050865f8c203373dc74da1ba3f05e24"
},
{
"memo_id": "freshness-schedule-enable-retire-sweep",
"approval_id": "b75752d1-bab6-4cf3-9308-5368c1d5aa91",
"approval_binding_digest": "sha256:cc3e8fe6ace5438f19d647d3de226407c8b009985c82ad9a993e81226e6f316f"
}
],
"approval_expires_at": "2026-10-05T12:19:09.106500+00:00",
"receipt": "docs/evidence/2026-10-04-state-hub-wp0094-approval-create.json",
"proposed_policy_version": "v10",
"proposed_policy_package_digest": "sha256:ede11f888d57809dfce1b04d2323708c7244f36187fd5a58dd738437a05e7e91",
"proposed_review_configmap": "informed-decision-runtime-75ab117cc787"
}