Q&A: sample pe sesiunea 25.08.2026 (format pe concepte + index tematic)

- extract_audio.py: --only ocoleste CORE_MODULES, --lectures N limiteaza
- render_html.py: extensia toc, ca sa existe ancore pe headinguri
- summaries/09_QA/01_2026-08-25.md: 16 subiecte, 12 diagrame verificate
  vizual cu Playwright, intrebarile administrative eliminate
- summaries/09_QA/INDEX_TEMATIC.md: index pe subiect, ancore verificate

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MtSTyTmt6AbCL9j5ajEDm1
This commit is contained in:
Claude Agent
2026-09-12 15:00:21 +00:00
parent 34d80e78c4
commit fc3c3f5897
60 changed files with 3425 additions and 685 deletions

View File

@@ -49,7 +49,8 @@ def extract_audio(url: str, dest: Path) -> bool:
def main():
p = argparse.ArgumentParser(description="Extract audio for ATM core-curriculum lectures")
p.add_argument("--out", default="audio", help="Output directory")
p.add_argument("--only", default=None, help="Limit to one module name (for piloting)")
p.add_argument("--only", default=None, help="Limit to one module name (bypasses CORE_MODULES)")
p.add_argument("--lectures", type=int, default=None, help="With --only: first N lectures of that module")
args = p.parse_args()
load_dotenv()
@@ -70,15 +71,17 @@ def main():
done = skipped = failed = 0
for mod_idx, mod in enumerate(modules, 1):
if mod["name"] not in CORE_MODULES:
continue
if args.only and mod["name"] != args.only:
if args.only:
if mod["name"] != args.only:
continue
elif mod["name"] not in CORE_MODULES:
continue
mod_dir = out_dir / f"{mod_idx:02d}_{slugify(mod['name'])}"
log.info(f"Module: {mod['name']} ({len(mod['lectures'])} lectures)")
for lec_idx, lec in enumerate(mod["lectures"], 1):
lectures = mod["lectures"][: args.lectures] if args.lectures else mod["lectures"]
for lec_idx, lec in enumerate(lectures, 1):
stem = f"{lec_idx:02d}_{slugify(lec['name'])}"
dest = mod_dir / f"{stem}.mp3"
if dest.exists() and dest.stat().st_size > 10_000: