Skip to content

feat(openprd): implement the OpenPRD standard — engine, CLI, conformance bundle - #100

Merged
ralyodio merged 1 commit into
masterfrom
feat/openprd
Jul 28, 2026
Merged

feat(openprd): implement the OpenPRD standard — engine, CLI, conformance bundle#100
ralyodio merged 1 commit into
masterfrom
feat/openprd

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

OpenPRD has existed as a documentdocs/openprd.md, a front-matter schema, a template, and this repo's prd/ collection. Nothing enforced it. This adds the reference implementation.

45 files, ~3.6k lines.

@logicsrc/openprd

  • Parser — front-matter, the eight ## sections, numbered requirements. ### stays content so a long Requirements section can be organized, and headings or R#-shaped lines inside code fences are ignored. Handles - R1 [P0] … and the bolded - **R1 [P0]** … style real PRDs use.
  • Validation splits the standard's four conformance rules — filename, front-matter schema, id-matches-prefix, eight sections in order — from lint (empty section, missing priority tag, numbering gaps, duplicate R#, date order, one-sided supersession, stale index). Conformance failures are errors; --strict promotes the rest. Every finding carries a stable code, file, line, and hint.
  • Collection rules a per-file view can't see: unique ids, monotonic numbering with no gaps, 0000 reserved for the template, cross-references that resolve.
  • Lifecycle enforced, not advisory: Draft cannot jump to Final, terminal statuses do not resume, Superseded must name its replacement.
  • Deterministic index generationprd index is idempotent and CI can diff it.
  • Front-matter rewriting that leaves the body byte-identical.
  • Task bridge — the optional mapping the standard describes, living in tooling where it says it should: each R# becomes one logicsrc.task, validated against logicsrc-task.schema.json before emission.

CLI

logicsrc prd init
logicsrc prd new "Expand the parked-domain service"
logicsrc prd validate --strict
logicsrc prd status 0001 Review
logicsrc prd tasks 0001 --priority P0

init|new|list|show|validate|lint|index|status|next|tasks|export. Exit codes stable for CI: 0 ok, 1 invalid, 2 usage, 3 not found.

Conformance bundle

packages/schemas/fixtures/openprd/ — 6 documents that must validate, 12 that must fail, each naming the error code it must produce. Several rules depend on the filename, so every fixture records the name it is validated as.

Verification

  • 76 new tests; full monorepo build and all 451 workspace tests pass
  • The suite dogfoods this repo: prd/ validates with zero errors and zero warnings, the embedded template is byte-identical to docs/openprd/0000-template.md, and all 210 requirements in PRD 0001 map to schema-valid tasks
  • prd/README.md is now regenerated by the tool it ships — the hand-written index it replaced was correctly flagged as stale

Note

The standard document itself is unchanged except for a new Implementation section. A PRD is still just a file: none of this is required for a document to conform.

🤖 Generated with Claude Code

…nce bundle

OpenPRD has existed as a document (docs/openprd.md), a front-matter schema, a
template, and this repo's prd/ collection. Nothing enforced it. This adds the
reference implementation.

@logicsrc/openprd
  - parser: front-matter + the eight `##` sections + numbered requirements.
    `###` stays content so a long Requirements section can be organized, and
    headings or R#-shaped lines inside code fences are ignored
  - validation splits the standard's four conformance rules (filename,
    front-matter schema, id-matches-prefix, eight sections in order) from
    lint (empty section, missing priority tag, numbering gaps, duplicate R#,
    date order, one-sided supersession, stale index). Conformance failures are
    errors; --strict promotes the rest. Stable codes, file, line, hint
  - collection rules the per-file view cannot see: unique ids, monotonic
    numbering with no gaps, 0000 reserved for the template, cross-references
    that resolve
  - lifecycle enforced rather than advisory: Draft cannot jump to Final,
    terminal statuses do not resume, Superseded must name its replacement
  - deterministic index generation, so `prd index` is idempotent and CI can
    diff it
  - front-matter rewriting that leaves the body byte-identical
  - the optional LogicSRC task bridge the standard describes: each R# becomes
    one logicsrc.task, validated against logicsrc-task.schema.json before it
    is emitted; creator DID derived from the author email

CLI: logicsrc prd init|new|list|show|validate|lint|index|status|next|tasks|
export. Exit codes stable for CI (0 ok, 1 invalid, 2 usage, 3 not found).

Conformance bundle: packages/schemas/fixtures/openprd/ — 6 documents that must
validate and 12 that must fail, each naming the error code it must produce.
Several rules depend on the filename, so every fixture records the name it is
validated as.

Docs: an Implementation section in docs/openprd.md (CLI, validation model,
task bridge, conformance bundle), the spec added to the site's docs surface,
nav and sitemap entries, and a README section.

Verification: 76 new tests; full monorepo build and all 451 workspace tests
pass. The suite dogfoods this repo — prd/ validates with zero errors and zero
warnings, the embedded template is byte-identical to docs/openprd/0000-
template.md, and all 210 requirements in PRD 0001 map to schema-valid tasks.
prd/README.md is regenerated by the tool it now ships.

Refs: docs/openprd.md

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ralyodio
ralyodio merged commit 296775e into master Jul 28, 2026
4 checks passed
@ralyodio
ralyodio deleted the feat/openprd branch July 28, 2026 11:11
@github-actions

Copy link
Copy Markdown

vu1nz Security Review

0 finding(s) in PR #?

No security issues found.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant