feat(content): migration for structured note columns + quick_context split

This commit is contained in:
Renn F
2026-06-21 01:51:48 +02:00
parent f0368af757
commit dd03c218d1
2 changed files with 234 additions and 0 deletions
@@ -0,0 +1,90 @@
"""Unit tests for migration 041's quick_context -> orchestration_markers parse.
The parse helper is the only logic in the migration that can corrupt prod data,
so it is exercised directly (loaded from the migration file by path — migrations
are not an importable package).
"""
from __future__ import annotations
import importlib.util
from pathlib import Path
_MIGRATION = (
Path(__file__).resolve().parents[3]
/ "alembic"
/ "versions"
/ "041_structured_content_columns.py"
)
_spec = importlib.util.spec_from_file_location("_m041", _MIGRATION)
assert _spec and _spec.loader
_m041 = importlib.util.module_from_spec(_spec)
_spec.loader.exec_module(_m041)
parse = _m041._parse_quick_context
def test_none_and_empty() -> None:
assert parse(None) == ({}, None)
assert parse("") == ({}, None)
assert parse(" \n ") == ({}, None)
def test_original_developer_line_extracted() -> None:
markers, remainder = parse(
"original_developer:00000000-0000-0000-0001-000000000002"
)
assert markers == {"original_developer": "00000000-0000-0000-0001-000000000002"}
assert remainder is None
def test_documenter_and_doc_notes_split() -> None:
blob = (
"original_developer:dev-uuid\n\n"
"doc_notes:Created backend/docs/cache-and-locks.md documenting prefixes\n"
"documenter:doc-uuid"
)
markers, remainder = parse(blob)
assert markers["original_developer"] == "dev-uuid"
assert markers["documenter"] == "doc-uuid"
# The human doc note survives, de-prefixed; the UUIDs do NOT leak into it.
assert remainder == "Created backend/docs/cache-and-locks.md documenting prefixes"
assert "documenter" not in remainder
assert "original_developer" not in remainder
def test_required_cells_list() -> None:
markers, remainder = parse("required_cells: backend, frontend, ux_ui")
assert markers == {"required_cells": ["backend", "frontend", "ux_ui"]}
assert remainder is None
def test_token_markers_and_dismissed_on_one_line() -> None:
markers, remainder = parse("external_pr_head=abc123 dismissed=1")
assert markers == {"external_pr_head": "abc123", "dismissed": True}
assert remainder is None
def test_self_heal_fp_token() -> None:
markers, _ = parse("self_heal_fp=deadbeef")
assert markers == {"self_heal_fp": "deadbeef"}
def test_supersede_line_preserved() -> None:
markers, remainder = parse("external_pr_supersede pr=123 review=rid closed=1")
assert markers == {"external_pr_supersede": "pr=123 review=rid closed=1"}
assert remainder is None
def test_malformed_blob_kept_as_remainder_never_raises() -> None:
markers, remainder = parse(":::garbage\nsome free text a human wrote")
assert markers == {}
assert ":::garbage" in remainder
assert "some free text a human wrote" in remainder
def test_dismissed_appended_to_human_text() -> None:
# dismissed=1 is space-appended (services/task.py): the human text survives,
# the marker is extracted.
markers, remainder = parse("kept some human note dismissed=1")
assert markers == {"dismissed": True}
assert remainder == "kept some human note"