Phase 0: branch setup for v2-edge-reliability
Browse files- CHANGELOG.md +9 -0
- RECON_CONTEXT.md +438 -0
- eval/archived/.gitkeep +0 -0
CHANGELOG.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# CHANGELOG β RECON v2 (Edge Reliability)
|
| 2 |
+
|
| 3 |
+
## [Unreleased]
|
| 4 |
+
|
| 5 |
+
### Phase 0 β Branch Setup
|
| 6 |
+
- Created v2-edge-reliability branch from main
|
| 7 |
+
- Added CHANGELOG.md
|
| 8 |
+
- v1 remains on main branch, deployed to HF Spaces
|
| 9 |
+
- All v2 development happens on this branch
|
RECON_CONTEXT.md
ADDED
|
@@ -0,0 +1,438 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# RECON β Full Project Context & Research Direction
|
| 2 |
+
**Last updated:** April 2026
|
| 3 |
+
**Purpose:** Complete handoff document for Claude Code sessions. Contains everything discussed across the research planning conversation β architecture, eval results, collaboration context, professor feedback, and the revised technical direction.
|
| 4 |
+
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## 1. What RECON Is
|
| 8 |
+
|
| 9 |
+
RECON is a four-agent LangGraph state machine for temporally-aware scientific literature retrieval. Its defining contribution is treating **temporal supersession** as a first-class retrieval failure mode β something no existing RAG evaluation framework (RAGAS, ARES, TREC RAG) currently measures.
|
| 10 |
+
|
| 11 |
+
**The core argument:** A 2019 paper with 800 citations scores high on cosine similarity and high on authority. If a 2023 paper explicitly refutes its claims, retrieving the 2019 paper as evidence produces a confident but stale answer. Standard RAG has no mechanism to detect this. RECON's critic does.
|
| 12 |
+
|
| 13 |
+
**Repos:**
|
| 14 |
+
- GitHub: https://github.com/MukulRay1603/project-recon
|
| 15 |
+
- HF Space (live, Gradio): https://huggingface.co/spaces/MukulRay/recon
|
| 16 |
+
|
| 17 |
+
---
|
| 18 |
+
|
| 19 |
+
## 2. Architecture (Source-Verified)
|
| 20 |
+
|
| 21 |
+
```
|
| 22 |
+
session_loader β planner β retriever β critic
|
| 23 |
+
β
|
| 24 |
+
ββββββββββββββββββββ΄βββββββββββββββββββ
|
| 25 |
+
β PASS / FORCED_PASS β STALE / CONTRADICTED / INSUFFICIENT
|
| 26 |
+
βΌ βΌ
|
| 27 |
+
synthesizer β END retry_retriever β critic (max 2 retries)
|
| 28 |
+
```
|
| 29 |
+
|
| 30 |
+
### Agent Responsibilities
|
| 31 |
+
|
| 32 |
+
**session_loader** (`graph.py:51`)
|
| 33 |
+
- Loads prior session context from SQLite before planner runs
|
| 34 |
+
- Fails silently β pipeline continues if session load fails
|
| 35 |
+
|
| 36 |
+
**planner** (`planner.py`)
|
| 37 |
+
- LLM: Groq LLaMA 3.3-70B, temperature 0.2
|
| 38 |
+
- Decomposes query into 2β3 temporally-typed sub-questions: foundational / recent / contested
|
| 39 |
+
- Session-aware: injects last 3 prior queries to avoid repetition
|
| 40 |
+
- Fallback: uses raw query if LLM output unparseable
|
| 41 |
+
|
| 42 |
+
**retriever** (`retriever.py` + `retriever_utils.py`)
|
| 43 |
+
- Semantic Scholar REST API via direct `requests.get()` to `graph/v1/paper/search`
|
| 44 |
+
- `sleep(3)` rate limit guard per S2 call
|
| 45 |
+
- Each paper scored: `hybrid_score = semantic_sim Γ 0.5 + recency Γ 0.3 + authority Γ 0.2`
|
| 46 |
+
- Three recency decay configs: `none` / `linear` / `log` (parameterized via `decay_config` state field)
|
| 47 |
+
- Linear decay: `max(0, 1 β age/20)` where age = current_year β paper_year
|
| 48 |
+
- Log decay: `max(0, 1 β log(1+age)/log(21))`
|
| 49 |
+
- Authority: `min(1.0, log(1+citations)/log(10001))` (log-normalized)
|
| 50 |
+
- DuckDuckGo web search in parallel (`ddgs`, `region="wt-wt"`)
|
| 51 |
+
- Tavily fallback if DDG fails
|
| 52 |
+
- Results cached to `data/cache/{md5_hash}.json`
|
| 53 |
+
- On HF Spaces: cache dir is `/tmp/recon_cache` via `RECON_CACHE_DIR` env var
|
| 54 |
+
|
| 55 |
+
**critic** (`critic.py`)
|
| 56 |
+
- LLM: Groq LLaMA 3.3-70B, temperature 0.1
|
| 57 |
+
- Verdict order (sequential, first match wins):
|
| 58 |
+
1. `FORCED_PASS` β retry_count β₯ 2 (hard ceiling)
|
| 59 |
+
2. `INSUFFICIENT` β fewer than 3 papers retrieved
|
| 60 |
+
3. `INSUFFICIENT` β fewer than 3 papers with hybrid_score β₯ 0.40
|
| 61 |
+
4. `STALE` β mean paper age > 24 months
|
| 62 |
+
5. `CONTRADICTED` β LLM pairwise check on top-4 papers, only pairs with β₯ 2yr gap
|
| 63 |
+
6. `PASS` β all checks clear
|
| 64 |
+
- On non-PASS: LLM rewrites sub-questions with strategy: `broaden` / `recent` / `probe_contradiction`
|
| 65 |
+
- Rewritten questions stored in state as `rewritten_questions`
|
| 66 |
+
- `calibration_bin` field set to verdict for eval aggregation
|
| 67 |
+
|
| 68 |
+
**retry_retriever** (`graph.py:74`)
|
| 69 |
+
- Uses `rewritten_questions` from critic instead of `sub_questions` from planner
|
| 70 |
+
- Merges new papers with existing set β deduplication by `paper_id`
|
| 71 |
+
- Re-sorts merged set by `hybrid_score` descending
|
| 72 |
+
- Merges web results by URL deduplication
|
| 73 |
+
- Increments `retry_count`
|
| 74 |
+
|
| 75 |
+
**synthesizer** (`synthesizer.py`)
|
| 76 |
+
- LLM: Groq LLaMA 3.3-70B, temperature 0.3
|
| 77 |
+
- Produces four-section brief: Overview / Key Findings / Active Debates / Outlook
|
| 78 |
+
- Per-claim confidence scoring: HIGH / MEDIUM / LOW based on hybrid_score + year
|
| 79 |
+
- Inline citations formatted as `[Author et al., Year]`
|
| 80 |
+
- Calls `log_verdict()` on every completed run β populates `verdict_log` table
|
| 81 |
+
- Calls `save_turn()` β persists query + position + claims to `session_turns` table
|
| 82 |
+
- Generates `export_md` field β full session as downloadable markdown
|
| 83 |
+
|
| 84 |
+
### State Schema (`state.py`)
|
| 85 |
+
```python
|
| 86 |
+
class ResearchState(TypedDict):
|
| 87 |
+
original_query: str
|
| 88 |
+
session_id: str
|
| 89 |
+
session_context: Optional[SessionContext]
|
| 90 |
+
sub_questions: list[str]
|
| 91 |
+
retrieved_papers: list[Paper]
|
| 92 |
+
citation_graph: dict # {paper_id: [cited_ids]}
|
| 93 |
+
web_results: list[WebResult]
|
| 94 |
+
critic_verdict: str # PASS/STALE/CONTRADICTED/INSUFFICIENT/FORCED_PASS
|
| 95 |
+
critic_notes: str
|
| 96 |
+
rewritten_questions: list[str]
|
| 97 |
+
retry_count: int
|
| 98 |
+
synthesized_position: str
|
| 99 |
+
claim_confidences: list[Claim]
|
| 100 |
+
session_update: Optional[SessionUpdate]
|
| 101 |
+
export_md: str
|
| 102 |
+
decay_config: str # "none" | "linear" | "log"
|
| 103 |
+
calibration_bin: str
|
| 104 |
+
latency_ms: float
|
| 105 |
+
```
|
| 106 |
+
|
| 107 |
+
### Verdict Constants
|
| 108 |
+
```
|
| 109 |
+
PASS | STALE | CONTRADICTED | INSUFFICIENT | FORCED_PASS
|
| 110 |
+
```
|
| 111 |
+
|
| 112 |
+
---
|
| 113 |
+
|
| 114 |
+
## 3. Database Schema
|
| 115 |
+
|
| 116 |
+
SQLite at `data/sessions.db` locally, `/tmp/recon_sessions.db` on HF Spaces.
|
| 117 |
+
|
| 118 |
+
**sessions:** `session_id TEXT PK, created_at TEXT, updated_at TEXT`
|
| 119 |
+
**session_turns:** `id INTEGER PK, session_id FK, query TEXT, position TEXT, claim_json TEXT`
|
| 120 |
+
**verdict_log:** `id INTEGER PK, session_id FK, query TEXT, verdict TEXT, retry_count INTEGER, decay_config TEXT, latency_ms REAL, timestamp TEXT`
|
| 121 |
+
|
| 122 |
+
---
|
| 123 |
+
|
| 124 |
+
## 4. Evaluation Results (Real, Source-Verified)
|
| 125 |
+
|
| 126 |
+
| Architecture | Staleness Catch Rate | Position Accuracy |
|
| 127 |
+
|---|---|---|
|
| 128 |
+
| Single-pass RAG (baseline) | 0% | 32.3% |
|
| 129 |
+
| RECON no decay | 42% | 38.1% |
|
| 130 |
+
| RECON log decay | 38% | 36.7% |
|
| 131 |
+
| **RECON linear decay** | **52%** | **43.9%** |
|
| 132 |
+
|
| 133 |
+
- Benchmark: 130 questions sourced from real ML survey paper supersession chains
|
| 134 |
+
- Evaluation method: LLM-as-judge via Groq on 5 architecture variants with backoff
|
| 135 |
+
- Contradiction catch rate: 0% β known limitation, acknowledged honestly in results
|
| 136 |
+
- Contradiction detection inflated by post-hoc heuristics was discovered and dropped (E8 in blueprint)
|
| 137 |
+
|
| 138 |
+
---
|
| 139 |
+
|
| 140 |
+
## 5. Tech Stack Rules (Never Break These)
|
| 141 |
+
|
| 142 |
+
| Rule | Detail |
|
| 143 |
+
|---|---|
|
| 144 |
+
| S2 API | Direct `requests.get()` to `graph/v1/paper/search` ONLY. Never `semanticscholar` library |
|
| 145 |
+
| DDG package | `ddgs` (not `duckduckgo-search`). Always `region="wt-wt"` |
|
| 146 |
+
| Gradio | NOT in `requirements.txt`. Only in `sdk_version: 6.10.0` in README YAML |
|
| 147 |
+
| SQLite path | `data/sessions.db` locally, `/tmp/recon_sessions.db` on HF via `SESSION_DB_PATH` env var |
|
| 148 |
+
| Cache dir | `data/cache/` locally, `/tmp/recon_cache` on HF via `RECON_CACHE_DIR` env var |
|
| 149 |
+
| Python | 3.12 locally (3.13 on HF) |
|
| 150 |
+
| Verdict strings | `PASS / STALE / CONTRADICTED / INSUFFICIENT / FORCED_PASS` β exact case everywhere |
|
| 151 |
+
| Eval numbers | Real only. 52% staleness catch rate, 43.9% position accuracy |
|
| 152 |
+
|
| 153 |
+
---
|
| 154 |
+
|
| 155 |
+
## 6. Novelty Assessment
|
| 156 |
+
|
| 157 |
+
### What is genuinely novel
|
| 158 |
+
- **Staleness catch rate** as a formal RAG evaluation metric. No existing framework (RAGAS, ARES, TREC RAG) measures temporal supersession as a failure mode.
|
| 159 |
+
- **Four-verdict critic with failure-mode-specific query rewriting.** CRAG (2024) has three verdicts based on relevance (Correct/Incorrect/Ambiguous) β it does not detect temporal supersession. RECON's STALE verdict is a distinct concept from relevance failure.
|
| 160 |
+
- **130-question superseded-claims benchmark.** No public benchmark targets ML literature staleness detection.
|
| 161 |
+
|
| 162 |
+
### What is not novel
|
| 163 |
+
- Multi-agent LangGraph pipelines β common pattern
|
| 164 |
+
- Hybrid retrieval scoring (semantic + recency + authority) β exists in literature
|
| 165 |
+
- LLM-as-judge for RAG evaluation β standard practice
|
| 166 |
+
|
| 167 |
+
### Closest related work
|
| 168 |
+
- **CRAG (Jan 2024)** β corrective RAG with relevance evaluator. No temporal supersession concept.
|
| 169 |
+
- **TG-RAG (Oct 2025)** β temporal GraphRAG. Requires pre-existing timestamps on graph edges. NASA KG has none.
|
| 170 |
+
- **T-GRAG (Aug 2025)** β dynamic GraphRAG for temporal conflicts. Same limitation as TG-RAG.
|
| 171 |
+
- **DEAN (Feb 2024)** β outdated fact detection in KGs using structural contrastive learning. No LLM critic, no RAG connection, no scientific domain application.
|
| 172 |
+
- **FOS Benchmark (Nov 2025)** β temporal scientific graph benchmark for interdisciplinary link prediction. Different task.
|
| 173 |
+
|
| 174 |
+
---
|
| 175 |
+
|
| 176 |
+
## 7. The NASA EO Knowledge Graph β Professor's Dataset
|
| 177 |
+
|
| 178 |
+
**HF Dataset:** https://huggingface.co/datasets/nasa-gesdisc/nasa-eo-knowledge-graph
|
| 179 |
+
**HF Model (GNN):** https://huggingface.co/nasa-gesdisc/edgraph-gnn-graphsage
|
| 180 |
+
**HF Publications Dataset:** https://huggingface.co/datasets/nasa-gesdisc/es-publications-researchareas
|
| 181 |
+
**DOI:** 10.57967/hf/3463
|
| 182 |
+
**Version:** v1.2.0, October 2025
|
| 183 |
+
**Total nodes:** 150,351
|
| 184 |
+
|
| 185 |
+
### The Seven Node Types
|
| 186 |
+
| Node Type | What It Represents |
|
| 187 |
+
|---|---|
|
| 188 |
+
| Dataset | Satellite/EO datasets from NASA DAACs + 184 providers |
|
| 189 |
+
| Publication | Scientific papers citing those datasets |
|
| 190 |
+
| ScienceKeyword | GCMD-controlled vocabulary tags (Ozone, Precipitation, etc.) |
|
| 191 |
+
| Instrument | Sensors used to collect data (AIRS, MODIS, etc.) |
|
| 192 |
+
| Platform | Satellites carrying instruments (Aqua, Terra, etc.) |
|
| 193 |
+
| Project | Scientific missions (MERRA-2, etc.) |
|
| 194 |
+
| DataCenter | NASA DAACs and affiliated institutions |
|
| 195 |
+
|
| 196 |
+
### Known Schema Facts (from dataset card)
|
| 197 |
+
- Every node has properties: `globalId`, `doi`, `pagerank_global`, and node-type-specific fields
|
| 198 |
+
- Publication nodes have: `title`, `authors`, `year`, `doi`, `abstract`, `url`
|
| 199 |
+
- **Relationship properties are null across all types** β edges carry no weight, no timestamp, no metadata
|
| 200 |
+
- Available formats: JSON (JSONL), GraphML, Cypher (Neo4j)
|
| 201 |
+
|
| 202 |
+
### The GNN Model
|
| 203 |
+
- Architecture: Heterogeneous GraphSAGE (PyTorch Geometric)
|
| 204 |
+
- Base embeddings: `nasa-impact/nasa-smd-ibm-st-v2` (fine-tuned)
|
| 205 |
+
- Task: Link prediction for missing Dataset β ScienceKeyword edges
|
| 206 |
+
- Purpose: Find datasets in the archive that are missing keyword tags they should have
|
| 207 |
+
|
| 208 |
+
### The Companion Publications Dataset
|
| 209 |
+
- ~12K GES-DISC citing publications, each classified into 20 applied research areas
|
| 210 |
+
- Built by fine-tuning NASA's own LLM on labeled abstracts
|
| 211 |
+
- 87% classification accuracy into research areas
|
| 212 |
+
- This is the supervision signal for the GNN
|
| 213 |
+
|
| 214 |
+
### The Core Gap (Our Identified Problem)
|
| 215 |
+
The graph knows **what** is connected. It does not know **whether those connections are still trustworthy today.**
|
| 216 |
+
|
| 217 |
+
- All Dataset β Publication edges are treated identically regardless of publication year
|
| 218 |
+
- A 2008 paper and a 2024 paper carry the same weight during GNN message passing
|
| 219 |
+
- The GNN's keyword predictions are being shaped by stale signal
|
| 220 |
+
- The graph has no mechanism to distinguish a foundational citation from an outdated one
|
| 221 |
+
|
| 222 |
+
The professor's own published work (NTRS 2024) explicitly identifies dataset version supersession as an open problem: *"Datasets undergo a life cycle where older versions are replaced by newer versions... It is challenging when publications citing a dataset need to be traced over the entire lifecycle."* β This is the gap we are filling.
|
| 223 |
+
|
| 224 |
+
---
|
| 225 |
+
|
| 226 |
+
## 8. The Collaboration β Prof Armin Mehrabian
|
| 227 |
+
|
| 228 |
+
**Who:** NLP expert, NASA GES-DISC researcher. Main contributor on `nasa-eo-knowledge-graph` (commit author: `arminmehrabian`). The professor who shared the dataset link with Mukul in class.
|
| 229 |
+
|
| 230 |
+
**Status:** Active, interested. Said "let us work on it and see if we can improve and publish it" after being shown RECON.
|
| 231 |
+
|
| 232 |
+
**His feedback on RECON (received April 2026):**
|
| 233 |
+
After trying the HF Space, he sent five specific points:
|
| 234 |
+
|
| 235 |
+
1. *"I had no idea how to assess the validity of the results"* β output lacks explainability about WHY something was flagged. The verdict alone isn't enough for a domain expert to trust it.
|
| 236 |
+
2. *"Are you actually analyzing content for contradiction, or mostly relying on metadata?"* β Honest methodological question. Currently STALE is mostly metadata-driven (age). CONTRADICTED uses LLM pairwise check on abstracts.
|
| 237 |
+
3. *"I would be careful not to treat recency as validity. Older papers can be foundational."* β **The sharpest critique.** Pure age-based decay is too blunt. A 2003 paper with 10,000 citations is not stale.
|
| 238 |
+
4. *"Think in terms of edge reliability rather than just staleness."* β He reframed the concept. Not "is this paper old?" but "how much should we trust this edge right now?" This is a richer and more defensible framing.
|
| 239 |
+
5. *"Have you considered combining your signal with something like PageRank or citation centrality to preserve important older work?"* β He is pointing at `pagerank_global`, which already exists on every node in his graph. This is him telling us the answer.
|
| 240 |
+
|
| 241 |
+
---
|
| 242 |
+
|
| 243 |
+
## 9. The Revised Technical Direction β Edge Reliability Scoring
|
| 244 |
+
|
| 245 |
+
### The Pivot
|
| 246 |
+
**Old framing:** Staleness detection β flag papers that are old
|
| 247 |
+
**New framing:** Edge Reliability Scoring β score how much each DatasetβPublication edge should be trusted right now
|
| 248 |
+
|
| 249 |
+
This survives the foundational paper objection. A 1998 paper with high PageRank and thousands of citations is reliable. A 2022 paper with 3 citations that contradicts it may be less reliable (or an emerging challenger β needs content signal to distinguish).
|
| 250 |
+
|
| 251 |
+
### The New Formula
|
| 252 |
+
|
| 253 |
+
```
|
| 254 |
+
edge_reliability(dataset_id, publication_id) =
|
| 255 |
+
(citation_centrality Γ w1)
|
| 256 |
+
+ (recency_signal Γ w2)
|
| 257 |
+
+ (content_coherence Γ w3)
|
| 258 |
+
```
|
| 259 |
+
|
| 260 |
+
**citation_centrality** β `pagerank_global` from the professor's graph nodes, normalized to [0,1]. High PageRank = foundational = high reliability contribution regardless of age.
|
| 261 |
+
|
| 262 |
+
**recency_signal** β RECON's existing linear decay formula: `max(0, 1 β age/20)`. Now just one component, not the whole score. Tunable weight `w2`.
|
| 263 |
+
|
| 264 |
+
**content_coherence** β Does this paper's abstract still align with current scientific consensus on this topic? This is the LLM component. Query Semantic Scholar + OpenAlex for papers on the same topic published in the last 3 years, run a lightweight LLM check: "Does [older paper] make claims that are contradicted or superseded by [newer paper]?" Binary or scored output. This is the content analysis Armin asked about.
|
| 265 |
+
|
| 266 |
+
**Suggested starting weights:** w1=0.4, w2=0.3, w3=0.3 β to be ablated.
|
| 267 |
+
|
| 268 |
+
### What Changes in RECON
|
| 269 |
+
|
| 270 |
+
| Current RECON | Revised RECON (v2) |
|
| 271 |
+
|---|---|
|
| 272 |
+
| STALE = mean paper age > 24 months | STALE = low edge_reliability across all three signals |
|
| 273 |
+
| Recency is the primary signal | Recency is one of three weighted inputs |
|
| 274 |
+
| No use of citation network position | `pagerank_global` from graph feeds directly in |
|
| 275 |
+
| Contradiction is binary LLM check | Contradiction weighted by both papers' centrality |
|
| 276 |
+
| Output shows verdict only | Output shows which signal drove the verdict + network trust score |
|
| 277 |
+
| Metric: staleness catch rate | Metric: edge reliability precision + staleness catch rate (both) |
|
| 278 |
+
|
| 279 |
+
### The Explainability Fix
|
| 280 |
+
The prof said he couldn't assess the output. The fix: synthesizer adds a trust summary per paper:
|
| 281 |
+
|
| 282 |
+
```
|
| 283 |
+
[Smith et al., 2019]
|
| 284 |
+
Network reliability: LOW
|
| 285 |
+
Reason: low PageRank (0.12), newer work by Chen et al. 2023 addresses same claim with higher centrality
|
| 286 |
+
```
|
| 287 |
+
|
| 288 |
+
This gives a domain expert exactly what they need to sanity-check the verdict.
|
| 289 |
+
|
| 290 |
+
---
|
| 291 |
+
|
| 292 |
+
## 10. OpenAlex β The New Data Source
|
| 293 |
+
|
| 294 |
+
The professor mentioned OpenAlex during the in-person conversation as a better source than Semantic Scholar alone for Earth science papers.
|
| 295 |
+
|
| 296 |
+
**What it is:** Fully open scholarly database, 271M+ works, free REST API, CC0 license. Replacement for the discontinued Microsoft Academic Graph. Better coverage of Earth science journals and institutional repositories than Semantic Scholar.
|
| 297 |
+
|
| 298 |
+
**API:** `api.openalex.org/works?filter=doi:YOUR_DOI`
|
| 299 |
+
Returns: title, year, cited_by_count, abstract, open_access status, referenced_works, citing_works
|
| 300 |
+
|
| 301 |
+
**Plan:** Run Semantic Scholar + OpenAlex in parallel, deduplicate by DOI, merge into unified paper pool before the hybrid scorer runs. This directly addresses the paywall concern raised in conversation.
|
| 302 |
+
|
| 303 |
+
### Retriever Stack (v2)
|
| 304 |
+
```
|
| 305 |
+
Query
|
| 306 |
+
β
|
| 307 |
+
Semantic Scholar API (~220M papers, strong for ML/CS)
|
| 308 |
+
+
|
| 309 |
+
OpenAlex API (~271M papers, strong for Earth science, fully open)
|
| 310 |
+
+
|
| 311 |
+
CrossRef API (DOI resolution, metadata fill-in for gaps)
|
| 312 |
+
β
|
| 313 |
+
Merged, deduplicated by DOI
|
| 314 |
+
β
|
| 315 |
+
RECON hybrid scorer (semantic Γ 0.5 + recency Γ 0.3 + authority Γ 0.2)
|
| 316 |
+
β
|
| 317 |
+
RECON critic v2 (PASS / STALE / CONTRADICTED / INSUFFICIENT)
|
| 318 |
+
β
|
| 319 |
+
Synthesizer with trust summary per claim
|
| 320 |
+
```
|
| 321 |
+
|
| 322 |
+
---
|
| 323 |
+
|
| 324 |
+
## 11. Paper Strategy
|
| 325 |
+
|
| 326 |
+
### Paper 1 β RECON Standalone (arXiv, cs.IR)
|
| 327 |
+
**Owner:** Mukul (solo)
|
| 328 |
+
**Status:** Ready to write. System is live. Eval is done.
|
| 329 |
+
**Target:** arXiv cs.IR preprint β timestamps the contribution
|
| 330 |
+
**Key ask from prof:** arXiv endorsement (first-time submitter needs it β he can click once)
|
| 331 |
+
**Sections:**
|
| 332 |
+
1. Introduction β temporal supersession as an unaddressed RAG failure mode
|
| 333 |
+
2. Related Work β CRAG, Self-RAG, TG-RAG, DEAN β positioned clearly against each
|
| 334 |
+
3. System Design β four-agent architecture, four-verdict critic, decay ablation
|
| 335 |
+
4. Evaluation β 52% vs 0% result, 130Q benchmark, 5-architecture comparison
|
| 336 |
+
5. Limitations β 0% contradiction catch rate (honest), single domain, single LLM
|
| 337 |
+
6. Future Work β edge reliability extension, NASA KG application (seeds Paper 2)
|
| 338 |
+
|
| 339 |
+
**Important:** The revised "edge reliability" concept introduced from prof's feedback DOES NOT dilute Paper 1. Paper 1 is about the staleness catch rate metric and benchmark. Paper 2 is the graph extension.
|
| 340 |
+
|
| 341 |
+
### Paper 2 β Joint with Prof Armin
|
| 342 |
+
**Owner:** Prof Armin leads, Mukul co-authors
|
| 343 |
+
**Target:** ECIR, SIGIR, or AI for Earth Science workshop
|
| 344 |
+
**Contribution:** Edge reliability scoring for heterogeneous scientific knowledge graphs β no timestamps needed, scores derived from PageRank + recency + content coherence
|
| 345 |
+
**Mukul brings:** The edge reliability mechanism, staleness scorer code, evaluation harness, OpenAlex integration
|
| 346 |
+
**Prof brings:** Dataset access + credentials, GNN training infrastructure, domain expertise, institutional affiliation, venue selection
|
| 347 |
+
**Authorship:** Prof first, Mukul second β this is his dataset, his domain. Second author on a NASA GES-DISC paper is a strong outcome at this stage.
|
| 348 |
+
|
| 349 |
+
---
|
| 350 |
+
|
| 351 |
+
## 12. Immediate Next Steps (Ordered)
|
| 352 |
+
|
| 353 |
+
### This week
|
| 354 |
+
- [ ] Integrate OpenAlex API as second retriever source in `retriever.py`
|
| 355 |
+
- Endpoint: `api.openalex.org/works?filter=doi:X`
|
| 356 |
+
- Merge with S2 results, deduplicate by DOI
|
| 357 |
+
- Test on 20 questions from the existing benchmark
|
| 358 |
+
|
| 359 |
+
- [ ] Add `network_reliability` field to the synthesizer output
|
| 360 |
+
- Show which signal (age / centrality / content) drove each verdict
|
| 361 |
+
- This directly addresses prof's "I couldn't assess the output" feedback
|
| 362 |
+
|
| 363 |
+
- [ ] Upload 130Q benchmark as a public HF dataset
|
| 364 |
+
- Dataset card: what it contains, how it was built, what it measures
|
| 365 |
+
- Required before arXiv paper β paper cites it
|
| 366 |
+
|
| 367 |
+
### Next 2 weeks
|
| 368 |
+
- [ ] Prototype edge_reliability scorer
|
| 369 |
+
- Input: `(publication_id, pagerank_score, year, topic_query)`
|
| 370 |
+
- Output: reliability score [0,1] + which signal dominated
|
| 371 |
+
- Does NOT require KG credentials yet β can test on publication nodes from the public JSON
|
| 372 |
+
|
| 373 |
+
- [ ] Ask prof for arXiv endorsement
|
| 374 |
+
- Natural timing: after showing him the OpenAlex integration + trust summary in the UI
|
| 375 |
+
- One sentence ask: "I'm planning to write this up for arXiv cs.IR β would you be okay endorsing my submission as a first-time submitter?"
|
| 376 |
+
|
| 377 |
+
- [ ] Write the RECON arXiv paper
|
| 378 |
+
- 6β8 pages
|
| 379 |
+
- Do NOT include Paper 2 material β keep it clean and focused on the standalone contribution
|
| 380 |
+
- Mention edge reliability as future work
|
| 381 |
+
|
| 382 |
+
### Before Paper 2
|
| 383 |
+
- [ ] Get KG credentials from prof (needed to run GNN training with weighted edges)
|
| 384 |
+
- [ ] Ask technical questions about publication nodes:
|
| 385 |
+
- Is the `year` field populated for all publication nodes?
|
| 386 |
+
- Are DOIs resolvable to Semantic Scholar/OpenAlex for all publications?
|
| 387 |
+
- What does `pagerank_global` represent exactly β is it global graph PageRank or something else?
|
| 388 |
+
- [ ] Build Earth science staleness benchmark from `es-publications-researchareas`
|
| 389 |
+
- Find papers citing old dataset versions vs papers citing newer versions with improvement language
|
| 390 |
+
- Target: ~50β100 verified supersession chains
|
| 391 |
+
|
| 392 |
+
---
|
| 393 |
+
|
| 394 |
+
## 13. Open Questions (Unresolved, Need Discussion)
|
| 395 |
+
|
| 396 |
+
**Technical:**
|
| 397 |
+
- What weight split between w1 (centrality), w2 (recency), w3 (content) performs best? Needs ablation.
|
| 398 |
+
- How to handle papers with no `pagerank_global` (new nodes, disconnected nodes)?
|
| 399 |
+
- Should content_coherence use the paper's abstract only, or full text where available (OpenAlex has some open access full text)?
|
| 400 |
+
- For a paper that is old BUT has high and *growing* citation trajectory β should that override age? Dynamic signal vs static snapshot?
|
| 401 |
+
|
| 402 |
+
**Research design:**
|
| 403 |
+
- Is the right evaluation metric "edge reliability precision" β i.e., do the edges we score LOW actually correspond to superseded science? Need ground truth for that.
|
| 404 |
+
- Can the 130Q ML benchmark be partially adapted to test the revised formula, or does it need a new benchmark?
|
| 405 |
+
- The contradiction catch rate is 0%. Armin's edge reliability framing might actually unlock this β a contradiction is just two edges pointing in opposite directions with conflicting content. Worth exploring.
|
| 406 |
+
|
| 407 |
+
**Collaboration:**
|
| 408 |
+
- What level of involvement does prof want in the RECON paper (Paper 1)? Acknowledgement only, or something more? Don't assume β ask when the time is right.
|
| 409 |
+
- What venues does he prefer for Paper 2? His prior work appeared at NTRS, AGU, ESIP β might prefer an Earth science venue over a pure IR venue.
|
| 410 |
+
|
| 411 |
+
---
|
| 412 |
+
|
| 413 |
+
## 14. Key People & Links Reference
|
| 414 |
+
|
| 415 |
+
| Item | Detail |
|
| 416 |
+
|---|---|
|
| 417 |
+
| Mukul's GitHub | https://github.com/MukulRay1603/project-recon |
|
| 418 |
+
| RECON HF Space | https://huggingface.co/spaces/MukulRay/recon |
|
| 419 |
+
| NASA KG Dataset | https://huggingface.co/datasets/nasa-gesdisc/nasa-eo-knowledge-graph |
|
| 420 |
+
| NASA GNN Model | https://huggingface.co/nasa-gesdisc/edgraph-gnn-graphsage |
|
| 421 |
+
| NASA Publications Dataset | https://huggingface.co/datasets/nasa-gesdisc/es-publications-researchareas |
|
| 422 |
+
| OpenAlex API docs | https://docs.openalex.org |
|
| 423 |
+
| Semantic Scholar API | https://api.semanticscholar.org/graph/v1/paper/search |
|
| 424 |
+
| CrossRef API | https://api.crossref.org/works/{doi} |
|
| 425 |
+
| CRAG paper (related work) | https://arxiv.org/abs/2401.15884 |
|
| 426 |
+
| TG-RAG paper (related work) | https://arxiv.org/abs/2510.13590 |
|
| 427 |
+
| DEAN paper (related work) | https://arxiv.org/abs/2402.03732 |
|
| 428 |
+
| Prof's NTRS paper on dataset lifecycle | https://ntrs.nasa.gov/citations/20240010838 |
|
| 429 |
+
|
| 430 |
+
---
|
| 431 |
+
|
| 432 |
+
## 15. How To Use This Document in Claude Code
|
| 433 |
+
|
| 434 |
+
When starting a new session in the RECON repo with Claude Code, paste this at the start:
|
| 435 |
+
|
| 436 |
+
> "Read RECON_CONTEXT.md in the project root for full context on what RECON is, where we are in the research, and what needs to be built next. Then do a code audit β read the key source files (graph.py, critic.py, retriever.py, retriever_utils.py, synthesizer.py, state.py) and tell me: (1) the current state of the codebase vs what's described in the context doc, (2) what's already implemented vs what's planned, (3) any discrepancies or things that look wrong."
|
| 437 |
+
|
| 438 |
+
That gives Claude Code everything it needs to do a proper audit and continue from exactly here.
|
eval/archived/.gitkeep
ADDED
|
File without changes
|