chore: clear svelte-check errors + document scene-scope pattern

- `app-registry/types.ts` now includes `tips` in the inline help shape,
  matching `ModuleHelp` and what `AppPage.svelte` actually renders.
  Drops 3 recurring type errors.
- `event-scout` template's `{ kind: 'daily' }` cadence now carries the
  required `atHour` / `atMinute` fields (daily 08:00). Drops the 4th
  type error — svelte-check is clean.
- `apps/mana/CLAUDE.md` gains a "Scene Scope" section documenting the
  pattern: wire `filterBySceneScopeBatch` in the query AND render
  `<ScopeEmptyState>` from the empty branch, so users always see why
  the list is empty.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-18 17:24:52 +02:00
parent e813401dc0
commit cd594509b2
3 changed files with 27 additions and 1 deletions

View file

@ -167,6 +167,29 @@ pnpm test:e2e # Playwright
Svelte 5 runes are mandatory — no legacy `let count = 0; $: doubled = count * 2`. Always `$state`, `$derived`, `$effect`. See [`.claude/guidelines/sveltekit-web.md`](../../.claude/guidelines/sveltekit-web.md).
## Scene Scope
Each workbench scene can carry `scopeTagIds` — a per-scene tag filter that module queries honour via `filterBySceneScopeBatch` from `$lib/stores/scene-scope.svelte`. When the filter hides everything, users need to see why.
**When a module wires the scope filter, wire the empty state too:**
```svelte
<script lang="ts">
import ScopeEmptyState from '$lib/components/workbench/ScopeEmptyState.svelte';
import { hasActiveSceneScope } from '$lib/stores/scene-scope.svelte';
</script>
{#if items.length === 0}
{#if hasActiveSceneScope()}
<ScopeEmptyState label="Aufgaben" />
{:else}
<p class="empty">Noch keine Aufgaben</p>
{/if}
{/if}
```
`ScopeEmptyState` renders a subdued "Bereichsfilter verbergen alles" message plus a one-click "Bereich zurücksetzen" button that calls `workbenchScenesStore.setSceneScopeTags(activeSceneId, undefined)`. `SceneAppBar` already shows a Funnel badge on scoped scene pills; the module doesn't need to duplicate that signal. Plan: [`docs/plans/scene-scope-empty-state.md`](../../docs/plans/scene-scope-empty-state.md).
## AI Workbench
The companion is a **second actor** that works alongside the human in every module. Full pipeline live end-to-end:

View file

@ -59,9 +59,12 @@ export interface AppDescriptor {
contextMenuActions?: AppContextMenuAction[];
// -- Help (optional) --
// Kept in sync with ModuleHelp in help-content.ts; AppPage renders
// the tips section when present.
help?: {
description: string;
features?: string[];
tips?: string[];
};
}

View file

@ -85,7 +85,7 @@ du entscheidest was in deinen Kalender kommt.
**Voraussetzung:** Mindestens eine Region und Interessen muessen im Events-Modul
unter dem Tab "Entdecken" eingerichtet sein.`,
cadence: { kind: 'daily' },
cadence: { kind: 'daily', atHour: 8, atMinute: 0 },
startPaused: true,
},
],