feat: operational resource procurement facility

Implement RESOURCE-WP-0005: entity register, V0.1 terms parameters,
entity association on inventory and planning records, transfer-price
and credit-state arithmetic, monthly settlement, and entity views on
the portfolio report. Live close emits nothing until delivered cost
is known. Handoffs are FIN-WP-0006 and RAILIANCE-WP-0017.
This commit is contained in:
tegwick 2026-08-14 13:15:02 +02:00
parent 325a505980
commit f8d1c542d5
37 changed files with 1316 additions and 28 deletions

View file

@ -4,7 +4,7 @@ type: workplan
title: "Build the resource procurement facility"
domain: financials
repo: resource-control
status: ready
status: finished
owner: grok
topic_slug: railiance
created: "2026-08-14"
@ -13,6 +13,8 @@ related:
- RESOURCE-WP-0003
- RESOURCE-WP-0004
- FIN-WP-0004
- FIN-WP-0006
- RAILIANCE-WP-0017
origin: residual
origin_ref: RESOURCE-WP-0004
state_hub_workstream_id: "0c710416-e469-45a7-b007-d08ff3210c04"
@ -78,7 +80,7 @@ The three worked examples in Terms § 15 are executable fixtures.
```task
id: RESOURCE-WP-0005-T01
status: todo
status: done
priority: high
state_hub_task_id: "f8df895b-9959-4bb2-958e-f2444b558aac"
```
@ -103,11 +105,15 @@ Done when `make test` loads the register and the V0.1 parameter file,
rejects an unknown `entity:` id, and the numeric parameters match Terms
§ 14 exactly.
Completed 2026-08-14: `data/entities/register.json`,
`data/terms/procurement-v0.1.json`, schemas, and `tools/entities.py`.
Unknown ids and drifted parameters fail closed.
## T02 — Associate every cost-bearing schema
```task
id: RESOURCE-WP-0005-T02
status: todo
status: done
priority: high
state_hub_task_id: "5a18a74a-db07-4ab6-8bb5-ed4321ab7e11"
```
@ -132,11 +138,14 @@ Done when validators reject an untagged new record, accept an explicit
gap, accept all six entity IDs, and existing tests still pass after
additive schema changes.
Completed 2026-08-14: additive fields on inventory, planning-evidence,
and control-cycle; `portfolio.validate_record` requires association.
## T03 — Backfill the live portfolio
```task
id: RESOURCE-WP-0005-T03
status: todo
status: done
priority: high
state_hub_task_id: "14d450fb-e1f2-4443-a284-4439579f3709"
```
@ -159,11 +168,15 @@ Done when every live inventory record has a procuring entity and either a
consuming entity, a shared allocation that yields per-entity shares, or
an explicit unattributed gap, and `make test` passes.
Completed 2026-08-14: Coulomb, Binky, and platform backup tagged;
apps-pg shares Coulomb; host/cluster/forge remain explicit Railiance
residuals; no helix-forge dedicated resource exists yet.
## T04 — Transfer-price and credit-state engine
```task
id: RESOURCE-WP-0005-T04
status: todo
status: done
priority: high
state_hub_task_id: "4d2c87f7-6e50-4696-a041-e8502e9fab38"
```
@ -197,11 +210,14 @@ Done when fixtures for Terms § 15.115.3 assert:
- Helixforge at 1000.00 overdue: interest 4.17, allowance 45.83,
max new delivered cost 38.19, mode `restricted`.
Completed 2026-08-14: `tools/settlement.py` loads terms from data.
Fixtures assert 240.00 / 1.00 / 4.17 / 45.83 / 38.19.
## T05 — Monthly settlement statements
```task
id: RESOURCE-WP-0005-T05
status: todo
status: done
priority: high
state_hub_task_id: "cf55645b-b3ef-4cc4-ab51-23bdf5ff3af1"
```
@ -230,11 +246,14 @@ Done when the three § 15 scenarios can be produced as statements from
fixtures, `make settlement` runs against the repo, and a period with no
consumers emits nothing rather than invented zeros.
Completed 2026-08-14: statement schema, `make settlement PERIOD=YYYY-MM`,
§ 15 fixtures emit statements, live 2026-08 emits `[]`.
## T06 — Entity views on forecasts, variance, and the portfolio report
```task
id: RESOURCE-WP-0005-T06
status: todo
status: done
priority: medium
state_hub_task_id: "b8baa250-f189-4ae7-a4a6-5b09a199c1dd"
```
@ -253,11 +272,15 @@ Done when `make portfolio-report` lists each financial entity, names
unattributed resources, and a forecast fixture includes transfer price
and headroom without becoming booked spend.
Completed 2026-08-14: report `entities` section lists all six IDs and
names unattributed residuals; forecast fixture carries 240.00 / 760.00
and is labelled not booked spend.
## T07 — Fin-hub and Railiance handoff, plus the close runbook
```task
id: RESOURCE-WP-0005-T07
status: todo
status: done
priority: medium
state_hub_task_id: "d91a2ffd-7557-4a9a-a846-e6449b037eec"
```
@ -283,3 +306,7 @@ Done when the runbook exists, the outbound artifact shapes are
documented next to the fin-hub contract, and live work records exist in
the owning repos (or an intake with `origin: residual` if those repos
cannot take the work this session).
Completed 2026-08-14: `docs/resource-procurement-facility.md`; contract
addendum for settlement join keys; residuals `FIN-WP-0006` and
`RAILIANCE-WP-0017`.