Fix CI: number the PRD requirements and advance the next-id assertion

Two checks the new PRD tripped, both by existing rather than by being
wrong.

The collection validator wants requirements as numbered R# entries and
0006 used a plain ordered list, so it reported OP-L-NO-REQUIREMENTS.
Rewritten as R1 to R7 with priorities, one capability per entry, and the
implementation tracking moved to a paragraph under them where it is not
pretending to be a requirement.

The MCP standards test asserts what the next free PRD id is, and its own
comment says that advances with every PRD added. Adding 0006 makes it
0007.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SKAohrRkqLKVQL2cGCAkR5
This commit is contained in:
Anthony Ettinger 2026-09-06 02:09:34 +00:00
parent 06858c7690
commit f6725a2f88
2 changed files with 38 additions and 29 deletions

View file

@ -203,7 +203,7 @@ describe("MCP: OpenPRD", () => {
it("reports the next free id and the allowed lifecycle moves", async () => { it("reports the next free id and the allowed lifecycle moves", async () => {
const client = await connect(); const client = await connect();
// Asserted against the live prd/ directory, so this advances with every PRD added. // Asserted against the live prd/ directory, so this advances with every PRD added.
expect(toolText(await client.callTool({ name: "prd_next_id", arguments: {} }))).toBe("0006"); expect(toolText(await client.callTool({ name: "prd_next_id", arguments: {} }))).toBe("0007");
const moves = await client.callTool({ name: "prd_next_statuses", arguments: { ref: "0001" } }); const moves = await client.callTool({ name: "prd_next_statuses", arguments: { ref: "0001" } });
const payload = JSON.parse(toolText(moves)) as { status: string; allowedNext: string[] }; const payload = JSON.parse(toolText(moves)) as { status: string; allowedNext: string[] };

View file

@ -155,34 +155,43 @@ arrives.
## Requirements ## Requirements
1. `docs/openswarm/pay2seed.md` and `paid2seed.md` together specify: the attestation record and - R1 [P0] Define `pay2seed`, the client half: the attestation record and
basis table; the claim window and requester standing; the offer record, basis table, the mandatory README and its hash, the claim window and
its purchase over x402, and its lifecycle; public swarms, public feeds requester standing, the offer record and its purchase over x402, the
on `ipdb`, private swarms; the lease record and slot rules; storage offer lifecycle, public swarms, public `ipdb` feeds and private swarms,
challenges and probes; GiB-month accrual, receipts and payout through the hub record extension, the requester API, notices and takedown.
`ippay`; the hub record extension and API; seeder client behaviour; - R2 [P0] Define `paid2seed`, the server half: the lease record and slot
notices and takedown; the `ipfile.pin` mapping; events; conformance. rules, storage challenges and wire probes, GiB-month accrual, receipts
1b. `docs/openswarm/pay2stream.md` and `paid2stream.md` specify the and payout through `ippay`, the seeder API and client behaviour, seeder
same for a live channel over `iplive`: consent for channels with the and requester standing, the `ipfile.pin` mapping, events, conformance.
two rules for licensed feeds; relay offers per relay-hour with a - R3 [P0] Define `pay2stream`, the client half for live: consent for
gateway bonus; tickets and listings; presence proofs and the channels with the two rules that separate a licensed rebroadcast from a
served-bytes ratio; gateways serving standard HLS in clear and sealed stolen feed, relay offers per relay-hour with a gateway bonus, tickets
modes with an M3U and XMLTV EPG, so any IPTV player works with no new and listings, watching as a peer or on any HLS player.
client; gateway-bound vouchers; stopping on a void. - R4 [P0] Define `paid2stream`, the server half for live: relay leases,
2. `docs/openswarm.md` lists the four in the family table, the stack presence proofs and the served-bytes ratio, gateways serving standard
diagram, "What it defines" and "What already exists". HLS in clear and sealed modes with an M3U and XMLTV EPG so any IPTV
3. `docs/openswarm/spec.md` §11 registers the `pay2seed.*`, `paid2seed.*`, `pay2stream.*` and `paid2stream.*` record player works with no new client, gateway-bound vouchers, stopping on a
types and their signers. void.
4. `docs/openswarm/cli.md` gains the `ip seed` and `ip stream` command groups. - R5 [P0] Specify encryption by default and access as the product: teams
5. The `/openswarm` page on logicsrc.com lists the four among the with roles and scopes, invitations that expire, member grants issued by
protocols. the hub as keeper, re-encryption on removal, per-seat pricing, the 1
6. Implementations, tracked outside this repo: percent fee on payments that cross the hub, and the advertisement that
- bittorrented.com (`profullstack/media-streamer`): the reference hub. pays for public swarms.
- torlink (`baairon/torlink`, via the `ralyodio` fork): the seeder - R6 [P1] Say that a requester is a key rather than a person, so an
client. Per-torrent seed time (#186) is the first piece. autonomous agent can attest, price access, sell tickets and be paid,
- `@profullstack/pay2seed`: the shared client (hub calls, records, under the same consent rules and with a responsible operator key named
signing) and the promo surfaces the Profullstack media sites embed. on public attestations.
- c0mpute: `ipfile.pin` interop per §11. - R7 [P1] Wire the family into the repo: `docs/openswarm.md` family table,
stack diagram and "what already exists"; `spec.md` §11 record type
registry; the `ip seed` and `ip stream` command groups in `cli.md`; and
the four protocols listed on the `/openswarm` page.
Implementations are tracked outside this repo: bittorrented.com
(`profullstack/media-streamer`) as the reference hub; torlink
(`baairon/torlink`, via the `ralyodio` fork) as the seeder client, whose
per-torrent seed time (#186) is the first piece; `@profullstack/pay2seed`
as the shared client; and c0mpute for `ipfile.pin` interop.
## UX Notes ## UX Notes