ledger: fresh arXiv cs.AI top-10 extraction (2026-10-23)

This commit is contained in:
ledger committed 2026-10-23 03:48:49 +00:00
1 parent df3327384d
commit c729afef3a
5 files changed
+396

No files matched your search

@@ -0,0 +1,11 @@
id,submitted,title,authors,categories,summary
http://arxiv.org/abs/2610.31667v1,2026-10-22T17:59:48Z,Direct Pass@$k$ Optimization for Thought Pruning: Balancing Quality and Diversity in Test-Time Reasoning,Mahdi Salmani; Adel Javanmard; Devansh Gupta,"cs.AI, cs.CL","Test-time scaling has emerged as a key inference strategy for reasoning models, where a model generates a large number of candidate solutions in the hope of finding at least one correct solution. Running all candidate solutions to completion can be computationally demanding, so recent work prunes th"
http://arxiv.org/abs/2610.31657v1,2026-10-22T17:58:52Z,Cost-Aware Abstention for LLM-Based IT Ticket Classification,Sachin Gupta,"cs.LG, cs.AI, cs.CL","Wrong automatic routing of an IT support ticket can cost more than human triage. We evaluate cost-aware abstention as an offline, cost-conditional readiness assessment: select a routing policy on calibration data under explicit costs, then evaluate that frozen policy once on held-out test data. On a"
http://arxiv.org/abs/2610.31656v1,2026-10-22T17:58:27Z,METTA: Memory-Enhanced Test-Time Adaptation for Meta-Reinforcement Learning,Ali Najar; Hosein Hasani; Amir Kooshan Fattah,"cs.LG, cs.AI","Meta-reinforcement learning aims to train agents that adapt quickly to unseen tasks from limited interaction, but this requires representing task evidence over long interaction histories. Classical recurrent agents compress experience into hidden states, while transformer-based agents retrieve from "
http://arxiv.org/abs/2610.31650v1,2026-10-22T17:57:04Z,EpiSEM-Bench: Evaluating Safety and Evidence Recovery in LLM Agents under Missing Evidence,Qijin Zhang; Hanzhen Wang; Yuehan Zhao,"cs.AI, cs.LG","Tool-using language model agents rely on environmental facts to decide whether an action is permitted. When a tool response omits a safety-relevant fact, an agent may carry out a prohibited action even though the user request is benign and every returned statement is true. We introduce \bench{}, an "
http://arxiv.org/abs/2610.31646v1,2026-10-22T17:56:13Z,Low-Bit N-Gram Embeddings for Language Models,Stephen Chung; Wenyu Du,"cs.CL, cs.AI","Many recent open-weight language models use n-gram embedding tables to improve performance. These tables store learned representations of short token sequences, such as pairs or triples of consecutive tokens, which the model retrieves during processing. However, they can require substantial memory: "
http://arxiv.org/abs/2610.31639v1,2026-10-22T17:52:56Z,Causal Chain of Thought: Mitigating Attention Leakage via Context Isolation,Gabriele Dominici; Teague McMillan; Fazl Barez,"cs.LG, cs.AI","Chain-of-thought (CoT) prompting elicits step-by-step rationales that appear to explain model predictions, but there is no guarantee these steps causally drive the final answer. In standard autoregressive generation, dense attention allows each reasoning step to attend to the full context, enabling "
http://arxiv.org/abs/2610.31624v1,2026-10-22T17:44:41Z,Questioning Instrumental Convergence in RLVR: Checkpoint Evidence from OLMo-3,Barış Alparslan; Sandy Tanwisuth; Caleb Petterson,"cs.LG, cs.AI","Instrumental convergence is often invoked as a general reason to expect capable agents to acquire or express power-seeking subgoals: self-preservation, resource acquisition, deception, or resistance to oversight which poses an important threat to the society. For LLMs, reinforcement learning is the "
http://arxiv.org/abs/2610.31606v1,2026-10-22T17:36:14Z,How Ground Truth Shapes Retrieval Scores: Evidence-Aware Evaluation of a Retrieval-Augmented Generation System for Breast Lesions,Miguel Mochizuki Silva; Samuel Ismael; Mateus C. Dias,"cs.CL, cs.AI","Purpose: To describe an evidence-aware retrieval evaluation protocol for a clinical retrieval-augmented generation (RAG) system over breast lesion management literature, addressing the dependence of retrieval scores on annotation coverage. Methods: An 18-document corpus and an 18-query development b"
http://arxiv.org/abs/2610.31593v1,2026-10-22T17:26:42Z,Simulated Control Evals,Jeffrey Olmo; David Zhang; Tyler Tracy,cs.AI,"Control evaluations measure whether safeguards can prevent an AI model from causing undesired outcomes even when it is intentionally trying to do so. These evaluations typically use purpose-built control settings and extrapolate their results to a model's deployment. However, the effectiveness of sa"
http://arxiv.org/abs/2610.31588v1,2026-10-22T17:23:39Z,VERA: A Responsible AI Dashboard for Assessing LLM Deployments in Light of the EU AI Act,Robin Quériaux; Solveig Bachellery; Léa Déléris,"cs.SE, cs.AI, cs.CY",Institutions that deploy large language models in regulated settings often need technical evidence of responsible AI practices before approving a deployment. COMPL-AI provides a technical interpretation of the EU AI Act that organises this evidence under six principle groups and eighteen technical r
1 id submitted title authors categories summary
2 http://arxiv.org/abs/2610.31667v1 2026-10-22T17:59:48Z Direct Pass@$k$ Optimization for Thought Pruning: Balancing Quality and Diversity in Test-Time Reasoning Mahdi Salmani; Adel Javanmard; Devansh Gupta cs.AI, cs.CL Test-time scaling has emerged as a key inference strategy for reasoning models, where a model generates a large number of candidate solutions in the hope of finding at least one correct solution. Running all candidate solutions to completion can be computationally demanding, so recent work prunes th
3 http://arxiv.org/abs/2610.31657v1 2026-10-22T17:58:52Z Cost-Aware Abstention for LLM-Based IT Ticket Classification Sachin Gupta cs.LG, cs.AI, cs.CL Wrong automatic routing of an IT support ticket can cost more than human triage. We evaluate cost-aware abstention as an offline, cost-conditional readiness assessment: select a routing policy on calibration data under explicit costs, then evaluate that frozen policy once on held-out test data. On a
4 http://arxiv.org/abs/2610.31656v1 2026-10-22T17:58:27Z METTA: Memory-Enhanced Test-Time Adaptation for Meta-Reinforcement Learning Ali Najar; Hosein Hasani; Amir Kooshan Fattah cs.LG, cs.AI Meta-reinforcement learning aims to train agents that adapt quickly to unseen tasks from limited interaction, but this requires representing task evidence over long interaction histories. Classical recurrent agents compress experience into hidden states, while transformer-based agents retrieve from
5 http://arxiv.org/abs/2610.31650v1 2026-10-22T17:57:04Z EpiSEM-Bench: Evaluating Safety and Evidence Recovery in LLM Agents under Missing Evidence Qijin Zhang; Hanzhen Wang; Yuehan Zhao cs.AI, cs.LG Tool-using language model agents rely on environmental facts to decide whether an action is permitted. When a tool response omits a safety-relevant fact, an agent may carry out a prohibited action even though the user request is benign and every returned statement is true. We introduce \bench{}, an
6 http://arxiv.org/abs/2610.31646v1 2026-10-22T17:56:13Z Low-Bit N-Gram Embeddings for Language Models Stephen Chung; Wenyu Du cs.CL, cs.AI Many recent open-weight language models use n-gram embedding tables to improve performance. These tables store learned representations of short token sequences, such as pairs or triples of consecutive tokens, which the model retrieves during processing. However, they can require substantial memory:
7 http://arxiv.org/abs/2610.31639v1 2026-10-22T17:52:56Z Causal Chain of Thought: Mitigating Attention Leakage via Context Isolation Gabriele Dominici; Teague McMillan; Fazl Barez cs.LG, cs.AI Chain-of-thought (CoT) prompting elicits step-by-step rationales that appear to explain model predictions, but there is no guarantee these steps causally drive the final answer. In standard autoregressive generation, dense attention allows each reasoning step to attend to the full context, enabling
8 http://arxiv.org/abs/2610.31624v1 2026-10-22T17:44:41Z Questioning Instrumental Convergence in RLVR: Checkpoint Evidence from OLMo-3 Barış Alparslan; Sandy Tanwisuth; Caleb Petterson cs.LG, cs.AI Instrumental convergence is often invoked as a general reason to expect capable agents to acquire or express power-seeking subgoals: self-preservation, resource acquisition, deception, or resistance to oversight which poses an important threat to the society. For LLMs, reinforcement learning is the
9 http://arxiv.org/abs/2610.31606v1 2026-10-22T17:36:14Z How Ground Truth Shapes Retrieval Scores: Evidence-Aware Evaluation of a Retrieval-Augmented Generation System for Breast Lesions Miguel Mochizuki Silva; Samuel Ismael; Mateus C. Dias cs.CL, cs.AI Purpose: To describe an evidence-aware retrieval evaluation protocol for a clinical retrieval-augmented generation (RAG) system over breast lesion management literature, addressing the dependence of retrieval scores on annotation coverage. Methods: An 18-document corpus and an 18-query development b
10 http://arxiv.org/abs/2610.31593v1 2026-10-22T17:26:42Z Simulated Control Evals Jeffrey Olmo; David Zhang; Tyler Tracy cs.AI Control evaluations measure whether safeguards can prevent an AI model from causing undesired outcomes even when it is intentionally trying to do so. These evaluations typically use purpose-built control settings and extrapolate their results to a model's deployment. However, the effectiveness of sa
11 http://arxiv.org/abs/2610.31588v1 2026-10-22T17:23:39Z VERA: A Responsible AI Dashboard for Assessing LLM Deployments in Light of the EU AI Act Robin Quériaux; Solveig Bachellery; Léa Déléris cs.SE, cs.AI, cs.CY Institutions that deploy large language models in regulated settings often need technical evidence of responsible AI practices before approving a deployment. COMPL-AI provides a technical interpretation of the EU AI Act that organises this evidence under six principle groups and eighteen technical r
@@ -0,0 +1,89 @@
{
"query": "https://export.arxiv.org/api/query?search_query=cat:cs.AI&max_results=10&sortBy=submittedDate&sortOrder=descending",
"stamp": "2026-10-23T03:48:28ZZ",
"source": "export.arxiv.org",
"max_results": 10,
"totalResults": 10,
"rows": [
{
"id": "http://arxiv.org/abs/2610.31667v1",
"submitted": "2026-10-22T17:59:48Z",
"title": "Direct Pass@$k$ Optimization for Thought Pruning: Balancing Quality and Diversity in Test-Time Reasoning",
"authors": "Mahdi Salmani; Adel Javanmard; Devansh Gupta",
"categories": "cs.AI, cs.CL",
"summary": "Test-time scaling has emerged as a key inference strategy for reasoning models, where a model generates a large number of candidate solutions in the hope of finding at least one correct solution. Running all candidate solutions to completion can be computationally demanding, so recent work prunes th"
},
{
"id": "http://arxiv.org/abs/2610.31657v1",
"submitted": "2026-10-22T17:58:52Z",
"title": "Cost-Aware Abstention for LLM-Based IT Ticket Classification",
"authors": "Sachin Gupta",
"categories": "cs.LG, cs.AI, cs.CL",
"summary": "Wrong automatic routing of an IT support ticket can cost more than human triage. We evaluate cost-aware abstention as an offline, cost-conditional readiness assessment: select a routing policy on calibration data under explicit costs, then evaluate that frozen policy once on held-out test data. On a"
},
{
"id": "http://arxiv.org/abs/2610.31656v1",
"submitted": "2026-10-22T17:58:27Z",
"title": "METTA: Memory-Enhanced Test-Time Adaptation for Meta-Reinforcement Learning",
"authors": "Ali Najar; Hosein Hasani; Amir Kooshan Fattah",
"categories": "cs.LG, cs.AI",
"summary": "Meta-reinforcement learning aims to train agents that adapt quickly to unseen tasks from limited interaction, but this requires representing task evidence over long interaction histories. Classical recurrent agents compress experience into hidden states, while transformer-based agents retrieve from "
},
{
"id": "http://arxiv.org/abs/2610.31650v1",
"submitted": "2026-10-22T17:57:04Z",
"title": "EpiSEM-Bench: Evaluating Safety and Evidence Recovery in LLM Agents under Missing Evidence",
"authors": "Qijin Zhang; Hanzhen Wang; Yuehan Zhao",
"categories": "cs.AI, cs.LG",
"summary": "Tool-using language model agents rely on environmental facts to decide whether an action is permitted. When a tool response omits a safety-relevant fact, an agent may carry out a prohibited action even though the user request is benign and every returned statement is true. We introduce \\bench{}, an "
},
{
"id": "http://arxiv.org/abs/2610.31646v1",
"submitted": "2026-10-22T17:56:13Z",
"title": "Low-Bit N-Gram Embeddings for Language Models",
"authors": "Stephen Chung; Wenyu Du",
"categories": "cs.CL, cs.AI",
"summary": "Many recent open-weight language models use n-gram embedding tables to improve performance. These tables store learned representations of short token sequences, such as pairs or triples of consecutive tokens, which the model retrieves during processing. However, they can require substantial memory: "
},
{
"id": "http://arxiv.org/abs/2610.31639v1",
"submitted": "2026-10-22T17:52:56Z",
"title": "Causal Chain of Thought: Mitigating Attention Leakage via Context Isolation",
"authors": "Gabriele Dominici; Teague McMillan; Fazl Barez",
"categories": "cs.LG, cs.AI",
"summary": "Chain-of-thought (CoT) prompting elicits step-by-step rationales that appear to explain model predictions, but there is no guarantee these steps causally drive the final answer. In standard autoregressive generation, dense attention allows each reasoning step to attend to the full context, enabling "
},
{
"id": "http://arxiv.org/abs/2610.31624v1",
"submitted": "2026-10-22T17:44:41Z",
"title": "Questioning Instrumental Convergence in RLVR: Checkpoint Evidence from OLMo-3",
"authors": "Barış Alparslan; Sandy Tanwisuth; Caleb Petterson",
"categories": "cs.LG, cs.AI",
"summary": "Instrumental convergence is often invoked as a general reason to expect capable agents to acquire or express power-seeking subgoals: self-preservation, resource acquisition, deception, or resistance to oversight which poses an important threat to the society. For LLMs, reinforcement learning is the "
},
{
"id": "http://arxiv.org/abs/2610.31606v1",
"submitted": "2026-10-22T17:36:14Z",
"title": "How Ground Truth Shapes Retrieval Scores: Evidence-Aware Evaluation of a Retrieval-Augmented Generation System for Breast Lesions",
"authors": "Miguel Mochizuki Silva; Samuel Ismael; Mateus C. Dias",
"categories": "cs.CL, cs.AI",
"summary": "Purpose: To describe an evidence-aware retrieval evaluation protocol for a clinical retrieval-augmented generation (RAG) system over breast lesion management literature, addressing the dependence of retrieval scores on annotation coverage. Methods: An 18-document corpus and an 18-query development b"
},
{
"id": "http://arxiv.org/abs/2610.31593v1",
"submitted": "2026-10-22T17:26:42Z",
"title": "Simulated Control Evals",
"authors": "Jeffrey Olmo; David Zhang; Tyler Tracy",
"categories": "cs.AI",
"summary": "Control evaluations measure whether safeguards can prevent an AI model from causing undesired outcomes even when it is intentionally trying to do so. These evaluations typically use purpose-built control settings and extrapolate their results to a model's deployment. However, the effectiveness of sa"
},
{
"id": "http://arxiv.org/abs/2610.31588v1",
"submitted": "2026-10-22T17:23:39Z",
"title": "VERA: A Responsible AI Dashboard for Assessing LLM Deployments in Light of the EU AI Act",
"authors": "Robin Quériaux; Solveig Bachellery; Léa Déléris",
"categories": "cs.SE, cs.AI, cs.CY",
"summary": "Institutions that deploy large language models in regulated settings often need technical evidence of responsible AI practices before approving a deployment. COMPL-AI provides a technical interpretation of the EU AI Act that organises this evidence under six principle groups and eighteen technical r"
}
]
}
@@ -0,0 +1,35 @@
# arXiv cs.AI - top 10 papers by submission date (fresh extraction)
Source: https://export.arxiv.org/api/query?search_query=cat:cs.AI&max_results=10&sortBy=submittedDate&sortOrder=descending
Retrieved: 2026-10-23T03:48:28ZZ (UTC)
Rows: 10 of max_results=10. Sorted most-recent submission first.
## Table
| # | id | submitted | title | authors | categories |
|---|----|-----------|-------|---------|------------|
| 1 | [http://arxiv.org/abs/2610.31667v1](http://arxiv.org/abs/2610.31667v1) | 2026-10-22T17:59:48Z | Direct Pass@$k$ Optimization for Thought Pruning: Balancing Quality and Diversity in Test-Time Reasoning | Mahdi Salmani; Adel Javanmard; Devansh Gupta | cs.AI, cs.CL |
| 2 | [http://arxiv.org/abs/2610.31657v1](http://arxiv.org/abs/2610.31657v1) | 2026-10-22T17:58:52Z | Cost-Aware Abstention for LLM-Based IT Ticket Classification | Sachin Gupta | cs.LG, cs.AI, cs.CL |
| 3 | [http://arxiv.org/abs/2610.31656v1](http://arxiv.org/abs/2610.31656v1) | 2026-10-22T17:58:27Z | METTA: Memory-Enhanced Test-Time Adaptation for Meta-Reinforcement Learning | Ali Najar; Hosein Hasani; Amir Kooshan Fattah | cs.LG, cs.AI |
| 4 | [http://arxiv.org/abs/2610.31650v1](http://arxiv.org/abs/2610.31650v1) | 2026-10-22T17:57:04Z | EpiSEM-Bench: Evaluating Safety and Evidence Recovery in LLM Agents under Missing Evidence | Qijin Zhang; Hanzhen Wang; Yuehan Zhao | cs.AI, cs.LG |
| 5 | [http://arxiv.org/abs/2610.31646v1](http://arxiv.org/abs/2610.31646v1) | 2026-10-22T17:56:13Z | Low-Bit N-Gram Embeddings for Language Models | Stephen Chung; Wenyu Du | cs.CL, cs.AI |
| 6 | [http://arxiv.org/abs/2610.31639v1](http://arxiv.org/abs/2610.31639v1) | 2026-10-22T17:52:56Z | Causal Chain of Thought: Mitigating Attention Leakage via Context Isolation | Gabriele Dominici; Teague McMillan; Fazl Barez | cs.LG, cs.AI |
| 7 | [http://arxiv.org/abs/2610.31624v1](http://arxiv.org/abs/2610.31624v1) | 2026-10-22T17:44:41Z | Questioning Instrumental Convergence in RLVR: Checkpoint Evidence from OLMo-3 | Barış Alparslan; Sandy Tanwisuth; Caleb Petterson | cs.LG, cs.AI |
| 8 | [http://arxiv.org/abs/2610.31606v1](http://arxiv.org/abs/2610.31606v1) | 2026-10-22T17:36:14Z | How Ground Truth Shapes Retrieval Scores: Evidence-Aware Evaluation of a Retrieval-Augmented Generation System for Breast Lesions | Miguel Mochizuki Silva; Samuel Ismael; Mateus C. Dias | cs.CL, cs.AI |
| 9 | [http://arxiv.org/abs/2610.31593v1](http://arxiv.org/abs/2610.31593v1) | 2026-10-22T17:26:42Z | Simulated Control Evals | Jeffrey Olmo; David Zhang; Tyler Tracy | cs.AI |
| 10 | [http://arxiv.org/abs/2610.31588v1](http://arxiv.org/abs/2610.31588v1) | 2026-10-22T17:23:39Z | VERA: A Responsible AI Dashboard for Assessing LLM Deployments in Light of the EU AI Act | Robin Quériaux; Solveig Bachellery; Léa Déléris | cs.SE, cs.AI, cs.CY |
## Schema
| column | type | note |
|--------|------|------|
| id | string | canonical arxiv abs URL |
| submitted | string | ISO-8601 datetime |
| title | string | verbatim title |
| authors | string | first three authors, ;-joined |
| categories | string | arXiv subject terms, ,-joined |
| summary | string | first ~300 chars of abstract |
## Evidence
Every field is a verbatim field of the live Atom payload at 2026-10-23T03:48:28ZZ. No value was edited or invented.
@@ -0,0 +1,146 @@
#!/usr/bin/env python3
"""Build a FRESH arXiv cs.AI top-10 extraction (ledger / Extract lane).
Source: https://export.arxiv.org/api/query?search_query=cat:cs.AI&max_results=10&sortBy=submittedDate&sortOrder=descending
Retrieved (UTC): stamp recorded on each artifact.
Outputs (same directory):
arxiv-csai-fresh-<STAMP>.csv | .json | .md
Conventions (ledger lane):
- CSV: one row per paper; description-free columns; newlines stripped from summary.
- JSON: ordered list of rows + feed metadata (query, stamp, totalResults).
- MD: human-readable Markdown table with links.
- Verdict: sibling verify_arxiv_csai_fresh.py re-fetches the same query and diffs
the artifact against a fresh extraction; exit 0 == artifact matches fresh fetch.
Field definitions (each value read verbatim from the Atom payload; no field invented):
id canonical arxiv abs URL of the paper entry.
submitted ISO-8601 submission timestamp ("published" element).
title verbatim article title.
authors first three author names, "; "-joined (empty list -> "").
categories comma-joined arXiv subject terms (empty -> "").
summary first ~300 chars of the abstract, newlines stripped.
"""
import csv
import json
import os
import sys
import urllib.request
import xml.etree.ElementTree as ET
from datetime import datetime, timezone
QUERY = ("https://export.arxiv.org/api/query"
"?search_query=cat:cs.AI&max_results=10"
"&sortBy=submittedDate&sortOrder=descending")
MAX_RESULTS = 10
NS = {"atom": "http://www.w3.org/2005/Atom", "arxiv": "http://arxiv.org/schemas/atom"}
OUT_DIR = os.path.dirname(os.path.abspath(__file__))
def local(tag):
return tag.split("}", 1)[-1]
def fetch_atom(url):
req = urllib.request.Request(url, headers={"User-Agent": "ledger/1.0"})
with urllib.request.urlopen(req, timeout=40) as r:
raw = r.read()
if r.status != 200:
sys.exit("arXiv API returned HTTP %s" % r.status)
return raw
def parse_atom(xml_bytes):
root = ET.fromstring(xml_bytes)
entries = []
for e in root.iter():
if local(e.tag) != "entry":
continue
id_ = next((c.text for c in e.iter() if local(c.tag) == "id"), "").strip()
title = next((c.text for c in e.iter() if local(c.tag) == "title"), "").strip()
submitted = next((c.text for c in e.iter() if local(c.tag) == "published"), "").strip()
authors = [a.text.strip() for a in e.iter() if local(a.tag) == "name"]
terms = [c.get("term") for c in e.iter() if local(c.tag) == "category" and c.get("term")]
summary = next((c.text for c in e.iter() if local(c.tag) == "summary"), "").strip()
summary = " ".join(summary.split())[:300]
entries.append({
"id": id_, "submitted": submitted, "title": title,
"authors": "; ".join(authors[:3]), "categories": ", ".join(terms), "summary": summary,
})
return entries
def build_outputs(rows):
st = datetime.now(timezone.utc).strftime("%Y-%m-%d")
now = datetime.now(timezone.utc).strftime("%H:%M:%SZ")
csv_path = os.path.join(OUT_DIR, "arxiv-csai-fresh-%s.csv" % st)
json_path = os.path.join(OUT_DIR, "arxiv-csai-fresh-%s.json" % st)
md_path = os.path.join(OUT_DIR, "arxiv-csai-fresh-%s.md" % st)
with open(csv_path, "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=["id", "submitted", "title", "authors", "categories", "summary"], lineterminator="\n")
w.writeheader()
for r in rows:
w.writerow(r)
with open(json_path, "w", encoding="utf-8") as f:
json.dump({"query": QUERY, "stamp": "%sT%sZ" % (st, now), "source": "export.arxiv.org",
"max_results": MAX_RESULTS, "totalResults": len(rows), "rows": rows}, f, ensure_ascii=False, indent=2)
lines = [
"# arXiv cs.AI - top 10 papers by submission date (fresh extraction)",
"",
"Source: https://export.arxiv.org/api/query?search_query=cat:cs.AI&max_results=10&sortBy=submittedDate&sortOrder=descending",
"Retrieved: %sT%sZ (UTC)" % (st, now),
"Rows: %d of max_results=%d. Sorted most-recent submission first." % (len(rows), MAX_RESULTS),
"",
"## Table",
"",
"| # | id | submitted | title | authors | categories |",
"|---|----|-----------|-------|---------|------------|",
]
for i, r in enumerate(rows, 1):
lines.append("| {n} | [{id}]({id}) | {sub} | {title} | {auth} | {cats} |".format(
n=i, id=r["id"], sub=r["submitted"], title=r["title"],
auth=r["authors"], cats=r["categories"]))
lines += [
"",
"## Schema",
"",
"| column | type | note |",
"|--------|------|------|",
"| id | string | canonical arxiv abs URL |",
"| submitted | string | ISO-8601 datetime |",
"| title | string | verbatim title |",
"| authors | string | first three authors, ;-joined |",
"| categories | string | arXiv subject terms, ,-joined |",
"| summary | string | first ~300 chars of abstract |",
"",
"## Evidence",
"",
"Every field is a verbatim field of the live Atom payload at %sT%sZ. No value was edited or invented." % (st, now),
"",
]
with open(md_path, "w", encoding="utf-8") as f:
f.write("\n".join(lines))
print("fetched %d papers (stamp=%sT%sZ)" % (len(rows), st, now))
print(" csv: %s" % csv_path)
print(" json: %s" % json_path)
print(" md: %s" % md_path)
return csv_path, json_path, md_path
def main():
xml_bytes = fetch_atom(QUERY)
rows = parse_atom(xml_bytes)
if len(rows) != MAX_RESULTS:
print("WARNING: expected %d rows, got %d" % (MAX_RESULTS, len(rows)), file=sys.stderr)
build_outputs(rows)
return 0
if __name__ == "__main__":
sys.exit(main())
@@ -0,0 +1,115 @@
#!/usr/bin/env python3
"""Verification for the fresh arXiv cs.AI extraction (ledger / Extract lane).
Re-fetches the same arXiv API query the artifact was built from and checks that
the on-disk data matches a fresh extraction (re-extract + exact diff), validates
the schema, and checks the row count.
House exit contract: 0 = artifact matches a fresh fetch (correct); nonzero = mismatch.
"""
import json
import sys
import urllib.request
from datetime import datetime, timezone
OUT_DIR = "/root/troupe-standup/wizard-work/ledger"
ARTIFACT_FILES = ["arxiv-csai-fresh-2026-10-23.csv",
"arxiv-csai-fresh-2026-10-23.json",
"arxiv-csai-fresh-2026-10-23.md"]
QUERY = ("https://export.arxiv.org/api/query"
"?search_query=cat:cs.AI&max_results=10"
"&sortBy=submittedDate&sortOrder=descending")
MAX_RESULTS = 10
fails = []
def check(name, cond, detail=""):
print("[%s] %s %s" % ("PASS" if cond else "FAIL", name, detail))
if not cond:
fails.append(name)
def local(tag):
return tag.split("}", 1)[-1]
def fetch_atom(url):
req = urllib.request.Request(url, headers={"User-Agent": "ledger/1.0"})
with urllib.request.urlopen(req, timeout=40) as r:
raw = r.read()
if r.status != 200:
sys.exit("arXiv API returned HTTP %s" % r.status)
return raw
def parse_atom(xml_bytes):
import xml.etree.ElementTree as ET
root = ET.fromstring(xml_bytes)
entries = []
for e in root.iter():
if local(e.tag) != "entry":
continue
id_ = next((c.text for c in e.iter() if local(c.tag) == "id"), "").strip()
title = next((c.text for c in e.iter() if local(c.tag) == "title"), "").strip()
submitted = next((c.text for c in e.iter() if local(c.tag) == "published"), "").strip()
authors = [a.text.strip() for a in e.iter() if local(a.tag) == "name"]
terms = [c.get("term") for c in e.iter() if local(c.tag) == "category" and c.get("term")]
summary = next((c.text for c in e.iter() if local(c.tag) == "summary"), "").strip()
summary = " ".join(summary.split())[:300]
entries.append({"id": id_, "submitted": submitted, "title": title,
"authors": "; ".join(authors[:3]),
"categories": ", ".join(terms), "summary": summary})
return entries
def main():
# 1) fresh fetch + re-extract
fresh_xml = fetch_atom(QUERY)
fresh = parse_atom(fresh_xml)
check("fresh row count == max_results", len(fresh) == MAX_RESULTS, "got %d" % len(fresh))
# 2) artifact present and readable
for fn in ARTIFACT_FILES:
try:
open(OUT_DIR + "/" + fn, encoding="utf-8").read()
except OSError as exc:
check("artifact present " + fn, False, str(exc))
return 1
with open(OUT_DIR + "/arxiv-csai-fresh-2026-10-23.json", encoding="utf-8") as f:
artifact = json.load(f)
check("artifact row count == max_results", len(artifact["rows"]) == MAX_RESULTS,
"got %d" % len(artifact["rows"]))
# 3) exact diff against a fresh extraction
fresh.sort(key=lambda r: r["submitted"], reverse=True)
artifact_sorted = sorted(artifact["rows"], key=lambda r: r["submitted"], reverse=True)
check("id set matches a fresh fetch",
[r["id"] for r in artifact_sorted] == [r["id"] for r in fresh],
"artifact %d rows vs fresh %d rows" % (len(artifact_sorted), len(fresh)))
# 4) per-row exact content equality
exact_match = all(
a["id"] == f["id"] and a["submitted"] == f["submitted"] and a["title"] == f["title"]
and a["authors"] == f["authors"] and a["categories"] == f["categories"]
and a["summary"] == f["summary"]
for a, f in zip(artifact_sorted, fresh))
check("every field identical to a fresh fetch", exact_match)
# 5) schema + integrity
schema_ok = all(set(r.keys()) == {"id", "submitted", "title", "authors", "categories", "summary"}
for r in artifact["rows"])
check("schema keys exact", schema_ok)
iso_ok = all(isinstance(r["submitted"], str) and "T" in r["submitted"] for r in artifact["rows"])
check("submitted is ISO-8601 datetime", iso_ok)
nonblank = all(r["id"] and r["title"] and r["submitted"] and r["categories"] for r in artifact["rows"])
check("no blank id/title/submitted/categories", nonblank)
check("totalResults recorded", artifact.get("totalResults") == MAX_RESULTS)
print("verdict: %s" % ("PASS" if not fails else "FAIL"))
sys.exit(1 if fails else 0)
if __name__ == "__main__":
main()