Consolidated triage list of every follow-up deferred by the batch run's specs and reviews. Split into individual issues as needed.
Frontend / component debt
FormError/EmptyState bypass sweep (~25+ sites enumerated in Component-reuse violations: SearchPicker/Modal forks, Badge reimplemented 3x, FormError/EmptyState bypassed, missing shared hooks #1816 's body) + DocumentSkeleton judgment call + plain-text loading divs — deferred from Component-reuse violations: SearchPicker/Modal forks, Badge reimplemented 3x, FormError/EmptyState bypassed, missing shared hooks #1816 with rationale
Badge className literal-string bug in HouseholdItemsPage.tsx/InvoicesPage.tsx (pre-existing, flagged during Adopt new node-cron 4.5 capabilities (config validation + schedule introspection) #1804 spec)
CostBreakdownTable.tsx resolveBudgetLineCost missing VAT gross-up in the outstanding-filter view (needs includesVat on BreakdownBudgetLine or a server-effective amount — flagged during Bug: /api/budget/breakdown ignores includes_vat semantics — diverges from budget overview by 19% for net-stored lines #1805 ; possibly fold with the next item)
budgetSourceService.ts remaining-funds sums ignore includes_vat (same defect class as Bug: /api/budget/breakdown ignores includes_vat semantics — diverges from budget overview by 19% for net-stored lines #1805 , server-side)
Thread configured VAT_RATE through server aggregation services + remaining client call sites (currently they use the 0.19 default — Bug: BudgetLineForm hardcodes 19% VAT rate, EUR symbol, and unlocalized decimal formatting #1807 architect review, MEDIUM)
InvoiceLinkModal.tsx:158 client-side float-noise pre-submit check (same class as Bug: float-sum guards falsely reject exact invoice itemization/deposits (no epsilon in comparison) #1806 )
DateRangePicker.tsx passes raw locale preference ('system') to Intl helpers instead of resolvedLocale (i18n: dates pinned to en-US and raw toLocale*/toFixed bypassing formatters.ts in 10+ components #1813 discovery)
DataTableHeader.tsx click-outside → useClickOutside (needs forwardRef on DataTableFilterPopover — Component-reuse violations: SearchPicker/Modal forks, Badge reimplemented 3x, FormError/EmptyState bypassed, missing shared hooks #1816 deferral)
DiaryEntryEditPage fires one unwanted autosave on draft mount (skipAutoSaveOnMountRef consumed before entry loads — pre-existing, found by QA during Component-reuse violations: SearchPicker/Modal forks, Badge reimplemented 3x, FormError/EmptyState bypassed, missing shared hooks #1816 )
BudgetHealthIndicator badge size drift after Badge consolidation (14px/semibold → 12px/medium — refactor(client): consolidate Badge/Modal reuse, add shared hooks, trap modal focus #1848 UX review, MEDIUM refinement)
Orphaned i18n keys: keyboardShortcuts.closeAriaLabel (post-refactor(client): consolidate Badge/Modal reuse, add shared hooks, trap modal focus #1848 ), schedule.json detail.edit, diary.json create.title/edit.title (fix(i18n): restore en/de key parity, translate usePhotos errors, add parity guard test #1846 UX review)
Backend / engine
computeSubsidyEffects fixed-subsidy payback ignores category matching + per-line division (latent inconsistency vs totalReductions — Bug: subsidySummary.totalReductions ignores maximumAmount caps (inconsistent with capped payback fields in same response) #1808 spec)
Reconcile wiki API-Contract/Architecture 503 BACKUP_NOT_CONFIGURED docs with the always-on /backups default; consider removing the dead backupEnabled checks or reintroducing an explicit disable (Adopt new node-cron 4.5 capabilities (config validation + schedule introspection) #1804 review)
Single-write + separate autoReschedule call = stale-schedule crash window (~13 sites across 5 files — low priority, Bug: multi-step DB writes lack transactions (autoReschedule cascade, reorderSubtasks, createMilestone, two-step deletes) #1809 sweep)
8 more hooks with the hardcoded-English-error anti-pattern (usePreferences, useMilestones, useTimeline, useOrientations, useTrades, useAreas, usePaperless, useDocumentLinks) — i18n: en/de key parity breaks (photoAnnotator, budget.json) and hardcoded English error strings in usePhotos #1814 spec discovery
Route schemas lack multipleOf: 0.01 on amount fields (defense-in-depth vs float noise — security rec 2.7: Performance Baseline & Fast Load Time #33 )
Infra / process
Pay down the ~58-finding eslint debt (8 errors/50 warnings) then gate eslint in CI (stylelint is gated since fix(styles): remediate all stylelint violations and gate token usage in CI #1847 ; eslint deliberately excluded)
i18n lint guard: ESLint rule for hardcoded aria-label/placeholder/title literals + toLocale*/Intl ban outside formatters.ts (deferred from i18n: milestones feature entirely untranslated; delete-confirm modals and ~69 aria-label/placeholder/title strings hardcoded #1812 /i18n: dates pinned to en-US and raw toLocale*/toFixed bypassing formatters.ts in 10+ components #1813 )
env: intermediary for ${{ github.base_ref }} shell interpolation in ci.yml (2 occurrences incl. pre-existing detect-changes — ci(trailers): enforce agent trailer preservation at commit, merge, and CI layers #1852 security note)
Broaden Security Review Trigger Rules (services/** without keyword match; frontend XSS-relevant changes — docs(agents): reconcile agent configs with actual validation policy, trailers, and review gate #1850 security note)
Trim backend-developer/frontend-developer MEMORY.md files (354/545 lines vs 200-line limit — Agent configs reference a nonexistent pre-commit hook, omit the Local Validation Policy, and contradict each other #1818 )
Document the --z-local escape-hatch pattern + new token families in the wiki Style Guide (fix(styles): remediate all stylelint violations and gate token usage in CI #1847 UX follow-up)
Hook-stability convention (hooks returning objects/arrays must memoize) in CLAUDE.md/wiki — product-architect committed during refactor(client): consolidate Badge/Modal reuse, add shared hooks, trap modal focus #1848 review
Legacy wiki audit: vendor-contacts + subsidy-programs endpoint docs missing since Feb/Mar 2026 (chore: repo hygiene — document merge-lines endpoint, remove dead BudgetPage, close test-parity gaps #1853 audit)
Recurring E2E flake: household-item-detail.spec.ts:141 "Add Budget Line" visibility failing across all 3 viewports in multiple recent runs (NOT fixed by fix(e2e): stabilize shard-3 diary flakes #1855 ; needs its own triage) + unit-pricing.spec.ts:211 click timeout
Base checkout manual sweep (repo owner): ~42 stray uncommitted .claude/agent-memory/ items + dirty wiki pointer sitting in the base checkout (outside worktree reach — Repo hygiene: stale/dirty wiki API-Contract, dead BudgetPage component, AutoItemizePdfPreview missing test #1821 )
Blocked upstream
🤖 Generated with Claude Code
Consolidated triage list of every follow-up deferred by the batch run's specs and reviews. Split into individual issues as needed.
Frontend / component debt
DocumentSkeletonjudgment call + plain-text loading divs — deferred from Component-reuse violations: SearchPicker/Modal forks, Badge reimplemented 3x, FormError/EmptyState bypassed, missing shared hooks #1816 with rationaleHouseholdItemsPage.tsx/InvoicesPage.tsx(pre-existing, flagged during Adopt new node-cron 4.5 capabilities (config validation + schedule introspection) #1804 spec)CostBreakdownTable.tsxresolveBudgetLineCostmissing VAT gross-up in the outstanding-filter view (needsincludesVatonBreakdownBudgetLineor a server-effective amount — flagged during Bug: /api/budget/breakdown ignores includes_vat semantics — diverges from budget overview by 19% for net-stored lines #1805; possibly fold with the next item)budgetSourceService.tsremaining-funds sums ignoreincludes_vat(same defect class as Bug: /api/budget/breakdown ignores includes_vat semantics — diverges from budget overview by 19% for net-stored lines #1805, server-side)VAT_RATEthrough server aggregation services + remaining client call sites (currently they use the 0.19 default — Bug: BudgetLineForm hardcodes 19% VAT rate, EUR symbol, and unlocalized decimal formatting #1807 architect review, MEDIUM)InvoiceLinkModal.tsx:158client-side float-noise pre-submit check (same class as Bug: float-sum guards falsely reject exact invoice itemization/deposits (no epsilon in comparison) #1806)DateRangePicker.tsxpasses rawlocalepreference ('system') to Intl helpers instead ofresolvedLocale(i18n: dates pinned to en-US and raw toLocale*/toFixed bypassing formatters.ts in 10+ components #1813 discovery)DataTableHeader.tsxclick-outside →useClickOutside(needsforwardRefonDataTableFilterPopover— Component-reuse violations: SearchPicker/Modal forks, Badge reimplemented 3x, FormError/EmptyState bypassed, missing shared hooks #1816 deferral)DiaryEntryEditPagefires one unwanted autosave on draft mount (skipAutoSaveOnMountRefconsumed before entry loads — pre-existing, found by QA during Component-reuse violations: SearchPicker/Modal forks, Badge reimplemented 3x, FormError/EmptyState bypassed, missing shared hooks #1816)BudgetHealthIndicatorbadge size drift after Badge consolidation (14px/semibold → 12px/medium — refactor(client): consolidate Badge/Modal reuse, add shared hooks, trap modal focus #1848 UX review, MEDIUM refinement)keyboardShortcuts.closeAriaLabel(post-refactor(client): consolidate Badge/Modal reuse, add shared hooks, trap modal focus #1848),schedule.json detail.edit,diary.json create.title/edit.title(fix(i18n): restore en/de key parity, translate usePhotos errors, add parity guard test #1846 UX review)Backend / engine
computeSubsidyEffectsfixed-subsidy payback ignores category matching + per-line division (latent inconsistency vs totalReductions — Bug: subsidySummary.totalReductions ignores maximumAmount caps (inconsistent with capped payback fields in same response) #1808 spec)/backupsdefault; consider removing the deadbackupEnabledchecks or reintroducing an explicit disable (Adopt new node-cron 4.5 capabilities (config validation + schedule introspection) #1804 review)autoReschedulecall = stale-schedule crash window (~13 sites across 5 files — low priority, Bug: multi-step DB writes lack transactions (autoReschedule cascade, reorderSubtasks, createMilestone, two-step deletes) #1809 sweep)usePreferences,useMilestones,useTimeline,useOrientations,useTrades,useAreas,usePaperless,useDocumentLinks) — i18n: en/de key parity breaks (photoAnnotator, budget.json) and hardcoded English error strings in usePhotos #1814 spec discoverymultipleOf: 0.01on amount fields (defense-in-depth vs float noise — security rec 2.7: Performance Baseline & Fast Load Time #33)Infra / process
toLocale*/Intlban outside formatters.ts (deferred from i18n: milestones feature entirely untranslated; delete-confirm modals and ~69 aria-label/placeholder/title strings hardcoded #1812/i18n: dates pinned to en-US and raw toLocale*/toFixed bypassing formatters.ts in 10+ components #1813)env:intermediary for${{ github.base_ref }}shell interpolation in ci.yml (2 occurrences incl. pre-existingdetect-changes— ci(trailers): enforce agent trailer preservation at commit, merge, and CI layers #1852 security note)backend-developer/frontend-developerMEMORY.md files (354/545 lines vs 200-line limit — Agent configs reference a nonexistent pre-commit hook, omit the Local Validation Policy, and contradict each other #1818)--z-localescape-hatch pattern + new token families in the wiki Style Guide (fix(styles): remediate all stylelint violations and gate token usage in CI #1847 UX follow-up)vendor-contacts+subsidy-programsendpoint docs missing since Feb/Mar 2026 (chore: repo hygiene — document merge-lines endpoint, remove dead BudgetPage, close test-parity gaps #1853 audit)household-item-detail.spec.ts:141"Add Budget Line" visibility failing across all 3 viewports in multiple recent runs (NOT fixed by fix(e2e): stabilize shard-3 diary flakes #1855; needs its own triage) +unit-pricing.spec.ts:211click timeout.claude/agent-memory/items + dirty wiki pointer sitting in the base checkout (outside worktree reach — Repo hygiene: stale/dirty wiki API-Contract, dead BudgetPage component, AutoItemizePdfPreview missing test #1821)Blocked upstream
🤖 Generated with Claude Code