epic(site-finder): FixList May17 — 20 items consolidation #271

Closed
opened 2026-05-17 08:49:15 +00:00 by lekss361 · 0 comments
Owner

Контекст

Источник: vault audits/SiteFinder_FixList_May17.md — 20 actionable items по результатам live walkthrough Site Finder + 3 параллельных audit'ов.

Полный контекст и evidence: vault audits/SiteFinder_TechAudit_May17.md.
Test cad: 66:41:0702048:27.

Дорожная карта (3 волны, ~6-8 дней)

🔴 Wave 1 — P0 blockers (~2 дня, parallel)

  • #1 time_window honest velocity (best_layouts.py:48)
    fix/sf-01-velocity-time-window · backend
  • #2 site_status, ready_dt в /analyze + sort строящиеся first (parcels.py:1337-1354)
    fix/sf-02-competitors-status-analyze · backend
  • #3 CompetitorTable Status column + filter tabs (frontend, depends on #2 + codegen)
    fix/sf-03-competitor-table-status · frontend
  • #4 Малевич mapping + audit всех PRINZIP non-mapped + REFRESH mv_layout_velocity
    fix/sf-04-malevich-mapping · database
  • #5 sold_pct clamp 100% + rename "sold-to-supply ratio" (best_layouts.py:349)
    fix/sf-05-sold-pct-normalize · backend
  • #6 MarketTab reorder (Competitors → BestLayouts → Velocity → ...) (MarketTab.tsx)
    fix/sf-06-market-tab-reorder · frontend

🟠 Wave 2 — P1 (~1 неделя)

  • #7 median_12m alias + UI hint (parcels.py:1195, OverviewTab.tsx:78)
  • #8 euro room_bucket audit + scraper fix (best_layouts.py:120-126)
  • #9 Recommendation MAX_BUCKET_SHARE 35% (best_layouts.py:458-550)
  • #10 velocity.py LEFT JOIN (velocity.py:169-207)
  • #11 Срок продажи + drill-in в Top планировок (BestLayoutsBlock.tsx:140-143)
  • #12 Trend confidence warning при n<100 (MarketTrendBlock.tsx)
  • #13 Above-the-fold headline + 3 KPI (MarketTab.tsx:30)

🟢 Wave 3 — P2 (по приоритету)

  • #14 Merge /analyze + /competitors endpoints (refactor)
  • #15 obj_class scraper audit + backfill (52% NULL)
  • #16 Малевич price_per_m2 scraper fix (498 кв-р без цен)
  • #17 velocity rosreestr_deals fallback при coverage <50%
  • #18 is_sales_started flag (отделить pre-sale)
  • #19 CSS tokens вместо hex в BestLayoutsBlock (BestLayoutsBlock.tsx:17-24)
  • #20 District threshold 30→15 для success_recommendation

Dependency граф

Wave 1:
  #1, #4, #5, #6 — независимые, параллельно
  #2 → #3 (frontend ждёт backend merge + codegen)

Wave 2: после Wave 1 merge — #7..#13 все независимые

Wave 3: #14 после Wave 2 (big refactor); остальные opportunistic

Summary by area

Area P0 P1 P2 Total
Backend 1, 2, 4, 5 7, 8, 9, 10 14, 17, 18, 20 12
Frontend 3, 6 11, 12, 13 19 6
Data / DB 4 1
Scrapers 15, 16 2

Convention

  • Каждый item → отдельная feature-branch fix/sf-NN-<short> (sequential PRs per .claude/rules/git-pr.md)
  • В commit/PR body: Closes #NN (sub-issue) + reference на этот epic Related: #<this>
  • После merge — checklist выше проставляется
  • Vault: audits/SiteFinder_FixList_May17.md (этот документ source)
  • Vault: audits/SiteFinder_TechAudit_May17.md (full evidence)
  • Test cad: 66:41:0702048:27
  • Owner: Ghost · Создано: 2026-05-17
## Контекст Источник: vault `audits/SiteFinder_FixList_May17.md` — 20 actionable items по результатам live walkthrough Site Finder + 3 параллельных audit'ов. Полный контекст и evidence: vault `audits/SiteFinder_TechAudit_May17.md`. Test cad: `66:41:0702048:27`. ## Дорожная карта (3 волны, ~6-8 дней) ### 🔴 Wave 1 — P0 blockers (~2 дня, parallel) - [ ] **#1** `time_window` honest velocity (`best_layouts.py:48`) → `fix/sf-01-velocity-time-window` · backend - [ ] **#2** `site_status, ready_dt` в /analyze + sort строящиеся first (`parcels.py:1337-1354`) → `fix/sf-02-competitors-status-analyze` · backend - [ ] **#3** CompetitorTable Status column + filter tabs (frontend, depends on #2 + codegen) → `fix/sf-03-competitor-table-status` · frontend - [ ] **#4** Малевич mapping + audit всех PRINZIP non-mapped + REFRESH `mv_layout_velocity` → `fix/sf-04-malevich-mapping` · database - [ ] **#5** `sold_pct` clamp 100% + rename "sold-to-supply ratio" (`best_layouts.py:349`) → `fix/sf-05-sold-pct-normalize` · backend - [ ] **#6** MarketTab reorder (Competitors → BestLayouts → Velocity → ...) (`MarketTab.tsx`) → `fix/sf-06-market-tab-reorder` · frontend ### 🟠 Wave 2 — P1 (~1 неделя) - [ ] **#7** `median_12m` alias + UI hint (`parcels.py:1195`, `OverviewTab.tsx:78`) - [ ] **#8** euro `room_bucket` audit + scraper fix (`best_layouts.py:120-126`) - [ ] **#9** Recommendation MAX_BUCKET_SHARE 35% (`best_layouts.py:458-550`) - [ ] **#10** `velocity.py` LEFT JOIN (`velocity.py:169-207`) - [ ] **#11** Срок продажи + drill-in в Top планировок (`BestLayoutsBlock.tsx:140-143`) - [ ] **#12** Trend confidence warning при n<100 (`MarketTrendBlock.tsx`) - [ ] **#13** Above-the-fold headline + 3 KPI (`MarketTab.tsx:30`) ### 🟢 Wave 3 — P2 (по приоритету) - [ ] **#14** Merge /analyze + /competitors endpoints (refactor) - [ ] **#15** obj_class scraper audit + backfill (52% NULL) - [ ] **#16** Малевич price_per_m2 scraper fix (498 кв-р без цен) - [ ] **#17** velocity rosreestr_deals fallback при coverage <50% - [ ] **#18** is_sales_started flag (отделить pre-sale) - [ ] **#19** CSS tokens вместо hex в BestLayoutsBlock (`BestLayoutsBlock.tsx:17-24`) - [ ] **#20** District threshold 30→15 для success_recommendation ## Dependency граф ``` Wave 1: #1, #4, #5, #6 — независимые, параллельно #2 → #3 (frontend ждёт backend merge + codegen) Wave 2: после Wave 1 merge — #7..#13 все независимые Wave 3: #14 после Wave 2 (big refactor); остальные opportunistic ``` ## Summary by area | Area | P0 | P1 | P2 | Total | |---|---|---|---|---| | Backend | 1, 2, 4, 5 | 7, 8, 9, 10 | 14, 17, 18, 20 | 12 | | Frontend | 3, 6 | 11, 12, 13 | 19 | 6 | | Data / DB | 4 | — | — | 1 | | Scrapers | — | — | 15, 16 | 2 | ## Convention - Каждый item → отдельная feature-branch `fix/sf-NN-<short>` (sequential PRs per `.claude/rules/git-pr.md`) - В commit/PR body: `Closes #NN` (sub-issue) + reference на этот epic `Related: #<this>` - После merge — checklist выше проставляется ✅ ## Links - Vault: `audits/SiteFinder_FixList_May17.md` (этот документ source) - Vault: `audits/SiteFinder_TechAudit_May17.md` (full evidence) - Test cad: `66:41:0702048:27` - Owner: Ghost · Создано: 2026-05-17
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#271
No description provided.