LogicSRC standards surface
OpenPRD
A lightweight open standard for product requirements documents authored by humans or AI agents. A repo keeps a numbered, committed collection under prd/— one Markdown file per decision, readable a year later.
It borrows the shape of a BIP/EIP/DIP process. Where OpenSpec models a change as a multi-file bundle, OpenPRD models a product decision as one numbered file you can read to recover the why.
Status: 0.2. A PRD is just a file — it needs no service, and no tooling, to be valid.
The shape
Front-matter, then eight sections in a fixed order. All of them required.
--- openprd: "0.2" id: "0001" # four digits, matches the filename title: Expand the parked-domain service status: Draft # Draft|Review|Accepted|Final|Rejected|Withdrawn|Superseded authors: - anthony@profullstack.com created: 2026-07-12 updated: 2026-07-12 tags: [growth] --- ## Problem ## Goals ## Non-Goals ## Users ## Requirements - R1 [P0] First required capability. - R2 [P1] Next capability. ## UX Notes ## Success Metrics ## Risks & Open Questions
A section may be a single line such as _None._ — but it may not be missing. That is what keeps every PRD skimmable and diffable.
Lifecycle, enforced
Status lives in the front-matter and is the source of truth.
Draft → Review → Accepted → Final
↘ Rejected
↘ Withdrawn
↘ Superseded by NNNNDraftcannot jump toFinal— the tool refuses the transition rather than trusting the author to remember.Rejected,Withdrawn, andSupersededare terminal. They stay on disk, because the why not is part of the record.- Moving to
Supersededrequires naming the PRD that replaces it. - Ids are four digits, monotonically increasing, with no gaps. 0000 is the template.
Conformance is four rules
Everything else the tooling reports is lint, and says so.
- It lives at
prd/<id>-<slug>.mdwith a four-digit id. - Its front-matter validates against
openprd-prd.schema.json. - The id equals the filename's numeric prefix.
- All eight body sections are present, in order.
Conformance failures are errors. An empty section, a requirement missing its priority tag, numbering that skips, a stale index, a one-sided supersession link — those are warnings, and --strict promotes them. Every finding carries a stable code, the file, the line, and a remediation hint.
Tooling
@logicsrc/openprd implements the standard; the CLI drives it.
logicsrc prd init # template + generated index logicsrc prd new "Expand the service" # next free number, eight stub sections logicsrc prd list # id, title, status, tags, requirements logicsrc prd validate --strict # conformance + lint, exit 1 on error logicsrc prd index --write # regenerate prd/README.md logicsrc prd status 0001 Review # refuses illegal transitions logicsrc prd tasks 0001 --priority P0 # the optional LogicSRC task bridge
Exit codes are stable for CI: 0 ok, 1 invalid, 2 usage, 3 not found.
The optional task bridge
Requirements map onto LogicSRC tasks — in tooling, not in the standard.
Each R# becomes one logicsrc.task document, validated against its schema before it is emitted. The board defaults to /prd/<id>, repo carries over, and the creator DID is derived from the first author (anthony@profullstack.com → anthony.profullstack).
Nothing requires you to use it. A PRD with no LogicSRC anywhere near it is still a PRD.
Where everything lives
- Specification — layout, front-matter, sections, lifecycle, conformance, implementation
- Front-matter JSON Schema
- Conformance bundle — documents that must validate, and documents that must fail with a named code
- This repo's own collection — dogfooded: it validates with zero errors and zero warnings
- OpenOntology — the companion standard for durable, source-backed domain knowledge