# Oversync — Development Plan

## Phase 0: Full Quality Sweep (P0)

### Task 0.1: cargo clippy — fix ALL warnings
- **Status:** done
- **Priority:** P0
- **Scope:**
  - Запусти `cargo clippy --workspace --all-targets --all-features -- -D warnings`
  - Исправь ВСЕ ворнинги. Никаких "pre-existing", "not my changes". Всё чисто.
  - Включая тесты, примеры, бинарник
  - Если что-то requires `#[allow()]` — добавь комментарий с justification

### Task 0.2: cargo fmt — verify and fix
- **Status:** done
- **Priority:** P0
- **Scope:**
  - `cargo fmt --all --check` — если есть diff, исправить
  - Проверить что нет trailing whitespace, mixed indentation

### Task 0.3: /slop-check на ВЕСЬ codebase
- **Status:** done
- **Priority:** P0
- **Scope:**
  - Запусти /slop-check на каждый крейт (oversync-core, oversync-connectors, oversync-delta, oversync-sinks, oversync-transforms, oversync-api, oversync-queries)
  - Также на src/ (engine, cycle, scheduler, config, lifecycle, credential, dry_run)
  - Исправь ВСЕ замечания: critical, high, medium
  - Repeat /slop-check до полной чистоты

### Task 0.4: Dead code audit
- **Status:** done
- **Priority:** P0
- **Scope:**
  - `cargo clippy -- -W dead_code -W unused_imports -W unused_variables`
  - Ревью каждого `#[allow(dead_code)]` — обосновать или удалить
  - Убрать все неиспользуемые imports, variables, functions
  - Проверить все примеры в examples/ — что они компилируются: `cargo build --examples`

### Task 0.5: cargo deny check
- **Status:** done
- **Priority:** P0
- **Scope:**
  - `cargo deny check` — пройти все advisories, licenses, sources
  - Если есть новые advisories с момента последней проверки — resolve
  - Обновить deny.toml если нужно

## Phase 1: Tests & Coverage

### Task 1.1: Увеличить покрытие тестами
- **Status:** done
- **Priority:** P1
- **Scope:**
  - `cargo make coverage` — посмотреть текущий coverage %
  - Найти модули с < 80% coverage
  - Дописать тесты для edge cases: null data, empty rows, unicode keys
  - Дописать error path тесты где не хватает

### Task 1.2: Property-based tests для delta engine
- **Status:** done (98e8760)
- **Priority:** P1
- **Scope:**
  - Добавить proptest dependency если нет
  - Property: для любого набора RawRow, compute_diff(prev, current) всегда даёт valid DeltaResult
  - Property: created ∩ deleted = ∅, created ∩ updated = ∅
  - Property: |created| + |unchanged| + |updated| = |current|
  - Property: fail-safe trigger корректно срабатывает при threshold

### Task 1.3: Property-based tests для transforms
- **Status:** done (17ab07c)
- **Priority:** P1
- **Scope:**
  - Property: chain of transforms doesn't panic on any valid JSON
  - Property: rename(a→b) then rename(b→a) = identity
  - Property: filter + set = set + filter (порядок важен, проверить что это задокументировано)

## Phase 2: UI Hardening

### Task 2.1: UI lint & type check
- **Status:** done
- **Priority:** P2
- **Scope:**
  - `cd ui && npm ci && npx tsc --noEmit` — fix all type errors
  - `npm run lint` — fix all ESLint warnings
  - Убедиться `npm run build` проходит без warnings

### Task 2.2: UI tests
- **Status:** done
- **Priority:** P2
- **Scope:**
  - Проверить что vitest тесты проходят: `npm test`
  - Если тестов мало — добавить unit tests для key components
  - Добавить snapshot tests для основных pages

### Task 2.3: UI в CI workflow
- **Status:** done
- **Priority:** P2
- **Dependencies:** 2.1
- **Scope:**
  - В `.github/workflows/ci.yml` добавить job для UI
  - Steps: npm ci → tsc --noEmit → npm run lint → npm run build → npm test

## Phase 3: Release Pipeline

### Task 3.1: Подготовка к релизу
- **Status:** done
- **Priority:** P0
- **Dependencies:** 0.1-0.5
- **Scope:**
  - cargo make ci — полный CI проходит локально
  - Обновить CHANGELOG.md если нужно
  - Проверить version в Cargo.toml (должна быть следующая после 0.2.0)
  - Проверить README — всё актуально, примеры работают

### Task 3.2: Push и проверка GitHub CI
- **Status:** done (76d6481)
- **Priority:** P0
- **Dependencies:** 3.1
- **Scope:**
  - `git push origin main`
  - Подождать CI run (ci.yml): fmt + clippy + test + coverage
  - Если CI красный — починить, push снова
  - Если CI зелёный — перейти к следующей задаче

### Task 3.3: Merge release-plz PR
- **Status:** done (PR #19 merged)
- **Priority:** P0
- **Dependencies:** 3.2
- **Scope:**
  - Проверить что release-plz создал PR с version bump
  - Проверить CHANGELOG обновлён корректно
  - `gh pr merge <PR_NUMBER> --merge`
  - Дождаться merge CI

### Task 3.4: Verify release и Docker image
- **Status:** done
- **Priority:** P0
- **Dependencies:** 3.3
- **Scope:**
  - Проверить что release.yml workflow запустился (gh run list)
  - Проверить что crates.io publish прошёл (если настроен)
  - Дождаться docker.yml workflow
  - Проверить что image появился: `docker pull 22fx/oversync:latest` (или gh packages)
  - Проверить `docker run --rm 22fx/oversync:latest --help` работает

## Phase 4: oversync-links (Entity Linking)

### Task 4.1: Define traits and core types
- **Status:** done (29972ff)
- **Priority:** P1
- **Scope:**
  - В crates/oversync-links/src/ определить:
    - `LinkRule` — правило матчинга (field names, strategy, threshold)
    - `LinkMatch` — результат матча (source_key, target_key, confidence)
    - `LinkEngine` trait — `fn find_links(rows: &[RawRow], rules: &[LinkRule]) -> Vec<LinkMatch>`
  - Unit tests для type сериализации
  - Compile, test

### Task 4.2: Basic match implementations
- **Status:** done (29972ff, included in 4.1)
- **Priority:** P1
- **Dependencies:** 4.1
- **Scope:**
  - ExactFieldMatch: точное совпадение поля
  - NormalizedMatch: lowercase + trim + normalize whitespace
  - Unit tests с edge cases (null, empty, unicode, case mismatch)

### Task 4.3: Link storage schema
- **Status:** done (189bba1)
- **Priority:** P1
- **Dependencies:** 4.2
- **Scope:**
  - Добавить .surql schema в oversync-queries для link tables
  - CRUD queries для links
  - Integration test: create link → read link → delete link
  - Migration v004_links.surql

### Task 4.4: Integration с CycleRunner
- **Status:** done
- **Priority:** P1
- **Dependencies:** 4.3
- **Scope:**
  - Hook link step в cycle.rs после delta
  - Config: `[pipe.links]` секция в TOML
  - E2E test: source → delta → link → verify links in DB

## Phase 5: Performance

### Task 5.1: Criterion benchmarks
- **Status:** done
- **Priority:** P3
- **Scope:**
  - `benches/delta.rs`: benchmark compute_diff на 1K, 10K, 100K rows
  - `benches/transforms.rs`: chain of 5 transforms на 10K rows
  - `cargo make bench` в Makefile.toml

### Task 5.2: Examples verification
- **Status:** done
- **Priority:** P2
- **Scope:**
  - `cargo build --examples` — все примеры компилируются
  - Проверить что примеры в README актуальны
  - Удалить или обновить obsolete примеры

## Phase 6: Documentation

### Task 6.1: Contributing guide
- **Status:** todo
- **Priority:** P3
- **Scope:**
  - CONTRIBUTING.md: prerequisites, dev setup, PR process, test requirements
  - `.github/ISSUE_TEMPLATE/` — bug_report.md, feature_request.md, connector_request.md
  - `.github/PULL_REQUEST_TEMPLATE.md`

### Task 6.2: Doc comments polish
- **Status:** todo
- **Priority:** P3
- **Scope:**
  - `cargo doc --workspace --no-deps` — проверить что собирается без warnings
  - Добавить doc comments к публичным types/traits без документации
  - Добавить примеры в doc comments для ключевых API (EmbeddedSync, PluginRegistry)
