create-academic-research 0.1.17 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +35 -1
  2. package/dist/src/cli.js +64 -2
  3. package/dist/src/project.js +138 -2
  4. package/package.json +1 -1
  5. package/template/AGENTS.md +23 -2
  6. package/template/README.md +33 -0
  7. package/template/_gitignore +6 -0
  8. package/template/analysis_outputs/claim-audit.md +7 -0
  9. package/template/artifacts/artifact-checklist.md +54 -2
  10. package/template/artifacts/badge-evidence-ledger.csv +1 -0
  11. package/template/docs/agent/mcp-client-setup.md +9 -8
  12. package/template/docs/agent/mcp-setup.md +12 -0
  13. package/template/docs/agent/output-contracts.md +49 -5
  14. package/template/docs/agent/project-quality.md +80 -0
  15. package/template/docs/agent/repo-migration-playbook.md +20 -0
  16. package/template/docs/getting-started.md +31 -6
  17. package/template/docs/reproducibility/commands.md +12 -0
  18. package/template/experiments/campaigns/autonomous-campaign-template.md +68 -0
  19. package/template/experiments/campaigns/frontier-results.tsv +1 -0
  20. package/template/package.json +2 -1
  21. package/template/reports/paper/sota-survey.tex +29 -0
  22. package/template/repro_outputs/COMMANDS.md +4 -0
  23. package/template/repro_outputs/LOG.md +6 -0
  24. package/template/repro_outputs/PATCHES.md +7 -0
  25. package/template/repro_outputs/SUMMARY.md +21 -0
  26. package/template/repro_outputs/status.json +9 -0
  27. package/template/sota/citation-chasing-log.csv +1 -0
  28. package/template/sota/literature-matrix.csv +1 -1
  29. package/template/sota/paper-syntheses/.gitkeep +1 -0
  30. package/template/sota/reading-log.csv +1 -0
  31. package/template/sota/search-strategy.md +29 -0
  32. package/template/sources/markdown-linear/.gitkeep +1 -0
  33. package/template/tests/test_project_structure.py +18 -0
package/README.md CHANGED
@@ -41,7 +41,7 @@ npx --yes github:VincenzoImp/create-academic-research my-project
41
41
  | Sources | PDFs, derived Markdown, metadata, BibTeX, conversion ledger, source ledger. |
42
42
  | Literature Review | Search strategy, screening decisions, literature matrix, SOTA synthesis, gaps, PRISMA flow. |
43
43
  | Agent Memory | `AGENTS.md`, capability profile, MCP setup docs, generated MCP snippets, wiki index/log/templates. |
44
- | Reproducibility | Python package scaffold, tests, experiment registry, output folders, artifact checklist. |
44
+ | Reproducibility | Python package scaffold, tests, experiment registry, autonomous campaign ledgers, output folders, artifact checklist. |
45
45
  | Skills | Project-local installation flow for `VincenzoImp/academic-research-skills`. |
46
46
  | MCP | Conservative default records for scholarly discovery plus documented optional integrations. |
47
47
 
@@ -117,6 +117,7 @@ npm run doctor
117
117
  npm run update
118
118
  npm run update -- --apply
119
119
  npm run setup -- --env-file .env.local
120
+ npm run workflow:literature
120
121
  npm run rename -- --title "New Title" --slug new-title --package new_title
121
122
  npm run agents:list
122
123
  npm run skills:presets
@@ -174,6 +175,23 @@ Safe migrations are tracked in `.academic-research/managed-files.json`. The
174
175
  manifest stores non-secret checksums for generator-owned files. If a file was
175
176
  edited locally, update reports `skip` instead of overwriting it.
176
177
 
178
+ ### Migration 0.1.17 -> 0.1.18
179
+
180
+ Projects created with `0.1.17` can migrate in place:
181
+
182
+ ```bash
183
+ npm run update
184
+ npm run update -- --apply
185
+ npm run doctor
186
+ ```
187
+
188
+ The migration adds the project-quality contract, badge evidence ledger, SOTA
189
+ reading and citation-chasing ledgers, paper synthesis folders, linear reading
190
+ copies, autonomous experiment campaign files, claim-audit and reproduction
191
+ templates, and `workflow:literature`. Locally edited managed files are skipped;
192
+ new research record templates are created as user-owned where the project is
193
+ expected to fill them over time.
194
+
177
195
  `academic-research init` initializes an existing repository without overwriting
178
196
  existing files. It adds the research contract, merges lifecycle package scripts,
179
197
  and preserves existing README, `.gitignore`, and custom package scripts.
@@ -216,6 +234,11 @@ MCP commands are split by side-effect:
216
234
  | `mcp doctor` | Validate enabled MCP records, generated snippets, required env vars, and documented manual prerequisites. Pass `--env-file .env.local` to read explicit local secrets. |
217
235
  | `mcp probe` | Opt-in runtime check. Local stdio servers get a JSON-RPC handshake; remote endpoints are reported as configured without a network probe. |
218
236
 
237
+ Workflow commands are scenario-level shortcuts over skills and MCP records.
238
+ Use `npm run workflow:literature` when starting a serious SOTA, survey, or
239
+ related-work pass: it selects a practical literature stack with arXiv, DBLP,
240
+ Semantic Scholar, and OpenAlex remote graph search, then prints the next checks.
241
+
219
242
  ## Companion Skills
220
243
 
221
244
  The generated project works best with:
@@ -269,6 +292,17 @@ a generated safe dotenv-loading wrapper after `mcp setup`.
269
292
  Crossref and broad paper-search aggregators are kept as fallback/manual entries
270
293
  until a project explicitly needs them.
271
294
 
295
+ For SOTA work, the recommended low-friction path is:
296
+
297
+ ```bash
298
+ npm run workflow:literature
299
+ npm run skills:install -- --preset literature
300
+ npm run mcp:status
301
+ npm run mcp:smoke -- --env-file .env.local
302
+ ```
303
+
304
+ Then use `$sota-literature-review` with a declared review scale and seed set.
305
+
272
306
  Codex automatic registration supports custom remote endpoints when the URL is
273
307
  stored in project config with `--url`. If the endpoint URL is kept private via
274
308
  `--url-env`, Codex automatic registration is not available because the Codex CLI
package/dist/src/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { basename, delimiter, dirname, join, resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
- import { assertKnownMcpServers, clientAddMcpServer, clientRemoveMcpServer, disableMcpServers, doctorMcpServers, enableMcpServers, DEFAULT_AGENT, getMcpLifecycleStatus, installMcpTools, installSkillIds, installSkills, formatMcpDotenv, listInstalledSkills, listMcpEnvironmentEntries, mergeMcpEnvironment, mcpToolCommandTexts, probeMcpServers, readCapabilities, readMcpEnvironmentFile, removeSkills, resolveMcpServerForState, setupMcpServer, uninstallMcpTools, updateSkills } from "./capabilities.js";
4
+ import { assertKnownMcpServers, clientAddMcpServer, clientRemoveMcpServer, disableMcpServers, doctorMcpServers, enableMcpServers, DEFAULT_AGENT, getMcpLifecycleStatus, installMcpTools, installSkillIds, installSkills, formatMcpDotenv, listInstalledSkills, listMcpEnvironmentEntries, mergeMcpEnvironment, mcpToolCommandTexts, probeMcpServers, readCapabilities, readMcpEnvironmentFile, removeSkills, resolveMcpServerForState, setupMcpServer, uninstallMcpTools, updateSkills, writeCapabilities } from "./capabilities.js";
5
5
  import { createProject, doctorProject, initProject, renameProject, updateProject } from "./project.js";
6
6
  import { askCreateOptions } from "./prompts.js";
7
7
  import { AGENT_STACK, mcpModeLabel, mcpRecommendedMode, mcpServerModeKeys, mcpSupportedModeLabels, presetMcpServers, resolveMcpServer } from "./stack.js";
@@ -20,6 +20,7 @@ const CREATE_FLAGS = flagSchema([
20
20
  ], ["title", "slug", "package", "preset", "profile", "agent"]);
21
21
  const ROOT_FLAGS = flagSchema(["help"], ["root"]);
22
22
  const SETUP_FLAGS = flagSchema(["help"], ["root", "env-file"]);
23
+ const WORKFLOW_FLAGS = flagSchema(["help"], ["root", "agent", "env-file"]);
23
24
  const UPDATE_FLAGS = flagSchema(["help", "dry-run", "apply"], ["root"]);
24
25
  const INIT_FLAGS = flagSchema(["help", "install-skills"], ["root", "title", "slug", "package", "preset", "profile", "agent"]);
25
26
  const RENAME_FLAGS = flagSchema(["help"], ["root", "title", "slug", "package"]);
@@ -130,6 +131,8 @@ async function lifecycleMain(argv) {
130
131
  return skillsCommand(argv.slice(1));
131
132
  if (command === "mcp")
132
133
  return mcpCommand(argv.slice(1));
134
+ if (command === "workflow")
135
+ return workflowCommand(argv.slice(1));
133
136
  printLifecycleHelp();
134
137
  return command === "help" ? 0 : 1;
135
138
  }
@@ -624,6 +627,49 @@ async function mcpCommand(argv) {
624
627
  }
625
628
  throw new Error(`unknown mcp command: ${subcommand}`);
626
629
  }
630
+ async function workflowCommand(argv) {
631
+ const subcommand = argv[0] ?? "help";
632
+ const parsed = parseFlags(argv.slice(1), WORKFLOW_FLAGS);
633
+ if (subcommand === "help" || subcommand === "--help" || subcommand === "-h" || flagBool(parsed.flags, "help")) {
634
+ printWorkflowHelp();
635
+ return 0;
636
+ }
637
+ if (subcommand !== "literature")
638
+ throw new Error(`unknown workflow command: ${subcommand}`);
639
+ assertNoArguments(parsed.positionals, "workflow literature");
640
+ const root = resolve(flagString(parsed.flags, "root") ?? ".");
641
+ const state = await readCapabilities(root);
642
+ const agent = flagString(parsed.flags, "agent") ?? state.agent;
643
+ const literatureServers = ["arxiv", "dblp", "semantic-scholar", "openalex"];
644
+ await writeCapabilities(root, {
645
+ ...state,
646
+ agent,
647
+ preset: "literature",
648
+ mcp_servers: literatureServers,
649
+ mcp_server_modes: {
650
+ ...state.mcp_server_modes,
651
+ openalex: "remote"
652
+ },
653
+ mcp_server_remote: state.mcp_server_remote
654
+ });
655
+ const env = await mcpCommandEnvironment(root, parsed.flags);
656
+ const lifecycle = await getMcpLifecycleStatus(root, { env });
657
+ const selected = lifecycle.servers.filter((server) => server.selected);
658
+ console.log("Literature Workflow");
659
+ console.log(`root\t${root}`);
660
+ console.log("preset\tliterature");
661
+ console.log(`mcp_selected\t${literatureServers.join(",")}`);
662
+ for (const item of selected) {
663
+ console.log(`mcp\t${item.id}\t${item.mode}\t${item.state}\t${friendlyNext(item.next)}`);
664
+ }
665
+ console.log("");
666
+ console.log("Next Commands");
667
+ console.log("npm run skills:install -- --preset literature");
668
+ console.log("npm run mcp:status");
669
+ console.log("npm run mcp:smoke -- --env-file .env.local");
670
+ console.log("Use $sota-literature-review with a declared scale, seed set, and citation-chasing budget.");
671
+ return 0;
672
+ }
627
673
  async function mcpClientCommand(parsed) {
628
674
  const action = parsed.positionals[0];
629
675
  const server = parsed.positionals[1];
@@ -947,7 +993,7 @@ function printMissingTargetHelp() {
947
993
  }
948
994
  function printLifecycleHelp() {
949
995
  console.log([
950
- "Usage: academic-research <doctor|update|init|setup|rename|agents|skills|mcp>",
996
+ "Usage: academic-research <doctor|update|init|setup|rename|agents|skills|mcp|workflow>",
951
997
  "",
952
998
  "Manage a generated academic research repository after creation.",
953
999
  "",
@@ -956,6 +1002,22 @@ function printLifecycleHelp() {
956
1002
  " -v, --version Show package version."
957
1003
  ].join("\n"));
958
1004
  }
1005
+ function printWorkflowHelp() {
1006
+ console.log([
1007
+ "Usage: academic-research workflow <literature> [options]",
1008
+ "",
1009
+ "Prepare scenario-level research workflows without manually stitching every skill and MCP command.",
1010
+ "",
1011
+ "Workflows:",
1012
+ " literature Configure the practical SOTA stack for arXiv, DBLP, Semantic Scholar citation graph, and OpenAlex graph search.",
1013
+ "",
1014
+ "Options:",
1015
+ " --root <path> Project root. Default: current directory.",
1016
+ " --agent <id> Agent target for generated MCP snippets.",
1017
+ " --env-file <path> Read local env values for readiness reporting.",
1018
+ " -h, --help Show this help."
1019
+ ].join("\n"));
1020
+ }
959
1021
  function printUpdateHelp() {
960
1022
  console.log([
961
1023
  "Usage: academic-research update [options]",
@@ -49,6 +49,16 @@ const REQUIRED_CSV_COLUMNS = {
49
49
  "expected_fix",
50
50
  "checked_on"
51
51
  ],
52
+ "artifacts/badge-evidence-ledger.csv": [
53
+ "badge_target",
54
+ "evidence_id",
55
+ "evidence_path",
56
+ "claim_or_result_id",
57
+ "artifact_component",
58
+ "command_or_procedure",
59
+ "validation_status",
60
+ "checked_on"
61
+ ],
52
62
  "sota/literature-matrix.csv": [
53
63
  "source_id",
54
64
  "title",
@@ -62,10 +72,38 @@ const REQUIRED_CSV_COLUMNS = {
62
72
  "metric_or_result",
63
73
  "limitations",
64
74
  "relevance",
75
+ "full_text_status",
76
+ "reading_status",
77
+ "synthesis_path",
65
78
  "citation_count_or_signal",
66
- "identifiers"
79
+ "identifiers",
80
+ "bib_key",
81
+ "role"
67
82
  ],
68
83
  "sota/screening-decisions.csv": ["stage", "source_id", "title", "decision", "reason", "screened_by", "date"],
84
+ "sota/reading-log.csv": [
85
+ "source_id",
86
+ "role",
87
+ "reading_copy_path",
88
+ "start_location",
89
+ "end_location",
90
+ "status",
91
+ "reader",
92
+ "started_on",
93
+ "completed_on"
94
+ ],
95
+ "sota/citation-chasing-log.csv": [
96
+ "round",
97
+ "seed_source_id",
98
+ "direction",
99
+ "tool_or_database",
100
+ "query_or_graph_call",
101
+ "found_count",
102
+ "new_after_dedup",
103
+ "promoted_to_seed_count",
104
+ "screening_status",
105
+ "date"
106
+ ],
69
107
  "experiments/registry.csv": [
70
108
  "run_id",
71
109
  "date",
@@ -83,6 +121,16 @@ const REQUIRED_CSV_COLUMNS = {
83
121
  "record_path"
84
122
  ]
85
123
  };
124
+ const REQUIRED_TSV_COLUMNS = {
125
+ "experiments/campaigns/frontier-results.tsv": [
126
+ "run_id",
127
+ "git_commit",
128
+ "metric_value",
129
+ "resource_value",
130
+ "status",
131
+ "description"
132
+ ]
133
+ };
86
134
  export async function createProject(options) {
87
135
  const target = resolve(options.target);
88
136
  if (await isNonEmptyDirectory(target)) {
@@ -188,10 +236,28 @@ export async function doctorProject(root) {
188
236
  "docs/agent/capability-profile.md",
189
237
  "docs/agent/mcp-setup.md",
190
238
  "docs/agent/mcp-client-setup.md",
239
+ "docs/agent/output-contracts.md",
240
+ "docs/agent/project-quality.md",
241
+ "docs/agent/repo-migration-playbook.md",
191
242
  "docs/agent/generated",
243
+ "docs/reproducibility/commands.md",
192
244
  "scripts/README.md",
245
+ "analysis_outputs/claim-audit.md",
246
+ "artifacts/badge-evidence-ledger.csv",
247
+ "experiments/campaigns/autonomous-campaign-template.md",
248
+ "experiments/campaigns/frontier-results.tsv",
249
+ "repro_outputs/SUMMARY.md",
250
+ "repro_outputs/COMMANDS.md",
251
+ "repro_outputs/LOG.md",
252
+ "repro_outputs/PATCHES.md",
253
+ "repro_outputs/status.json",
254
+ "sources/markdown-linear",
193
255
  "sources/source-ledger.csv",
256
+ "sota/reading-log.csv",
257
+ "sota/citation-chasing-log.csv",
194
258
  "sota/literature-matrix.csv",
259
+ "sota/paper-syntheses",
260
+ "reports/paper/sota-survey.tex",
195
261
  "wiki/index.md",
196
262
  "wiki/log.md",
197
263
  "wiki/templates/source-page.md",
@@ -304,6 +370,9 @@ export async function doctorProject(root) {
304
370
  for (const [relative, requiredColumns] of Object.entries(REQUIRED_CSV_COLUMNS)) {
305
371
  await validateCsvHeader(target, relative, requiredColumns, errors);
306
372
  }
373
+ for (const [relative, requiredColumns] of Object.entries(REQUIRED_TSV_COLUMNS)) {
374
+ await validateDelimitedHeader(target, relative, requiredColumns, "\t", errors);
375
+ }
307
376
  return { ok: errors.length === 0, errors, warnings };
308
377
  }
309
378
  async function personalizeInitializedProject(root, { title, slug, packageName, profile }, created) {
@@ -429,6 +498,69 @@ async function managedFileSpecs(root) {
429
498
  { path: ".env.example", policy: "managed", content: formatMcpDotenv(Object.keys(AGENT_STACK.mcp_servers)) },
430
499
  { path: "configs/agent-stack.yaml", policy: "managed", content: YAML.stringify(AGENT_STACK) },
431
500
  { path: "docs/getting-started.md", policy: "managed", content: await templateText("docs/getting-started.md") },
501
+ {
502
+ path: "docs/agent/output-contracts.md",
503
+ policy: "managed",
504
+ content: await templateText("docs/agent/output-contracts.md")
505
+ },
506
+ {
507
+ path: "docs/agent/project-quality.md",
508
+ policy: "managed",
509
+ content: await templateText("docs/agent/project-quality.md")
510
+ },
511
+ {
512
+ path: "docs/agent/repo-migration-playbook.md",
513
+ policy: "user-owned",
514
+ content: await templateText("docs/agent/repo-migration-playbook.md")
515
+ },
516
+ {
517
+ path: "docs/reproducibility/commands.md",
518
+ policy: "user-owned",
519
+ content: await templateText("docs/reproducibility/commands.md")
520
+ },
521
+ {
522
+ path: "analysis_outputs/claim-audit.md",
523
+ policy: "user-owned",
524
+ content: await templateText("analysis_outputs/claim-audit.md")
525
+ },
526
+ {
527
+ path: "sources/markdown-linear/.gitkeep",
528
+ policy: "managed",
529
+ content: await templateText("sources/markdown-linear/.gitkeep")
530
+ },
531
+ { path: "sota/reading-log.csv", policy: "managed", content: await templateText("sota/reading-log.csv") },
532
+ {
533
+ path: "sota/citation-chasing-log.csv",
534
+ policy: "managed",
535
+ content: await templateText("sota/citation-chasing-log.csv")
536
+ },
537
+ {
538
+ path: "sota/paper-syntheses/.gitkeep",
539
+ policy: "managed",
540
+ content: await templateText("sota/paper-syntheses/.gitkeep")
541
+ },
542
+ { path: "reports/paper/sota-survey.tex", policy: "managed", content: await templateText("reports/paper/sota-survey.tex") },
543
+ { path: "artifacts/artifact-checklist.md", policy: "managed", content: await templateText("artifacts/artifact-checklist.md") },
544
+ {
545
+ path: "artifacts/badge-evidence-ledger.csv",
546
+ policy: "managed",
547
+ content: await templateText("artifacts/badge-evidence-ledger.csv")
548
+ },
549
+ {
550
+ path: "experiments/campaigns/autonomous-campaign-template.md",
551
+ policy: "managed",
552
+ content: await templateText("experiments/campaigns/autonomous-campaign-template.md")
553
+ },
554
+ {
555
+ path: "experiments/campaigns/frontier-results.tsv",
556
+ policy: "managed",
557
+ content: await templateText("experiments/campaigns/frontier-results.tsv")
558
+ },
559
+ { path: "repro_outputs/SUMMARY.md", policy: "user-owned", content: await templateText("repro_outputs/SUMMARY.md") },
560
+ { path: "repro_outputs/COMMANDS.md", policy: "user-owned", content: await templateText("repro_outputs/COMMANDS.md") },
561
+ { path: "repro_outputs/LOG.md", policy: "user-owned", content: await templateText("repro_outputs/LOG.md") },
562
+ { path: "repro_outputs/PATCHES.md", policy: "user-owned", content: await templateText("repro_outputs/PATCHES.md") },
563
+ { path: "repro_outputs/status.json", policy: "user-owned", content: await templateText("repro_outputs/status.json") },
432
564
  {
433
565
  path: "docs/agent/mcp-client-setup.md",
434
566
  policy: "managed",
@@ -470,6 +602,7 @@ function generatedLifecycleScripts(packageSpec) {
470
602
  doctor: `${command} doctor`,
471
603
  update: `${latestCommand} update`,
472
604
  setup: `${command} setup`,
605
+ "workflow:literature": `${command} workflow literature`,
473
606
  rename: `${command} rename`,
474
607
  "agents:list": `${command} agents list`,
475
608
  "skills:install": `${command} skills install`,
@@ -955,11 +1088,14 @@ function toPosix(value) {
955
1088
  return value.split(/[\\/]/).join("/");
956
1089
  }
957
1090
  async function validateCsvHeader(root, relative, requiredColumns, errors) {
1091
+ await validateDelimitedHeader(root, relative, requiredColumns, ",", errors);
1092
+ }
1093
+ async function validateDelimitedHeader(root, relative, requiredColumns, delimiter, errors) {
958
1094
  const path = join(root, relative);
959
1095
  if (!(await exists(path)))
960
1096
  return;
961
1097
  const header = (await readFile(path, "utf8")).split(/\r?\n/, 1)[0] ?? "";
962
- const columns = new Set(header.split(",").map((column) => column.trim()).filter(Boolean));
1098
+ const columns = new Set(header.split(delimiter).map((column) => column.trim()).filter(Boolean));
963
1099
  for (const column of requiredColumns) {
964
1100
  if (!columns.has(column))
965
1101
  errors.push(`${relative} missing column ${column}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-academic-research",
3
- "version": "0.1.17",
3
+ "version": "0.1.18",
4
4
  "description": "Scaffold agent-ready academic research repositories with SOTA, source ledgers, wiki memory, MCP setup, and project-local skills.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -20,8 +20,9 @@ scholarly record.
20
20
  2. `configs/default.yaml`
21
21
  3. `configs/capabilities.yaml`
22
22
  4. `docs/agent/capability-profile.md`
23
- 5. `docs/agent/research-program.md`
24
- 6. `wiki/index.md`
23
+ 5. `docs/agent/project-quality.md`
24
+ 6. `docs/agent/research-program.md`
25
+ 7. `wiki/index.md`
25
26
 
26
27
  ## Standard Workflow
27
28
 
@@ -31,6 +32,14 @@ scholarly record.
31
32
  4. Add tests or validation for code and structural changes.
32
33
  5. Update `wiki/log.md` and affected wiki/docs pages before finishing.
33
34
 
35
+ ## Project Quality
36
+
37
+ - Keep every user request inside the project quality contract in `docs/agent/project-quality.md`.
38
+ - Put each artifact in its correct work zone: exploratory, debug, analysis, reproduction, final output, report, source, or release.
39
+ - Promote outputs only when inputs, command/procedure, validation, limitations, and linked claims are recorded.
40
+ - Update `artifacts/badge-evidence-ledger.csv` whenever a task creates evidence for artifact availability, functionality, reusability, reproduction, or replication.
41
+ - The user guides the research direction; agents preserve internal order, provenance, and validation discipline.
42
+
34
43
  ## Memory Contract
35
44
 
36
45
  - `wiki/log.md` is chronological and append-only.
@@ -45,9 +54,21 @@ scholarly record.
45
54
 
46
55
  - Native PDFs and reports go in `sources/pdfs/`.
47
56
  - Derived Markdown goes in `sources/markdown/`.
57
+ - Linear reading copies go in `sources/markdown-linear/`.
48
58
  - Metadata goes in `sources/metadata/`.
49
59
  - Bibliography records go in `sources/bib/references.bib`.
50
60
  - Citation issues go in `sources/bib/citation-audit.csv`.
51
61
  - SOTA records go in `sota/`.
62
+ - Core/supporting paper syntheses go in `sota/paper-syntheses/`.
63
+ - Full-text reading progress goes in `sota/reading-log.csv`.
64
+ - Citation graph expansion goes in `sota/citation-chasing-log.csv`.
52
65
  - Curated experiment records go in `experiments/`.
53
66
  - Repeatable command entrypoints go in `scripts/`.
67
+
68
+ ## SOTA Discipline
69
+
70
+ - Run `npm run workflow:literature` before serious SOTA, survey, or related-work work.
71
+ - Declare the review scale: quick-scan, focused-sota, or full-survey.
72
+ - Use citation chasing in both directions from seeds; record rounds and stopping conditions.
73
+ - Do not use abstract-only records for durable claims.
74
+ - For core/supporting papers, acquire full text, read linearly, create a per-paper synthesis, normalize the BibTeX entry, then cite.
@@ -40,8 +40,10 @@ npm run update
40
40
  - `sota/`: search strategy, screening, literature matrix, synthesis, and gaps.
41
41
  - `wiki/`: LLM-maintained durable research memory.
42
42
  - `docs/agent/`: active agent workflows, capability profile, and MCP setup.
43
+ - `docs/agent/project-quality.md`: cross-project quality, hygiene, and badge-readiness contract.
43
44
  - `docs/methodology/`: research design, evaluation plan, and validity threats.
44
45
  - `experiments/`: curated experiment registry and run records.
46
+ - `experiments/campaigns/`: autonomous campaign templates and frontier result ledgers.
45
47
  - `scripts/`: thin repeatable entrypoints that call reusable code in `src/`.
46
48
  - `notebooks/`: optional exploratory and narrative notebooks.
47
49
  - `outputs/`: final figures, tables, models, and paper-supporting derived assets.
@@ -63,6 +65,7 @@ npm run skills:list
63
65
  npm run skills:status
64
66
  npm run update
65
67
  npm run setup
68
+ npm run workflow:literature
66
69
  npm run mcp:dotenv
67
70
  npm run mcp:list
68
71
  npm run mcp:modes
@@ -104,6 +107,22 @@ npm exec --yes --package=create-academic-research@latest -- academic-research up
104
107
  npm exec --yes --package=create-academic-research@latest -- academic-research update --root . --apply
105
108
  ```
106
109
 
110
+ ### Migration 0.1.17 -> 0.1.18
111
+
112
+ Projects created with `0.1.17` can migrate in place:
113
+
114
+ ```bash
115
+ npm run update
116
+ npm run update -- --apply
117
+ npm run doctor
118
+ ```
119
+
120
+ The migration adds the project-quality contract, badge evidence ledger, SOTA
121
+ reading and citation-chasing ledgers, paper synthesis folders, linear reading
122
+ copies, autonomous experiment campaign files, claim-audit and reproduction
123
+ templates, and `workflow:literature`. Locally edited managed files are skipped;
124
+ new research record templates are created for the project to fill over time.
125
+
107
126
  `.env.example` is the committed MCP environment reference. Regenerate it with
108
127
  `npm run mcp:dotenv`. Copy it to `.env.local`, your shell profile, or your MCP
109
128
  client secret store when secrets are needed. Filled `.env` files are ignored by
@@ -137,3 +156,17 @@ and Overleaf should be enabled only after reading `docs/agent/mcp-setup.md` and
137
156
  checking their prerequisites with `mcp env`.
138
157
 
139
158
  See `docs/getting-started.md` for the recommended first session workflow.
159
+
160
+ For a serious SOTA or survey, start with:
161
+
162
+ ```bash
163
+ npm run workflow:literature
164
+ npm run skills:install -- --preset literature
165
+ npm run mcp:status
166
+ npm run mcp:smoke -- --env-file .env.local
167
+ ```
168
+
169
+ This configures arXiv, DBLP, Semantic Scholar, and OpenAlex remote graph search
170
+ as the practical citation-discovery stack. MCP output still becomes evidence
171
+ only after source ingestion, full-text reading, bibliography normalization, and
172
+ claim audit.
@@ -30,12 +30,18 @@ outputs/**
30
30
  analysis_outputs/**
31
31
  !analysis_outputs/
32
32
  !analysis_outputs/.gitkeep
33
+ !analysis_outputs/claim-audit.md
33
34
  debug_outputs/**
34
35
  !debug_outputs/
35
36
  !debug_outputs/.gitkeep
36
37
  repro_outputs/**
37
38
  !repro_outputs/
38
39
  !repro_outputs/.gitkeep
40
+ !repro_outputs/COMMANDS.md
41
+ !repro_outputs/LOG.md
42
+ !repro_outputs/PATCHES.md
43
+ !repro_outputs/SUMMARY.md
44
+ !repro_outputs/status.json
39
45
  train_outputs/**
40
46
  !train_outputs/
41
47
  !train_outputs/.gitkeep
@@ -0,0 +1,7 @@
1
+ # Claim Audit
2
+
3
+ Use this file for claim-by-claim verification notes before promoting text into
4
+ papers, reports, README claims, or durable wiki synthesis.
5
+
6
+ | claim_id | claim | class | cited_source | evidence_path | support_span | verdict | fix |
7
+ |---|---|---|---|---|---|---|---|
@@ -1,7 +1,59 @@
1
1
  # Artifact Checklist
2
2
 
3
+ # ACM Artifact Review And Badging
4
+
5
+ Use this file to prepare for ACM artifact review and related open-science
6
+ expectations. Badge families are independent: availability, artifact
7
+ evaluation, and result validation.
8
+
9
+ ## Artifact Scope
10
+
3
11
  - Code release scope:
4
12
  - Data release scope:
5
- - Environment instructions:
13
+ - Model/checkpoint scope:
14
+ - Paper claims supported:
15
+ - Excluded private or restricted material:
16
+
17
+ ## Artifacts Available
18
+
19
+ - Archival repository:
20
+ - DOI or stable identifier:
6
21
  - License:
7
- - Reproduction command:
22
+ - Citation:
23
+ - Public access restrictions:
24
+ - Version/tag matching the paper:
25
+
26
+ ## Artifacts Evaluated: Functional
27
+
28
+ - Install command:
29
+ - Smoke test:
30
+ - Expected smoke-test output:
31
+ - Hardware and OS:
32
+ - Runtime:
33
+ - Required data:
34
+ - Known limitations:
35
+
36
+ ## Artifacts Evaluated: Reusable
37
+
38
+ - Documented structure:
39
+ - Configuration files:
40
+ - Small example dataset or synthetic fixture:
41
+ - Extension points:
42
+ - Parameter/seed documentation:
43
+ - Maintenance notes:
44
+
45
+ ## Results Validated
46
+
47
+ - Results Reproduced by same artifact:
48
+ - Results Replicated by independent artifact:
49
+ - Full reproduction command:
50
+ - Expected outputs:
51
+ - Comparison tolerance:
52
+ - Result-to-claim mapping:
53
+
54
+ ## Governance
55
+
56
+ - Ethics/license constraints:
57
+ - Sensitive data handling:
58
+ - External dependency risks:
59
+ - Credentials excluded from release:
@@ -0,0 +1 @@
1
+ badge_target,evidence_id,evidence_path,claim_or_result_id,artifact_component,command_or_procedure,validation_status,checked_on,notes
@@ -97,14 +97,15 @@ snippet, a supported client registration path, and the next setup action.
97
97
 
98
98
  ## Workflow
99
99
 
100
- 1. Enable only the MCP servers needed for the current research task.
101
- 2. Inspect prerequisites with `npm run mcp:env -- <server>`.
102
- 3. Put required secrets in the MCP client secret store, shell, or `.env.local`.
103
- 4. Run `npm run mcp:smoke -- --env-file .env.local`.
104
- 5. Run `npm run mcp:status`.
105
- 6. Register the selected server with the active client, or load the generated
100
+ 1. For SOTA or survey work, run `npm run workflow:literature` before manual MCP selection.
101
+ 2. Enable only the MCP servers needed for the current research task.
102
+ 3. Inspect prerequisites with `npm run mcp:env -- <server>`.
103
+ 4. Put required secrets in the MCP client secret store, shell, or `.env.local`.
104
+ 5. Run `npm run mcp:smoke -- --env-file .env.local`.
105
+ 6. Run `npm run mcp:status`.
106
+ 7. Register the selected server with the active client, or load the generated
106
107
  snippet manually.
107
- 7. Run `npm run mcp:probe -- <server>` only when you want to start
108
+ 8. Run `npm run mcp:probe -- <server>` only when you want to start
108
109
  the server and verify a real stdio handshake.
109
- 8. Treat MCP output as retrieval metadata until it is ingested into repository
110
+ 9. Treat MCP output as retrieval metadata until it is ingested into repository
110
111
  source records.
@@ -19,6 +19,18 @@ local app, and manual setup.
19
19
  Use `npm run mcp:status -- --verbose` when you need technical mode names,
20
20
  snippet state, client registration state, and probe details.
21
21
 
22
+ For literature review work, prefer the scenario command before manual MCP
23
+ selection:
24
+
25
+ ```bash
26
+ npm run workflow:literature
27
+ npm run mcp:status
28
+ npm run mcp:smoke -- --env-file .env.local
29
+ ```
30
+
31
+ This selects arXiv, DBLP, Semantic Scholar, and OpenAlex remote graph search as
32
+ the default SOTA discovery stack.
33
+
22
34
  `configs/capabilities.yaml` records intended project capability state.
23
35
  `docs/agent/capability-lock.json` records non-secret observed setup facts for
24
36
  MCP setup/client/probe actions and project-local skill operations. The scaffold
@@ -1,8 +1,52 @@
1
1
  # Output Contracts
2
2
 
3
- - `repro_outputs/`: trusted reproduction evidence.
4
- - `train_outputs/`: training run evidence.
5
- - `explore_outputs/`: exploratory variants.
6
- - `analysis_outputs/`: analysis reports and claim audits.
7
- - `debug_outputs/`: diagnosis artifacts.
3
+ Use this file with `docs/agent/project-quality.md` before writing generated or
4
+ derived material. The Project Quality Contract decides when an output can move
5
+ from exploratory work to trusted project evidence.
6
+
7
+ ## Trust Levels
8
+
9
+ - `explore_outputs/`: exploratory variants, early hypotheses, and caveated runs.
10
+ - `debug_outputs/`: diagnosis artifacts for failures, data issues, or scientific bugs.
11
+ - `analysis_outputs/`: analysis reports, audits, intermediate tables, and draft figures.
12
+ - `repro_outputs/`: trusted reproduction evidence for external or internal results.
13
+ - `train_outputs/`: trusted training run evidence when model training is part of the research.
8
14
  - `outputs/`: curated paper-facing figures, tables, models, and exportable derived assets.
15
+
16
+ ## Research Records
17
+
18
+ - `sources/`: immutable source evidence, metadata, derived Markdown, and BibTeX.
19
+ - `sources/markdown-linear/`: cover-to-cover reading copies for core/supporting papers.
20
+ - `sota/`: search strategies, screening, literature matrix, syntheses, gaps, and logs.
21
+ - `sota/paper-syntheses/`: structured full-text syntheses for core/supporting papers.
22
+ - `sota/reading-log.csv`: full-text reading progress.
23
+ - `sota/citation-chasing-log.csv`: backward/forward citation expansion rounds.
24
+ - `experiments/`: curated experiment registry and human-readable run records.
25
+ - `experiments/campaigns/`: autonomous or overnight campaign plans and frontier ledgers.
26
+ - `experiments/campaigns/frontier-results.tsv`: machine-readable frontier ledger for `keep`, `discard`, and `crash` campaign outcomes.
27
+ - `reports/paper/sota-survey.tex`: survey-scale LaTeX draft when the task asks for a SOTA chapter or survey.
28
+ - `artifacts/badge-evidence-ledger.csv`: badge evidence paths, linked claims/results, procedures, and validation status.
29
+
30
+ ## Promotion Rules
31
+
32
+ Do not promote an output into `outputs/`, `repro_outputs/`, `train_outputs/`,
33
+ `reports/`, or `artifacts/` until it names:
34
+
35
+ - input sources, datasets, or run records
36
+ - command, script, notebook, or manual procedure
37
+ - environment or dependency notes
38
+ - expected output or validation criterion
39
+ - linked claim, research question, experiment, source, or artifact checklist row
40
+ - known limitations
41
+
42
+ If any item is missing, keep the material in `explore_outputs/`,
43
+ `analysis_outputs/`, or `debug_outputs/` and record the gap in the relevant
44
+ wiki page, ledger, or checklist.
45
+
46
+ ## Badge Evidence
47
+
48
+ When an output supports artifact availability, functionality, reusability,
49
+ reproduction, or replication, update both:
50
+
51
+ - `artifacts/artifact-checklist.md`
52
+ - `artifacts/badge-evidence-ledger.csv`
@@ -0,0 +1,80 @@
1
+ # Project Quality Contract
2
+
3
+ This repository should stay usable for an entire academic research project, not
4
+ only for the current task. Every agent action should leave durable state,
5
+ evidence, and outputs in the right place.
6
+
7
+ ## Request Intake
8
+
9
+ Before acting, classify the user's request:
10
+
11
+ - idea, question, or positioning
12
+ - source, PDF, bibliography, or SOTA work
13
+ - experiment, reproduction, analysis, or artifact work
14
+ - manuscript, LaTeX, review, rebuttal, or venue work
15
+ - project maintenance, MCP, skills, or repository hygiene
16
+
17
+ Route through the narrowest matching skill. If multiple workflows are involved,
18
+ update the durable records for each workflow instead of relying on chat history.
19
+
20
+ ## Clean Work Zones
21
+
22
+ - `sources/`: immutable source evidence and derived reading copies.
23
+ - `sota/`: search protocol, screening, matrix, syntheses, gaps, and citation-chasing logs.
24
+ - `experiments/`: curated run registry and human-readable experiment records.
25
+ - `experiments/campaigns/`: bounded autonomous campaign plans and frontier ledgers.
26
+ - `explore_outputs/`: exploratory work that is not trusted evidence.
27
+ - `debug_outputs/`: diagnostic artifacts.
28
+ - `analysis_outputs/`: analysis reports and audit outputs.
29
+ - `repro_outputs/`: trusted reproduction evidence.
30
+ - `outputs/`: final paper-facing tables, figures, models, and exports.
31
+ - `reports/`: proposal, manuscript, slides, reviews, rebuttal, and LaTeX.
32
+ - `artifacts/`: release package, badge evidence, public artifact preparation.
33
+ - `wiki/`: durable project memory, claims, decisions, contradictions, questions.
34
+
35
+ Do not mix exploratory, trusted, raw, and final outputs. Promote artifacts only
36
+ when provenance, command, input, and validation are recorded.
37
+
38
+ ## Trusted Outputs
39
+
40
+ An output becomes trusted only when it has:
41
+
42
+ - input sources or datasets
43
+ - command, script, notebook, or manual procedure
44
+ - environment or dependency notes
45
+ - expected output or validation criterion
46
+ - linked claim, research question, experiment, or source record
47
+ - known limitations
48
+
49
+ If any of these are missing, keep the output in `explore_outputs/`,
50
+ `analysis_outputs/`, or `debug_outputs/` and record the gap.
51
+
52
+ ## Project Hygiene Gate
53
+
54
+ Before finishing a task:
55
+
56
+ - update the relevant ledger, matrix, wiki page, or checklist
57
+ - keep raw sources immutable
58
+ - keep reusable logic in `src/` and thin commands in `scripts/`
59
+ - keep generated caches, secrets, private data, and bulky outputs out of git
60
+ - reconcile bibliography keys, source IDs, run IDs, and claim IDs
61
+ - mark unresolved questions in `wiki/open_questions.md`
62
+ - append durable changes to `wiki/log.md`
63
+ - run the smallest meaningful validation command
64
+
65
+ ## Badge Readiness
66
+
67
+ Badge evidence should accumulate throughout the project. When a task affects
68
+ code, data, benchmarks, models, experiments, reproduction, or release material,
69
+ update `artifacts/badge-evidence-ledger.csv` and `artifacts/artifact-checklist.md`.
70
+
71
+ Map work to these targets:
72
+
73
+ - Artifacts Available
74
+ - Artifacts Evaluated: Functional
75
+ - Artifacts Evaluated: Reusable
76
+ - Results Reproduced
77
+ - Results Replicated
78
+
79
+ Do not wait for submission week to recover install commands, expected outputs,
80
+ data access notes, or result-to-claim mappings.
@@ -0,0 +1,20 @@
1
+ # Repo Migration Playbook
2
+
3
+ Use this playbook when migrating an existing archive, notebook pile, external
4
+ research repository, or ad hoc project into this scaffold.
5
+
6
+ ## Source Inventory
7
+
8
+ | source_path | type | destination | preserve_as_raw | notes |
9
+ |---|---|---|---|---|
10
+
11
+ ## Migration Plan
12
+
13
+ | step | action | target_path | validation | status |
14
+ |---|---|---|---|---|
15
+
16
+ ## Decisions
17
+
18
+ Record structure decisions, skipped files, incompatible assumptions, and
19
+ follow-up checks here. Keep original evidence immutable until provenance is
20
+ recorded.
@@ -29,6 +29,10 @@ npm exec --yes --package=create-academic-research@latest -- academic-research up
29
29
  npm exec --yes --package=create-academic-research@latest -- academic-research update --root . --apply
30
30
  ```
31
31
 
32
+ Read `docs/agent/project-quality.md` before substantive work. It defines where
33
+ each class of source, SOTA record, experiment, analysis, LaTeX file, artifact,
34
+ and final output belongs.
35
+
32
36
  ## 2. Install Project-Local Skills
33
37
 
34
38
  Install the default academic research skill package:
@@ -66,13 +70,30 @@ npm run mcp:smoke -- --env-file .env.local
66
70
  npm run mcp:probe -- arxiv --timeout-ms 5000
67
71
  ```
68
72
 
69
- ## 4. Start Source Work
73
+ ## 4. Prepare The Literature Workflow
74
+
75
+ For SOTA, survey, or related-work tasks, configure the practical citation graph
76
+ stack before broad searching:
77
+
78
+ ```bash
79
+ npm run workflow:literature
80
+ npm run skills:install -- --preset literature
81
+ npm run mcp:status
82
+ npm run mcp:smoke -- --env-file .env.local
83
+ ```
84
+
85
+ This selects arXiv, DBLP, Semantic Scholar, and OpenAlex remote graph search.
86
+ Use `$sota-literature-review` with a declared scale: `quick-scan`,
87
+ `focused-sota`, or `full-survey`.
88
+
89
+ ## 5. Start Source Work
70
90
 
71
91
  Put source originals and metadata in the source layer before synthesis.
72
92
 
73
93
  ```text
74
94
  sources/pdfs/ native PDFs
75
95
  sources/markdown/ derived Markdown
96
+ sources/markdown-linear/ cover-to-cover reading copies
76
97
  sources/metadata/ downloaded metadata or query exports
77
98
  sources/bib/ BibTeX and citation audits
78
99
  ```
@@ -80,16 +101,20 @@ sources/bib/ BibTeX and citation audits
80
101
  Update `sources/source-ledger.csv` whenever a paper, report, dataset, or web
81
102
  source becomes evidence for the project.
82
103
 
83
- ## 5. Build The First SOTA Pass
104
+ ## 6. Build The First SOTA Pass
84
105
 
85
106
  Use `sota/search-strategy.md` to record search terms, databases, dates, and
86
- inclusion criteria. Put screened sources in `sota/literature-matrix.csv`, then
87
- summarize stable conclusions in `sota/synthesis.md`.
107
+ inclusion criteria. Record full-text reading in `sota/reading-log.csv` and
108
+ citation expansion in `sota/citation-chasing-log.csv`. Put screened sources in
109
+ `sota/literature-matrix.csv`, create per-paper syntheses in
110
+ `sota/paper-syntheses/`, then summarize stable conclusions in
111
+ `sota/synthesis.md`.
88
112
 
89
113
  Do not treat MCP output as final evidence until the relevant source has been
90
- ingested, deduplicated, and tied to a source record.
114
+ ingested, deduplicated, read in full when core/supporting, and tied to a source
115
+ record and bibliography key.
91
116
 
92
- ## 6. Keep Durable Memory Current
117
+ ## 7. Keep Durable Memory Current
93
118
 
94
119
  Update the wiki when project knowledge changes:
95
120
 
@@ -0,0 +1,12 @@
1
+ # Reproducibility Commands
2
+
3
+ Record commands that a reviewer or future researcher can run without relying on
4
+ chat history.
5
+
6
+ | command_id | purpose | command | working_dir | inputs | expected_output | last_checked |
7
+ |---|---|---|---|---|---|---|
8
+
9
+ ## Environment Notes
10
+
11
+ Record dependency files, hardware assumptions, external services, data access
12
+ steps, and known runtime limits here.
@@ -0,0 +1,68 @@
1
+ # Autonomous Experiment Campaign
2
+
3
+ Use this template for bounded autonomous or overnight experiment loops. The goal
4
+ is to let an agent iterate without losing scientific comparability.
5
+
6
+ ## Research Question
7
+
8
+ <fill: question or optimization target>
9
+
10
+ ## Mutability Envelope
11
+
12
+ - Editable files or modules:
13
+ - Read-only files or modules:
14
+ - Allowed dependency changes:
15
+ - Forbidden changes:
16
+
17
+ ## Frozen Harness
18
+
19
+ - Dataset and split:
20
+ - Evaluation script or function:
21
+ - Metric and direction:
22
+ - Resource measure:
23
+ - Time or compute budget:
24
+ - Hardware or runtime constraints:
25
+
26
+ ## Baseline Run
27
+
28
+ - Baseline commit:
29
+ - Command:
30
+ - Metric value:
31
+ - Resource value:
32
+ - Output path:
33
+
34
+ ## Frontier Tracking
35
+
36
+ Record every candidate in `experiments/campaigns/frontier-results.tsv`.
37
+
38
+ Statuses: keep, discard, crash.
39
+
40
+ - `keep`: candidate improves the agreed metric or simplifies without degrading.
41
+ - `discard`: candidate runs but does not improve enough to keep.
42
+ - `crash`: candidate fails, times out, or exceeds resource limits.
43
+
44
+ Keep `explore_outputs/` for raw exploratory logs, `debug_outputs/` for crash
45
+ diagnosis, and promote only trusted evidence to `train_outputs/`,
46
+ `repro_outputs/`, or `outputs/`.
47
+
48
+ ## Loop Procedure
49
+
50
+ 1. Check git state and current best result.
51
+ 2. Make one candidate change inside the mutability envelope.
52
+ 3. Commit or otherwise snapshot the candidate before running.
53
+ 4. Run the exact command with bounded output capture.
54
+ 5. Extract metric, resource value, runtime, and status.
55
+ 6. Append the result to `frontier-results.tsv`.
56
+ 7. Keep, discard, or diagnose according to the campaign policy.
57
+ 8. Stop only at the declared stop condition or when scientific meaning changes.
58
+
59
+ ## Stop Conditions
60
+
61
+ - Maximum runs:
62
+ - Maximum wall-clock time:
63
+ - Minimum meaningful improvement:
64
+ - Human approval required when:
65
+
66
+ ## Notes
67
+
68
+ <fill: interpretation, surprising findings, or next hypotheses>
@@ -0,0 +1 @@
1
+ run_id git_commit metric_value resource_value status description
@@ -6,6 +6,7 @@
6
6
  "doctor": "npm exec --yes --package=create-academic-research@latest -- academic-research doctor",
7
7
  "update": "npm exec --yes --package=create-academic-research@latest -- academic-research update",
8
8
  "setup": "npm exec --yes --package=create-academic-research@latest -- academic-research setup",
9
+ "workflow:literature": "npm exec --yes --package=create-academic-research@latest -- academic-research workflow literature",
9
10
  "rename": "npm exec --yes --package=create-academic-research@latest -- academic-research rename",
10
11
  "agents:list": "npm exec --yes --package=create-academic-research@latest -- academic-research agents list",
11
12
  "skills:install": "npm exec --yes --package=create-academic-research@latest -- academic-research skills install",
@@ -35,6 +36,6 @@
35
36
  "mcp:probe": "npm exec --yes --package=create-academic-research@latest -- academic-research mcp probe"
36
37
  },
37
38
  "devDependencies": {
38
- "create-academic-research": "0.1.14"
39
+ "create-academic-research": "0.1.18"
39
40
  }
40
41
  }
@@ -0,0 +1,29 @@
1
+ \section{State of the Art}
2
+ \label{sec:sota}
3
+
4
+ \subsection{Search Protocol}
5
+ \label{sec:sota-search-protocol}
6
+ Describe the review scale, seed sources, databases, exact queries, date ranges,
7
+ filters, citation-chasing depth, inclusion criteria, exclusion criteria, and
8
+ known blind spots recorded in \texttt{sota/search-strategy.md}.
9
+
10
+ \subsection{Methodological Families}
11
+ \label{sec:sota-method-families}
12
+ Synthesize methods by family. Cite only entries present in
13
+ \texttt{sources/bib/references.bib} and \texttt{sota/literature-matrix.csv}.
14
+
15
+ \subsection{Evidence And Findings}
16
+ \label{sec:sota-findings}
17
+ Report established findings, contested findings, datasets, metrics, baselines,
18
+ and limitations. Do not promote abstract-only or unaudited claims.
19
+
20
+ \subsection{Implications For This Project}
21
+ \label{sec:sota-project-implications}
22
+ Connect the literature to the current research idea, nearest prior work,
23
+ publishable deltas, failure conditions, and evidence still needed.
24
+
25
+ \subsection{Open Directions}
26
+ \label{sec:sota-open-directions}
27
+ List research directions derived from \texttt{sota/gaps.md}. Each direction
28
+ should name the supporting evidence, nearest prior work, method, risk, and
29
+ artifact or evaluation requirement.
@@ -0,0 +1,4 @@
1
+ # Reproduction Commands
2
+
3
+ | command_id | purpose | command | working_dir | expected_output | status |
4
+ |---|---|---|---|---|---|
@@ -0,0 +1,6 @@
1
+ # Reproduction Log
2
+
3
+ Append dated reproduction attempts here.
4
+
5
+ | date | command_id | status | output_path | notes |
6
+ |---|---|---|---|---|
@@ -0,0 +1,7 @@
1
+ # Reproduction Patches
2
+
3
+ Record any patches needed to run an external artifact. Keep patch notes separate
4
+ from scientific claims.
5
+
6
+ | patch_id | file_or_component | reason | effect | status |
7
+ |---|---|---|---|---|
@@ -0,0 +1,21 @@
1
+ # Reproduction Summary
2
+
3
+ Use this summary for trusted reproduction attempts only. Exploratory debugging
4
+ belongs in `debug_outputs/` or `explore_outputs/`.
5
+
6
+ ## Target
7
+
8
+ - Artifact:
9
+ - Paper or claim:
10
+ - Repository or dataset:
11
+
12
+ ## Status
13
+
14
+ - Overall status: not-started
15
+ - Last checked:
16
+ - Main blocker:
17
+
18
+ ## Result Mapping
19
+
20
+ | claim_or_result_id | command_id | observed_output | verdict | notes |
21
+ |---|---|---|---|---|
@@ -0,0 +1,9 @@
1
+ {
2
+ "status": "not-started",
3
+ "target": "",
4
+ "checked_on": "",
5
+ "summary": "repro_outputs/SUMMARY.md",
6
+ "commands": "repro_outputs/COMMANDS.md",
7
+ "log": "repro_outputs/LOG.md",
8
+ "patches": "repro_outputs/PATCHES.md"
9
+ }
@@ -0,0 +1 @@
1
+ round,seed_source_id,direction,tool_or_database,query_or_graph_call,found_count,new_after_dedup,promoted_to_seed_count,screening_status,date,notes
@@ -1 +1 @@
1
- source_id,title,authors,year,venue,method,dataset_or_sample,task_or_problem,key_claim,metric_or_result,limitations,relevance,citation_count_or_signal,identifiers,notes
1
+ source_id,bib_key,role,title,authors,year,venue,method,dataset_or_sample,task_or_problem,key_claim,metric_or_result,limitations,relevance,full_text_status,reading_status,synthesis_path,citation_count_or_signal,identifiers,notes
@@ -0,0 +1 @@
1
+ source_id,role,reading_copy_path,start_location,end_location,status,reader,started_on,completed_on,notes
@@ -4,11 +4,40 @@
4
4
 
5
5
  <fill: research question or review objective>
6
6
 
7
+ ## Review Scale
8
+
9
+ - Scale: quick-scan | focused-sota | full-survey
10
+ - Target included papers:
11
+ - Core paper budget:
12
+ - Supporting paper budget:
13
+ - Citation-chasing hop budget:
14
+ - Stopping rule:
15
+
16
+ ## Seed Set
17
+
18
+ | Seed ID | Source | Why It Is A Seed | Initial Role | Expansion Status |
19
+ |---|---|---|---|---|
20
+
21
+ ## Concepts And Keywords
22
+
23
+ | Concept | Synonyms | Exclusion Terms | Notes |
24
+ |---|---|---|---|
25
+
7
26
  ## Sources Queried
8
27
 
9
28
  | Source | Query | Date | Filters | Results | Notes |
10
29
  |---|---|---:|---|---:|---|
11
30
 
31
+ ## Citation Chasing
32
+
33
+ Record rounds in `sota/citation-chasing-log.csv`. Include backward references,
34
+ forward citations, promoted seeds, and saturation notes.
35
+
12
36
  ## Screening Notes
13
37
 
14
38
  <fill: screening workflow, ambiguity, or reviewer notes>
39
+
40
+ ## Blind Spots
41
+
42
+ <fill: databases not searched, inaccessible full text, language limits, venue
43
+ limits, missing citation graph coverage, or unresolved metadata issues>
@@ -8,18 +8,36 @@ def test_core_research_structure_exists() -> None:
8
8
  "configs/default.yaml",
9
9
  "configs/capabilities.yaml",
10
10
  "docs/agent/capability-profile.md",
11
+ "docs/agent/output-contracts.md",
12
+ "docs/agent/project-quality.md",
13
+ "docs/agent/repo-migration-playbook.md",
14
+ "docs/reproducibility/commands.md",
11
15
  "scripts/README.md",
12
16
  "notebooks/README.md",
13
17
  "outputs/figures",
14
18
  "outputs/tables",
15
19
  "data/raw",
16
20
  "analysis_outputs",
21
+ "analysis_outputs/claim-audit.md",
17
22
  "artifacts/cache",
18
23
  "artifacts/data",
19
24
  "artifacts/models",
20
25
  "artifacts/releases",
26
+ "artifacts/badge-evidence-ledger.csv",
27
+ "experiments/campaigns/autonomous-campaign-template.md",
28
+ "experiments/campaigns/frontier-results.tsv",
29
+ "repro_outputs/SUMMARY.md",
30
+ "repro_outputs/COMMANDS.md",
31
+ "repro_outputs/LOG.md",
32
+ "repro_outputs/PATCHES.md",
33
+ "repro_outputs/status.json",
34
+ "sources/markdown-linear",
21
35
  "sources/source-ledger.csv",
36
+ "sota/reading-log.csv",
37
+ "sota/citation-chasing-log.csv",
22
38
  "sota/literature-matrix.csv",
39
+ "sota/paper-syntheses",
40
+ "reports/paper/sota-survey.tex",
23
41
  "wiki/index.md",
24
42
  "wiki/log.md",
25
43
  "wiki/templates/source-page.md",