feat(workers): supply-layers refresh task + weekly beat (#950 Step 5) #1005

Merged
Light1YT merged 1 commit from feat/950d-supply-layers-worker into main 2026-06-02 20:47:06 +00:00
Owner

Site Finder v2 / EPIC 6 — #950 Step 5. Детерминированный, без LLM. Часть #944.

Celery-таск tasks.supply_layers_refresh считает L1/L2/L3 по каждому district Свердловской через supply_layers.compute_all_layers и UPSERT-ит в supply_layers (m.125) по uq_supply_layers_logical, обновляя все mutable-колонки (никогда key).

  • Coherent snapshot: один date.today() на весь батч → same-day re-run идемпотентен.
  • Resilience: per-row SAVEPOINT (begin_nested) + per-district guard → плохая строка/район не валит недельный батч.
  • District set data-driven: UNION objective_lots.district + domrf_kn_objects.district_name region_cd=66 (не хардкод 8 имён).
  • Beat: Mon 06:00 МСК (после scrape_kn 04:15, что обновляет free_flats — источник L2). Таск добавлен в celery_app include (beat резолвит по имени).

11 unit-тестов (ON CONFLICT contract + savepoint + coherent snapshot). code-reviewer opus OK (UPSERT/NULLS-NOT-DISTINCT точно совпадает с constraint, binds выровнены 1:1). Refs #950

**Site Finder v2 / EPIC 6 — #950 Step 5.** Детерминированный, без LLM. Часть #944. Celery-таск `tasks.supply_layers_refresh` считает L1/L2/L3 по каждому district Свердловской через `supply_layers.compute_all_layers` и UPSERT-ит в `supply_layers` (m.125) по `uq_supply_layers_logical`, обновляя все mutable-колонки (никогда key). - **Coherent snapshot:** один `date.today()` на весь батч → same-day re-run идемпотентен. - **Resilience:** per-row SAVEPOINT (begin_nested) + per-district guard → плохая строка/район не валит недельный батч. - **District set data-driven:** UNION `objective_lots.district` + `domrf_kn_objects.district_name region_cd=66` (не хардкод 8 имён). - **Beat:** Mon 06:00 МСК (после scrape_kn 04:15, что обновляет free_flats — источник L2). Таск добавлен в celery_app include (beat резолвит по имени). **11 unit-тестов** (ON CONFLICT contract + savepoint + coherent snapshot). code-reviewer opus OK (UPSERT/NULLS-NOT-DISTINCT точно совпадает с constraint, binds выровнены 1:1). Refs #950
Light1YT added 1 commit 2026-06-02 20:47:04 +00:00
Celery task tasks.supply_layers_refresh computes L1/L2/L3 supply layers per
Sverdlovsk district via supply_layers.compute_all_layers and UPSERTs into
supply_layers (m.125) on uq_supply_layers_logical, updating all mutable cols
(units/area/expected_online_date/confidence/method/computed_at), never the key.
Coherent single date.today() snapshot_date across the batch; per-row SAVEPOINT
(begin_nested) so a bad row/district can't abort the weekly batch; per-district
guard. District set is data-driven (UNION of objective_lots.district and
domrf_kn_objects.district_name region_cd=66), not hardcoded.

Registered weekly Mon 06:00 МСК (after scrape_kn 04:15 that refreshes free_flats,
the L2 source). Adds the task module to celery_app include (beat resolves by
name). 11 unit tests asserting the ON CONFLICT contract + savepoint + coherent
snapshot.
Light1YT merged commit ae85f19993 into main 2026-06-02 20:47:06 +00:00
Light1YT deleted branch feat/950d-supply-layers-worker 2026-06-02 20:47:06 +00:00
Sign in to join this conversation.
No reviewers
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#1005
No description provided.