# Implementation Plan ## Milestone 0 — Source reconnaissance + repository foundation - verify Python package/CLI setup - detect both expected source files: - `data/raw/smk_all_da.json` - `data/raw/smk_all_en.json` - inspect actual top-level JSON structures without guessing - compute bytes + SHA-256 - count/summarize records with bounded memory - compare DA/EN identity sets - write `source-manifest.json` - document any structural surprises Done when we understand the actual dumps well enough to implement the parser from evidence rather than assumptions. ## Milestone 1 — Streaming source loading + canonical schema - implement bounded-memory loader for actual observed structure - join DA/EN by `object_number`, never by row position - preserve localized text where useful - map stable non-language fields into canonical columns - preserve source provenance/disagreements - parse physical dimensions/units defensively Done when a representative fixture/sample becomes deterministic canonical rows. Status: source loading and pre-canonical audits complete. Stable source-row identity, lossless logical Parquet, duplicate taxonomy, dimension vocabulary, palette/visual quality and DA/EN precedence recommendations are documented. Canonical entities are implemented in Milestone 2 without collapsing duplicate `object_number` groups. ## Milestone 2 — Canonical entities + first analyzable corpus - pair language rows only by SMK `id` - preserve `object_number` as non-unique grouping metadata - canonicalize fields with explicit provenance and conflicts - resolve image bundles atomically - preserve and normalize dimension observations without choosing conflicts - freeze `smk-public-visual-v1` with machine-readable exclusion reasons Status: complete. See `CANONICALIZATION.md` and `CORPUS_V1.md`. Visual/colour feature extraction has not started. ## Milestone 3 — Deterministic per-artwork visual features Implemented for frozen `smk-public-visual-v1`: - perceptual centroid - explicitly uniform bulk-palette weights and duplicate-colour handling - sRGB -> OKLab -> OKLCH with achromatic hue semantics - palette entropy/effective size with documented uniform-weight limitation - palette spread - weighted lightness/chroma variation - hue concentration - SMK visual fields + provenance - physical/image geometry + logs Status: complete. Raw features remain corpus-independent; no corpus normalization or similarity is implemented. See `FEATURE_EXTRACTION_V1.md` and `FEATURE_EXAMPLES.md`. ## Milestone 4 — Corpus statistics + normalization Status: complete. Profile every candidate scalar over frozen `smk-public-visual-v1`, preserve raw OKLab semantics and missingness, generate robust-01/midrank-percentile/robust-z variants, add log aspect and circular-hue diagnostics, and publish separate unweighted candidate families. See `NORMALIZATION_V1.md` and `FEATURE_VECTOR_V1.md`. ## Milestone 5 — Pilot build Status: complete as deterministic exact similarity. Three separately versioned profiles use sample-calibrated component scales, explicit weights, shared-component missingness and explainable contributions. QA examples, stability diagnostics and performance measurements are published in `SIMILARITY_V1.md` and `SIMILARITY_EXAMPLES.md`. ## Milestone 6 — Similarity preparation Status: enrichment-backed weighted color layer implemented separately from bulk v1. It provides a resumable append-only source cache, weighted palettes/features v2, bulk/enrichment diagnostics and an exact palette-transport similarity profile. See `ENRICHMENT_V1.md`, `WEIGHTED_PALETTES_V1.md` and `WEIGHTED_SIMILARITY_V1.md`. ## Milestone 7 — First usable application + sonification Status: complete. A compact read-only web catalog feeds one FastAPI + React service with search, artwork detail, existing exact similarity profiles, explicit cached weighted similarity, and three versioned deterministic browser-audio mappings. See `SONIFICATION_V1.md` and `WEB_UI_V1.md`. ## Milestone 8 — Similarity Implement separate profiles rather than one magic similarity score: - `color` - `visual` - `composition` Use fast feature-vector candidate retrieval followed optionally by weighted-palette optimal-transport reranking. Do not precompute all pairs. ## Milestone 9 — Art Tone v1 Implement versioned, explainable sonification mapping separate from objective features. Initial mapping: - centroid hue -> chromatic pitch class - physical area percentile -> register - chroma -> velocity/richness - lightness -> timbral brightness - palette entropy -> complexity - contrast -> attack - hue concentration -> tonal purity Emit exact inputs alongside every mapped result. ## Milestone 10 — Exploration Only after Dataset v1 is trustworthy, start experimental interfaces/notebooks/apps: - nearest-neighbour browser - colour-space explorer - timelines - artist palette fingerprints - mosaics - sonification player