# Normal Camera Atlas Maintenance Phases Implementation Plan

> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** Add phased maintenance tooling around the no-generation normal-camera atlas: a dedicated validator, review index, richer per-image annotations, folder alias metadata, needs-samples acquisition output, schema checks, and docs/smoke handoff.

**Architecture:** Keep `normal_camera_atlas_prep.py` as the artifact builder and add `tools/normal_camera_atlas_validate.py` as the strict validation CLI. `tools/prompt_smoke.py` should delegate normal-camera artifact invariants to the validator instead of carrying every detail inline. Generated artifacts remain under `ab_batches/normal_camera/`.

**Tech Stack:** Python standard library, JSON catalogs, generated Markdown/HTML review artifacts, existing `tools/prompt_smoke.py` smoke runner.

---

### Task 1: Dedicated Validator

**Files:**
- Create: `tools/normal_camera_atlas_validate.py`
- Modify: `tools/prompt_smoke.py`

- [x] Add a validator module that imports `normal_camera_atlas_prep`, reads `categories/normal_camera_variants.json`, verifies catalog schema/counts, folder coverage, no-generation invariants, artifact existence, review manifests/contact sheets, selected-reference consistency, folder alias metadata, and optional JSON schema-style structural checks.
- [x] Expose `validate_normal_camera_atlas(...) -> list[str]` and a CLI that exits `1` with one error per line when validation fails.
- [x] Add a narrow prompt-smoke check that calls the validator instead of duplicating all normal-camera artifact details.
- [x] Verify with `python tools/normal_camera_atlas_validate.py --artifacts-dir ab_batches/normal_camera`.

### Task 2: Review Index

**Files:**
- Modify: `normal_camera_atlas_prep.py`
- Generated: `ab_batches/normal_camera/review/index.html`
- Generated: `ab_batches/normal_camera/review/index.md`

- [x] Add `build_review_index(...)` helpers that list every default review folder with source folder, canonical alias, image count, selected subvariant count, status summary, manifest path, and contact-sheet path.
- [x] Write both HTML and Markdown indexes from `write_artifacts(...)`.
- [x] Include no-generation language and local artifact links only.

### Task 3: Per-Image Review Annotations

**Files:**
- Modify: `normal_camera_atlas_prep.py`

- [x] Add `review_items` to every review manifest.
- [x] For selected references, mark `review_decision: selected_reference`, preserve `review_bucket`, `variant_key`, and include selection notes.
- [x] For residual images, mark `review_decision: residual_unassigned`, `review_bucket: unassigned`, and include a conservative reason such as `outside_selected_subvariants_or_pending_manual_bucket`.
- [x] Reflect these decisions in contact-sheet figure attributes/captions.

### Task 4: Folder Alias Metadata

**Files:**
- Modify: `normal_camera_atlas_prep.py`
- Modify: `tools/normal_camera_atlas_validate.py`

- [x] Add explicit alias metadata for typo/spacing variants while preserving exact source folder names.
- [x] Include alias metadata in review manifests, unused-pool backlog rows, and review indexes.
- [x] Validate that every known typo/spacing source folder keeps an alias record.

### Task 5: Needs-Samples Acquisition List

**Files:**
- Modify: `normal_camera_atlas_prep.py`
- Generated: `ab_batches/normal_camera/normal_camera_needs_samples_acquisition.json`
- Generated: `ab_batches/normal_camera/normal_camera_needs_samples_acquisition.md`

- [x] Build a needs-samples acquisition list from `categories/normal_camera_variants.json`.
- [x] Sort by missing sample count, then action family, then variant key.
- [x] Keep it separate from the pre-A/B priority plan.

### Task 6: Docs And Verification

**Files:**
- Modify: `docs/normal-camera-atlas.md`
- Modify: `tools/prompt_smoke.py`

- [x] Document the validator, review index, alias metadata, per-image annotations, and acquisition list.
- [x] Run `python normal_camera_atlas_prep.py --write-artifacts --output-dir ab_batches/normal_camera`.
- [x] Run `python tools/normal_camera_atlas_validate.py --artifacts-dir ab_batches/normal_camera`.
- [x] Run `python tools/prompt_smoke.py --case normal_camera_atlas_catalog --case normal_camera_atlas_prep_artifacts --case normal_camera_unused_pool_review_artifacts --quiet`.
- [x] Run `python -m py_compile normal_camera_atlas_prep.py tools/normal_camera_atlas_validate.py tools/prompt_smoke.py`.
