Sesiunea Claude ramane orchestrator: imparte munca, verifica, comite. Recoltatul - citit 3-4 mii de cuvinte si scos regulile cu citat - il fac agenti opencode pe model ieftin. - .opencode/agents/recoltor.md: agentul, cu formatul dat ca model si cu regula care conteaza - fiecare citat verificat cu `sed -n` inainte sa fie scris. Fara asta un model ieftin inventeaza numere de linie plauzibile. - run_opencode_batch.sh: lot in paralel cu xargs -P, log per fisier. Masurat: o recolta ~90s singura, trei in paralel ~120s in total. - check_harvest_citations.py: auditul mecanic al citatelor, cu --selftest. Prinde liniile inexistente; restul ramane verificare prin sondaj. - Primele patru recolte din transa noua (08-11.06.2026), citatele verificate: toate trimit la linii reale. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
"""Verifica citatele dintr-o recolta: fiecare `(<fisier>.txt:<linie>)` trebuie
|
|
sa trimita la o linie care exista in transcriere. Un citat cu linia gresita e
|
|
mai rau decat lipsa lui - modelul care recolteaza inventeaza numere plauzibile.
|
|
|
|
python3 check_harvest_citations.py harvest/2026-06-11.md ...
|
|
python3 check_harvest_citations.py --selftest
|
|
"""
|
|
import re
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
CIT = re.compile(r"(\w+\.txt):(\d+)")
|
|
TRANSCRIPTS = Path("transcripts")
|
|
|
|
|
|
def check(md: Path) -> list[str]:
|
|
rele = []
|
|
for name, lineno in CIT.findall(md.read_text(encoding="utf-8")):
|
|
hits = list(TRANSCRIPTS.rglob(name))
|
|
if not hits:
|
|
rele.append(f"{md.name}: transcrierea {name} nu exista")
|
|
continue
|
|
n = len(hits[0].read_text(encoding="utf-8").splitlines())
|
|
if not 1 <= int(lineno) <= n:
|
|
rele.append(f"{md.name}: {name}:{lineno} — fisierul are {n} linii")
|
|
return rele
|
|
|
|
|
|
def selftest():
|
|
import tempfile
|
|
with tempfile.TemporaryDirectory() as d:
|
|
t = Path(d) / "transcripts" / "M"
|
|
t.mkdir(parents=True)
|
|
(t / "01_x.txt").write_text("a\nb\nc\n")
|
|
md = Path(d) / "r.md"
|
|
md.write_text("ok (01_x.txt:2), peste (01_x.txt:99), lipsa (02_y.txt:1)")
|
|
global TRANSCRIPTS
|
|
TRANSCRIPTS = Path(d) / "transcripts"
|
|
rele = check(md)
|
|
assert len(rele) == 2, rele
|
|
assert "99" in rele[0] and "02_y.txt" in rele[1], rele
|
|
print("selftest ok")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if "--selftest" in sys.argv:
|
|
selftest()
|
|
sys.exit(0)
|
|
rele = [p for f in sys.argv[1:] for p in check(Path(f))]
|
|
print("\n".join(rele) if rele else f"ok — {len(sys.argv)-1} fisiere, toate citatele trimit la linii reale")
|
|
sys.exit(1 if rele else 0)
|