developer(ET): auto-commit from developer run_id=642
This commit is contained in:
@@ -426,3 +426,45 @@ def test_replication_boundaries_reference_lite_setup():
|
||||
|
||||
def test_changelog_has_orch_102_entry():
|
||||
assert "ORCH-102" in CHANGELOG.read_text(encoding="utf-8")
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# TC-27 (ORCH-104, FR-11 / D12): LITE_SETUP.md вводит установочный скрипт как
|
||||
# рекомендованный быстрый путь и сохраняет ручной маршрут (пиннинг «13 разделов»
|
||||
# в порядке держит test_doc_exists_with_all_13_sections_in_order — не трогается).
|
||||
# ---------------------------------------------------------------------------
|
||||
def test_doc_introduces_setup_lite_fast_path():
|
||||
text = _doc_text()
|
||||
assert "setup_lite.py" in text, (
|
||||
"LITE_SETUP.md не вводит установочный скрипт setup_lite.py (ORCH-104 FR-11)"
|
||||
)
|
||||
# быстрый путь — подраздел §1.1 ВНУТРИ §1 (нумерация ## 1.…## 13. не меняется)
|
||||
body1 = _section_bodies()["## 1. Рамка Lite"]
|
||||
assert "1.1" in body1 and "setup_lite.py" in body1, (
|
||||
"быстрый путь обязан быть подразделом §1.1 внутри §1 (D12)"
|
||||
)
|
||||
# ручной маршрут сохранён как канон/fallback — упомянут явно
|
||||
assert "fallback" in text.lower() or "ручной маршрут" in text, (
|
||||
"ручной маршрут §2–§13 обязан остаться каноном/fallback (FR-11)"
|
||||
)
|
||||
# норматив сопровождения расширен на скрипт (D12)
|
||||
assert "scripts/setup_lite.py" in text
|
||||
|
||||
|
||||
def test_setup_lite_fast_path_block_is_clean():
|
||||
"""§1.1 fenced-блок проходит те же сканы, что весь док: без боевых литералов,
|
||||
без секретоподобных значений, без неизвестных env-токенов."""
|
||||
body1 = _section_bodies()["## 1. Рамка Lite"]
|
||||
blocks = _fenced_blocks(body1)
|
||||
assert blocks, "§1.1 обязан нести fenced-блок с командой запуска (D12)"
|
||||
for i, block in enumerate(blocks):
|
||||
for literal in FORBIDDEN:
|
||||
assert literal not in block, f"§1.1 блок #{i}: боевой литерал {literal!r}"
|
||||
for rx in (_SECRET_HEX_RE, _SECRET_ALNUM_RE):
|
||||
assert rx.search(block) is None, f"§1.1 блок #{i}: секретоподобное значение"
|
||||
# упомянутые в §1.1 env-токены (если есть) — только из канона .env.example
|
||||
canon = _env_keys(ENV_EXAMPLE)
|
||||
mentioned = set(_ENV_TOKEN_RE.findall(body1))
|
||||
assert not (mentioned - canon), (
|
||||
f"§1.1 упоминает env-токены вне .env.example: {sorted(mentioned - canon)}"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user