RFC: full revision of the deadline + procedural-events system — two entry paths, unified scenario state, editorial completion #149
Open
opened 2026-05-27 08:52:51 +00:00 by mAi
·
2 comments
No Branch/Tag Specified
main
mai/planck/coder-b5-b6-train-share
mai/archimedes/fixer-port-engine
mai/maxwell/coder-b4-akte-mode
mai/lorenz/coder-b3-event-triggered
mai/euler/fixer-builder-add
mai/brunel/fixer-prod-500s-after-b1
mai/galileo/coder-b1-b2-mvp-train
mai/pasteur/fixer-pkg-litigationplann
mai/newton/coder-b0-scenario-db
mai/edison/inventor-prd-columnar
mai/knuth/coder-workflow-tracker
mai/atlas/inventor-extend-tools
mai/cronus/inventor-unified
mai/atlas/inventor-deadline-system
mai/atlas/inventor-followup-rules
mai/athena/consultant-deadline
mai/brunel/fixer-dark-mode-support
mai/knuth/coder-cronus-fristenrechn
mai/ritchie/coder-mig-153-proceeding
mai/atlas/inventor-proceeding
mai/cronus/inventor-fristenrechner
mai/curie/coder-mig152-clone-dedupe
mai/darwin/researcher-lexy-draft
mai/knuth/coder-dedupe-null
mai/cronus/coder-composer-slice-f
mai/cronus/coder-composer-slice-e
mai/cronus/coder-composer-slice-d
mai/curie/coder-slice-b6-url-rename
mai/curie/coder-slice-b5-go-rename
mai/cronus/coder-composer-slice-c
mai/curie/coder-slice-b4-destructive-drop
mai/cronus/coder-composer-slice-b
mai/cronus/coder-composer-slice-a
mai/cronus/inventor-prd-for
mai/knuth/coder-verfahrensablauf
mai/ritchie/coder-make-backup
mai/diesel/fixer-dark-mode-css
mai/curie/coder-slice-b3-read-cutover
mai/diesel/fixer-verfahrensablauf
mai/curie/coder-slice-b2-dual-write
mai/cronus/coder-slice-d-scenarios
mai/knuth/coder-backfill-applies
mai/hermes/gitster-verfahrensablauf
mai/cronus/coder-berufung-labels-refactor
mai/diesel/hotfix-2-mig-134-missing
mai/curie/coder-slice-b1-procedural-events
mai/cronus/coder-slice-c-upc-snapshot
mai/brunel/hotfix-rename-upc-apl
mai/cronus/coder-slice-b3-primary-party
mai/cronus/coder-slice-b2-catalog-query
mai/cronus/inventor-litigation-slice-b
mai/curie/researcher-slice-b-zero
mai/cronus/inventor-litigation
mai/artemis/gitster-remove-admin
mai/ritchie/coder-sort-post-trigger
mai/knuth/coder-conditional-label
mai/hermes/coder-verfahrensablauf
mai/brunel/rebase-121-conditional
mai/knuth/coder-conditional-rule
mai/hermes/gitster-dark-mode-fix
mai/ritchie/coder-submission-form
mai/artemis/gitster-re-surface
mai/brunel/fixer-views-any-filters
mai/cronus/coder-cicd-slice-a
mai/knuth/coder-wave-1-tier-1-rule
mai/ritchie/coder-upc-damages-add
mai/cronus/inventor-ci-cd-pre
mai/brunel/rebase-108-language
mai/hermes/gitster-admin-rules-list
mai/artemis/gitster-submission
mai/icarus/gitster-verfahrensablauf
mai/orpheus/gitster-search-input
mai/atlas/coder-event-card-choices-slice-ab
mai/hermes/gitster-date-range
mai/demeter/gitster-submission
mai/knuth/coder-hl-patents-style
mai/hermes/gitster-draft-editor
mai/atlas/inventor-per-event-card
mai/knuth/coder-deadline-rule-tier
mai/cronus/coder-procedural-events-slice-a
mai/hermes/gitster-deadline-form
mai/artemis/gitster-add-missing-i18n
mai/demeter/gitster-paliadin-chat
mai/brunel/wave0-tier0-deadline-fixes
mai/artemis/coder-docker-compose-yml
mai/icarus/coder-inbox-overhaul-slice-a
mai/atlas/coder-date-range-picker-slice-a
mai/brunel/fixer-de-inf-lg-cfi
mai/cronus/inventor-procedural
mai/hermes/gitster-event-type-modal
mai/cronus/coder-backup-mode
mai/curie/researcher-bulletproof
mai/hermes/gitster-draft-editor-focus-jump
mai/cronus/inventor-backup-mode
mai/hermes/gitster-submissions
mai/artemis/gitster-deadline-form
mai/brunel/fixer-submission-preview
mai/brunel/fixer-test-data-reset
mai/artemis/gitster-approval-withdraw
mai/demeter/gitster-events
mai/hermes/gitster-sidebar-loses
mai/hermes/gitster-browse-a
mai/brunel/fixer-submissions-demo
mai/icarus/inventor-inbox-overhaul
mai/atlas/inventor-symmetric-date
mai/artemis/gitster-demote-daten
mai/hermes/gitster-team-view-mailto
mai/knuth/coder-global-schriftsatze
mai/knuth/coder-schriftsatze
mai/ritchie/coder-author-demo-docx
mai/knuth/coder-add-schriftsatze
mai/knuth/coder-add-checklist
mai/knuth/coder-anchor-lookup-must
mai/tesla/dashboard-resize-clamp
mai/knuth/coder-demote-projekt
mai/knuth/coder-paliadin-chat
mai/knuth/coder-print-views
mai/knuth/coder-add-proceeding
mai/knuth/coder-submission
mai/ritchie/coder-extend-team-email
mai/knuth/coder-changelog-catch-up
mai/tesla/dashboard-overlap
mai/pasteur/fixercoder-dashboard
mai/newton/inventor-configurable
mai/dirac/inventorcoder-user
mai/gauss/inventorcoder-team-admin
mai/kepler/inventorcoder-project
mai/darwin/roadmap-ccr-en
mai/euler/coder-small-ux-polish
mai/darwin/fristenrechner-cleanup
mai/darwin/fixercoder-priority-bug
mai/leibniz/inventor-caldav-multi
mai/hertz/inventor-unified-modal
mai/archimedes/inventor-excel-data
mai/boltzmann/inventor-gap-tolerant
mai/copernicus/submission-slice-1
mai/fermi/interactive-session
mai/hertz/inventor-suggest-changes
mai/copernicus/inventor-submission
mai/mendel/test-strategy-slice-1
mai/mendel/inventor-test-strategy
mai/ampere/custom-views-improvements
mai/joule/mig-097-apply-huygens-s
mai/ohm/workstream-b-rename
mai/huygens/workstream-a-backfill
mai/kelvin/t-204-phase-2-proceeding
mai/bohr/ingest-t-paliad-203-rule
mai/curie/fristenrechner-gap
mai/maxwell/inbox-grey-out
mai/rutherford/slice-9-follow-up-b-re
mai/dirac/slice-9-follow-up-a
mai/bose/determinator-cascade-slice-3
mai/bose/determinator-cascade-slice-2
mai/bose/determinator-row-cascade
mai/lorenz/fristen-phase-3-slice-9
mai/curie/fristen-phase-3-slice-12
mai/planck/aichat-phase-b-paliad
mai/young/fristen-phase-3-slice-11b
mai/lorenz/fristen-phase-3-slice-11a
mai/lorenz/fristen-phase-3-slice-10
mai/lorenz/fristen-phase-3-slice-8
mai/lorenz/fristen-phase-3-slice-7
mai/lorenz/fristen-phase-3-slice-6
mai/lorenz/fristen-phase-3-slice-5
mai/lorenz/fristen-phase-3-slice-4
mai/lorenz/fristen-phase-3-slice-3
mai/lorenz/fristen-phase-3-slice-2
mai/lorenz/fristen-phase-3-slice-1
mai/pauli/fristen-phase2-design
mai/tesla/project-timeline-chart
mai/pauli/fristen-logic-audit
mai/pauli/determinator-b1-row-by
mai/noether/tools-cleanup-slice-1
mai/kelvin/inventor-tools-surface
mai/planck/paliadin-per-user-rls
mai/maxwell/bug-bundle-filterbar
mai/faraday/project-timeline-chart
mai/schroedinger/smarttimeline-slice-4
mai/bohr/smarttimeline-slice-3
mai/gauss/smarttimeline-slice-2
mai/riemann/filterbar-phase-2-slice
mai/lagrange/smarttimeline-design-the
mai/curie/researcher-determinator
mai/noether/collapse-regel-typ-on
mai/riemann/inventor-universal
mai/minkowski/project-level-our-side
mai/dirac/inventor-inline-paliadin
mai/feynman/fristenrechner
mai/minkowski/navbar-dashboard-reorg
mai/shannon/approval-rework
mai/einstein/consultant-deadline-data
mai/curie/researcher-upc-rop-audit
mai/noether/paliadin-real-claude
mai/noether/inventor-paliadin
mai/hilbert/inventor-approval-policy
mai/shannon/bug-frist-due-date
mai/fritz/bug-fristen-termine
mai/godel/inventor-projects-page
mai/fritz/bug-paliadin-chat
mai/kepler/inventor-profession-vs
mai/noether/inventor-paliadin-in-app
mai/fritz/bulk-team-email-send-to
mai/noether/inventor-local-chat-for
mai/noether/inventor-data-display
mai/fritz/bug-derived-team-members
mai/fritz/bug-sidebar-visibly
mai/noether/inventor-project
mai/shannon/bug-project-team-add
mai/cronus/inventor-dual-control
mai/fritz/bug-edit-mode-on
mai/cronus/inventor-holidays-per
mai/ritchie/phase-h-ai-deadline
No results found.
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: m/paliad#149
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking 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?
Mandate
m (2026-05-27 10:48-10:51): full revision of the deadline + procedural-events system. "Some things are doing well, others are not at all."
Two primary user entry paths must work end-to-end:
Both must share one underlying data model, one source of truth for scenario flags, one shared notion of "what is a trigger". Today's data foundation is mostly right; editorial coverage, scenario-state unification, and the two competing trigger semantics need work.
Live audit summary (2026-05-27)
What the data carries today
paliad.procedural_events(236 rows, 222 active+published, mig 153 in place)event_kindbuckets (filing / hearing / decision / order / NULL). Names + codes good.paliad.sequencing_rules(231 rows, 226 active+published)sequencing_rules.parent_id(FK to another rule)sequencing_rules.trigger_event_id(bigint, → legacypaliad.trigger_events)/api/tools/event-deadlines(legacy).sequencing_rules.priorityenum (mandatory/recommended/optional)sequencing_rules.primary_party(claimant/defendant/both/court/ NULL)sequencing_rules.condition_expr(jsonb)sequencing_rules.is_spawn+spawn_proceeding_type_idappeal_spawnfamily.sequencing_rules.is_court_set(boolean)sequencing_rules.is_bilateral(boolean)sequencing_rules.spawn_label+ family routing (e.g. UPC_INF + with_ccr → upc.inf.cfi sub-track)paliad.proceeding_types.kind(mig 153, 2026-05-27)proceeding, 4phase, 10side_action, 9meta.paliad.project_event_choices(PK project_id + scenario_name + submission_code + choice_kind) ANDpaliad.projects.scenariosjsonb (mig 145) AND DOM state on result viewpkg/litigationplanner.HolidayCalendarinterface +paliad.holidaystablepkg/litigationplanner.CalculateRuleWhat's actually broken
procedural_eventsrow.upc.inf.cfi.appeal_spawn(a SPAWN consequence) andupc.inf.cfi.def_to_ccr(a leaf with no published children) both appear and produce confusing "Keine Folge-Fristen" or wrong-tree result views. m: 'we derive the trigger from whether an event is mentioned as a previous event in a sequence'. The data already supports this derivation but the picker hasn't been wired to it.upc.inf.cfi.def_to_ccr(claimant-filed), the published childRoP.029.d → reply_def_ccr(defendant Replik) gets filtered out when perspective=claimant. Result: "Keine Folge-Fristen" lies — the workflow continues, just on the other side. UI should show + annotate, not hide.Mit Widerklage auf NichtigkeitandMit Antrag auf Patentänderung (R.30)toggles on Verfahrensablauf don't drive the conditional checkboxes in result-view submission cards. Three stores diverge.parent_id = NULL. Some are genuine roots (e.g.Klageerhebung— the start of a flow). Most are filing events whose chain back to a predecessor is unseeded. The whole 'trigger-from-sequence' derivation has gaps as a result.trigger_event_id(80 rules → bigint legacy table) overlaps with newparent_idchain semantics. One must win.frontend/src/fristenrechner.tsx) tries to do this but doesn't surface optionals as toggleable in a way that drives the rest of the system. The newly-shipped Verfahrensablauf in /admin/procedural-events is read-only.What this RFC must answer
Architectural
parent_idchains as the canonical link, deprecatetrigger_event_id? Or unify both? If deprecating: migration plan for the 80 rules that use it.paliad.projects.scenariosjsonb (already exists per mig 145). Migration: backfill fromproject_event_choices; deprecate the legacy table. Define the key namespace (with_ccr,with_amendment_r30, …). Wire the two surfaces (Verfahrensablauf checkboxes + result-view conditional checkboxes) to both read and write this jsonb.primary_party. UI groups: own-side checked-by-priority, cross-party annotatedGegenseitig+ unchecked. Perspective remains the user's qualifier in the calc; the display is honest about who files what.is_spawn=trueget excluded from picker (they're consequences, not triggers). They still surface in the parent event's result view under SPAWNED group.Data quality
/admin/procedural-events; m reviews + publishes at his leisure.condition_exprformalisation — today it's free-form jsonb. Pick a small expression grammar (requires,excludes,when_party, …) and document it. Validate at write time.paliad.trigger_eventstable fate — drop, archive, or repurpose?UI
selected_optionalsstate drives both the timeline view and the per-event follow-up list.?legacy=1for the deprecation window; ship the new sequence-from-proceeding-type view as a parallel surface, flip default after dogfooding.Two-worker dispatch
m called for consultant + inventor.
Phase 1 — Consultant (assessment)
Deliverable:
docs/assessment-deadline-system-2026-05-NN.mdcovering:sequencing_rules+procedural_events(Fristenrechner, Litigation Planner, SmartTimeline, /admin/procedural-events, /admin/rules redirects, Verfahrensablauf, ProjectService.SetProceedingType, paliadin context, youpc-go snapshot).trigger_event_idoverlap.trigger_eventstable, three-store scenario state, perspective-filter overreach in /follow-ups).No design proposals — assessment only.
Phase 2 — Inventor (design)
Reads consultant's assessment + this RFC, then files:
docs/design-deadline-system-revision-2026-05-NN.mdcovering all 12 questions above, schema deltas (likely additive + a few drops), migration plan, two-entry-path UI specs, scenario-state unification migration, editorial-backfill plan (just the framework + counts; the actual content is editorial work for m), worked examples for both entry paths.Uses AskUserQuestion batches for m's open calls. Park after DESIGN READY FOR REVIEW.
Coder phase (deferred)
After m ratifies the inventor's design, head hires coder(s) for the migration + UI + service changes. Estimate: multi-slice train, similar shape to the Fristenrechner overhaul (S1 backend → … → flip flag → cleanup).
Subsumed prior work
Out of scope
pkg/litigationplanner.CalculateRule). Working as designed.b6a11b55…).Phase 2 coder train — status as of t-paliad-331 (ritchie)
Slices shipped + merged to main:
d36cc9e—projects.scenario_flagsSSoT (mig 154) +scenario_flag_catalogtable +GET/PATCH /api/projects/{id}/scenario-flagsendpoints + Mode B Fristenrechner flag bind +scenario-flags.tsclient module + cross-surfacescenario-flag-changedCustomEvent.3533d79—LookupFollowUpsreturns all rows + computesis_cross_party; UI muted-renders cross-party with Gegenseitig badge; write-back unconditionally excludes cross-party;SearchEventsfilters outis_spawn=trueso spawn-only events drop out of the picker (terminal leaves stay pickable per design §2.2 carve-out).3a4e99c—upc.apl.unifiedretired; rules re-bound toupc.apl.merits/upc.apl.cost/upc.apl.orderby event-code prefix (mig 155);upc.pi.cfi.appeal_spawnretargeted to orders track per design §3.1;lookup_events_test.goassertions updated.480332a— Three-way detail filter (Nur Pflicht / Gewählt / Alle Optionen) on/tools/verfahrensablauf; per-rule Aufnehmen/Entfernen chips writingrule:<uuid>entries toprojects.scenario_flags; subtree-hide-on-unselected-ancestor render logic; localStorage-persisted view-mode; conditional rules treated as unselected in 'Gewählt' even when mandatory.Pending merge:
9940dd8—condition_exprwrite-validator. Grammar locked to{flag}|{op:'and'|'or', args:[...]}; called fromRuleEditorService.Create+UpdateDraft; 9 shape-unit tests + 2 live-DB tests gated on TEST_DATABASE_URL. All 18 active+publishedcondition_exprrows in the DB conform.d6a5ded— Hybrid-rule cleanup (mig 156) NULL'd the 2 rules carrying bothparent_idANDtrigger_event_idper §2.1.POST /api/tools/event-deadlinesnow responds withDeprecation: true+ RFC 8594 / 9745Linkheader pointing at this issue.Final P4 deferred (editorial follow-up — not coder scope):
Live-DB audit shows the table-drop cannot happen yet:
paliad.trigger_eventscarries 110 live rowstrigger_event_id(post-mig-156); of those, 73 are orphans (proceeding_type_id IS NULL) addressed only viatrigger_event_idevent_typesrows referencetrigger_event_idparent_idnortrigger_event_id(anomaly — flag for editorial review)Editorial backlog (m's work, not coder):
/admin/procedural-events?orphan=true&parent_filter=null(design §4.2). Per PT, walk each rule, assignproceeding_type_id+parent_id, setcondition_exprwhere applicable, publish.Once orphan count hits zero, the next coder follow-up lands:
DROP TABLE paliad.trigger_eventsALTER TABLE paliad.sequencing_rules DROP COLUMN trigger_event_idsequencing_rules_trigger_event_id_fkeyFKPOST /api/tools/event-deadlineshandler +EventDeadlineServicedeadline_rule_service.go:226,event_deadline_service.go:79+244,event_type_service.go:40+414,export_service.go:1680,cmd/gen-upc-snapshot/main.go:185-202)deadline_rule_service.go:226-285label-fallback path toprocedural_events.nameDesign reference:
docs/design-deadline-system-revision-2026-05-27.md§2.1 / §3.4 / §4.3 / §5 P5 row.EDITORIAL CLEANUP COMPLETE (t-paliad-333)
Result
is_active=true AND lifecycle_state='published'Verification:
Clusters processed (9 transactions, each with
paliad.audit_reason):statement_of_defence_with_CCR→inf.cfi/RoP.030.1;statement_for_revocation→rev.cfi/RoP.050; subsequent stages RoP.032.x / RoP.056.4 / RoP.052 per existing convention.Compound-name rules — flagged for m's split-review (assigned dominant proceeding, may want split into separate rules):
7b548c48(1 mo, trigger reply-to-defence-CCR-infringement) — "Duplik … Verletzungswiderklage + Patentänderungsantrag" → assigned rev.cfi/RoP.056.4 (dominant: Verletzungswiderklage).02ae9c1f(1 mo, trigger reply-to-defence-counterclaim) — "Duplik zur Replik, Replik … Patentänderung" → assigned inf.cfi/RoP.029.37bd034b(2 mo, trigger defence-to-revocation) — "Replik Nichtigkeitsklage + Erwiderung Patentänderung + Erwiderung Verletzungswiderklage" → assigned rev.cfi/RoP.052 (dominant: revocation reply).ec2a1274(2 mo, trigger defence-to-counterclaim) — "Replik Widerklage + Duplik Klageerwiderung + Erwiderung Patentänderung" → assigned inf.cfi/RoP.029.7e65a434/dfd52792/8cdf54eb(Patentänderung Erwiderung/Replik/Duplik single-events) — assigned inf.cfi/RoP.032.x dominant; the brief lists "Patentänderung-chain duplication into both inf.cfi+rev.cfi (3 rules need CREATE-ing copies — needs care)" as a separate ticket. Recommend creating rev.cfi copies (RoP.043.3 / RoP.032.3) in a follow-up.Remaining for m's manual review:
lifecycle_state='archived',is_active=false) — 5 × "Mängelbeseitigung / Zahlung" duplicates + 1 × "Vorgängige Einrede". Out of scope (archived).16e262d2"Antrag auf Weiterbehandlung (DPMA)" (§ 123a PatG) — draft, not yet published. m to publish with proceeding selection.trigger_event_idAND new-modelparent_id-chained equivalents already exist for most. They duplicate semantically. The Phase 2 design (docs/design-deadline-system-revision-2026-05-27.md) calls for deprecatingtrigger_events; archiving these legacy rules is the cleanup target then. Not done here to avoid destructive ops without snapshot precedent (per brief).Verification:
mai/curie/researcher-lexy-finishbranch (no code changes — DB-only via Supabase MCP, audit_reason set on every TX).Refs: t-paliad-333, m/paliad#149.