mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-09-10 19:26:00 +00:00
Add Tech Stack and Monetization sections to OpenPRD (0.3) (#144)
OpenPRD 0.2 fixed eight body sections, none of which asked what the thing is
built on or how it earns. The stack got chosen in the first implementation PR
instead of at review, and a PRD could be filled out completely without anyone
writing down who pays. PRD 0006 had already grown a hand-rolled
`## Business model` section, which is the gap showing.
0.3 adds two required sections between `UX Notes` and `Success Metrics`:
- Tech Stack — languages, frameworks, datastores, third-party services, and
anything the work must not depend on. It makes the requirements costable.
- Monetization — the revenue model: who pays, for what, how much, and when.
`_None._` stays a valid answer, but it now has to be said out loud.
Adding required sections would normally invalidate every document already
written, so a document is now held to the section list its own `openprd:` key
fixes. A 0.2 document keeps conforming with eight sections, forever; a 0.3
document needs ten. Adoption is per document, and `logicsrc prd validate
--expect-version 0.3` (new flag, wiring up the validator option that already
existed) reports the stragglers as OP-L-VERSION.
The front-matter schema is untouched — both additions are body sections.
Conformance bundle proves both directions: invalid/missing-monetization.md
fails with OP-C-SECTION-MISSING, and valid/legacy-0-2.md passes unedited.
This repo's own PRDs 0001-0006 stay at 0.2 as standing evidence that the
compatibility rule holds. PRD 0007 records the decision at 0.3.
Claude-Session: https://claude.ai/code/session_017XRNNm6pK6nPi7rJ6bJNHu
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
ca0283caa9
commit
91834179b7
36 changed files with 679 additions and 80 deletions
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"openprdConformance": "0.2",
|
||||
"description": "Conformance fixtures for OpenPRD 0.2. Every valid fixture must parse and validate with no errors; every invalid fixture must fail with the stated code. `file` is the filename the fixture must be validated as, since the standard's rules depend on it.",
|
||||
"openprdConformance": "0.3",
|
||||
"description": "Conformance fixtures for OpenPRD 0.3. Every valid fixture must parse and validate with no errors; every invalid fixture must fail with the stated code. `file` is the filename the fixture must be validated as, since the standard's rules depend on it. A document is held to the section list its own `openprd:` version fixes, so valid/legacy-0-2.md still conforms with the eight sections 0.2 defined.",
|
||||
"valid": [
|
||||
{
|
||||
"fixture": "valid/minimal.md",
|
||||
|
|
@ -25,6 +25,11 @@
|
|||
{
|
||||
"fixture": "valid/none-sections.md",
|
||||
"file": "0005-keep-every-section-even-when-empty.md"
|
||||
},
|
||||
{
|
||||
"fixture": "valid/legacy-0-2.md",
|
||||
"file": "0006-keep-a-0-2-document-valid.md",
|
||||
"reason": "A 0.2 document has eight sections and must keep conforming under 0.3."
|
||||
}
|
||||
],
|
||||
"invalid": [
|
||||
|
|
@ -32,7 +37,13 @@
|
|||
"fixture": "invalid/missing-section.md",
|
||||
"file": "0001-missing-a-section.md",
|
||||
"code": "OP-C-SECTION-MISSING",
|
||||
"reason": "The eight body sections are all required; Users is absent."
|
||||
"reason": "The body sections are all required; Users is absent."
|
||||
},
|
||||
{
|
||||
"fixture": "invalid/missing-monetization.md",
|
||||
"file": "0001-omit-the-monetization-section.md",
|
||||
"code": "OP-C-SECTION-MISSING",
|
||||
"reason": "0.3 requires Tech Stack and Monetization; Monetization is absent."
|
||||
},
|
||||
{
|
||||
"fixture": "invalid/out-of-order.md",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
title: Bad filename
|
||||
status: Draft
|
||||
|
|
@ -31,6 +31,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "1"
|
||||
title: Two digit id
|
||||
status: Draft
|
||||
|
|
@ -31,6 +31,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
title: Unknown status
|
||||
status: Shipped
|
||||
|
|
@ -31,6 +31,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
title: Updated before created
|
||||
status: Draft
|
||||
|
|
@ -33,6 +33,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
title: Duplicate requirement id
|
||||
status: Draft
|
||||
|
|
@ -32,6 +32,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0042"
|
||||
title: Id does not match
|
||||
status: Draft
|
||||
|
|
@ -31,6 +31,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
---
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
title: Omit the monetization section
|
||||
status: Draft
|
||||
authors:
|
||||
- anthony@profullstack.com
|
||||
---
|
||||
|
||||
## Problem
|
||||
|
||||
The thing is broken and it costs us money every week.
|
||||
|
||||
## Goals
|
||||
|
||||
_None._
|
||||
|
||||
## Non-Goals
|
||||
|
||||
_None._
|
||||
|
||||
## Users
|
||||
|
||||
_None._
|
||||
|
||||
## Requirements
|
||||
|
||||
- R1 [P0] First required capability.
|
||||
|
||||
## UX Notes
|
||||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
_None._
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
||||
## Risks & Open Questions
|
||||
|
||||
_None._
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
title: Missing a section
|
||||
status: Draft
|
||||
|
|
@ -27,6 +27,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
status: Draft
|
||||
authors:
|
||||
|
|
@ -30,6 +30,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -24,6 +24,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
title: Sections out of order
|
||||
status: Draft
|
||||
|
|
@ -31,6 +31,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
title: Superseded with no replacement
|
||||
status: Superseded
|
||||
|
|
@ -31,6 +31,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
title: Unknown front matter key
|
||||
status: Draft
|
||||
|
|
@ -32,6 +32,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0002"
|
||||
title: Use bold requirement markers
|
||||
status: Review
|
||||
|
|
@ -31,6 +31,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
title: Expand the parked-domain service
|
||||
status: Draft
|
||||
|
|
@ -38,6 +38,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
41
packages/schemas/fixtures/openprd/valid/legacy-0-2.md
Normal file
41
packages/schemas/fixtures/openprd/valid/legacy-0-2.md
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
id: "0006"
|
||||
title: Keep a 0.2 document valid
|
||||
status: Draft
|
||||
authors:
|
||||
- anthony@profullstack.com
|
||||
---
|
||||
|
||||
## Problem
|
||||
|
||||
The thing is broken and it costs us money every week.
|
||||
|
||||
## Goals
|
||||
|
||||
_None._
|
||||
|
||||
## Non-Goals
|
||||
|
||||
_None._
|
||||
|
||||
## Users
|
||||
|
||||
_None._
|
||||
|
||||
## Requirements
|
||||
|
||||
- R1 [P0] First required capability.
|
||||
|
||||
## UX Notes
|
||||
|
||||
_None._
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
||||
## Risks & Open Questions
|
||||
|
||||
_None._
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0001"
|
||||
title: Expand the parked-domain service
|
||||
status: Draft
|
||||
|
|
@ -31,6 +31,14 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
_None._
|
||||
|
||||
## Monetization
|
||||
|
||||
_None._
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0005"
|
||||
title: Keep every section even when empty
|
||||
status: Accepted
|
||||
|
|
@ -31,6 +31,14 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
_None._
|
||||
|
||||
## Monetization
|
||||
|
||||
_None._
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0003"
|
||||
title: Organize a long requirements section
|
||||
status: Draft
|
||||
|
|
@ -37,6 +37,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
openprd: "0.2"
|
||||
openprd: "0.3"
|
||||
id: "0004"
|
||||
title: Retire the old flow
|
||||
status: Superseded
|
||||
|
|
@ -32,6 +32,15 @@ _None._
|
|||
|
||||
_None._
|
||||
|
||||
## Tech Stack
|
||||
|
||||
TypeScript on Node 22, Postgres, and the existing Cloudflare worker. No new
|
||||
runtime.
|
||||
|
||||
## Monetization
|
||||
|
||||
Bundled into the existing Pro plan at $19/mo; no separate SKU.
|
||||
|
||||
## Success Metrics
|
||||
|
||||
_None._
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue