Portfolio R1 DevReady tickets
14 October 2026. Architecture selected by the user: pragmatic modular monolith. Source baseline: FA 13 v0.5, architecture 10 v0.2, handoff 19 v0.3 plus the dated R1 contract extensions. Full-POC extensions remain planned.
Shared implementation contract
Canonical code: project/Code. UI -> /api/v1 route -> locked server session -> authorized service -> pure domain rules -> PostgreSQL transaction. Account registration is absent; authorization is mandatory. JSON mutations require Origin, Idempotency-Key, generation and actor revision. Plan decisions also require ETag. Failed saves retain inputs and show no success confirmation. Fixed business week is 5-11 October 2026; real time controls expiry.
Each ticket requires unit/API/browser checks appropriate to its acceptance criteria and updates to the evidence record. Fixtures are fictional. R1 UI is EN/nl-BE. Automated checks do not establish clinical benefit, formal accessibility certification or native-speaker translation approval.
| Ticket | Inputs and outputs | Acceptance criteria and rules | Failure cases and dependencies | Verification |
|---|---|---|---|---|
| R1-01 / BL01, BL18 | Start {}, opaque cookie, envelope and guided dataset | Server stores token digest; role/member/scenario scoped to visitor; optional permissions off; lifetime 24 hours | Missing/expired session 401; forged role headers have no effect; no dependency | TC05, TC23, TC31, TC37 |
| R1-02 / BL18 | Role or scenario selection/reset -> new envelope | Role switch increments actor revision; scenario/reset increments generation and restores only this visitor; reads and writes use session lock | Old actor/generation 409; retries recover committed control result; depends R1-01 | TC31-TC34 |
| R1-03 / BL02 | Goal, activity, days, minutes -> preferences and proposal | Validate unique days and bounds; match WALK-01 v1 only; activate solely after acceptance; preserve decline | Unsupported activity/duration 422, malformed input, repeated current proposal; depends R1-01 | BR01-BR03, TC01-TC04 |
| R1-04 / BL03 | Manual date/type/minutes -> activity with provenance | Own active plan; valid calendar date <= fixed date; integer 1-1440 minutes; visible source | Future/invalid dates, wrong role, inactive plan; corrections/deletion deferred; depends R1-03 | TC06 create, TC07 |
| R1-05 / BL05 | Optional check-in, independent manual completeness, records -> review snapshot | Ordered difficulty before completeness before invitation/progress; incomplete quantity null; explicit separate review action; snapshots immutable | Wrong week, invalid note/selection, inactive plan; no automatic support; depends R1-04 | BR06-BR12, TC11-TC15 |
| R1-06 / BL06 | Explicit plan/review request -> support reference | Current review and coach-sharing prerequisite; one unresolved request; assigned-coach queue; no response deadline | Permission off 403, duplicate 409, stale review 422; depends R1-05 | BR14-BR15, TC16-TC17 |
| R1-07 / BL07 | Assigned coach, current base version, slots/rationale -> proposed change | Protected access checked; support exists; proposing preserves accepted version/slots; immutable history | Unassigned coach 404, revoked permission 403, stale base 409, unsupported slots 422; depends R1-06 | BR03, BR15, BR17, TC18, TC23 |
| R1-08 / BL07 | Owner decision and ETag -> accepted new version or decline | Acceptance atomically checks ETag/base; creates immutable version; decline preserves active version; resolves request | Missing ETag 428, mismatch 412, revoked/cancelled proposal; depends R1-07 | TC19 and API version-history assertions |
| R1-09 / BL15 | Sharing off -> consent revision, cancellation and denied coach access | Revoke under same transaction lock; cancel unresolved requests and proposed changes; preserve manual journey/history | Protected read/write denied after commit, including replays; depends R1-06/R1-07 | BR16, TC22 |
| R1-10 / BL09 | Analyst request -> pseudonymous decision projection | Rule/version, input categories, outcome, template and plan/review versions; exclude names and free text | Wrong role 403; metrics deferred; depends R1-05 | TC24 decision subset |
| R1-11 / BL10 | Role state and locale -> responsive guided screens | Explain prerequisites and next step; language switch preserves state; synthetic label visible; keyboard focus and 360px layout | Network errors preserve drafts and retry keys; stale state reload; depends incrementally R1-01-R1-10 | TC28, TC35, TC36 |
| R1-12 / BL17, BL19 | Analysis, source, executed checks -> English case/evidence exports | Local evidence links resolve; BPMN and UML reflect member-controlled handoffs; distinguish implemented/planned/simulated | Public URL and VPS remain separate BL20; depends completed local journey | Evidence/link validation, TC38 |
Persistence design qualification
Separate entity tables use composite session-scoped keys and foreign keys. Mutable attributes use JSONB, constrained by typed service validation; ownership and support uniqueness are database-enforced. This is a deliberate demo trade-off, not a fully normalized production field schema. Immutable versions/reviews/events are insert-only through the repository.
Local completion gate
Apply migrations to separate development and test PostgreSQL databases, execute domain/API/browser suites, verify production startup and restart persistence, inspect desktop/mobile layouts and keyboard operation, and record actual results. BL20 cannot begin before release-blocking local failures are resolved.