diff --git a/docs/design-event-card-choices-2026-05-25.md b/docs/design-event-card-choices-2026-05-25.md index 7978100..d63e2f5 100644 --- a/docs/design-event-card-choices-2026-05-25.md +++ b/docs/design-event-card-choices-2026-05-25.md @@ -10,6 +10,8 @@ ## 0. TL;DR +> **m's decisions landed 2026-05-25** — see §11. Persisted table, caret+popover, per-card-overrides-page-level, and m chose to bundle Slice A + Slice B into one coder shift (over the inventor (R) of "Slice A first"). All other picks matched inventor recommendations. + The Verfahrensablauf timeline today carries **two** projection knobs at the page level — `side` (who-we-are) and `appellant` (who-initiated). Both are **global** for the whole timeline. m wants three more knobs, but **per event card**, not page-level: 1. **Appellant per decision card** — if a decision is appealable, the user picks which side appealed (Claimant / Defendant / Both / None). Different decisions in the same timeline can have different appellants. @@ -384,6 +386,10 @@ Wires `IncludeCCRFor` through the flag-evaluation engine. v1 simplification (§4 - **Frontend**: the include_ccr popover block (already designed; just enabling the row). - **Cross-flow audit**: confirm that the existing 7 upc.inf.cfi cross-flow rules + de.inf.lg analogues fire correctly when with_ccr is set via the per-card path vs. the existing page-level flag checkbox. Existing checkbox stays in v1; deprecation is a Slice C decision. +### Bundling note (per m's Q4 decision 2026-05-25) + +A + B ship together. The slice headings above remain as a logical breakdown for the coder to follow when sequencing commits inside the single shift; they are not separate PRs. See §11 Q4 for rationale. + ### Slice C — Future choice-kinds Open-ended; not designed here. Examples surfaced by the t-paliad-067 audit: @@ -455,7 +461,18 @@ Which slice ships first? ## 11. m's decisions (2026-05-25) -_(this section is filled in after the AskUserQuestion round; left blank pre-answer)_ +- **Q1 (State location):** Persisted table — `paliad.project_event_choices` per §3.1. Matches inventor (R). +- **Q2 (Affordance):** Caret + popover with chip indicator on chosen cards per §5.1, §5.3. Matches inventor (R). +- **Q3 (Appellant layer):** Per-card overrides page-level for descendants of that decision. Page-level still drives decisions without a per-card pick. Matches inventor (R). Implementation: `CalculatedDeadline.AppellantContext` (§4.3) carries the per-decision pick down the parent chain so the bucketer reads one field. +- **Q4 (Slice order):** **Bundle Slice A + Slice B in one coder shift** (m picked over inventor (R) of "A first"). Reasoning: keeps the popover, persistence layer, AND the engine extension for `IncludeCCRFor` in one cohesive PR — coder + reviewer hold the full mental model once; one user-visible release; no half-shipped state where the caret exists on Klageerwiderung cards but the include-CCR pick doesn't yet wire through. Trade-off: larger PR. Mitigation: coder still organises commits per slice internally (separate test files, separate handler additions) so review can read them sequentially. See §7 slice plan — both slices implemented; ship as one. + +### Coder-shift implications of Q4 bundling + +- Migration 128 carries ALL three choice-kinds (`appellant`, `skip`, `include_ccr`) in the seed of `choices_offered`, plus the Klageerwiderung rows seeded with `{"include_ccr": [true, false]}`. +- `CalcOptions` gains all three new fields (`PerCardAppellant`, `SkipRules`, `IncludeCCRFor`) in the same Go change. +- The `IncludeCCRFor` v1 simplification (§4.2 #2 — "any non-empty set means append `with_ccr` to Flags") documents the per-card-scope limitation up front. Multi-CCR proceedings are a future expansion, not a v1 ship blocker. +- Frontend popover renders all three blocks the rule offers in one render path; coder cannot half-ship by leaving include_ccr's popover branch as a TODO. +- Tests cover the full matrix on the same branch. ---