Стандарт описывает механизм воспроизводимой обработки данных:
как открыть сессию, записывать шаги, откатываться и повторять обработку.
DataSession — компонент платформы для обработки данных.
Каждый раз когда начинается обработка данных (загрузка, трансформация, экспорт) — открывается сессия. Сессия:
- создаёт рабочую папку
- ведёт журнал шагов (journal.yaml)
- сохраняет состояние после каждого шага
- позволяет откатиться на любой шаг
- позволяет повторить обработку по журналу (replay)
sessions/
{project}-{YYYY-MM-DD}-{NNN}/
session.yaml ← метаданные: проект, режим, статус, шаги
journal.yaml ← последовательность: action / params / result
source/ ← исходные данные как пришли (CSV, XML, JSON)
export/ ← результат (feed.xml, CATALOG.csv, ...)
data.db ← рабочий SQLite (всегда текущее состояние)
data.sql ← только в режиме git (SQL-дамп, в git ✅)
data_01.db ← только в режиме files (снепшот шага 1)
data_02.db ← только в режиме files (снепшот шага 2)
...
Папка сессии находится внутри проекта: projects/org/{project}/sessions/
При старте сессии выбирается режим:
gitОдин файл data.sql — перезаписывается после каждого шага. История хранится в git-коммитах.
data.db ← рабочий SQLite (в .gitignore)
data.sql ← SQL-дамп (в git ✅)
После каждого шага:
sqlite3 data.db .dump > data.sql
git add data.sql journal.yaml session.yaml
git commit -m "step_NN: {action} — {result}"
Откат на шаг 2:
git checkout step_02 -- data.sql
sqlite3 data.db < data.sql
Когда использовать: данные до ~100k строк, важен читаемый diff в git.
filesОтдельный .db файл на каждый шаг. Можно открыть любой шаг в GUI (DBeaver, TablePlus).
data.db ← рабочий SQLite (текущее состояние)
data_01.db ← снепшот после шага 1
data_02.db ← снепшот после шага 2
data_03.db ← снепшот после шага 3
После каждого шага:
cp data.db data_{NN}.db
Откат на шаг 2:
cp data_02.db data.db
Когда использовать: нужно визуально смотреть данные на каждом шаге в GUI.
steps:
- id: 01
action: load_source
params:
file: source/CATALOG.csv
encoding: utf-8
result:
rows: 18304
tables: [parts, models]
status: done
timestamp: "2026-04-05T04:00:01"
- id: 02
action: filter_duplicates
params:
key: oem
result:
removed: 142
rows: 18162
status: done
timestamp: "2026-04-05T04:00:05"
- id: 03
action: translate
params:
dictionary: parts-dictionary
result:
translated: 9212
unknown: 0
status: done
timestamp: "2026-04-05T04:00:18"
id: lideravto-2026-04-05-001
project: lideravto-new
mode: git # git | files
status: done # open | running | done | failed
started: "2026-04-05T04:00:00"
finished: "2026-04-05T04:01:42"
steps_total: 4
steps_done: 4
export:
- export/CATALOG_OEM.csv
- export/feed.xml
Берём journal.yaml из прошлой сессии → запускаем на новых исходных данных:
python session.py replay \
--journal=sessions/lideravto-2026-04-05-001/journal.yaml \
--source=source/CATALOG_new.csv
Компонент прогоняет те же шаги с теми же параметрами → новая сессия с новыми данными.
architect/standards/data/
data-session-standard.md ← этот файл (стандарт)
library/
@data.session/ ← реализация компонента
session.py ← открыть / закрыть / статус
journal.py ← записать шаг
git_backend.py ← dump → commit → rollback (режим git)
files_backend.py ← cp snapshot (режим files)
replay.py ← повтор по journal.yaml
CLI ← python session.py start|step|rollback|replay
# DataSession — рабочие файлы не в git
sessions/**/data.db
sessions/**/data_*.db
# DataSession — в git только для режима git
# sessions/**/data.sql ← НЕ игнорировать
| Версия | Дата | Изменение |
|---|---|---|
| 1.0 | 2026-04-05 | Первая версия — два режима git/files |