feat(ia): wave 1 — Import tab dissolves, Maintenance regroups by system, one extension home
CI / frontend-build (push) Successful in 19s
CI / lint (push) Successful in 2s
CI / backend-lint-and-test (push) Successful in 33s
CI / integration (push) Successful in 3m32s

Settings IA per the approved A3 design (the old layout was the two-app merge
fossilized):
- Import tab retired: ImportTriggerPanel + ImportTaskList deleted (manual
  /import scans stay API-level; imports arrive via downloads/extension, heal
  via the Layer-2 auto-refetch sweep, and show in Activity). ImportFiltersForm
  moves to Maintenance → 'Ingestion & filters' and loads its own settings; the
  import store shrinks to settings-only (no remaining consumers of the
  scan/task-list machinery). Overview's pending banner now points at Activity.
- Maintenance regrouped: Ingestion & filters / GPU agent & embeddings
  (GpuAgent, Failed processing, CPU embedding backfill) / Tagging (sliders,
  Heads, Aliases) / Library health (MissingFiles, Thumbnails, DB, Archive
  re-extract demoted last) / Storage.
- One extension home: BrowserExtensionCard moves from Settings → Overview to
  Subscriptions → Settings, above the API key bar it authenticates.
- Single-color import filter WIRED: skip_single_color/threshold existed since
  FC-2 but nothing read them (the audit module's docstring said as much) —
  now enforced on both import paths via the audit's canonical predicate
  (tolerance 30, matching the Cleanup card default; animated images exempt
  like the transparency check). Default stays off; test added.
- Dead weight: PlaceholderView (zero refs) and the permanently-disabled
  'Export failed logs (CSV — v2)' menu stub deleted; stale docs fixed
  (celery queue docstring, threshold comment citing retired tasks, ml
  package docstring, HeadsCard 'replaces Camie' blurb).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CDgx8bQS5YrGRK76v8HUnM
This commit is contained in:
2026-07-02 17:37:21 -04:00
parent 19b962f1a7
commit 5b34c9221c
16 changed files with 143 additions and 598 deletions
+24
View File
@@ -116,6 +116,30 @@ def test_transparent_filter(importer, import_layout):
assert result.skip_reason == SkipReason.too_transparent
def test_single_color_filter(importer, import_layout):
"""The skip_single_color setting existed since FC-2 but was never wired
(the audit module's docstring said so); wired 2026-07-02 using the same
canonical predicate as the Cleanup audit. Solid fill skips when enabled,
imports when disabled (the default)."""
from PIL import Image as PILImage
import_root, _ = import_layout
solid = import_root / "solid.png"
solid.parent.mkdir(parents=True, exist_ok=True)
PILImage.new("RGB", (100, 100), (12, 34, 56)).save(solid)
importer.settings.skip_single_color = True
importer.settings.single_color_threshold = 0.95
result = importer.import_one(solid)
assert result.status == "skipped"
assert result.skip_reason == SkipReason.single_color
importer.settings.skip_single_color = False
solid2 = import_root / "solid2.png"
PILImage.new("RGB", (100, 100), (200, 10, 10)).save(solid2)
assert importer.import_one(solid2).status == "imported"
def test_unsupported_extension(importer, import_layout):
# FC-2d-iii: non-media is no longer skipped — it's captured as a
# PostAttachment so nothing a post contained is lost.