feat(generator): эталонный мир в git и import по умолчанию
- Зачем:
- менти собирал мир генерацией (минуты и десятки минут CPU); теперь
готовый трёхдневный мир загружается импортом за ~2 минуты, и числа
у всех менти совпадают число-в-число (issue #3).
- Что:
- артефакт data/startup_history/reference-world.json.xz в git:
3 модельных дня daily-wave, ~850 МБ JSON → 32 МБ xz;
- чтение и запись артефакта понимают .xz потоково (lzma); пустое поле
artifact_path в пульте и make startup-history-import читают эталон;
- длительность профиля daily-wave стала 3d — в тон эталонному миру;
- предпроверка чистого стенда ставит зависимости генератора через uv;
экспорт и импорт разведены отдельными переменными Makefile;
- доки и runbook обновлены; новые контрактные тесты: xz round-trip
и дефолтные пути артефакта.
- Проверка:
- make test (210 + 31) и make lint зелёные; импорт на чистом стенде
за 2м03с, manifest совпал (280437 событий), Superset-проверка
зелёная; независимое ревью — APPROVED.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -4,12 +4,55 @@
|
||||
|
||||
from dataclasses import replace
|
||||
from datetime import datetime, timezone
|
||||
import json
|
||||
import lzma
|
||||
|
||||
import pytest
|
||||
|
||||
from generator import GeneratorState
|
||||
|
||||
|
||||
def test_plain_json_roundtrip_keeps_existing_serialization(tmp_path):
|
||||
"""Обычный JSON по-прежнему пишется без сжатия и читается обратно."""
|
||||
from clickstream_generator.startup_history_artifact import (
|
||||
load_startup_history_artifact,
|
||||
write_startup_history_artifact,
|
||||
)
|
||||
|
||||
artifact = {"text": "мир", "nested": {"value": 42}}
|
||||
path = tmp_path / "artifact.json"
|
||||
|
||||
write_startup_history_artifact(path, artifact)
|
||||
|
||||
assert path.read_text(encoding="utf-8") == json.dumps(
|
||||
artifact,
|
||||
ensure_ascii=True,
|
||||
indent=2,
|
||||
)
|
||||
assert load_startup_history_artifact(path) == artifact
|
||||
|
||||
|
||||
def test_xz_artifact_roundtrip(tmp_path):
|
||||
"""XZ-артефакт потоково пишется и читается без изменения данных."""
|
||||
from clickstream_generator.startup_history_artifact import (
|
||||
load_startup_history_artifact,
|
||||
write_startup_history_artifact,
|
||||
)
|
||||
|
||||
artifact = {"text": "мир", "nested": {"value": 42}}
|
||||
path = tmp_path / "artifact.json.xz"
|
||||
|
||||
write_startup_history_artifact(path, artifact)
|
||||
|
||||
assert load_startup_history_artifact(path) == artifact
|
||||
with lzma.open(path, "rt", encoding="utf-8") as input_file:
|
||||
assert input_file.read() == json.dumps(
|
||||
artifact,
|
||||
ensure_ascii=True,
|
||||
indent=2,
|
||||
)
|
||||
|
||||
|
||||
def _state() -> GeneratorState:
|
||||
import random
|
||||
|
||||
|
||||
Reference in New Issue
Block a user