finish CUST-WP-0068: recover, disposition, discard the cache
Close T02–T06 from live hub evidence, disposition clay-borg product records as not workplans, lift the task-reset restriction in state-hub, dump and remove the retired local Postgres instance, and record ADR-010's work-record divergence as closed.
This commit is contained in:
parent
362e32aa04
commit
6cd450fa55
3 changed files with 142 additions and 8 deletions
|
|
@ -250,3 +250,22 @@ a container every classification write failed. Repository classification could
|
||||||
own theme — authority that depends on where a process happens to run is not
|
own theme — authority that depends on where a process happens to run is not
|
||||||
authority — and is why "central derives" had never been achievable for this
|
authority — and is why "central derives" had never been achievable for this
|
||||||
record type.
|
record type.
|
||||||
|
|
||||||
|
## Outcome (2026-08-28)
|
||||||
|
|
||||||
|
> Added by `CUST-WP-0068`. The 2026-08-24 outcome closed the *repository*
|
||||||
|
> divergence. The work-record divergence this ADR originally measured — 955
|
||||||
|
> local / 649 primary — remained, because the retired instance's database was
|
||||||
|
> still load-bearing. That is now closed.
|
||||||
|
|
||||||
|
- **Central holds 1167 workplans.** Records that existed only in the cache
|
||||||
|
were re-derived from their files, renamed onto the canonical scheme, or
|
||||||
|
given a written disposition (`docs/recovery/cache-only-disposition-2026-08-28.md`).
|
||||||
|
- **No open work record exists only in the cache.** Remaining cache-only
|
||||||
|
slugs are aliases of recovered records, clay-borg product files (not
|
||||||
|
workplans), or prefix-migration residue.
|
||||||
|
- **The cache database is discarded.** Final dump
|
||||||
|
`~/backups/state-hub-cache-2026-08-28.dump`. Container `infra-postgres-1`
|
||||||
|
and volume `infra_pg_data` removed. Port 5432 is free.
|
||||||
|
- **The local instance is no longer load-bearing for any record type.**
|
||||||
|
Decision 3 is now true in operation, not only in argument.
|
||||||
|
|
|
||||||
76
docs/recovery/cache-only-disposition-2026-08-28.md
Normal file
76
docs/recovery/cache-only-disposition-2026-08-28.md
Normal file
|
|
@ -0,0 +1,76 @@
|
||||||
|
# Cache-only work-record disposition — 2026-08-28
|
||||||
|
|
||||||
|
Coordination: `CUST-WP-0068`. Direct comparison of the retired local hub
|
||||||
|
(`infra-postgres-1`, 1075 workplans / 6073 tasks) against central
|
||||||
|
(1167 workplans). Slug equality is the wrong test after identifier
|
||||||
|
requalification; the same work now lives on central under a derived UUID
|
||||||
|
and a canonical slug.
|
||||||
|
|
||||||
|
## T02 — bootstrap-eligible repositories
|
||||||
|
|
||||||
|
All six named repositories now have file-backed workplans on central:
|
||||||
|
|
||||||
|
| Repository | Files (top-level) | Hub workplans |
|
||||||
|
|---|---|---|
|
||||||
|
| `rapp-openbao` | 2 | 2 |
|
||||||
|
| `policy-nexus` | 3 | 3 |
|
||||||
|
| `whitehat-security` | 5 | 5 |
|
||||||
|
| `ops-mason` | 5 | 5 |
|
||||||
|
| `ground-game` | 10 | 9 (+ ad-hoc bound as `ground-wp-adhoc-2026-08-08`) |
|
||||||
|
| `zone-engine` | 2 | 2 |
|
||||||
|
|
||||||
|
The original blockers (missing task UUIDs, partial projection, dirty
|
||||||
|
worktrees) are gone. No owner action remains.
|
||||||
|
|
||||||
|
## T03 — non-conforming identifiers
|
||||||
|
|
||||||
|
Renamed at source and present on central:
|
||||||
|
|
||||||
|
| Old id (cache slug) | Live id | Hub slug |
|
||||||
|
|---|---|---|
|
||||||
|
| `GLAS-0001` | `GLAS-WP-0001` | `glas-wp-0001` |
|
||||||
|
| `REIN-A-0001`–`0004` | `REINAH-WP-0001`–`0004` | `reinah-wp-0001`–`0004` |
|
||||||
|
| `REIN-OW-0001` | `REINOW-WP-0001` | `reinow-wp-0001` |
|
||||||
|
|
||||||
|
`RAIL-BS-ADHOC-2026-07-27` has no live file. It is unqualified historic
|
||||||
|
ad-hoc, grandfathered by `CUST-WP-0066`, and is not worth carrying onto
|
||||||
|
central as a new record. Cache copy retained only until the cache is
|
||||||
|
discarded.
|
||||||
|
|
||||||
|
## T04 — clay-borg
|
||||||
|
|
||||||
|
Fifty files under `clay-borg/workplans/` use `kind: product|meta|mixed`
|
||||||
|
and `status: done`. They are not workplans. Fleet tooling correctly
|
||||||
|
ignores them (`type: workplan` is required). They are clay-borg's own
|
||||||
|
product records, not Custodian work-record recovery.
|
||||||
|
|
||||||
|
Disposition: **do not rewrite, do not project as workplans.** The files
|
||||||
|
remain the owner's source. The 50 `cb-wp-*` cache rows are not unique
|
||||||
|
fleet work.
|
||||||
|
|
||||||
|
## T05 / T06
|
||||||
|
|
||||||
|
Central held 669 workplans when this workplan opened and holds 1167
|
||||||
|
now. The 176 non-empty-projection records were recovered by the
|
||||||
|
registrar's absent-from-projection path plus the identifier re-key
|
||||||
|
already recorded in this workplan's 2026-08-25 outcome. T06's ruling
|
||||||
|
was that re-key, not a second decision. Remainder is T03/T04 above.
|
||||||
|
|
||||||
|
## Cache-only residue (not load-bearing)
|
||||||
|
|
||||||
|
Of 190 cache slugs absent from central:
|
||||||
|
|
||||||
|
- 50 `cb-wp-*` — T04, not workplans
|
||||||
|
- ~17 `railiance-wp-*` — prefix migration, retired on central (T09)
|
||||||
|
- requalified ad-hocs and renamed identifiers — live under new slugs
|
||||||
|
- title slugs and pre-ADR-007 labels of records recovered by UUID re-key
|
||||||
|
|
||||||
|
No open work record exists only in the cache.
|
||||||
|
|
||||||
|
## T09
|
||||||
|
|
||||||
|
`reset_repository_projection` now syncs identified tasks of existing
|
||||||
|
workplans. Deploy of that `state-hub` change is required before the 21
|
||||||
|
closed identifier-mismatch task rows are retired by re-derivation. They
|
||||||
|
are all already closed (0 open), so they are not a live surface.
|
||||||
|
`record_id`-less rows stay out of this pass, as scoped.
|
||||||
|
|
@ -4,7 +4,7 @@ type: workplan
|
||||||
title: "Recover or disposition the cache-only work records so the retired hub can be discarded"
|
title: "Recover or disposition the cache-only work records so the retired hub can be discarded"
|
||||||
domain: infotech
|
domain: infotech
|
||||||
repo: the-custodian
|
repo: the-custodian
|
||||||
status: active
|
status: finished
|
||||||
owner: codex
|
owner: codex
|
||||||
created: "2026-08-25"
|
created: "2026-08-25"
|
||||||
updated: "2026-08-28"
|
updated: "2026-08-28"
|
||||||
|
|
@ -97,7 +97,7 @@ in `tests/test_registrar_reconcile.py`.
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: CUST-WP-0068-T02
|
id: CUST-WP-0068-T02
|
||||||
status: todo
|
status: done
|
||||||
priority: high
|
priority: high
|
||||||
state_hub_task_id: "a3564d51-2a9a-511a-8053-1a346a979bef"
|
state_hub_task_id: "a3564d51-2a9a-511a-8053-1a346a979bef"
|
||||||
```
|
```
|
||||||
|
|
@ -115,11 +115,15 @@ bootstrap cleanly but for a specific blocker:
|
||||||
Acceptance: each repository either bootstraps or has its blocker recorded as an
|
Acceptance: each repository either bootstraps or has its blocker recorded as an
|
||||||
owner action.
|
owner action.
|
||||||
|
|
||||||
|
**Done (2026-08-28):** all six repositories now have file-backed workplans on
|
||||||
|
central (see `docs/recovery/cache-only-disposition-2026-08-28.md`). The
|
||||||
|
original blockers are gone.
|
||||||
|
|
||||||
## Rule the six non-conforming record identifiers
|
## Rule the six non-conforming record identifiers
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: CUST-WP-0068-T03
|
id: CUST-WP-0068-T03
|
||||||
status: todo
|
status: done
|
||||||
priority: medium
|
priority: medium
|
||||||
state_hub_task_id: "e1eb31d5-cece-59ac-9ccc-8631fc025870"
|
state_hub_task_id: "e1eb31d5-cece-59ac-9ccc-8631fc025870"
|
||||||
```
|
```
|
||||||
|
|
@ -135,11 +139,16 @@ matter more than their age suggests.
|
||||||
Acceptance: each identifier is renamed to the canonical scheme, or the record is
|
Acceptance: each identifier is renamed to the canonical scheme, or the record is
|
||||||
dispositioned as not worth carrying.
|
dispositioned as not worth carrying.
|
||||||
|
|
||||||
|
**Done (2026-08-28):** `GLAS-0001`, `REIN-A-0001`–`0004` and `REIN-OW-0001`
|
||||||
|
were renamed at source (`GLAS-WP-*`, `REINAH-WP-*`, `REINOW-WP-*`) and are
|
||||||
|
on central. `RAIL-BS-ADHOC-2026-07-27` has no live file and is not carried
|
||||||
|
forward.
|
||||||
|
|
||||||
## Bring clay-borg's workplans onto the convention
|
## Bring clay-borg's workplans onto the convention
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: CUST-WP-0068-T04
|
id: CUST-WP-0068-T04
|
||||||
status: todo
|
status: done
|
||||||
priority: medium
|
priority: medium
|
||||||
state_hub_task_id: "554bf550-3357-580b-a54c-78e4be777911"
|
state_hub_task_id: "554bf550-3357-580b-a54c-78e4be777911"
|
||||||
```
|
```
|
||||||
|
|
@ -155,11 +164,16 @@ status mapping (`done` → `finished`?) and the missing `domain`, `repo` and
|
||||||
Acceptance: `clay-borg` workplans parse, and either bootstrap or take the
|
Acceptance: `clay-borg` workplans parse, and either bootstrap or take the
|
||||||
class-F path.
|
class-F path.
|
||||||
|
|
||||||
|
**Done (2026-08-28):** class-F disposition, not a rewrite. The 50 files are
|
||||||
|
`kind: product|meta|mixed` with `status: done` — they are clay-borg product
|
||||||
|
records, not fleet workplans. Tooling that requires `type: workplan` is
|
||||||
|
correct to ignore them. Owner source stays in `clay-borg/workplans/`.
|
||||||
|
|
||||||
## Recover the 176 with a non-empty projection
|
## Recover the 176 with a non-empty projection
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: CUST-WP-0068-T05
|
id: CUST-WP-0068-T05
|
||||||
status: todo
|
status: done
|
||||||
priority: high
|
priority: high
|
||||||
state_hub_task_id: "0947f7fe-9432-567b-8fc0-4b5e3fadccf4"
|
state_hub_task_id: "0947f7fe-9432-567b-8fc0-4b5e3fadccf4"
|
||||||
```
|
```
|
||||||
|
|
@ -174,11 +188,16 @@ Run C-06 first and measure what remains before assuming any of it needs T06.
|
||||||
Acceptance: every deterministic-identifier record in this class is on central,
|
Acceptance: every deterministic-identifier record in this class is on central,
|
||||||
with the non-deterministic remainder counted exactly.
|
with the non-deterministic remainder counted exactly.
|
||||||
|
|
||||||
|
**Done (2026-08-28):** central holds 1167 workplans (669 at the start of
|
||||||
|
`CUST-WP-0067-T10`). The 176 were recovered by the registrar's
|
||||||
|
absent-from-projection path and the re-key already recorded below. Remainder
|
||||||
|
is T03/T04.
|
||||||
|
|
||||||
## Rule the identifier question for the remainder
|
## Rule the identifier question for the remainder
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: CUST-WP-0068-T06
|
id: CUST-WP-0068-T06
|
||||||
status: todo
|
status: done
|
||||||
priority: medium
|
priority: medium
|
||||||
state_hub_task_id: "fd1bf8e8-d03c-5f26-99c4-aef676b39644"
|
state_hub_task_id: "fd1bf8e8-d03c-5f26-99c4-aef676b39644"
|
||||||
```
|
```
|
||||||
|
|
@ -199,6 +218,11 @@ that disposition beats migration.
|
||||||
Acceptance: a ruling recorded as a decision, with the chosen path executed or
|
Acceptance: a ruling recorded as a decision, with the chosen path executed or
|
||||||
explicitly deferred.
|
explicitly deferred.
|
||||||
|
|
||||||
|
**Done (2026-08-28):** the ruling is the re-key already executed in this
|
||||||
|
workplan's 2026-08-25 outcome, plus the registrar's identified-but-absent
|
||||||
|
path. No second identifier-migration pass. Remainder is dispositioned under
|
||||||
|
T03/T04, not deferred to `RMGR-WP-0005`.
|
||||||
|
|
||||||
## Repair the binding gap before counting any orphans
|
## Repair the binding gap before counting any orphans
|
||||||
|
|
||||||
```task
|
```task
|
||||||
|
|
@ -331,7 +355,7 @@ By status the remainder is overwhelmingly closed history — 96 `finished`, 10
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: CUST-WP-0068-T09
|
id: CUST-WP-0068-T09
|
||||||
status: todo
|
status: done
|
||||||
priority: medium
|
priority: medium
|
||||||
state_hub_task_id: "4c08f657-b1a4-5e0e-8f1e-c30899cc092f"
|
state_hub_task_id: "4c08f657-b1a4-5e0e-8f1e-c30899cc092f"
|
||||||
```
|
```
|
||||||
|
|
@ -436,6 +460,14 @@ into this one. They predate the backfill and cannot be qualified from the file
|
||||||
alone; 34 are open and worth a look on their own terms. `kaizen-agentic` (128),
|
alone; 34 are open and worth a look on their own terms. `kaizen-agentic` (128),
|
||||||
`activity-core` (71) and `the-custodian` (68) hold most of them.
|
`activity-core` (71) and `the-custodian` (68) hold most of them.
|
||||||
|
|
||||||
|
**Done (2026-08-28):** `reset_repository_projection` now matches identified
|
||||||
|
tasks of existing workplans by `record_id`: creates what the forge has and
|
||||||
|
the hub lacks, updates title/status, and cancels open tasks the file no
|
||||||
|
longer derives. Rows with no `record_id` are left alone. Tests in
|
||||||
|
`state-hub/tests/test_forge_projection.py`. The 21 identifier-mismatch rows
|
||||||
|
are all closed (0 open). Deploying this `state-hub` change is what actually
|
||||||
|
retires those closed rows; they are not a live surface.
|
||||||
|
|
||||||
## Disposition of duplicate task identities (2026-08-26)
|
## Disposition of duplicate task identities (2026-08-26)
|
||||||
|
|
||||||
Establishing task identity (`STATE-WP-0083-T06`) exposed 35 duplicate identities
|
Establishing task identity (`STATE-WP-0083-T06`) exposed 35 duplicate identities
|
||||||
|
|
@ -480,7 +512,7 @@ not before. The work above is what makes that reset produce the right answer.
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: CUST-WP-0068-T08
|
id: CUST-WP-0068-T08
|
||||||
status: todo
|
status: done
|
||||||
priority: high
|
priority: high
|
||||||
state_hub_task_id: "cbb8bf98-9b66-5827-992c-f22c3a6c1bb5"
|
state_hub_task_id: "cbb8bf98-9b66-5827-992c-f22c3a6c1bb5"
|
||||||
```
|
```
|
||||||
|
|
@ -495,3 +527,10 @@ convergence that a direct count contradicted.
|
||||||
Acceptance: cache-only count is zero or fully dispositioned; the container and
|
Acceptance: cache-only count is zero or fully dispositioned; the container and
|
||||||
its volume are removed; `ADR-010`'s divergence is recorded as closed rather than
|
its volume are removed; `ADR-010`'s divergence is recorded as closed rather than
|
||||||
described.
|
described.
|
||||||
|
|
||||||
|
**Done (2026-08-28):** direct count cache 1075 / central 1167. Cache-only
|
||||||
|
slugs are aliases of recovered records, clay-borg product files (T04), or
|
||||||
|
prefix-migration residue — no open work exists only in the cache. Final dump
|
||||||
|
`~/backups/state-hub-cache-2026-08-28.dump` (4.9 MiB custom format).
|
||||||
|
`docker compose down -v` in `state-hub/infra` removed `infra-postgres-1` and
|
||||||
|
volume `infra_pg_data`. Port 5432 is free.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue