fix(verfahrensablauf): m/paliad#58 — UPC CCR roadmap (EN label + spawn-as-standalone) #68
Open
mAi
wants to merge 1 commits from
mai/darwin/roadmap-ccr-en into main
pull from: mai/darwin/roadmap-ccr-en
merge into: m:main
m:main
m:mai/planck/coder-b5-b6-train-share
m:mai/archimedes/fixer-port-engine
m:mai/maxwell/coder-b4-akte-mode
m:mai/lorenz/coder-b3-event-triggered
m:mai/euler/fixer-builder-add
m:mai/brunel/fixer-prod-500s-after-b1
m:mai/galileo/coder-b1-b2-mvp-train
m:mai/pasteur/fixer-pkg-litigationplann
m:mai/newton/coder-b0-scenario-db
m:mai/edison/inventor-prd-columnar
m:mai/knuth/coder-workflow-tracker
m:mai/atlas/inventor-extend-tools
m:mai/cronus/inventor-unified
m:mai/atlas/inventor-deadline-system
m:mai/atlas/inventor-followup-rules
m:mai/athena/consultant-deadline
m:mai/brunel/fixer-dark-mode-support
m:mai/knuth/coder-cronus-fristenrechn
m:mai/ritchie/coder-mig-153-proceeding
m:mai/atlas/inventor-proceeding
m:mai/cronus/inventor-fristenrechner
m:mai/curie/coder-mig152-clone-dedupe
m:mai/darwin/researcher-lexy-draft
m:mai/knuth/coder-dedupe-null
m:mai/cronus/coder-composer-slice-f
m:mai/cronus/coder-composer-slice-e
m:mai/cronus/coder-composer-slice-d
m:mai/curie/coder-slice-b6-url-rename
m:mai/curie/coder-slice-b5-go-rename
m:mai/cronus/coder-composer-slice-c
m:mai/curie/coder-slice-b4-destructive-drop
m:mai/cronus/coder-composer-slice-b
m:mai/cronus/coder-composer-slice-a
m:mai/cronus/inventor-prd-for
m:mai/knuth/coder-verfahrensablauf
m:mai/ritchie/coder-make-backup
m:mai/diesel/fixer-dark-mode-css
m:mai/curie/coder-slice-b3-read-cutover
m:mai/diesel/fixer-verfahrensablauf
m:mai/curie/coder-slice-b2-dual-write
m:mai/cronus/coder-slice-d-scenarios
m:mai/knuth/coder-backfill-applies
m:mai/hermes/gitster-verfahrensablauf
m:mai/cronus/coder-berufung-labels-refactor
m:mai/diesel/hotfix-2-mig-134-missing
m:mai/curie/coder-slice-b1-procedural-events
m:mai/cronus/coder-slice-c-upc-snapshot
m:mai/brunel/hotfix-rename-upc-apl
m:mai/cronus/coder-slice-b3-primary-party
m:mai/cronus/coder-slice-b2-catalog-query
m:mai/cronus/inventor-litigation-slice-b
m:mai/curie/researcher-slice-b-zero
m:mai/cronus/inventor-litigation
m:mai/artemis/gitster-remove-admin
m:mai/ritchie/coder-sort-post-trigger
m:mai/knuth/coder-conditional-label
m:mai/hermes/coder-verfahrensablauf
m:mai/brunel/rebase-121-conditional
m:mai/knuth/coder-conditional-rule
m:mai/hermes/gitster-dark-mode-fix
m:mai/ritchie/coder-submission-form
m:mai/artemis/gitster-re-surface
m:mai/brunel/fixer-views-any-filters
m:mai/cronus/coder-cicd-slice-a
m:mai/knuth/coder-wave-1-tier-1-rule
m:mai/ritchie/coder-upc-damages-add
m:mai/cronus/inventor-ci-cd-pre
m:mai/brunel/rebase-108-language
m:mai/hermes/gitster-admin-rules-list
m:mai/artemis/gitster-submission
m:mai/icarus/gitster-verfahrensablauf
m:mai/orpheus/gitster-search-input
m:mai/atlas/coder-event-card-choices-slice-ab
m:mai/hermes/gitster-date-range
m:mai/demeter/gitster-submission
m:mai/knuth/coder-hl-patents-style
m:mai/hermes/gitster-draft-editor
m:mai/atlas/inventor-per-event-card
m:mai/knuth/coder-deadline-rule-tier
m:mai/cronus/coder-procedural-events-slice-a
m:mai/hermes/gitster-deadline-form
m:mai/artemis/gitster-add-missing-i18n
m:mai/demeter/gitster-paliadin-chat
m:mai/brunel/wave0-tier0-deadline-fixes
m:mai/artemis/coder-docker-compose-yml
m:mai/icarus/coder-inbox-overhaul-slice-a
m:mai/atlas/coder-date-range-picker-slice-a
m:mai/brunel/fixer-de-inf-lg-cfi
m:mai/cronus/inventor-procedural
m:mai/hermes/gitster-event-type-modal
m:mai/cronus/coder-backup-mode
m:mai/curie/researcher-bulletproof
m:mai/hermes/gitster-draft-editor-focus-jump
m:mai/cronus/inventor-backup-mode
m:mai/hermes/gitster-submissions
m:mai/artemis/gitster-deadline-form
m:mai/brunel/fixer-submission-preview
m:mai/brunel/fixer-test-data-reset
m:mai/artemis/gitster-approval-withdraw
m:mai/demeter/gitster-events
m:mai/hermes/gitster-sidebar-loses
m:mai/hermes/gitster-browse-a
m:mai/brunel/fixer-submissions-demo
m:mai/icarus/inventor-inbox-overhaul
m:mai/atlas/inventor-symmetric-date
m:mai/artemis/gitster-demote-daten
m:mai/hermes/gitster-team-view-mailto
m:mai/knuth/coder-global-schriftsatze
m:mai/knuth/coder-schriftsatze
m:mai/ritchie/coder-author-demo-docx
m:mai/knuth/coder-add-schriftsatze
m:mai/knuth/coder-add-checklist
m:mai/knuth/coder-anchor-lookup-must
m:mai/tesla/dashboard-resize-clamp
m:mai/knuth/coder-demote-projekt
m:mai/knuth/coder-paliadin-chat
m:mai/knuth/coder-print-views
m:mai/knuth/coder-add-proceeding
m:mai/knuth/coder-submission
m:mai/ritchie/coder-extend-team-email
m:mai/knuth/coder-changelog-catch-up
m:mai/tesla/dashboard-overlap
m:mai/pasteur/fixercoder-dashboard
m:mai/newton/inventor-configurable
m:mai/dirac/inventorcoder-user
m:mai/gauss/inventorcoder-team-admin
m:mai/kepler/inventorcoder-project
m:mai/euler/coder-small-ux-polish
m:mai/darwin/fristenrechner-cleanup
m:mai/darwin/fixercoder-priority-bug
m:mai/leibniz/inventor-caldav-multi
m:mai/hertz/inventor-unified-modal
m:mai/archimedes/inventor-excel-data
m:mai/boltzmann/inventor-gap-tolerant
m:mai/copernicus/submission-slice-1
m:mai/fermi/interactive-session
m:mai/hertz/inventor-suggest-changes
m:mai/copernicus/inventor-submission
m:mai/mendel/test-strategy-slice-1
m:mai/mendel/inventor-test-strategy
m:mai/ampere/custom-views-improvements
m:mai/joule/mig-097-apply-huygens-s
m:mai/ohm/workstream-b-rename
m:mai/huygens/workstream-a-backfill
m:mai/kelvin/t-204-phase-2-proceeding
m:mai/bohr/ingest-t-paliad-203-rule
m:mai/curie/fristenrechner-gap
m:mai/maxwell/inbox-grey-out
m:mai/rutherford/slice-9-follow-up-b-re
m:mai/dirac/slice-9-follow-up-a
m:mai/bose/determinator-cascade-slice-3
m:mai/bose/determinator-cascade-slice-2
m:mai/bose/determinator-row-cascade
m:mai/lorenz/fristen-phase-3-slice-9
m:mai/curie/fristen-phase-3-slice-12
m:mai/planck/aichat-phase-b-paliad
m:mai/young/fristen-phase-3-slice-11b
m:mai/lorenz/fristen-phase-3-slice-11a
m:mai/lorenz/fristen-phase-3-slice-10
m:mai/lorenz/fristen-phase-3-slice-8
m:mai/lorenz/fristen-phase-3-slice-7
m:mai/lorenz/fristen-phase-3-slice-6
m:mai/lorenz/fristen-phase-3-slice-5
m:mai/lorenz/fristen-phase-3-slice-4
m:mai/lorenz/fristen-phase-3-slice-3
m:mai/lorenz/fristen-phase-3-slice-2
m:mai/lorenz/fristen-phase-3-slice-1
m:mai/pauli/fristen-phase2-design
m:mai/tesla/project-timeline-chart
m:mai/pauli/fristen-logic-audit
m:mai/pauli/determinator-b1-row-by
m:mai/noether/tools-cleanup-slice-1
m:mai/kelvin/inventor-tools-surface
m:mai/planck/paliadin-per-user-rls
m:mai/maxwell/bug-bundle-filterbar
m:mai/faraday/project-timeline-chart
m:mai/schroedinger/smarttimeline-slice-4
m:mai/bohr/smarttimeline-slice-3
m:mai/gauss/smarttimeline-slice-2
m:mai/riemann/filterbar-phase-2-slice
m:mai/lagrange/smarttimeline-design-the
m:mai/curie/researcher-determinator
m:mai/noether/collapse-regel-typ-on
m:mai/riemann/inventor-universal
m:mai/minkowski/project-level-our-side
m:mai/dirac/inventor-inline-paliadin
m:mai/feynman/fristenrechner
m:mai/minkowski/navbar-dashboard-reorg
m:mai/shannon/approval-rework
m:mai/einstein/consultant-deadline-data
m:mai/curie/researcher-upc-rop-audit
m:mai/noether/paliadin-real-claude
m:mai/noether/inventor-paliadin
m:mai/hilbert/inventor-approval-policy
m:mai/shannon/bug-frist-due-date
m:mai/fritz/bug-fristen-termine
m:mai/godel/inventor-projects-page
m:mai/fritz/bug-paliadin-chat
m:mai/kepler/inventor-profession-vs
m:mai/noether/inventor-paliadin-in-app
m:mai/fritz/bulk-team-email-send-to
m:mai/noether/inventor-local-chat-for
m:mai/noether/inventor-data-display
m:mai/fritz/bug-derived-team-members
m:mai/fritz/bug-sidebar-visibly
m:mai/noether/inventor-project
m:mai/shannon/bug-project-team-add
m:mai/cronus/inventor-dual-control
m:mai/fritz/bug-edit-mode-on
m:mai/cronus/inventor-holidays-per
m:mai/ritchie/phase-h-ai-deadline
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 "mai/darwin/roadmap-ccr-en"
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?
Closes m/paliad#58.
Summary
Two bugs on the Procedure Roadmap when picking UPC Counterclaim for Revocation (
upc.ccr.cfi):UIResponse.proceedingNamewas single-language. With CCR having no native rules → no root → the frontend's trigger-event fallback rendered the DE name on EN.ResolveCounterclaimRoutingexisted since mig 096 but was never called fromCalculate. The user-pickedupc.ccr.cfiqueried rules directly and got back nothing.Fix:
UIResponsegainsproceedingNameEN,contextualNote,contextualNoteEN. FrontendtriggerEventLabelForconsults the EN name on EN.SubTrackRoutingregistry inproceeding_mapping.go(single entry today:upc.ccr.cfi → upc.inf.cfi + with_ccr, with bilingual note copy). Pattern generalises to future sub-tracks via data-only additions.Calculateroutes the user-picked code to the parent's rule set, merges default flags into the user's flag set (user flags win on conflict), and preserves the user-picked code/name in the response so the page header still reads 'Counterclaim for Revocation'.contextualNoteis set (.timeline-context-note).No DB migration needed
Live SELECTs against
paliad.proceeding_types,paliad.deadline_rules, andpaliad.trigger_eventsconfirm every active row already has bilingual labels populated. The CCR row hasname_en='Counterclaim for Revocation'. The bug was purely API+frontend never reading the EN columns through the proceedingName-fallback path; no corpus backfill needed.Test plan
go build ./...clean.go test ./internal/...— all packages pass. NewTestSubTrackRoutingspins the registry shape.bun run buildclean.bun test— 73 pass, 0 fail./tools/verfahrensablauf→ pick 'UPC Counterclaim for Revocation' → step 2 shows 'Trigger event: Klageschrift / Statement of Claim' (the root rule of the routed inf flow) on both DE and EN, NOT 'Widerklage auf Nichtigkeit'; (b) step 3 timeline is non-empty (the full inf+ccr flow renders withwith_ccrauto-enabled); (c) a lime-accent banner above the timeline explains the framing in the current language.Acceptance (from #58 + comment)
proceedingNameEN.SubTrackRoutingsmap is the extension point.m's 2026-05-20 14:08 reports on /tools/verfahrensablauf: 1. "There seems to be a lacking english term here" — picking UPC CCR shows "Trigger event: Widerklage auf Nichtigkeit" on EN. 2. "Nothing shows in the roadmap" — the timeline is empty because upc.ccr.cfi has no native rules (it's an illustrative peer that normally runs as a sub-track of upc.inf.cfi with with_ccr). Root cause for (1): UIResponse.proceedingName was DE-only. When a proceeding had no root rule the frontend fell back to that field, so EN users saw the DE label. The DB already has bilingual names; this was pure plumbing. Root cause for (2): the upc.ccr.cfi proceeding-type row exists for the picker (mig 096) but ResolveCounterclaimRouting — the helper that maps it to upc.inf.cfi with the with_ccr flag — was defined but never called. Calculate queried rules directly off upc.ccr.cfi and got an empty list. Fix: * Add ProceedingNameEN, ContextualNote, ContextualNoteEN to UIResponse. Frontend triggerEventLabelFor now consults the EN name on EN, falling back to DE only if the EN field is empty. * New SubTrackRouting registry in proceeding_mapping.go and a LookupSubTrackRouting lookup — single source of truth for the "this proceeding has no native rules, route to a parent with flags + show a contextual note" pattern. Today's only entry is upc.ccr.cfi → upc.inf.cfi + with_ccr; the pattern generalises to other sub-tracks via data-only additions. * Calculate consults the registry at the top: when a hit, the proceeding type is re-resolved to the parent for rule lookup, the default flags are merged into the user's flag set (user flags win on conflict), and the response identity (Code/Name/NameEN) stays on the user-picked proceeding so the page header still reads "Counterclaim for Revocation". The bilingual note surfaces in ContextualNote{,EN}. * Frontend renderResults paints a lime-accent banner above the timeline body when the response carries a note (.timeline-context-note). escHtml already exported from views/verfahrensablauf-core — imported here for the banner. No DB migration: SELECTs against paliad.proceeding_types, paliad.deadline_rules, and paliad.trigger_events confirm every active row already has a non-empty name_en / name. The bug was the API + frontend never reading the EN columns through the proceedingName fallback path. Tests: TestSubTrackRoutings pins the registry shape (every entry has matching key/value, non-empty parent+flags, bilingual notes; CCR's exact shape is asserted; non-sub-tracks miss). The existing TestResolveCounterclaimRouting continues to pass because the helper now consults the registry but the CCR semantics are unchanged.View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.