Builds on B1 (commit 6c1d8cc). After this slice a user can compose a
multi-proceeding scenario kontextfrei: stack proceedings, flip
perspective per-triplet, toggle scenario flags, auto-spawn child
proceedings on flag transitions, and mark individual event cards as
planned / filed / skipped — all auto-saved to paliad.scenario_*.
PRD §7.1 B2 acceptance shipped:
- Multi-triplet stack: top-level proceedings sorted by ordinal,
child proceedings nested inline with a left lime border.
- Per-triplet controls bar: perspective radio (none / claimant /
defendant), Detailgrad pill (selected / all options), Entfernen
action. Each control PATCHes the proceeding row and re-renders the
affected triplet.
- Per-triplet flag strip: every paliad.scenario_flag_catalog row
rendered as a checkbox, bound to scenario_proceedings.scenario_flags.
Active flags also surface as chips in the triplet header for quick
legibility.
- Spawn nesting: when `with_ccr` flips ON on upc.inf.cfi the builder
auto-POSTs an upc.ccr.cfi child proceeding linked via
parent_scenario_proceeding_id; flip OFF deletes the child (events
cascade via the schema). The SPAWN_MAP table is data-driven so
future spawn flags slot in.
- 3-state event cards (planned / filed / skipped):
overlayEventStates walks the rendered .fr-col-item nodes (the
data-rule-id hook added to verfahrensablauf-core in this slice)
and stamps each card with data-builder-state + per-state action
buttons (File / Skip / Reset to planned). Filed cards prompt for
a date; skipped cards prompt for an optional reason. POSTs or
PATCHes paliad.scenario_events keyed by sequencing_rule_id.
- Per-card optional horizon chip: stores horizon_optional on the
scenario_event row, increment / decrement chip on every card.
The full surface awaits a calc-engine "optionals available"
counter (PRD §3.4 follow-up); the persistence layer + UX hook are
in place so the wiring lands without another schema touch.
- Page-header Stichtag drives default dates for every triplet (the
triplet's per-stichtag override path is wired but the per-triplet
Stichtag input is a B3+ affordance).
verfahrensablauf-core.renderColumnsBody now stamps data-rule-id (and
data-submission-code as a future hook) on every .fr-col-item root —
non-breaking enhancement; the legacy /tools/* pages don't read either
attribute. Verified by re-running the existing 57-test suite.
Backend: one new read-only endpoint
GET /api/builder/scenario-flag-catalog passes through
ScenarioFlagsService.ListCatalog so the builder doesn't need a
per-project round-trip to render flag toggles.
bun run build clean (3050 i18n keys), go vet ./... clean, go test ./...
clean, frontend bun test (verfahrensablauf-core suite) 57 / 57 pass.