docs(prd): PRD draft 0.3; slice 1 addendum A; lead decision 49

Darkwing's addendum as a record. Broker verbs enforce field ownership,
broker push from a bare repo, polling without webhooks, Vikunja probes
before the adapter interface is fixed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-04 14:56:14 -05:00
co-authored by Claude Opus 5.5
parent c57998772d
commit d7723e2237
4 changed files with 508 additions and 9 deletions
+30
View File
@@ -773,3 +773,33 @@ which stay with him. Each item names who decided it and what happened.
(`agents/researcher/work/2026-10-04_vikunja-pocketid.md`, sha256
fcfc970f…) was committed as a record with this entry. The PRD's
technical considerations draw on it.
49. **Sage's rulings on slice 1 addendum A (2026-10-04).** Source:
Darkwing (CTO), `agents/darkwing/work/slice1-data-model-addendum-2026-10-04.md`
(sha256 0b36acb0…). Where the addendum and the original note
disagree, the addendum wins.
- Vikunja token scopes cover whole route groups. So "one writing role
per field" is enforced by broker verbs, not by tokens. That works
only because agents never hold the tokens.
- A1, coder push: accepted. The broker fetches the branch into a bare
repository it owns and pushes from there with hooks off. Gitea branch
protection stays the server-side line.
- A2: no webhooks in slice 1. Poll every 30 seconds with a keyset
cursor and reconcile hourly. That removes the
`allownonroutableips` prerequisite.
- 6.8 stands, with an ETag check on GET and a PATCH of only the owned
fields. The brief will say the race window is still there.
- A3: accepted. A `task_snapshots` table, `decisions.blocking` and the
new event kinds. Darkwing extends the prototype before the brief.
- A4: accepted. Researcher runs probes P1 to P7 against a scratch
`vikunja/vikunja:2.7.0` container with SQLite, bound to
127.0.0.1, removed afterwards, test tokens only. P8 goes to whoever
builds the broker.
- A5: the one word stops new launches, and `mosaic stop` ends a running
session. Sage reads Jason's "revocable with one word" that way. If he
meant otherwise, he says so.
- The PM's `role.launch` needs a `launch` block in the business file.
Without that block the action is gated.
- The PM moving from T3 to a session the stack launches is a named step
in the slice 1 brief (REQ-CLI-2).
- PRD wording for REQ-VAR-2 and REQ-TASK-1 adopted in draft 0.3, with
REQ-TASK-2 updated for A2.