MukulRay commited on
Commit
77669a9
Β·
1 Parent(s): fa075db

Phase 0: branch setup for v2-edge-reliability

Browse files
Files changed (3) hide show
  1. CHANGELOG.md +9 -0
  2. RECON_CONTEXT.md +438 -0
  3. 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