Finish RAILIANCE-WP-0021: family schemas, validator, and ADR-0007
Add rail and reef schemas, derive reef bound_rapps from rapp.bound_reefs, and ship a standalone family-declaration validator with an inventory-fed coverage check. Point the bootstrap contract at the schemas, record the dimension and cardinality decisions in ADR-0007, correct the first-wave candidates document, and release the shape to downstream repos.
This commit is contained in:
parent
d3b3512a60
commit
3cc0dc31d6
20 changed files with 1509 additions and 187 deletions
|
|
@ -4,13 +4,13 @@ type: workplan
|
|||
title: "Rapp Declaration Schema and Family Declaration Validator"
|
||||
domain: financials
|
||||
repo: railiance-master
|
||||
status: active
|
||||
status: finished
|
||||
owner: codex
|
||||
topic_slug: railiance
|
||||
planning_priority: high
|
||||
planning_order: 21
|
||||
created: "2026-08-11"
|
||||
updated: "2026-08-11"
|
||||
updated: "2026-08-13"
|
||||
related_repos:
|
||||
- railiance-master
|
||||
- railiance-platform
|
||||
|
|
@ -303,7 +303,7 @@ whose members carry their own package types.
|
|||
|
||||
```task
|
||||
id: RAILIANCE-WP-0021-T04
|
||||
status: todo
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "50ffbff9-f8f0-4085-975a-6c5123d9c2f0"
|
||||
```
|
||||
|
|
@ -317,11 +317,30 @@ Change `reef.yaml` `bound_rapps` from a hand-maintained list to a derived
|
|||
projection of the rapp declarations that name the reef, and record the
|
||||
migration path for `reef-railiance`, whose current list is already known stale.
|
||||
|
||||
**Done 2026-08-13.** `schemas/rail.schema.json` and `schemas/reef.schema.json`
|
||||
written from the live declarations and the composition/substrate contracts,
|
||||
not from the bootstrap field lists (those lists used an older
|
||||
`substrate_prerequisites` name the live rails do not carry).
|
||||
|
||||
Both live rails conform. The live reef conforms as a document.
|
||||
`bound_rapps` is optional and derived from a new required `rapp.bound_reefs`
|
||||
field (empty list means declared but not placed). The live
|
||||
`reef-railiance` hand-list `[rapp-qonto]` fails the derivation check, which
|
||||
is the intended result. Migration for that repo: delete the field now, or
|
||||
replace it with the derived set once the three live rapps name the reef.
|
||||
|
||||
Adjacent ownership, recorded so it is not mistaken for a schema hole: the
|
||||
postgres backup object store is a consumed capability (`s3-backup-target`),
|
||||
not a rapp-owned resource. Bucket = `resource-control` / `RESOURCE-WP-0002`.
|
||||
Credential = `railiance-platform` OpenBao `Secret platform-pg-backup-s3`.
|
||||
Purchase = decision `9c21c0e0`. `make postgres-backup-deploy` stays
|
||||
fail-closed until that handoff lands.
|
||||
|
||||
## T05 - Build the family declaration validator
|
||||
|
||||
```task
|
||||
id: RAILIANCE-WP-0021-T05
|
||||
status: todo
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "0a212d33-2169-4472-80d0-69ec4edba5cb"
|
||||
```
|
||||
|
|
@ -342,11 +361,22 @@ runnable standalone now, and callable from `fix-consistency` later; do not
|
|||
block on canon admitting the prefixes, since that is `the-custodian`'s
|
||||
sequencing, not ours.
|
||||
|
||||
**Done 2026-08-13.** `tools/validate-family-declarations.py` walks
|
||||
`rail-*` / `rapp-*` / `reef-*` siblings of `--root` (default: parent of
|
||||
this repo). `--self-test` passes against `tools/testdata/family-declarations`.
|
||||
|
||||
First live scan of `/home/worsch` (no inventory): 6 declarations, 31
|
||||
errors. The two rails are clean. The three declared rapps fail on the
|
||||
already-known shape drift plus the new `bound_reefs` field. The reef fails
|
||||
only on stale `bound_rapps`. The three undeclared engine repos fail as
|
||||
prefix-without-declaration. That is exactly the drift the schema exists to
|
||||
make loud.
|
||||
|
||||
## T06 - Add the deployable coverage check
|
||||
|
||||
```task
|
||||
id: RAILIANCE-WP-0021-T06
|
||||
status: todo
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "519c2838-c4af-46e9-81fa-612fb09e91e3"
|
||||
```
|
||||
|
|
@ -367,11 +397,22 @@ here.
|
|||
Expect the first run to report a large uncovered set. That output is the wave-2
|
||||
worklist, not a failure to suppress.
|
||||
|
||||
**Done 2026-08-13.** The validator takes `--inventory PATH`. This repo does
|
||||
not query a cluster. The file is a JSON mapping with `source`,
|
||||
`captured_at`, optional `reef`, and `deployables` as a list of `{name,
|
||||
namespace?, kind?}` (bare name strings also accepted). Live names that no
|
||||
rapp claims are errors labelled as wave-2 worklist items. Declared names
|
||||
missing from the inventory are warnings.
|
||||
|
||||
The first live run is not in this repo: it needs `railiance-platform` to
|
||||
emit the inventory T01 asked for. The check itself is implemented and
|
||||
covered by `--self-test`.
|
||||
|
||||
## T07 - Update the bootstrap contract to point at the schemas
|
||||
|
||||
```task
|
||||
id: RAILIANCE-WP-0021-T07
|
||||
status: todo
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "aa71bc2f-7d9e-4351-8130-8b6e23b8ee36"
|
||||
```
|
||||
|
|
@ -384,11 +425,18 @@ Record an ADR (next free number, `ADR-0007`) for the framework decisions this
|
|||
workplan settles: bounded rapp context as an independent dimension, the two
|
||||
cardinalities, and grouped-by-bounded-context granularity.
|
||||
|
||||
**Done 2026-08-13.** Bootstrap contract now points at the three schema files
|
||||
and refuses to restate their fields. `docs/adr/ADR-0007-rapp-declaration-contract.md`
|
||||
records the dimension, the two cardinalities, grouped-by-bounded-context
|
||||
granularity, and that the schemas are normative. Decision `d07ee5f9` remains
|
||||
the platform-side record; this ADR is the framework record, not a second
|
||||
decision.
|
||||
|
||||
## T08 - Refresh rapp-first-wave-candidates.md
|
||||
|
||||
```task
|
||||
id: RAILIANCE-WP-0021-T08
|
||||
status: todo
|
||||
status: done
|
||||
priority: medium
|
||||
state_hub_task_id: "28e4ef82-62ea-41d2-a059-05c047292240"
|
||||
```
|
||||
|
|
@ -407,11 +455,17 @@ candidates: `rapp-netkingdom-identity` (sso, mfa, user-engine, tenant-engine,
|
|||
flex-auth), `rapp-forgejo` (forgejo, runner, registry), `rapp-coulomb-social`,
|
||||
`rapp-helix-forge`.
|
||||
|
||||
**Done 2026-08-13.** The document now leads with the plan-versus-outcome
|
||||
table, states that the user-facing wrapper is unproven, keeps the 2026-07-25
|
||||
assessment as history, and carries the wave-2 inventory in composition
|
||||
shape. The three undeclared engine repos are named so they are not invented
|
||||
again as separate rapps. `rapp-forgejo` placement cites `d151d817`.
|
||||
|
||||
## T09 - Release the schema to downstream repos
|
||||
|
||||
```task
|
||||
id: RAILIANCE-WP-0021-T09
|
||||
status: wait
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "b8dc2452-8ec0-4301-98b7-4ec96411f428"
|
||||
```
|
||||
|
|
@ -426,3 +480,15 @@ contracts and what each repo must change.
|
|||
|
||||
Migration itself belongs to the owning repos. This task ends when they have
|
||||
what they need, not when they are done.
|
||||
|
||||
**Done 2026-08-13.** Release messages sent. Downstream now has the shape and
|
||||
the per-repo change list; migration itself is not this task.
|
||||
|
||||
| To | Message | What they received |
|
||||
|---|---|---|
|
||||
| `railiance-platform` | `072c5820` | WP-0015-T02 unblocked; inventory shape for T06; S3 split restated |
|
||||
| `rapp-openbao` | `093f2f73` | 11-error migration (metadata, composition, `bound_reefs`, contract rename) |
|
||||
| `rapp-postgres` | `7b1cb9b7` | same 11-error set; S3 is a consumed destination, not a hole |
|
||||
| `rapp-qonto` | `16742192` | 5-error migration (`composition`, `bound_reefs`, `package_type`, name, `fallback`) |
|
||||
| `reef-railiance` | `6b395e26` | delete or replace stale `bound_rapps` |
|
||||
| `resource-control` | `aa8393e3` | coordination only: bucket is theirs (`RESOURCE-WP-0002`) |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue