Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,15 @@ This repository is the open data and maintenance layer behind the **web-first re
The [interactive catalog](https://micromilo.github.io/awesome-claude-code-codex-papers/) is the fastest way to:

- search systems, tasks, methods, authors, and reported results;
- choose a research domain or conference, then refine by product, evidence class, method, and comparison fairness;
- choose a research domain or conference, then refine by product, evidence class, and method;
- inspect baseline models, versions, budgets, evidence locations, and caveats;
- switch between English and Chinese without reading giant Markdown tables.

## Evidence standard

This is not a leaderboard. Product versions, backbone models, budgets, tools, and task domains often differ. Every entry separates the paper's reported result from our comparison controls and caveats. Missing details stay explicitly `unknown`.

For raw or generated research material, use the [paper dossiers](papers/README.md), [domain view](views/by-domain.md), [conference view](views/by-conference.md), [fair-comparison view](views/fair-comparisons.md), or [machine-readable JSON](data/papers.json).
For raw or generated research material, use the [paper dossiers](papers/README.md), [domain view](views/by-domain.md), [conference view](views/by-conference.md), or [machine-readable JSON](data/papers.json).

## Contributing

Expand Down
4 changes: 2 additions & 2 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,15 @@
[可交互论文目录](https://micromilo.github.io/awesome-claude-code-codex-papers/)适合直接:

- 搜索系统、任务、方法、作者和论文结果;
- 先选择研究领域或会议,再按产品、证据类型、方法和实验公平性细筛
- 先选择研究领域或会议,再按产品、证据类型和方法细筛
- 查看 baseline 模型、版本、预算、证据位置和限制;
- 在中英文之间切换,不再阅读超长 Markdown 表格。

## 证据标准

这不是排行榜。产品版本、底层模型、预算、工具权限和任务领域经常不同。每条记录都会分开呈现论文报告的结果、实验控制和限制;论文没写清的内容会保留为 `unknown`。

需要原始或生成资料时,可以查看[论文证据页](papers/README.md)、[按领域浏览](views/by-domain.md)、[按会议浏览](views/by-conference.md)、[公平对比视图](views/fair-comparisons.md)或[机器可读 JSON](data/papers.json)。
需要原始或生成资料时,可以查看[论文证据页](papers/README.md)、[按领域浏览](views/by-domain.md)、[按会议浏览](views/by-conference.md)或[机器可读 JSON](data/papers.json)。

## 参与贡献

Expand Down
135 changes: 13 additions & 122 deletions website/app/CatalogExplorer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { useEffect, useMemo, useRef, useState } from "react";
type ProductId = "claude-code" | "codex-cli" | "openai-codex-model";
type Classification = "direct" | "related" | "evaluation" | "historical";
type Language = "en" | "zh";
type FairnessFilter = "all" | "controlled" | "unknown" | "mismatch";
type ConferenceId =
| "AAAI"
| "ASE"
Expand Down Expand Up @@ -114,13 +113,12 @@ const copy = {
papers: "Papers",
coverage: "Coverage",
methods: "Patterns",
fairness: "Fairness",
star: "Star on GitHub ↗",
eyebrow: "Evidence, not leaderboard hype",
heroLead: "What actually beats",
heroAccent: "Claude Code & Codex?",
heroDeck:
"A readable research index for the methods, controls, and caveats behind production coding-agent comparisons.",
"A readable research index for the models, methods, results, and caveats behind production coding-agent comparisons.",
explore: "Explore the evidence ↓",
reviewed: "Last reviewed",
reviewedPapers: "reviewed papers",
Expand All @@ -134,11 +132,11 @@ const copy = {
domains: "Research domains",
conferences: "Conferences / sources",
catalogEyebrow: "Research catalog",
catalogTitle: "Start with the result. Open the controls only when needed.",
catalogTitle: "See the model and result before opening the details.",
search: "Search systems, tasks, methods…",
product: "Product",
modelsUsed: "Models used",
evidenceClass: "Evidence class",
comparison: "Comparison",
conference: "Conference / source",
exactVenue: "Exact venue",
method: "Method",
Expand All @@ -147,9 +145,6 @@ const copy = {
related: "Related",
evaluation: "Evaluation",
historical: "Historical",
controlled: "Same model + budget",
unknown: "Controls unclear",
mismatch: "Known mismatch",
clear: "Clear filters",
results: "matching papers",
noResults: "No paper matches these filters.",
Expand All @@ -161,14 +156,6 @@ const copy = {
methodTitle: "Structure around the model keeps winning.",
methodDeck:
"Select a pattern to see the papers behind it. Counts are generated from the same reviewed catalog.",
fairnessEyebrow: "Comparison sanity check",
fairnessTitle: "A direct comparison is not automatically a fair comparison.",
fairControlled: "Controlled",
fairUnknown: "Unclear",
fairMismatch: "Mismatch",
fairControlledText: "The paper explicitly holds model and budget fixed.",
fairUnknownText: "At least one important control is not reported clearly.",
fairMismatchText: "The paper explicitly changes the model or budget.",
task: "Task",
benchmark: "Benchmark / scale",
intervention: "What changed",
Expand All @@ -194,13 +181,12 @@ const copy = {
papers: "论文",
coverage: "收录范围",
methods: "方法",
fairness: "公平性",
star: "去 GitHub 点 Star ↗",
eyebrow: "看证据,不看榜单气氛",
heroLead: "到底什么方法能超越",
heroAccent: "Claude Code 与 Codex?",
heroDeck:
"把工业 coding agent 论文里的方法、实验控制和限制条件,整理成真正读得下去的研究索引。",
"把工业 coding agent 论文里的模型、方法、结果和限制条件,整理成真正读得下去的研究索引。",
explore: "开始看证据 ↓",
reviewed: "最近审计",
reviewedPapers: "篇已审论文",
Expand All @@ -214,11 +200,11 @@ const copy = {
domains: "研究领域",
conferences: "会议 / 来源",
catalogEyebrow: "论文目录",
catalogTitle: "先看结果;需要时,再展开实验控制和限制。",
catalogTitle: "打开详情之前,先看清模型和结果。",
search: "搜索系统、任务或方法…",
product: "产品",
modelsUsed: "使用的模型",
evidenceClass: "证据类型",
comparison: "实验控制",
conference: "会议 / 来源",
exactVenue: "准确 venue / track",
method: "方法",
Expand All @@ -227,9 +213,6 @@ const copy = {
related: "相关方法",
evaluation: "仅评测",
historical: "历史模型",
controlled: "相同模型与预算",
unknown: "控制不明确",
mismatch: "已知不一致",
clear: "清空筛选",
results: "篇匹配论文",
noResults: "没有论文符合当前筛选。",
Expand All @@ -240,14 +223,6 @@ const copy = {
methodPattern: "反复出现的方法",
methodTitle: "真正有效的,往往是模型周围的结构。",
methodDeck: "点击方法即可筛选对应论文;数量直接来自审计后的目录。",
fairnessEyebrow: "先检查可比性",
fairnessTitle: "有直接对比,不等于做了公平对比。",
fairControlled: "严格控制",
fairUnknown: "信息不明",
fairMismatch: "条件不同",
fairControlledText: "论文明确保持模型和预算一致。",
fairUnknownText: "至少一个关键实验控制没有写清楚。",
fairMismatchText: "论文明确使用了不同模型或预算。",
task: "任务",
benchmark: "Benchmark / 规模",
intervention: "新增了什么",
Expand Down Expand Up @@ -285,22 +260,6 @@ const CLASS_LABELS: Record<Language, Record<Classification, string>> = {
},
};

function fairnessGroup(paper: Paper): Exclude<FairnessFilter, "all"> {
if (
paper.evidence.same_model === "yes" &&
paper.evidence.same_budget === "yes"
) {
return "controlled";
}
if (
paper.evidence.same_model === "no" ||
paper.evidence.same_budget === "no"
) {
return "mismatch";
}
return "unknown";
}

function readableValue(value: string, fallback: string) {
return value === "not-reported" || value === "not-applicable"
? fallback
Expand All @@ -316,7 +275,6 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
const [classification, setClassification] = useState<
"all" | Classification
>("all");
const [fairness, setFairness] = useState<FairnessFilter>("all");
const [conference, setConference] = useState<"all" | ConferenceId>("all");
const [domain, setDomain] = useState<"all" | DomainId>("all");
const [method, setMethod] = useState("all");
Expand Down Expand Up @@ -368,18 +326,6 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
);
}, [papers]);

const fairnessCounts = useMemo(
() => ({
controlled: papers.filter((paper) => fairnessGroup(paper) === "controlled")
.length,
unknown: papers.filter((paper) => fairnessGroup(paper) === "unknown")
.length,
mismatch: papers.filter((paper) => fairnessGroup(paper) === "mismatch")
.length,
}),
[papers],
);

const filtered = useMemo(() => {
const needle = query.trim().toLowerCase();
const rank: Record<Classification, number> = {
Expand Down Expand Up @@ -414,8 +360,6 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
paper.products.some((item) => item.product === product);
const matchesClass =
classification === "all" || paper.classification === classification;
const matchesFairness =
fairness === "all" || fairnessGroup(paper) === fairness;
const matchesConference =
conference === "all" || paper.conference === conference;
const matchesDomain = domain === "all" || paper.domains.includes(domain);
Expand All @@ -425,7 +369,6 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
matchesQuery &&
matchesProduct &&
matchesClass &&
matchesFairness &&
matchesConference &&
matchesDomain &&
matchesMethod
Expand All @@ -437,13 +380,12 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
paperB.year - paperA.year ||
paperA.system.localeCompare(paperB.system),
);
}, [classification, conference, domain, fairness, language, method, papers, product, query]);
}, [classification, conference, domain, language, method, papers, product, query]);

const filtersActive =
query !== "" ||
product !== "all" ||
classification !== "all" ||
fairness !== "all" ||
conference !== "all" ||
domain !== "all" ||
method !== "all";
Expand Down Expand Up @@ -471,7 +413,6 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
setQuery("");
setProduct("all");
setClassification("all");
setFairness("all");
setConference("all");
setDomain("all");
setMethod("all");
Expand All @@ -492,11 +433,6 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
document.getElementById("catalog")?.scrollIntoView({ behavior: "smooth" });
};

const chooseFairness = (value: Exclude<FairnessFilter, "all">) => {
setFairness(value);
document.getElementById("catalog")?.scrollIntoView({ behavior: "smooth" });
};

const toggleLanguage = () => {
setLanguage((current) => (current === "en" ? "zh" : "en"));
};
Expand All @@ -512,7 +448,6 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
<a href="#coverage">{t.coverage}</a>
<a href="#catalog">{t.papers}</a>
<a href="#method-patterns">{t.methods}</a>
<a href="#fairness">{t.fairness}</a>
<button className="language-toggle" type="button" onClick={toggleLanguage}>
{language === "en" ? "中文" : "EN"}
</button>
Expand Down Expand Up @@ -681,19 +616,6 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
</select>
</label>

<label>
<span>{t.comparison}</span>
<select
value={fairness}
onChange={(event) => setFairness(event.target.value as FairnessFilter)}
>
<option value="all">{t.all}</option>
<option value="controlled">{t.controlled}</option>
<option value="unknown">{t.unknown}</option>
<option value="mismatch">{t.mismatch}</option>
</select>
</label>

<label>
<span>{t.conference}</span>
<select
Expand Down Expand Up @@ -766,9 +688,13 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
</div>
<h3>{paper.system}</h3>
<p className="paper-title">{paper.title}</p>
<div className="product-list">
<div className="model-list" aria-label={t.modelsUsed}>
<p>{t.modelsUsed}</p>
{paper.products.map((item) => (
<span key={item.product}>{PRODUCT_LABELS[item.product]}</span>
<div data-product={item.product} key={`${item.product}-${item.model}`}>
<span>{PRODUCT_LABELS[item.product]}</span>
<strong>{readableValue(item.model, t.notReported)}</strong>
</div>
))}
</div>
<div className="domain-list" aria-label={t.domains}>
Expand All @@ -781,17 +707,6 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
<p>{paper.method.summary}</p>
</div>
<blockquote>{paper.evidence.result}</blockquote>
<div className="control-strip">
<span data-state={paper.evidence.same_model}>
M · {paper.evidence.same_model}
</span>
<span data-state={paper.evidence.same_budget}>
B · {paper.evidence.same_budget}
</span>
<span data-state={paper.evidence.strength}>
E · {paper.evidence.strength}
</span>
</div>
<div className="card-footer">
<span>{paper.method.tags.slice(0, 2).join(" · ")}</span>
<button type="button" onClick={() => setActivePaper(paper)}>
Expand Down Expand Up @@ -835,30 +750,6 @@ export function CatalogExplorer({ papers, reviewedAt }: Props) {
</div>
</section>

<section className="fairness-section" id="fairness">
<div className="fairness-heading">
<p className="eyebrow">{t.fairnessEyebrow}</p>
<h2>{t.fairnessTitle}</h2>
</div>
<div className="fairness-grid">
<button type="button" onClick={() => chooseFairness("controlled")}>
<span className="fairness-number controlled">{fairnessCounts.controlled}</span>
<strong>{t.fairControlled}</strong>
<p>{t.fairControlledText}</p>
</button>
<button type="button" onClick={() => chooseFairness("unknown")}>
<span className="fairness-number unknown">{fairnessCounts.unknown}</span>
<strong>{t.fairUnknown}</strong>
<p>{t.fairUnknownText}</p>
</button>
<button type="button" onClick={() => chooseFairness("mismatch")}>
<span className="fairness-number mismatch">{fairnessCounts.mismatch}</span>
<strong>{t.fairMismatch}</strong>
<p>{t.fairMismatchText}</p>
</button>
</div>
</section>

<footer>
<div className="footer-pitch">
<span className="brand-mark">&gt;_</span>
Expand Down
Loading