buy_doji: pullback, bull reversal si buy momentum explicate; Surse scos

Cererile userului pe capitol:
- pullback definit in glosar, cu contra-exemplu, si legat de momentul
  intrarii (confirmarea de dupa doji-ul care termina pullback-ul);
- bull reversal / bear reversal si buy momentum erau folositi fara
  explicatie: definiti din material (07_determinare_trend, filtrele de
  scaner, 10_buysell_momentum_trigger) si explicati inline la prima
  folosire;
- blocul "Surse" scos; propozitia-contract mutata sus, ca "Cum citesti
  capitolul". Trimiterile catre celelalte capitole raman inline.

substituie.py devine repetabil: SVG-ul pus ramane intre ancorele
<!-- DIAGRAMA: cheie --> ... <!-- /DIAGRAMA: cheie -->, deci o diagrama
regenerata se poate reinsera. Pana acum marcajul se consuma la prima
rulare si regenerarile nu mai ajungeau in .md. Ancorele sunt puse in
toate cele 49 de diagrame din 17_STRATEGII.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ThN7ixZrowca8aTGrK1MUJ
This commit is contained in:
Claude Agent
2026-09-20 11:32:21 +00:00
parent a92a12a65c
commit e9ae7e4695
19 changed files with 392 additions and 179 deletions

View File

@@ -6,6 +6,11 @@ agent ar scrie în .md-ul capitolului, șapte agenți ar edita același fișier.
Cheia din marcaj se caută ca gen/strategii/<slug>_<cheie>.svg, unde slug-ul
vine din numele capitolului (01_buy_doji.md -> buy_doji).
Substituția e REPETABILĂ: SVG-ul pus rămâne între ancorele
<!-- DIAGRAMA: cheie --> ... <!-- /DIAGRAMA: cheie -->, iar o rulare
următoare înlocuiește conținutul dintre ele cu SVG-ul regenerat. Rulează
scriptul după fiecare regenerare de diagramă.
python3 gen/strategii/substituie.py # scrie
python3 gen/strategii/substituie.py --check # doar raportează, nu scrie
"""
@@ -15,7 +20,11 @@ from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent.parent
CAPITOLE = sorted((ROOT / "summaries" / "17_STRATEGII").glob("[0A][1-8]_*.md"))
MARCAJ = re.compile(r"^[ \t]*<!-- DIAGRAMA: ([a-z0-9_]+) -->[ \t]*$", re.M)
# fie marcajul gol (prima punere), fie blocul deja ancorat (repunere)
MARCAJ = re.compile(
r"^[ \t]*<!-- DIAGRAMA: ([a-z0-9_]+) -->[ \t]*$"
r"(?:\n.*?\n[ \t]*<!-- /DIAGRAMA: \1 -->[ \t]*$)?",
re.M | re.S)
def slug(cale: Path) -> str:
@@ -42,7 +51,9 @@ def main() -> int:
print(f"LIPSĂ {cap.name}: {svg.name}")
return m.group(0)
puse += 1
return svg.read_text().strip()
cheie = m.group(1)
return (f"<!-- DIAGRAMA: {cheie} -->\n{svg.read_text().strip()}\n"
f"<!-- /DIAGRAMA: {cheie} -->")
nou = MARCAJ.sub(inlocuieste, text)
if nou != text and not check: