Files
atm-curs-dl/check_harvest_citations.py
Claude Agent 2c6747fe43 recoltarea trece pe agenti opencode cu deepseek-v4.1-flash
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
2026-09-18 11:14:09 +00:00

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)