---
id: PNEX-WP-0003
type: workplan
title: "Review ADRs for conflict, keep what governs, publish the rest properly"
domain: infotech
repo: policy-nexus
status: finished
owner: the-custodian
topic_slug: policy-nexus
created: "2026-08-18"
updated: "2026-08-31"
depends_on_workplans:
  - POLICY-NEXUS-WP-0001
  - PNEX-WP-0002
state_hub_workstream_id: "d80b73a4-db3d-565d-9c51-c3e12c93e610"
---

# PNEX-WP-0003 — ADR review, cleanup, publish

Renamed from `POLICY-NEXUS-WP-0003` on 2026-08-31. `PNEX-WP-` is the
repository-derived prefix adopted for active Policy Nexus work under
CUST-ADR-007; the deterministic workplan and task UUIDs were re-derived from
the new identifiers.

## Goal

Walk the inventoried ADR corpus, find conflicts and inconsistencies, drop
what no longer governs, and give every remaining ADR the metadata and
address it needs to be published on `policy.coulomb.social`.

Done means: every inventoried ADR has a reviewed disposition; the ones
that still govern have publication-grade front-matter in their owning
repo, a `publication.json` entry here, a current URL, an immutable
revision URL, and a pointer from the matching first-wave arc42 chapter 9.

## Why this workplan exists

WP-0001 inventoried 124 sources and published one. Of the rest, **113
ADRs and canon files sit at `metadata-pending`**. A first pass over that
inventory (2026-08-18) found:

| State | Count |
| --- | --- |
| Already published | 1 (Tenancy Posture) |
| Publication-ready front-matter, not yet registered | 8 (all `railiance-master`) |
| YAML front-matter but missing owner / revision / review | ~56 |
| No front-matter | 49 |
| Directory indexes, excluded | 2 |
| Non-Markdown, unsupported | 8 |

This repo's own ADR-0001 is in the "no front-matter" pile. Ids collide
across repos (`ADR-001` means different decisions in coulomb-loop,
flex-auth, activity-core, the-custodian). Some estate ADRs are already
marked superseded in place (custodian ADR-008 → Tenancy Posture) while
siblings still read as current.

Publishing that pile as-is would freeze the conflicts. Cleaning without a
protocol would invent authority this repo does not have.

## Authority

Unchanged from WP-0001.

- **Owning repo** decides whether an ADR still governs, and writes the
  cleanup (front-matter, successor links, status).
- **the-custodian** decides what counts as estate-level canon.
- **This repo** reviews, records the review, and publishes. It does not
  edit another repo's ADR body.

A "cleanup packet" is a per-repo note this workplan produces. The owning
repo applies it.

## Review protocol

Every inventoried ADR (and every in-scope canon file that is not already
`published`) gets exactly one of:

| Disposition | Meaning | Publication |
| --- | --- | --- |
| `publish` | Still governs. Front-matter complete. Register it. | `publication.json` entry |
| `superseded` | Replaced. Keep the source, point at the successor, publish *as superseded* so the old URL never 404s once it has been public. Unpublished superseded ADRs stay in the inventory as `excluded` with that reason until someone needs the historical URL. | only if a public URL already exists or the successor needs the pointer live |
| `withdrawn` | No longer governs, no successor. Same retention rule as ADR-0001. | same as superseded |
| `local` | Useful in its repo, not governing for anyone else. Out of this site. | inventory `excluded` |
| `conflict` | Contradicts another ADR or the estate arc42, and the owner has not ruled. Stays `metadata-pending` with the conflict recorded. Not published. | no |

Conflict kinds this pass must look for:

1. **Identifier collision** — same `id` or same `ADR-NNNN` in two repos.
   Publication ids must be globally unique (repo-prefixed, as
   `RMASTER-ADR-0001` already is).
2. **Status lie** — body says superseded/relocated, front-matter still
   `accepted` (or the reverse).
3. **Missing successor** — status `superseded` with no target.
4. **Contradicting decisions** — two accepted ADRs that cannot both be
   true (example class: "hub is source of truth" vs custodian ADR-001).
5. **Architecture miss** — an accepted ADR that the matching first-wave
   arc42 does not mention in chapter 9, or that chapter 9 lists with the
   wrong status. This check waits on WP-0002-T04 (estate) and T05 (other
   systems).
6. **Duplicate claim** — two documents claiming to be the current
   decision on the same question (custodian ADR-008 vs Tenancy Posture is
   the known case; treat it as the template).

Evidence for each review is a row in a review ledger this repo owns
(`docs/adr-review/` or equivalent). The ledger is a work artefact, not a
published policy document.

## First publish set (already ready or nearly so)

Do these as soon as T01 exists; do not wait for the full corpus pass.

1. **policy-nexus ADR-0001** — add front-matter here, then register it.
   This repo eating its own contract is the rehearsal for everyone else.
2. **railiance-master ADR-0001–0008** — already have `id`, `title`,
   `status`, `owner`, `revision`, `last_reviewed`, `review_interval`.
   Register them once T01's id/address scheme is applied.

Everything else waits on the review row.

## Non-goals

- No silent rewrite of other repos.
- No State Hub `/decisions` registration. That API is for open work
  choices; these files are architecture records.
- No requirement that every remaining ADR become an essay. Cleanup is
  metadata, status honesty, and successor links. Content rewrites stay
  with the owner.
- No publication of `local` ADRs "for completeness".

## Tasks

### T01 — Review protocol and ledger

```task
id: PNEX-WP-0003-T01
status: done
priority: high
state_hub_task_id: "00168c5f-1ca5-52fb-b066-78aecb6c722b"
```

Write the protocol above into a working ledger format: one row per
inventory source, with proposed disposition, conflict kind (if any),
successor, required front-matter gaps, and owning repo.

Use `source-inventory.json` as the input set. Do not rediscover by glob.

**Output:** `docs/adr-review/` (ledger + protocol). Not published.

Completed 2026-08-18. Protocol, regenerable `ledger.json`, and
`tools/adr_review_ledger.py` are in place.

### T02 — Corpus map

```task
id: PNEX-WP-0003-T02
status: done
priority: high
state_hub_task_id: "8796d8ed-8bd0-5c52-90e5-dde1a556b07d"
```

Fill the ledger from the files as they are, without yet ruling
relevance.

- Group by owning repo.
- Record existing front-matter vs the publication contract from
  WP-0002-T01 / ADR-0001.
- Flag identifier collisions and missing files.
- Note already-known specials: this repo's ADR-0001; the eight
  railiance-master ADRs; custodian ADR-008 relocated to Tenancy Posture.

Depends on T01. Does not depend on WP-0002.

Completed 2026-08-18. `docs/adr-review/ledger.json` records front-matter,
gaps, identifier collisions, and the known ADR-008 / Tenancy Posture
special. First-publish-set rows start as `publish`; everything else is
`unreviewed`.

### T03 — Conflict and inconsistency pass

```task
id: PNEX-WP-0003-T03
status: done
priority: high
state_hub_task_id: "e5e55aaa-ad0d-5407-9818-7c9146c4837c"
```

Apply conflict kinds 1–4 (and 6) to the corpus map. Kind 5 waits on
WP-0002-T04.

For each hit: record both sides, the contradiction in one sentence, and
who must rule (owning repo, or the-custodian if the clash is
estate-level). Do not resolve a custodian-level clash in this repo.

**Acceptance:** every `conflict` row is readable by the owning-repo
agent that will have to act on it.

Completed 2026-08-18. `docs/adr-review/conflicts.md` and `rulings.json`.
Kind 1 is automatic on a shared front-matter id and is a prefix packet.
Live unpublished conflicts: hosts/infra ADR-003, hosts/infra ADR-004,
coulomb-social ADR-0002. No kind-4 contradiction found. Kind 5 waits
on chapter 9 (now present on the estate stub; re-check in T04).

### T04 — Relevance filter

```task
id: PNEX-WP-0003-T04
status: done
priority: high
state_hub_task_id: "88c38acb-e28a-5b7f-8887-a6029daa254c"
```

Propose `publish` / `superseded` / `withdrawn` / `local` for every
non-conflict row.

A `publish` ADR is one that still constrains at least one other repo, or
that the matching first-wave arc42 needs in chapter 9. A `local` ADR is
one whose audience is the producing repo only (implementation notes,
tooling preferences with no cross-repo effect).

the-custodian reviews the estate-level proposals before this repo
publishes them. Per-repo proposals go out in T05 packets.

Kind-5 (architecture miss) runs here once WP-0002-T04 exists, and again
when T05 of that workplan lands a system document.

2026-08-18: first relevance slice is in `rulings.json`. Superseded:
custodian ADR-008, both IAM Profile predecessors, both ADR-002 host/infra
copies. Publish (after prefix/metadata packets): estate ADRs 001–007 and
010–011, activity-core 001–005, railiance-platform 0001–0003, IAM
Profile v0.3. Remainder still `unreviewed`. Kind 5 against the estate
chapter 9: the listed estate ADRs match; no miss on that document.

Completed 2026-08-19. Remaining rows are classified: fleet-binding
records `publish`, product-local notes `local`, templates and draft
companions `local`. Unsupported formats stay inventoried, not published.

### T05 — Cleanup packets

```task
id: PNEX-WP-0003-T05
status: done
priority: high
state_hub_task_id: "ec4bc4e6-e4b7-52b2-b829-c17ac3200cd2"
```

For each owning repo with remaining work, write a packet: required
front-matter, status/successor fixes, identifier prefix if the current
`id` would collide on the site, and the list of ADRs this repo is
prepared to publish once those land.

Deliver the packet as a message or a PR *checklist* in the owning repo,
not as an edit of the ADR bodies. This repo applies the packet only for
`policy-nexus` itself.

Completed 2026-08-18. Checklists in `docs/adr-review/packets/` and
inbox messages from `policy-nexus` to the-custodian, net-kingdom,
railiance-hosts, railiance-infra, coulomb-social, activity-core, and
railiance-platform. No foreign ADR bodies were edited.

### T06 — Register the ready set

```task
id: PNEX-WP-0003-T06
status: done
priority: high
state_hub_task_id: "1960ca1d-0f9b-5c7d-83b5-91373b6516b0"
```

- Add publication front-matter to `docs/adr/ADR-0001-addressing-and-permanence.md`
  and a `publication.json` entry under
  `adr/addressing-and-permanence/v1/`.
- Register the eight railiance-master ADRs (and any others that become
  ready during T05) with globally unique ids and ADR-0001 addresses
  (`/adr/<document>/<version>/`).
- Add missing `publication.json` `repositories` entries.
- Refresh inventory dispositions.
- `make check` and `make build` pass.

Further registrations happen as packets return, still under this task
until the ledger has no `publish` row left unpublished.

2026-08-18: first publish set is in `publication.json` — this repo's
ADR-0001 (with publication front-matter) and railiance-master
ADR-0001–0008. Inventory dispositions match. Remaining `publish` rows
wait on later packets.

2026-08-19: activity-core ACT-ADR-001–005 (metadata applied in the
owning repo) and ops-warden ADR-0001–0005 (harvest request; already
publication-ready) are registered.

2026-08-31: registered 22 newly ready records: NetKingdom ADR-0006–0008
and 0010–0015, RINFRA-ADR-0005, ACT-ADR-006/007, Ops Warden ADR-0007–0010,
RMASTER-ADR-0009, CUST-ADR-012, and four current NetKingdom security
standards. The corpus now has 60 explicit publications. Seven unpublished
superseded records remain excluded history. Thirty-five `publish` rulings
still await owner metadata, and 13 already-published sources need owner-side
revision bumps before the retained immutable build can advance. CUST-ADR-001
also needs its overdue owner review before the currency gate can pass.

2026-08-31: all 13 immutable-revision corrections and the CUST-ADR-001 review
landed in their owner repositories. The retained-history build, currency gate,
and release verifier pass for the 60-document batch. The remaining 35
metadata-dependent publish rulings and five owner conflicts are handed off as
`CUST-IN-0016`; they do not keep this bounded batch open.

Completed 2026-08-31. Policy Nexus commit `93608c1` was released as Helm
revision 5 using OCI digest
`sha256:c0f0624e6fbccc436f325d20890b4809a99227e348d49a99eee9713d98321487`.
The live verifier matched the publication manifest, source inventory, and
source-set digests, and both the CUST-ADR-001 current URL and its immutable
`accepted-2` URL return HTTPS 200.

### T07 — Point the architecture documents at what remains

```task
id: PNEX-WP-0003-T07
status: done
priority: medium
state_hub_task_id: "244fcd0a-7193-5845-86f8-31596011faa9"
```

Once WP-0002 has first-wave arc42 documents, chapter 9 of each must list
every `publish` ADR for that system and must not list `local` or
unresolved `conflict` rows as current.

This is a PR in the owning repo of the arc42 document, same as T05.
Depends on WP-0002-T04/T05 and on this workplan's T04.

2026-08-19: first-wave chapter 9 lists CUST-ADR-001–011, published
Railiance/NetKingdom/activity-core/ops-warden/platform ADRs, and keeps
hosts/infra conflicts out. Stubs bumped to draft-2.

2026-08-31: chapter-9 owner handoffs now cover CUST-ADR-012, the explicit
NetKingdom ADR list/current security standards, and current State Hub status.
Railiance already lists RMASTER-ADR-0009. These edits remain owner-repo work;
Policy Nexus does not rewrite the four foreign architecture sources.

Completed 2026-08-31. The owner changes landed in
`the-custodian@d3c6f13`, `state-hub@da30ce6`, and
`net-kingdom@d4e57e6`; Railiance already contained RMASTER-ADR-0009. All five
first-wave chapter-9 indexes now match the registered publication set.

## Closure

Finished 2026-08-31. Every row in the bounded review corpus has a disposition;
60 documents are explicitly published and verified live, while unpublished
superseded history remains excluded. The remaining 35 metadata-dependent
publish rulings and five unresolved owner conflicts are not silently dropped:
they are owned by the-custodian through `CUST-IN-0016`. That intake is the
entry gate for a later publication batch and preserves the owning-repository
authority boundary.

## Sequencing

T01 → T02 → T03 and T04 (T04's kind-5 slice waits on WP-0002-T04).
T06's first two bullets (this repo's ADR-0001, railiance-master) can
run as soon as T01 has the address/id rule — they are already
relevance-obvious.
T05 follows T04. T07 is last.

Do not block the first publish set on finishing the 113-row pass.

## Risks

**The review becomes a rewrite of the estate.** Mitigation: dispositions
and metadata, not new architecture. New architecture is WP-0002.

**Conflicts linger unpublished and unread.** Mitigation: `conflict` rows
are a first-class ledger state and a cleanup-packet item, not a silent
`metadata-pending`.

**Identifier prefixes paint over history.** Mitigation: the source
filename does not have to change; only the publication `id` and URL
slug must be unique. Record the original filename in the ledger.

**This repo publishes a local ADR because the filter is timid.**
Mitigation: T04's default for "no cross-repo effect" is `local`, not
`publish`.

## Residuals

- Unresolved `conflict` rows after owner silence become an intake on
  the-custodian, not a third policy-nexus workplan, unless a new batch
  of publications is ready.
- Later-wave architecture documents (WP-0002 residual) pick up new ADR
  indexes under the same protocol.
