refactor(mana): rename inventar → inventory across the codebase

The workbench-registry app id 'inventar' did not match its
@mana/shared-branding MANA_APPS counterpart 'inventory', so the tier-
gating join in apps/web/src/lib/app-registry/registry.ts silently
failed for the inventory module — it fell into the "no MANA_APPS
entry, default visible" fallback and was effectively un-gated. The
codebase had also voted overwhelmingly for 'inventar' (53 files) vs
'inventory' (3 files in shared-branding), so the long-standing
mismatch was just bookkeeping debt waiting to bite.

Pre-release, no live data, so the cleanest fix is to align everything
on the English 'inventory':

- Workbench-registry id, module.config.ts appId, module folder, route
  folder and i18n locale folder all renamed via git mv
- Standalone apps/inventar/ workspace package renamed
- All imports, store identifiers (InventarEvents → InventoryEvents,
  INVENTAR_GUEST_SEED, inventarModuleConfig), i18n keys and href/goto
  paths follow the rename
- The German display label "Inventar" is preserved everywhere it is a
  user-visible string (page titles, i18n values, toast labels)
- Dexie table prefixes (invCollections, invItems, …) are unchanged
- Drive-by fix: ListView.svelte was querying non-existent
  inventarCollections/inventarItems tables — corrected to the actual
  invCollections/invItems names from module.config
- The "inventar ↔ inventory id mismatch" workaround comment in
  registry.ts is removed since the mismatch no longer exists

module-registry.ts also picks up the user's parallel newsModuleConfig
addition because both edits land in the same import block — keeping
them split would have left the build in an inconsistent state.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-09 15:50:24 +02:00
parent 51f408755c
commit 45790ffbb8
65 changed files with 173 additions and 147 deletions

View file

@ -61,7 +61,7 @@
music: ['Musik machen, einfach so', 'Quelloffen & unabhängig', 'Privat by Design'],
storage: ['Deine Dateien, dein Tresor', 'Quelloffen & unabhängig', 'Privat by Design'],
times: ['Zeiterfassung ohne Overhead', 'Quelloffen & unabhängig', 'Privat by Design'],
inventar: ['Alles im Überblick behalten', 'Quelloffen & unabhängig', 'Privat by Design'],
inventory: ['Alles im Überblick behalten', 'Quelloffen & unabhängig', 'Privat by Design'],
uload: ['Links kürzen & verwalten', 'Quelloffen & unabhängig', 'Privat by Design'],
news: ['Nachrichten, kuratiert für dich', 'Quelloffen & unabhängig', 'Privat by Design'],
arcade: ['Spiele direkt im Browser', 'Quelloffen & unabhängig', 'Privat by Design'],
@ -94,7 +94,7 @@
music: ['Make music, just like that', 'Open-source & independent', 'Private by design'],
storage: ['Your files, your vault', 'Open-source & independent', 'Private by design'],
times: ['Time tracking without overhead', 'Open-source & independent', 'Private by design'],
inventar: ['Keep track of everything', 'Open-source & independent', 'Private by design'],
inventory: ['Keep track of everything', 'Open-source & independent', 'Private by design'],
uload: ['Shorten & manage links', 'Open-source & independent', 'Private by design'],
news: ['News, curated for you', 'Open-source & independent', 'Private by design'],
arcade: ['Games right in your browser', 'Open-source & independent', 'Private by design'],

View file

@ -17,7 +17,7 @@
* }
*
* export const viewStore = createViewStore<MyViewMode, MyFilters>({
* storagePrefix: 'inventar',
* storagePrefix: 'inventory',
* defaultViewMode: 'list',
* defaultSort: { field: 'name', direction: 'asc' },
* hasActiveFilters: (f) => !!(f.search || f.status?.length || f.tagIds?.length),
@ -40,7 +40,7 @@ export interface SavedFilter<F> {
}
export interface ViewStoreConfig<V extends string, F extends object> {
/** Prefix for localStorage keys (e.g. 'inventar' → 'inventar_view_mode') */
/** Prefix for localStorage keys (e.g. 'inventory' → 'inventory_view_mode') */
storagePrefix: string;
/** Default view mode */
defaultViewMode: V;

View file

@ -167,7 +167,7 @@ const track = {
memoro: createModuleTracker('memoro'),
app: createModuleTracker('app'),
calc: createModuleTracker('calc'),
inventar: createModuleTracker('inventar'),
inventory: createModuleTracker('inventory'),
moodlit: createModuleTracker('moodlit'),
citycorners: createModuleTracker('citycorners'),
};
@ -570,18 +570,18 @@ export const CalcEvents = {
};
/**
* Inventar App Events
* Inventory App Events
*/
export const InventarEvents = {
itemCreated: () => track.inventar('item_created'),
itemUpdated: () => track.inventar('item_updated'),
itemDeleted: () => track.inventar('item_deleted'),
collectionCreated: () => track.inventar('collection_created'),
collectionDeleted: () => track.inventar('collection_deleted'),
categoryCreated: () => track.inventar('category_created'),
categoryDeleted: () => track.inventar('category_deleted'),
locationCreated: () => track.inventar('location_created'),
locationDeleted: () => track.inventar('location_deleted'),
export const InventoryEvents = {
itemCreated: () => track.inventory('item_created'),
itemUpdated: () => track.inventory('item_updated'),
itemDeleted: () => track.inventory('item_deleted'),
collectionCreated: () => track.inventory('collection_created'),
collectionDeleted: () => track.inventory('collection_deleted'),
categoryCreated: () => track.inventory('category_created'),
categoryDeleted: () => track.inventory('category_deleted'),
locationCreated: () => track.inventory('location_created'),
locationDeleted: () => track.inventory('location_deleted'),
};
/**

View file

@ -190,7 +190,7 @@ export const MANA_APP_INDEX: Record<string, number> = {
photos: 12,
skilltree: 13,
citycorners: 14,
inventar: 15,
inventory: 15,
times: 16,
nutriphi: 17,
planta: 18,