title: The Accreting Review — Model (a shared review primitive) doc_id: accreting-review-01-model status: settled — ratified by Tim 2026-07-07 (no amendment at the gate). A shared-substrate primitive both People onboarding and the RPL tile consume; anticipated future consumers named, not designed (§2) layer: shared substrate model (Legislation-to-Tile move-3 grade, but not a tile — see §0) authored: 2026-07-07 NYC — RTOpacks-side Claude, for Tim's ratification discharges: the foundational "snapshot-versioning & approval-binding" ADR flagged owed in T4B-ONBOARDING-SURFACE-01 (settled 2026-06-18, never written up) — its rules are settled here, generalised from People-specific to shared. A bare decisions-registry ADR, if still wanted, points here. sources_read_in_full_at_draft: - PEOPLE-ONBOARDING-PIPELINE-MAP-01 (stages 5 review / 6 correspondence / 7 approval+audit; the architecture the pipeline waited on) - T4B-ONBOARDING-SURFACE-01 (snapshot machinery verified on bytes 2026-06-17; the snapshot-versioning & approval-binding rules settled 2026-06-18; the audit/history surface) - people-03-companion (build state 2026-06-29, commit a6b078c7 — established the loop is DESIGNED-not-built: /entry stubbed, authoring dormant) - rpl-01-model §3 §5 §10 §16 (the RPL application spine + the gap/supplement need) - intake-pipeline-01-model §2 §3 (the tokened candidate re-supply channel RPL consumes) - Practice Guide: RPL & Credit Transfer; Practice Guide: Assessment (Std 1.3/1.4/1.5, ASQA, 17 June 2025) — the reassessment/evidence-supplement obligation (1.4(a)(i) fairness) that surfaced the loop as a launch need relates_to: standing-rules.md (immutability, audit) · MANDARIN taxonomy · ADR-020 (scope-by-grant, for the history surface) · STORE-THE-ATTESTED-FACT-NOT-THE-SENSITIVE-ARTEFACT
The Accreting Review — Model¶
0. What this artefact is, and is not¶
Two surfaces in the product need the same machine: a submission reviewed section by section, where approvals accrete and lock rather than being re-litigated each round, conducted through an immutable back-and-forth, versioned so both "what was true then" and "how this section resolved over time" are reconstructable. People onboarding designed it (stages 5–7); the RPL tile needs it for evidence-supplement/reassessment (rpl-01 §10 + the 1.4(a)(i) fairness obligation). Rather than each tile re-authoring it — and diverging — it is extracted once here.
It is not a tile. No obligations of its own; no accreting-review-00. Every clause a
review discharges is owned by the consuming tile and anchored in that tile's -00. The
primitive is the machine; the meaning of a section, an approval, and a return is the
consumer's.
It mints no discharging events. The events that fire on its transitions are the consumers' events, emitted into the owning tile's ledger (People's onboarding events; RPL's rpl-01 §16 events). NO ORPHAN GRAINS is honoured by reference — the primitive carries the mechanism, the tile carries the clause.
It holds no identity, grants no access, keeps no sensitive artefact. Those stay the consumers': People mints grants and identity; the intake pipeline holds the candidate's tokened channel and sealed captures; custody is the tile's vault. The Accreting Review is the review state machine over whatever a consumer submits — nothing more (§7).
One machine, N consumers, per-consumer parameters. The parameters never fork it into two machines; they are values plugged into shared stages (§2).
1. The primitive in one line¶
A versioned submission is reviewed section by section; each section is approved-and-locked or returned-with-reason; locked sections stay locked across resubmissions unless their own content changes; every exchange is immutable, attributed, append-only; and the whole is reconstructable along two axes — what the submission was at version N, and how each section resolved over time.
The audit artefact is not written after the review — the review is the audit artefact.
2. The consumers — one machine, per-consumer parameters¶
The load-bearing table. Everything below elaborates a column.
| People onboarding | RPL tile | Anticipated (named, not designed) | |
|---|---|---|---|
| A "section" is | a compliance dimension (identity/suitability, credential, vocational competency, the two currencies) | a unit-claim (per unit of the target product) | LLND review items; Record's per-unit validation samples |
| "Approve → lock" means | admin marks the dimension compliant; it locks | the assessor's per-unit signing act (granted); it locks | validated / signed-off |
| "Return with reason" means | admin returns the dimension with a specific, logged reason; the person resupplies | the assessor returns the unit with a gap-notation; the candidate supplements evidence (the reassessment path — 1.4(a)(i) fairness) | validator returns a finding |
| The actor pair | T4 admin ↔ self-maintainer | RTO assessor ↔ candidate | validator ↔ assessor |
| The re-supply channel | the T4B authoring surface (login-gated, workforce) | the intake pipeline's tokened, login-free re-invitation against the same candidate row (intake-pipeline §2) | tile-specific |
| Sections share sub-elements? | no — dimensions are independent | yes — units can share leaves; the cascade (§4) is load-bearing here | per-tile |
The last row is the one genuine generalisation RPL forces: sections may declare sub-element dependencies, and a re-open cascades along them (§4). Consumers whose sections are independent (onboarding) simply declare none.
3. The two version axes — never conflated (the foundational rule)¶
The single mistake this model exists to prevent: collapsing two different things that both carry versions. They are orthogonal and both reconstructable from one data set.
- The submission version. Monotonic per submission subject, incrementing on each submit
(v1 / v2 / v3 across return cycles). Each version freezes an immutable snapshot of the
submitted field-set at that moment. (People's substrate already holds this:
pc_attestationscarriesversion, the frozensnapshotJSON,attested_at,attested_by— verified on bytes 2026-06-17. RPL binds its own equivalent inrto-rpl-db; the shape is the model's, the table is the tile's.) - The per-section approval. Accretes independently of the submission version. A single snapshot can have section A approved and section B returned. An approval is a fact about a section, not about the whole submission.
Conflating them produces one of two failures, both fatal: re-litigating every section on every resubmission (infuriating, and it makes the review never converge), or letting a section approved against old content ride forward over changed content (dangerous — the approval no longer describes what it approved). §4 is the rule that keeps them apart.
4. Accreting approval + the lock rules¶
- A section's approval binds to the snapshot version it was approved against. The approval record carries { section, approved-at-submission-version, approver, timestamp }. It is an attributed historical fact, never mutated.
- An approved section stays locked through later resubmissions — unless its own content changes. If the resubmission leaves section A's content byte-identical, A's approval rides forward untouched (no re-litigation). If section A's content changes, A's lock breaks and A re-enters review (the approval stands as history, against its old version, but no longer governs the current submission). This is the trap named and closed: content-change is the only thing that re-opens a locked section.
- The sub-element cascade (RPL's generalisation). Where sections declare sub-element dependencies, a content change that touches a shared sub-element re-opens every section that depends on it — not only the section the candidate edited. In RPL: supplementary evidence re-tracing a leaf shared by units X and Y re-opens both, even if only X was returned. Consumers with independent sections declare no dependencies and the cascade is a no-op. The dependency graph is the consumer's to declare; the cascade rule is the model's.
- Convergence. The review is complete when every section is locked-approved against the current submission version (or the submission is withdrawn/failed per the consumer's terminal rule). Because locks accrete and only content-change re-opens them, the outstanding set shrinks monotonically toward zero — the review is guaranteed to narrow, not thrash.
5. The correspondence loop¶
The back-and-forth between reviewer and subject — return-with-reason, clarification request, response — is not a side channel; it is part of the record.
- Immutable, timestamped, attributed, append-only. Nothing is edited or deleted; a correction is a new entry. Every entry names its author and its moment.
- Bound to its section and its submission version. A return-with-reason references the section it returned and the version it returned against, so the log reconstructs why a section re-opened, not merely that it did.
- The audit answer. "How did this record come to be approved?" is answered by replaying the correspondence against the version axis — the process, not a summary of it, is the evidence.
6. Reconstruction along both axes¶
From the same immutable data, the surface must reconstruct:
- The temporal view — "what the submission was at version 2" (a frozen snapshot + the approval state as it stood then).
- The sectional view — "how the Credential dimension / unit-claim resolved over time" (the section's return/approve history across versions, with its correspondence).
Both are reads over the version-and-approval records; neither is stored as a separate narrative. If a design can produce only one axis, it has conflated the two versions (§3).
7. The boundary — what the Accreting Review does not do¶
Named explicitly so no consumer's spec quietly grows the primitive past its job:
- It does not grant access or mint identity. People mints grants and identity; the candidate store holds candidate identity; the primitive reviews a submission, it does not decide who may log in or be counted. (A submission is never tacit elevation — the grant is a separate, deliberate act on the consumer's side.)
- It does not hold the sensitive artefact. Custody is the consumer's (the RPL vault; the intake pipeline's sealed captures). The primitive references sealed digests; it stores review state, not evidence bytes. STORE-THE-ATTESTED-FACT-NOT-THE-SENSITIVE-ARTEFACT applies.
- It does not carry clauses. Sections, approvals and returns are anchored to clauses by the consuming tile's fields (CLAUSE-BOUND FIELDS lives in the tile, not here). The primitive is legislatively neutral — which is exactly why it is shared.
- It does not choose the re-supply channel. People uses the login-gated authoring surface; RPL uses the intake pipeline's tokened re-invitation. The primitive requires a channel; the consumer names which.
8. What hardens from this model¶
- Not a tile; no
-00; no owned events — a shared machine discharging the consumers' reviews by reference (§0). - One machine, per-consumer parameters, never forked (§2).
- Two version axes, never conflated — submission-version (frozen snapshots) vs per-section-approval (accretes independently) (§3).
- Accreting locks: approval binds to the version it was made against; a locked section stays locked unless its own content changes; content-change is the only re-opener (§4).
- The sub-element cascade — a shared-sub-element change re-opens all dependent sections; independent-section consumers declare none (§4).
- Guaranteed convergence — the outstanding set shrinks monotonically (§4).
- Correspondence is the record — immutable, attributed, append-only, bound to section + version (§5).
- Dual-axis reconstruction — temporal and sectional from one immutable data set (§6).
- Bounded — no access, no identity, no custody, no clauses; those stay the consumers' (§7).
- Discharges the foundational snapshot-versioning/approval-binding ADR onboarding awaited.
9. Deferred to the consuming specs (structural & presentation calls, not model questions)¶
- The concrete substrate each consumer binds (People:
pc_attestations+ an approval/ correspondence store; RPL:rto-rpl-dbtables) — the shape is the model's, the tables the tile's. - Content-change detection mechanism (digest-per-section vs field-diff) — a spec call; the rule (content-change breaks the lock) is the model's.
- The terminal states beyond approve/return (withdraw, fail, expire) — consumer-defined.
- The review surface's presentation (the progress-list vs glass-on-arrival treatment is People's design language; RPL's assessor workbench is rpl-02 §6).
- Which roles see which histories — scope-by-grant per ADR-020; the capability (everyone sees their own; operators see their scope) is the model's, the role bindings the tile's.
- Notification/reminder cadence on a return (rides each consumer's comms surface).
Move-3-grade shared-substrate model. Extracted 2026-07-07 from the People onboarding design (stages 5–7) and the snapshot-versioning rules settled 2026-06-18, generalised to serve the RPL tile's evidence-supplement loop. Designed-not-built in both consumers as at extraction — the cheapest moment to author it once. One machine; many reviews; the process is the evidence.