Verfahrensablauf: rules anchored on uncertain triggers render concrete dates (R.109 backward-anchor without oral-hearing date, R.262(2) without Vertraulichkeitsantrag) #121
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
m's report (2026-05-26 09:26)
Symptom A — backward-anchored rule with no anchor renders today-relative date
The rule has
timing='before'(knuth's Wave 2 Slice A primitive, mig 128). When the oral hearing date is NOT set on the project, the projection appears to substitute the trigger date (Ausgangsdatum, 25.05.2026) and compute 1mo-backward from THAT — producing a meaningless 25.04.2026. Backward-anchored rules MUST have their anchor set OR they should render as "abhängig von …" / "unset" state.Symptom B — conditional dependent rule renders fixed date as if triggered
This rule anchors on the opposing party's Vertraulichkeitsantrag — which is OPTIONAL on the opposing side. Without a recorded Vertraulichkeitsantrag, the projection should NOT render a concrete date; it should show as conditional ("falls Antrag eingeht: 14 Tage danach").
Root-cause class
Both are the same bug: the projection treats a missing/uncertain anchor as a triggerable anchor, computing a date from the nearest-fallback (project trigger date OR today). It should instead:
parent_idis set but the parent rule has no actual date set (nopaliad.deadline_anchorsrow for this project AND not derivable from the rule chain).timing='before'rules: if the anchor is itself uncertain, the backward-computed date is meaningless.For optional-on-the-other-side rules (R.262(2)): if the project has not recorded the opposing side's filing, no concrete date.
What to do
internal/services/projection_service.go(and/ordeadline_calculator.go) that handles missing/empty anchors.IsConditional bool(orAnchorState string—"set"|"unset"|"optional-not-recorded") on the computed-deadline shape.IsConditional=true, render the row WITHOUT a date column entry — instead a chip "abhängig von <parent.name>" and a small dotted-border on the row to visually distinguish.timing='before'): if the forward anchor is unset, mark as conditional. If set, compute normally (no change).verfahrensablauf-core.test.tswith these cases.Files most likely touched
internal/services/projection_service.gointernal/services/deadline_calculator.gofrontend/src/client/views/verfahrensablauf-core.tsfrontend/src/client/views/verfahrensablauf-core.test.tsfrontend/src/styles/global.css— conditional-row visual treatmentfrontend/src/client/i18n.ts+frontend/src/i18n-keys.ts— "abhängig von …" keyHard rules
go build ./... && go test ./internal/... && cd frontend && bun run buildclean.mai/<worker>/conditional-rule-projection.Out of scope
Reporting
mai report completedwith branch + SHAs + UX path: open a UPC inf project without oral-hearing date → confirm R.109(1) and R.109(4) render as conditional, no date; open same project, then add the opposing party's Vertraulichkeitsantrag as an actual filing → confirm R.262(2) NOW renders with concrete date.Sweep verdict (2026-07-29): ALREADY DONE.
internal/services/projection_service.go:999-1006handles both symptoms and names them in the code: "court-set ancestor without override, backward-anchor without forward date, or optional event not recorded" →Status = "conditional", and criticallyev.Date = nil("Conditional rows must not carry a date even if the calculator left one"). Shipped as t-paliad-289.Symptom A (R.109 backward-anchor with no oral-hearing date) and Symptom B (R.262(2) with no Vertraulichkeitsantrag) both now render as conditional instead of a computed date.
But see #126 — the label on those conditional rows still names the wrong dependency. That half is still true.
Full sweep:
docs/findings-issue-sweep-2026-07-29.md(commit4c39886).Correction to my comment above (2026-07-29).
I wrote "But see #126 — the label on those conditional rows still names the wrong dependency. That half is still true." That is wrong. #126 is fixed; see the verdict I have just posted there.
The ALREADY DONE verdict on this issue stands unchanged —
projection_service.go:999-1006clears the date and renders conditional for both of m's symptoms. Only the pointer to #126 was wrong.Corrected in
docs/findings-issue-sweep-2026-07-29.md(commit3b20c2c).