canon-project-repository-flavor accepted · accepted-1 the-custodian reviewed 2026-08-31generated from canonical source — do not edit

Project Repository Flavor (prj-) v0.1

Source: the-custodian · canon/standards/project-repository-flavor_v0.1.md · f9435cd605cc5b3cb0f2e957ce6287d9f3129aac

Review due: 2027-02-28

Purpose

Define the durable project repository flavor used for complex cross-repository efforts: naming, required files, authority boundary, lifecycle, residual handoff, and archive procedure.

This standard implements and completes ADR-005 (Cross-Repo Workplans Live in Dedicated Project Repos). It does not replace the Repo Classification Standard: project repositories still use category: project in .repo-classification.yaml.

When to use a project repository

Create a project repository when all of the following hold:

  1. The work coordinates change across two or more functional repositories.
  2. Binding the coordination workplan to any single product/tooling repo would misrepresent ownership or pollute that repo's history.
  3. The effort has a bounded outcome with explicit success and retirement conditions (not an open-ended product roadmap).

Do not create a project repository for:

  • single-repo workplans;
  • small cross-cutting fixes that fit one lead repo's workplan plus dependency links;
  • durable products, libraries, or services (those use INTENT.md and ordinary product/tooling/research categories);
  • long-lived domain charters (those remain under the-custodian/canon/projects/).

Naming

ElementConvention
Git / local directoryprj-<kebab-slug>
Hub repo slugsame as directory name
Workplan prefixshort uppercase prefix derived from the project, ending in -WP- (example: SHR-WP- for State Hub Retirement)
Classificationcategory: project

Canonical prefix is prj-. ADR-005's illustrative proj- form is superseded for new repositories. Do not invent parallel prefixes (project-, xrepo-, …).

Slug rules:

  • lowercase kebab-case;
  • outcome-oriented (prj-state-hub-retirement), not a random ticket id;
  • stable for the life of the project (rename only with an explicit migration note in history/).

Authority boundary

ConcernOwner
Project goal, success gates, retirement conditionsproject repo (GOAL.md)
Architecture decisions, sequencing, dependency map, migration ledger, risks, consolidated evidenceproject repo
Cross-repo workplans that coordinate the effortproject repo (workplans/)
Production implementation, tests, deployablesparticipating functional repositories
Per-repo implementation workplans and local evidenceeach functional repository
Durable post-project standards and ADRspermanent homes (the-custodian canon, or the owning product/tooling repo)

Hard rules:

  1. Project repositories MUST NOT host production implementation code for the systems being changed.
  2. Project workplans link child workplans by stable ID; they MUST NOT copy or replace child task lists.
  3. The hub remains a read/index layer; work records originate as files (ADR-001).
  4. Results of the project live primarily in the modified functional repositories and promoted canon. The project repo is coordination + provenance.

Required files

At registration / first meaningful commit:

PathRequiredRole
GOAL.mdyesOutcome, invariants, success gates, project retirement conditions. Replaces INTENT.md for this flavor.
SCOPE.mdyesProject authority, participating repos, in/out of scope, work-record rule.
README.mdyesShort entry point linking GOAL.md, SCOPE.md, genesis/history, active workplans.
AGENTS.mdyesAgent session protocol for this project (orient → work → close; hub integration).
.repo-classification.yamlyescategory: project plus domain / capability tags for the effort.
workplans/yesAt least one foundation workplan; prefix unique to the project.
history/recommendedGenesis and significant milestones (why the project exists).
WORK-RECORDS.mdgeneratedHub index; do not hand-edit.
.custodian-brief.mdgeneratedOffline orientation brief.

GOAL.md (not INTENT.md)

Durable product and tooling repositories explain why they exist with INTENT.md. Project repositories are temporary and outcome-bounded; they use GOAL.md instead.

GOAL.md MUST include:

  1. Outcome — what success looks like in one short section.
  2. Invariants — rules that must hold during the project.
  3. Success gates — checkable conditions for “goal achieved”.
  4. Project retirement — conditions under which this repository may be archived (usually: gates met + residuals handed off + durable decisions promoted).

Recommended frontmatter:

---
repo: prj-<slug>
repo_flavor: project
project_status: draft | active | completed | archived
started: "YYYY-MM-DD"
reviewed: "YYYY-MM-DD"
---

Anti-pattern: shipping both INTENT.md and GOAL.md in a prj- repo. If a durable intent emerges, promote it into a permanent repository's INTENT.md (or canon) and keep the project goal as the temporary outcome document.

Relation to durable INTENT.md

Repository kindPurpose document
product / tooling / research / business / experimentalINTENT.md
project (prj-)GOAL.md only

Tooling that scaffolds repositories (e.g. statehub register) MUST treat GOAL.md + repo_flavor: project as sufficient purpose documentation for prj- repos and MUST NOT require inventing an INTENT.md that pretends the project is a permanent product.

Lifecycle

draft → active → completed → archived
StatusMeaningRepo / hub signals
draftConvention and foundation still forming; may not yet be registeredproject_status: draft; workplans often proposed / ready
activeCoordination and child implementation in progressproject_status: active; at least one workplan active or ready
completedAll success gates have accepted evidence; residuals have live owners outside this repoproject_status: completed; project workplans finished or cancelled with rationale
archivedRepository is read-only provenanceforge archive flag; hub repo/workplan archived; no normal writes

Promotion rules:

  • draft → active when GOAL.md / SCOPE.md are reviewable and the foundation workplan is ready or active.
  • active → completed only when every GOAL.md success gate has accepted evidence and residuals are live work records elsewhere (see below).
  • completed → archived after the completion record is written, durable decisions are promoted, and a final consistency/link check passes.

Residuals before completion

Actionable leftovers MUST NOT live only in finished workplan prose or SCOPE.md. Before any project workplan is set to finished, and again before project_status: completed, each residual becomes a live work record outside the closing narrative:

  • intake with origin: residual + origin_ref: <WP-id>, or
  • a next workplan / decision / engagement / register-entry in a permanent repo.

Canon: work-record-types_v0.1.md § Residuals. Fleet residual listing is a State Hub concern, not a project-local queue file.

Completion record

Before archival, the project repository MUST contain a completion record (recommended path: history/YYYY-MM-DD-completion.md) that lists:

  1. deployed or merged revisions that realize the outcome;
  2. every participating repository touched, with links to merged PRs/commits or child workplan IDs;
  3. promoted durable artefacts (canon paths, ADRs, standards);
  4. migration and retirement evidence pointers (counts, cutover windows, backups);
  5. residual work-record IDs and their owning repos;
  6. rollback expiry or remaining operational obligations, if any.

Without this record, do not archive.

Archive procedure

  1. Verify all success gates and retirement conditions in GOAL.md.
  2. Confirm residuals are live and owned outside this repository.
  3. Promote remaining durable decisions/standards to permanent homes; leave pointers from the project repo.
  4. Finish or cancel project workplans; move finished files to workplans/archived/YYMMDD-<id>-<slug>.md per workplan convention.
  5. Write the completion record.
  6. Set project_status: archived in GOAL.md frontmatter.
  7. Run statehub fix-consistency (or equivalent) so the hub reflects finished workplans and the archived status.
  8. Archive the repository in the forge (read-only); do not delete it.
  9. Optionally mark the hub registration archived / read-only.

Archive means read-only provenance, never deletion. Historical evidence and coordination narrative remain queryable.

Workplan and agent conventions

  • Workplan files: workplans/<PREFIX>-WP-NNNN-<slug>.md with fleet status vocabulary (proposedarchived).
  • Session start order for agents: GOAL.mdSCOPE.md → genesis/history → active workplans (see project AGENTS.md).
  • Progress and task status follow ordinary State Hub / fix-consistency rules.
  • Ad-hoc low-risk fixes may use workplans/ADHOC-YYYY-MM-DD.md with canonical id {PREFIX}-WP-ADHOC-YYYY-MM-DD; anything multi-step belongs in a normal workplan.

Minimal layout example

prj-example-cutover/
  GOAL.md
  SCOPE.md
  README.md
  AGENTS.md
  .repo-classification.yaml
  history/
    2026-08-09-genesis.md
  workplans/
    EX-WP-0001-foundation.md

Reference instance

The first repository under this standard is prj-state-hub-retirement (State Hub retirement / hub-core consolidation). Use it as the structural reference when scaffolding later prj- repos; do not copy its domain-specific content.

Conformance checklist

A repository conforms to the prj- flavor when:

  • [ ] Named prj-<slug> and classified category: project.
  • [ ] Has GOAL.md with outcome, invariants, success gates, and retirement.
  • [ ] Has no durable-product INTENT.md (or documents an explicit temporary exception during migration of a mis-scaffolded repo).
  • [ ] Has SCOPE.md, README.md, AGENTS.md, and .repo-classification.yaml.
  • [ ] Hosts coordination workplans only; implementation lives in child repos.
  • [ ] Links child workplans by ID rather than duplicating their tasks.
  • [ ] Defines archive/completion discipline consistent with this standard.
  • [ ] On completion, writes a completion record and archives read-only.