Tarik Moussa
fd51b70000
feat(F-15): citation graph — PageRank, coupling, co-citation, CLI
...
- codex/graph.py: build_citation_graph (DiGraph from DB), citation_pagerank
(graceful uniform fallback < 5 nodes), find_related (bibliographic coupling),
find_co_cited, dangling_citations
- codex/config.py: graph_cite_boost_alpha=0.3, graph_min_corpus_size=15
- codex/cli.py: graph report [--top-n] [--json], graph related <paper-id>
[--min-shared]; search paper --cite-boost (PageRank score weighting)
- tests/graph/: 39 tests (graph functions + CLI) — 326 total green
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-15 03:31:36 +02:00
9647897173
feat(F-16): chunk quality gate + section classification
...
3-signal quality filter (length/alpha-ratio/bib-score) + rule-based section classifier + retroactive CLI pass. 35 new tests, 287 total green.
2026-06-15 01:22:44 +00:00
Tarik Moussa
8cf0cc7e01
feat(synthesis): Lead/Provenance model + grounded leads + conjecture generator
...
- codex/synthesis.py: Lead/Provenance dataclasses, find_connections/gaps/improvements,
propose_conjectures (status=unverified, quarantined in leads/conjectures/),
write_leads (grounded→leads/grounded/, conjectures→leads/conjectures/ HARD invariant)
- codex/cli.py: synthesis leads/conjectures/report command group
- codex/config.py: F-13 settings (leads_dir, synthesis_llm_*, synthesis_top_k,
synthesis_min_grounded_ratio, synthesis_gap_min_coverage)
- tests/synthesis/: 42 tests covering model, grounding, conjecture invariant, quarantine, CLI
- spike/: F-13 spike script + output (live run attempted)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-06-14 08:37:42 +02:00
Tarik Moussa
408e4886bb
fix(wiki): basic conflict detection in CompileReport
...
Add _detect_conflicts() using adversative keyword heuristic (but,
however, in contrast, …) between chunks of different bibkeys; results
populate CompileReport.conflicts and appear in wiki/log.md.
Also add CompileReport.quarantined field (used by Fix 2).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-14 05:11:06 +02:00
Tarik Moussa
1df9be6563
feat(F-09): rich parsing — formula + figure extraction
...
- codex/parsing/mathpix.py: pix2tex (local, CPU) primary + MathPix API
optional; bbox heuristic h>15px, math-char-count>5; singleton model cache
- codex/parsing/figures.py: pymupdf embedded-image extraction → PNG;
caption detection via proximity + "Figure/Fig./Abbildung" prefix
- codex/models.py: FormulaChunk + FigureChunk dataclasses (R-10/R-11)
- codex/ingest.py: --rich flag wires formula+figure extraction post-ingest
- codex/cli.py: search_app sub-typer (paper + formula subcommands),
--rich flag on ingest; wiki_app from F-12 preserved intact
- codex/config.py: mathpix_app_id/key, pix2tex_fallback, figures_dir
- infra/schema.sql: formulas + figures tables with HNSW pgvector indexes
- pyproject.toml: pymupdf>=1.24, pix2tex>=0.1.4
- tests/parsing/test_mathpix.py + test_figures.py: 31 tests (mock pix2tex
+ MathPix HTTP, real pymupdf on synthetic PDF)
Gate: 158 passed, ruff clean, mypy clean (20 files)
Requirements: R-10 R-11 R-12 R-13 R-14 → done
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-14 01:16:24 +02:00
Tarik Moussa
d2f9141a5c
fix(cli): remove F-09 spillover from F-12 branch, keep only wiki group
...
cli.py and config.py were accidentally contaminated with uncommitted F-09
changes (search_app restructure, rich ingest, mathpix/figures settings).
This restores both files to main-baseline + F-12-only additions:
- cli.py: wiki_app group (compile/list/check), restore @app.command search
- config.py: wiki_dir, wiki_llm_model, wiki_llm_url, wiki_top_k only
All 127 tests green, ruff+mypy clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 20:28:22 +02:00
Tarik Moussa
4d361fd8dc
feat(cli): wiki compile/list/check command group (F-12)
...
Adds codex wiki compile/list/check Typer subgroup to cli.py.
Adds wiki_dir, wiki_llm_model, wiki_llm_url, wiki_top_k settings
to config.py (F-12 section only).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 20:22:55 +02:00
Tarik Moussa
2acb2ee213
feat(cli): wire all commands via Typer (ingest, search, discover, provenance, ask-stub)
...
- Implement all CLI commands as specified in F-07: ingest, search, and discover subcommands (leads, citing, cited-by, cocited), and provenance subcommands (scan, add-link, links, bib).
- Add ask command stub that exits with code 1 (not yet implemented).
- Implement comprehensive tests with mocked dependencies (no real DB/API calls).
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com >
2026-06-05 07:22:03 +02:00
Tarik Moussa
b52a6a7412
fix: add @app.callback so codex --help exits 0
...
Bare Typer() with no commands raised RuntimeError at runtime.
Callback makes the entry point callable without exposing F-07 logic.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 11:26:35 +02:00
Tarik Moussa
1dd7a4bea3
fix: add cli.py stub so entry point resolves before F-07
...
Review-Gate finding: pyproject.toml [project.scripts] referenced
codex.cli:app which was absent; uv run codex raised ModuleNotFoundError.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 11:25:17 +02:00