repo-manager/workplans/RMGR-WP-0004-repository-standards-conformance.md
tegwick 52cd6d7a1b docs(workplans): RMGR-WP-0004-T09 assign ownership of shared prefixes
Three prefixes across seven repos, each a concurrently-allocated number
line. Recommends the-custodian keeps CUST-WP-, RAIL-BS- needs a call, and
RAILIANCE- is retired outright since it names a family rather than a repo —
the same defect as PRJ-WP-. Execution of each rename belongs to a worker in
that repo per ADR-007 decision 4.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 10:24:15 +02:00

11 KiB
Raw Blame History

id type title domain repo status owner topic_slug created updated parent_project parent_workplan related state_hub_workstream_id
RMGR-WP-0004 workplan Repository standards conformance and governed scaffolding infotech repo-manager proposed codex infotech 2026-08-16 2026-08-16 prj-state-hub-retirement SHR-WP-0001
STATE-WP-0080
STATE-WP-0079
RMGR-WP-0001
CFED-WP-0001
b8b3f1e0-b8df-4405-849e-11ec51f80ae5

Repository standards conformance and governed scaffolding

Goal

Establish Repo Manager as the owner of the standards repositories must comply with — flavor, required files, naming conventions, classification, and conformance checking — and of the governed scaffolding that creates conformant repositories.

Hubs are registers. They index and project repository-owned records; they do not scaffold, template, or rewrite repository files. This workplan moves that capability to its correct owner.

Decision basis

prj-state-hub-retirement decision 747011c6 (2026-08-16, Bernd Worsch):

Hubs are registers: they index and project repository-owned records. They do not scaffold, template, or rewrite repository files. Repo Manager owns repository representation and governed mutation, and therefore owns the standards repositories must comply with.

This extends ADR-001 (hub is a read model) from data to behaviour. A hub that writes INTENT.md, AGENTS.md, .custodian-brief.md, and bootstrap workplans into repositories is already outside its own boundary — the register path is repo mutation wearing hub clothing.

It is a placement correction rather than a scope expansion: SCOPE.md already claims "repository registration, identity, classification, and lifecycle" and "controlled repository mutation through explicit commands and policy checks".

Model repository standards explicitly

id: RMGR-WP-0004-T01
status: todo
priority: high
state_hub_task_id: "dd2db30f-c48f-404d-a1b4-bd75b41d42f4"

Give Repo Manager a first-class representation of the standards a repository is expected to satisfy, rather than encoding them implicitly in a scaffolding script. At minimum:

  • flavor — product, tooling, research, business, experimental, project (prj-), and how it is determined (.repo-classification.yaml category, GOAL.md repo_flavor, slug prefix, in that precedence);
  • required files per flavor, with the purpose document differing by flavor (INTENT.md for durable repos, GOAL.md for prj-);
  • naming conventions — repo slug, workplan prefix derivation;
  • anti-patterns that are violations rather than gaps (shipping both INTENT.md and GOAL.md; a flavor-derived workplan prefix).

Source standards: project-repository-flavor_v0.1.md and repo-classification-standard_v1.0.md in the Custodian canon. Canon stays authoritative; Repo Manager implements against it and must not fork the rules into a second definition.

Implement conformance checking

id: RMGR-WP-0004-T02
status: wait
priority: high
state_hub_task_id: "2c9b0cb1-f0f0-40f7-83ef-1828298338d3"

Check a repository against its flavor's standard and report violations with enough detail to fix them. Distinguish missing (a required file absent) from contradictory (an anti-pattern present) — the second is the more valuable signal and the one that went undetected twice.

Expose it as a command and as a contract other components can call, so the consistency lane and agent sessions get the same answer.

Known first findings, both live today:

  • prj-canon-federation and prj-state-hub-retirement were each scaffolded with a forbidden INTENT.md that had to be deleted by hand;
  • every prj- repo would collide on workplan prefix PRJ-WP-, because the prefix is derived from the flavor marker rather than from the project.

Own governed scaffolding

id: RMGR-WP-0004-T03
status: wait
priority: high
state_hub_task_id: "8e6fa8d7-f169-44f5-bdc9-29376bb2ef64"

Take ownership of creating conformant repository files, replacing the templating currently embedded in state-hub/statehub_register.py (872 lines, with no reference to .repo-classification.yaml, category, or repo_flavor anywhere — the root cause of both failures).

Requirements:

  • flavor-correct purpose document: GOAL.md for prj- repos with the four sections the standard requires (Outcome, Invariants, Success gates, Project retirement), INTENT.md for durable repos, never both;
  • workplan prefix derived from the project, not the flavor marker; prompt or require explicit input rather than emitting a colliding default;
  • no generic bootstrap workplan for project repos, which compete with the foundation workplan the project actually needs;
  • scaffolding is a command in the Repo Manager sense — requested action distinct from confirmed repository state, with the resulting revision and a normalized event recorded (SCOPE.md § API boundary).

Behaviour for durable product repos must be preserved exactly; this workplan changes where the capability lives and how project repos are treated, not what ordinary repos receive.

Regenerate agent instructions per flavor

id: RMGR-WP-0004-T04
status: wait
priority: medium
state_hub_task_id: "8cd3ba11-b16b-4910-8bf6-651a24d47b8c"

make update-agent-instructions regenerates AGENTS.md, CLAUDE.md, .claude/rules/, and .custodian-brief.md from templates that assume every repo has an INTENT.md. Bring regeneration under the same flavor model so running it on a prj- repo produces the standard's session order — GOAL.mdSCOPE.md → history → active workplans — rather than reintroducing INTENT.md references on every run.

This matters beyond first registration: regeneration runs fleet-wide, so a flavor-blind template silently re-breaks conformant repos.

Accept the handoff from state-hub

id: RMGR-WP-0004-T05
status: wait
priority: medium
state_hub_task_id: "8402b8b6-2a1e-4236-b27d-d50b6161a176"

Coordinate the transfer with STATE-WP-0080, which is retargeted to a thin guard plus handoff rather than a parallel implementation:

  • agree the cutover point at which statehub register delegates or refuses;
  • confirm the register path's disposition in prj-state-hub-retirement/inventory/ reads move to repo-manager, not keep;
  • keep SHR-WP-0001 as the coordination point; link by ID, do not duplicate its task list.

Follow the dual-run strangler pattern already proven in RMGR-WP-0002 and RMGR-WP-0003 rather than a flag-day switch.

Add compatibility and regression tests

id: RMGR-WP-0004-T06
status: wait
priority: medium
state_hub_task_id: "faaeb016-3ba8-493a-bbdf-9227de24f720"

Per SCOPE.md § Initial extraction source, extraction must preserve behaviour with compatibility tests. Cover:

  • a prj- repo scaffolds GOAL.md, no INTENT.md, no flavor-derived prefix;
  • a durable repo's scaffolded output is byte-identical to the state-hub path (regression guard against changing ordinary-repo behaviour);
  • conformance checking flags both known live findings from T02;
  • flavor signals that disagree warn rather than silently resolving;
  • re-running scaffolding on a conformant repo is idempotent.

Enforce workplan identifier uniqueness

id: RMGR-WP-0004-T08
status: wait
priority: high

Implement ADR-007 decision 1 as a repository standard: PREFIX-WP-NNNN names exactly one workplan fleet-wide, for all time.

  • Prefix ownership registry — one prefix, one repository. New machinery: no such registry exists today. C-26 checks prefix conformance within a repo against a canonical prefix, but nothing checks across repos.
  • Forward-only numbering — a running number is never reused within a prefix, including after cancel, archive, or delete.
  • Prefixes derive from project or repository identity, never from a flavor marker or category. This is what makes PRJ-WP- invalid by construction and connects back to T03.

Live violations to detect (fleet scan, 2026-08-16 — 955 hub workplans, 525 parseable identifiers):

prefixes shared across repos:
  CUST-WP-      state-hub, the-custodian
  RAIL-BS-WP-   railiance-bootstrap, railiance-cluster
  RAILIANCE-WP- railiance-apps, railiance-forge, railiance-platform, railiance-telemetry

identifiers reused:
  CUST-WP-0000 / 0010 / 0045   the-custodian ×2 each
  RAILIANCE-WP-0015            railiance-platform, railiance-apps
  RAILIANCE-WP-0016            railiance-platform ×2, railiance-apps

Detection only. Remediating the existing collisions is an open ruling in ADR-007 § Migration and is not authorized by this task.

This task gates RMGR-WP-0005. Deterministic identifier derivation from a non-unique identifier would manufacture UUID collisions rather than remove them.

Assign ownership of the shared prefixes

id: RMGR-WP-0004-T09
status: wait
priority: high

Three prefixes are shared across seven repositories, each a single number line allocated from concurrently. Under ADR-007 decision 1 each must resolve to one owning repository before the next workplan is created in the affected repos.

This is forward conformance, not migration: ADR-007 § Migration ruled option 2, so historical files keep their identifiers and are not renamed.

Prefix Current holders State
CUST-WP- the-custodian (50), state-hub (4 legacy) dormant on the state-hub side
RAIL-BS-WP- railiance-cluster (6), railiance-bootstrap (2) growingRAIL-BS-WP-0014 ready
RAILIANCE-WP- railiance-platform (12), apps (2), forge (1), telemetry (1) growing — forge 0002 ready, telemetry 0001 proposed

Recommended assignments, to be confirmed with each owning repo:

  • CUST-WP-the-custodian. state-hub's canonical prefix is already STATE-WP (C-26 says so today); its four legacy files stay as history.
  • RAIL-BS-WP- → needs a call. The name reads as railiance-bootstrap, but railiance-cluster holds more plans and is the active user. Whichever repo does not keep it takes a new prefix from its own identity.
  • RAILIANCE-WP- → recommend none of them keep it. RAILIANCE names a family, not a repository, so it fails decision 1's requirement that prefixes derive from project or repository identity — the same defect as PRJ-WP-. Give each of the four repos a prefix from its own name.

Per ADR-007 decision 4, the rename of a repository's own convention is executed by a worker in that repository. This task assigns and records ownership in the registry (T08) and coordinates; it does not reach in and rewrite those repos.

RAILIANCE-WP-0015's ambiguity between railiance-apps and railiance-platform persists by design under option 2. Note it in the registry so citations are forced to name the repository.

Confirm the canon boundary

id: RMGR-WP-0004-T07
status: wait
priority: low
state_hub_task_id: "7fdd54fe-fba7-4713-9814-d4534ff19706"

Repo Manager implements repository standards; it does not author them. Confirm with the Custodian that canon remains the authoritative source and record where the seam sits, so conformance rules do not drift into a second definition inside this repo.

If the ownership shift warrants it, the Custodian may want an ADR recording that repository-standards enforcement is a Repo Manager responsibility — that is a Custodian decision, raised from here, not made here.