Closes the procedural-events rename loop opened by m/paliad#93. The
admin surface now lives under its canonical URL; the legacy paths
remain reachable for one deprecation cycle via 301 redirects so
bookmarks, audit-log entries, and curl scripts keep working.
* internal/handlers/handlers.go —
- Registers the 12 canonical routes under
/admin/procedural-events* (page paths and JSON API). Same
handlers — just the new URL slot.
- Registers the 12 legacy /admin/rules* routes as 301 redirects.
* internal/handlers/admin_rules.go —
- redirectToProceduralEvents(dst) — fixed-destination redirect for
paths without an {id}.
- redirectToProceduralEventEdit — page redirect carrying the {id}.
- redirectToProceduralEventAPI(suffix) — JSON API redirect carrying
{id} + optional suffix (/clone-as-draft, /publish, /archive,
/restore, /audit, /preview). Query string is preserved on every
redirect.
- All three helpers add the IETF Deprecation header + a Link
header pointing at the successor-version path.
* frontend internal nav + URL strings —
Sidebar.tsx, admin.tsx, admin-rules-list.tsx, admin-rules-edit.tsx,
client/admin-rules-list.ts, client/admin-rules-edit.ts: every
`/admin/rules*` reference flipped to `/admin/procedural-events*`.
In-app navigation now hits the canonical paths directly without a
redirect round-trip; external callers keep working via the 301s.
* frontend .tsx i18n rebind —
9 admin .tsx i18n bindings rebound to the canonical
`admin.procedural_events.*` keys that already exist as aliases in
i18n.ts (per Slice A from t-paliad-262). Specifically:
admin.rules.list.title → admin.procedural_events.list.title
admin.rules.list.heading → admin.procedural_events.list.heading
admin.rules.list.new → admin.procedural_events.list.new
admin.rules.col.submission_code → admin.procedural_events.col.code
admin.rules.edit.title → admin.procedural_events.edit.title
admin.rules.edit.breadcrumb → admin.procedural_events.edit.breadcrumb
admin.rules.edit.field.submission_code → admin.procedural_events.edit.field.code
admin.rules.edit.field.event_type → admin.procedural_events.edit.field.event_kind
admin.rules.edit.field.parent → admin.procedural_events.edit.field.parent
The remaining ~142 admin.rules.* keys do NOT yet have
procedural_events aliases. Migrating them is a follow-up slice —
each needs a new alias entry in i18n.ts (DE + EN) before the .tsx
reference can be flipped. The 9 keys touched here are the most
visible (page titles + edit-page field labels) so the admin UI
immediately reads as "Verfahrensschritte" everywhere.
* frontend/src/client/i18n.ts header comment updated to reflect that
the URL rename has shipped (Slice B.6 done) and to flag the
remaining i18n-key migration as the next step.
Scope (documented, paliadin authorised):
- "go everything" applied: backend routes + frontend nav + .tsx
rebind of the 9 keys whose canonical aliases exist.
- Full migration of all 142 admin.rules.* keys deferred — would
require seeding ~142 new alias entries in i18n.ts (DE + EN) plus
another 142 .tsx rebinds. Out of scope for tonight; flag as
follow-up `feat(i18n): finish admin.rules.* → admin.procedural_events.*
alias migration`.
- 12 legacy /admin/rules routes still hit a handler (the redirect
helper) — they don't 404 yet. Once a deprecation window passes
with no traffic on the old paths, a future slice can drop them
outright.
Build + vet clean. TestMigrations_NoDuplicateSlot passes.
This concludes the m/paliad#93 procedural-events rename slice train
(Slices A through B.6). curie stays parked persistently for any
follow-up the deploy / monitor cycle surfaces.