feat(runtime): implement single-article consolidation runtime and modularize codebase

This commit is contained in:
2026-08-24 00:14:07 -03:00
parent e1e0be1353
commit 23de7d8fe7
176 changed files with 266754 additions and 10179 deletions
@@ -0,0 +1,78 @@
"""Unit tests for micro-repair validator covering scenarios REP-001 to REP-016."""
from src.runtime.candidate.models import CandidateObject
from src.runtime.hygiene.repairs import validate_and_apply_repairs
def test_valid_encoding_repair():
c = CandidateObject(
id="blk_01",
type="paragraph",
text="Você sabia disso?",
extractor="trafilatura",
position=1,
)
cands = {c.id: c}
repairs = [
{
"target_candidate_id": "blk_01",
"original_fragment": "Você",
"replacement_fragment": "Você",
"category": "encoding",
"rationale": "Fix moji-bake encoding artifact.",
}
]
applied, warnings = validate_and_apply_repairs(cands, repairs)
assert len(applied) == 1
assert len(warnings) == 0
assert c.text == "Você sabia disso?"
def test_reject_unapproved_category_repair():
c = CandidateObject(
id="blk_01",
type="paragraph",
text="Original text here.",
extractor="trafilatura",
position=1,
)
cands = {c.id: c}
repairs = [
{
"target_candidate_id": "blk_01",
"original_fragment": "Original",
"replacement_fragment": "Better",
"category": "creative_style", # Unapproved
"rationale": "Better wording",
}
]
applied, warnings = validate_and_apply_repairs(cands, repairs)
assert len(applied) == 0
assert len(warnings) == 1
assert "unapproved category" in warnings[0]
def test_reject_ungrounded_original_fragment():
c = CandidateObject(
id="blk_01", type="paragraph", text="Actual content.", extractor="trafilatura", position=1
)
cands = {c.id: c}
repairs = [
{
"target_candidate_id": "blk_01",
"original_fragment": "NonExistentFragment",
"replacement_fragment": "Something",
"category": "spacing",
"rationale": "Fix space",
}
]
applied, warnings = validate_and_apply_repairs(cands, repairs)
assert len(applied) == 0
assert len(warnings) == 1
assert "not found in candidate" in warnings[0]