superlab 0.1.24 → 0.1.25

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.
package/README.md CHANGED
@@ -180,7 +180,7 @@ superlab auto stop
180
180
 
181
181
  - `run` and `iterate` must change persistent outputs under `results_root`
182
182
  - `review` must update canonical review context
183
- - `report` must write `<deliverables_root>/report.md` and `<deliverables_root>/main-tables.md`
183
+ - `report` must write `<deliverables_root>/report.md`, `<deliverables_root>/main-tables.md`, and `<deliverables_root>/artifact-status.md`
184
184
  - `write` must produce LaTeX output under `<deliverables_root>/paper/`
185
185
  - a successful promotion must write back into `.lab/context/data-decisions.md`, `.lab/context/decisions.md`, `.lab/context/state.md`, and `.lab/context/session-brief.md`
186
186
  - every run must end with `.lab/context/auto-outcome.md`, including why it stopped, whether the terminal goal was reached, and which artifact is the final outcome
@@ -309,6 +309,7 @@ See the source command docs in [commands/codex/lab.md](/Users/zhouhao119/coding/
309
309
 
310
310
  - `docs/research/report.md`
311
311
  - `docs/research/main-tables.md`
312
+ - `docs/research/artifact-status.md`
312
313
  - `docs/research/paper/main.tex`
313
314
  - `docs/research/paper/sections/*.tex`
314
315
 
package/README.zh-CN.md CHANGED
@@ -178,7 +178,7 @@ superlab auto stop
178
178
 
179
179
  - `run` 和 `iterate` 必须更新 `results_root` 下的持久输出
180
180
  - `review` 必须更新规范的审查上下文
181
- - `report` 必须写出 `<deliverables_root>/report.md` 和 `<deliverables_root>/main-tables.md`
181
+ - `report` 必须写出 `<deliverables_root>/report.md`、`<deliverables_root>/main-tables.md` 和 `<deliverables_root>/artifact-status.md`
182
182
  - `write` 必须写出 `<deliverables_root>/paper/` 下的 LaTeX 论文产物
183
183
  - promotion 成功后必须写回 `.lab/context/data-decisions.md`、`.lab/context/decisions.md`、`.lab/context/state.md` 和 `.lab/context/session-brief.md`
184
184
  - 每次运行都必须写出 `.lab/context/auto-outcome.md`,记录为什么停止、是否达到终止目标,以及哪一个工件是最终结果
@@ -294,6 +294,7 @@ Codex 和 Claude 的命令入口不一样:
294
294
 
295
295
  - `docs/research/report.md`
296
296
  - `docs/research/main-tables.md`
297
+ - `docs/research/artifact-status.md`
297
298
  - `docs/research/paper/main.tex`
298
299
  - `docs/research/paper/sections/*.tex`
299
300
 
@@ -34,6 +34,7 @@ const FROZEN_CORE_ALIASES = {
34
34
  const REVIEW_CONTEXT_FILES = [
35
35
  path.join(".lab", "context", "decisions.md"),
36
36
  path.join(".lab", "context", "state.md"),
37
+ path.join(".lab", "context", "workflow-state.md"),
37
38
  path.join(".lab", "context", "open-questions.md"),
38
39
  path.join(".lab", "context", "evidence-index.md"),
39
40
  ];
@@ -288,6 +289,7 @@ function stageContractSnapshot(targetDir, stage) {
288
289
  report: [
289
290
  path.join(deliverablesRoot, "report.md"),
290
291
  path.join(deliverablesRoot, "main-tables.md"),
292
+ path.join(deliverablesRoot, "artifact-status.md"),
291
293
  ],
292
294
  write: [
293
295
  path.join(deliverablesRoot, "paper", "main.tex"),
@@ -318,7 +320,7 @@ function verifyStageContract({ stage, snapshot }) {
318
320
  if (stage === "review") {
319
321
  if (changedPaths.length === 0) {
320
322
  throw new Error(
321
- "review stage did not update canonical review context (.lab/context/decisions.md, state.md, open-questions.md, or evidence-index.md)"
323
+ "review stage did not update canonical review context (.lab/context/decisions.md, state.md, workflow-state.md, open-questions.md, or evidence-index.md)"
322
324
  );
323
325
  }
324
326
  return;
@@ -327,7 +329,7 @@ function verifyStageContract({ stage, snapshot }) {
327
329
  if (stage === "report") {
328
330
  const missing = Array.from(snapshot.keys()).filter((absolutePath) => !changedPaths.includes(absolutePath));
329
331
  if (missing.length > 0) {
330
- throw new Error("report stage did not produce the deliverable report.md and main-tables.md under deliverables_root");
332
+ throw new Error("report stage did not produce report.md, main-tables.md, and artifact-status.md under deliverables_root");
331
333
  }
332
334
  return;
333
335
  }
package/lib/context.cjs CHANGED
@@ -206,6 +206,30 @@ function isMeaningful(value) {
206
206
  return !PLACEHOLDER_VALUES.has((value || "").trim().toLowerCase());
207
207
  }
208
208
 
209
+ function hasWorkflowStateShape(text) {
210
+ if (!text) {
211
+ return false;
212
+ }
213
+ return [
214
+ extractValue(text, ["Active stage", "当前阶段", "Stage"]),
215
+ extractValue(text, ["Current objective", "当前目标"]),
216
+ extractValue(text, ["Next required output", "Next required artifact", "下一项必要输出"]),
217
+ extractValue(text, ["Immediate action", "立即要做的动作"]),
218
+ ].some((value) => isMeaningful(value));
219
+ }
220
+
221
+ function readWorkflowStateContext(targetDir) {
222
+ const workflowState = readFileIfExists(contextFile(targetDir, "workflow-state.md"));
223
+ if (hasWorkflowStateShape(workflowState)) {
224
+ return workflowState;
225
+ }
226
+ const legacyState = readFileIfExists(contextFile(targetDir, "state.md"));
227
+ if (hasWorkflowStateShape(legacyState)) {
228
+ return legacyState;
229
+ }
230
+ return workflowState || legacyState;
231
+ }
232
+
209
233
  function readWorkflowConfig(targetDir) {
210
234
  const configPath = path.join(targetDir, ".lab", "config", "workflow.json");
211
235
  if (!fs.existsSync(configPath)) {
@@ -232,6 +256,7 @@ function getCollaboratorDeliverablePaths(targetDir) {
232
256
  deliverablesRoot,
233
257
  reportPath: path.join(deliverablesRoot, "report.md"),
234
258
  mainTablesPath: path.join(deliverablesRoot, "main-tables.md"),
259
+ artifactStatusPath: path.join(deliverablesRoot, "artifact-status.md"),
235
260
  };
236
261
  }
237
262
 
@@ -610,11 +635,16 @@ function labelValue(text, englishLabels, chineseLabels = []) {
610
635
 
611
636
  function collectHydrationSources(targetDir) {
612
637
  const { reportPath, mainTablesPath } = getCollaboratorDeliverablePaths(targetDir);
638
+ const workflowStatePath = hasWorkflowStateShape(readFileIfExists(contextFile(targetDir, "workflow-state.md")))
639
+ ? ".lab/context/workflow-state.md"
640
+ : hasWorkflowStateShape(readFileIfExists(contextFile(targetDir, "state.md")))
641
+ ? ".lab/context/state.md"
642
+ : "";
613
643
  return [
614
644
  fs.existsSync(reportPath) ? path.relative(targetDir, reportPath) : "",
615
645
  fs.existsSync(mainTablesPath) ? path.relative(targetDir, mainTablesPath) : "",
616
646
  readFileIfExists(contextFile(targetDir, "data-decisions.md")) ? ".lab/context/data-decisions.md" : "",
617
- readFileIfExists(contextFile(targetDir, "state.md")) ? ".lab/context/state.md" : "",
647
+ workflowStatePath,
618
648
  readFileIfExists(contextFile(targetDir, "evidence-index.md")) ? ".lab/context/evidence-index.md" : "",
619
649
  ].filter(Boolean);
620
650
  }
@@ -626,7 +656,7 @@ function hydrateMissionContext(targetDir) {
626
656
 
627
657
  const lang = readWorkflowLanguage(targetDir);
628
658
  const missionText = readFileIfExists(contextFile(targetDir, "mission.md"));
629
- const stateText = readFileIfExists(contextFile(targetDir, "state.md"));
659
+ const workflowStateText = readWorkflowStateContext(targetDir);
630
660
  const evidenceText = readFileIfExists(contextFile(targetDir, "evidence-index.md"));
631
661
  const dataDecisions = readFileIfExists(contextFile(targetDir, "data-decisions.md"));
632
662
  const reportText = readFileIfExists(getCollaboratorDeliverablePaths(targetDir).reportPath);
@@ -637,7 +667,7 @@ function hydrateMissionContext(targetDir) {
637
667
  problem: mergePreferred(
638
668
  extractValue(missionText, ["One-sentence problem", "一句话问题"]),
639
669
  extractReportValue(reportText, "problem"),
640
- extractValue(stateText, ["Current objective", "当前目标", "Current objective"])
670
+ extractValue(workflowStateText, ["Current objective", "当前目标", "Current objective"])
641
671
  ),
642
672
  whyItMatters: mergePreferred(
643
673
  extractValue(missionText, ["Why it matters", "为什么重要"]),
@@ -680,7 +710,7 @@ function hydrateMissionContext(targetDir) {
680
710
  currentOwner: extractValue(missionText, ["Current owner or session", "当前 owner 或会话"]),
681
711
  latestStage: mergePreferred(
682
712
  extractValue(missionText, ["Latest stage to update this mission", "最近一次允许更新 mission 的阶段"]),
683
- extractValue(stateText, ["Active stage", "当前阶段", "Stage"])
713
+ extractValue(workflowStateText, ["Active stage", "当前阶段", "Stage"])
684
714
  ),
685
715
  };
686
716
 
@@ -935,6 +965,110 @@ function hydrateCanonicalContext(targetDir) {
935
965
  };
936
966
  }
937
967
 
968
+ function renderResearchState(lang, data) {
969
+ if (lang === "zh") {
970
+ return `# 研究状态
971
+
972
+ ## 已批准方向
973
+
974
+ - One-sentence problem: ${data.problem || "待补充"}
975
+ - Approved direction: ${data.direction || "待补充"}
976
+ - Strongest supported claim: ${data.claim || "待补充"}
977
+
978
+ ## 证据边界
979
+
980
+ - What the current evidence really supports: ${data.reportModeReason || data.direction || "待补充"}
981
+ - What is still outside the boundary: ${data.question || "待补充"}
982
+ - Biggest research risk: ${data.risk || "待补充"}
983
+
984
+ ## 当前研究主线
985
+
986
+ - Current research focus: ${data.immediateAction || data.direction || "待补充"}
987
+ - Primary metric: ${data.evalPrimaryMetrics || data.threshold || "待补充"}
988
+ - Dataset or benchmark scope: ${data.datasetPackage || data.benchmarkRole || "待补充"}
989
+
990
+ ## 当前研究约束
991
+
992
+ - Hard constraints: ${data.boundary || "待补充"}
993
+ - Claim boundary: ${data.evalClaimBoundary || "待补充"}
994
+ - Conditions that require reopening the direction: ${data.humanDecision || "待补充"}
995
+ `;
996
+ }
997
+
998
+ return `# Research State
999
+
1000
+ ## Approved Direction
1001
+
1002
+ - One-sentence problem: ${data.problem || "TBD"}
1003
+ - Approved direction: ${data.direction || "TBD"}
1004
+ - Strongest supported claim: ${data.claim || "TBD"}
1005
+
1006
+ ## Evidence Boundary
1007
+
1008
+ - What the current evidence really supports: ${data.reportModeReason || data.direction || "TBD"}
1009
+ - What is still outside the boundary: ${data.question || "TBD"}
1010
+ - Biggest research risk: ${data.risk || "TBD"}
1011
+
1012
+ ## Active Research Track
1013
+
1014
+ - Current research focus: ${data.immediateAction || data.direction || "TBD"}
1015
+ - Primary metric: ${data.evalPrimaryMetrics || data.threshold || "TBD"}
1016
+ - Dataset or benchmark scope: ${data.datasetPackage || data.benchmarkRole || "TBD"}
1017
+
1018
+ ## Current Research Constraints
1019
+
1020
+ - Hard constraints: ${data.boundary || "TBD"}
1021
+ - Claim boundary: ${data.evalClaimBoundary || "TBD"}
1022
+ - Conditions that require reopening the direction: ${data.humanDecision || "TBD"}
1023
+ `;
1024
+ }
1025
+
1026
+ function renderWorkflowState(lang, data) {
1027
+ if (lang === "zh") {
1028
+ return `# 工作流状态
1029
+
1030
+ ## 当前阶段
1031
+
1032
+ - Active stage: ${data.stage || "待补充"}
1033
+ - 当前目标:${data.workflowObjective || "待补充"}
1034
+ - 下一项必要输出:${data.nextArtifact || "待补充"}
1035
+
1036
+ ## 最近更新
1037
+
1038
+ - 最近完成动作:${data.latestAction || "待补充"}
1039
+ - 最新工件路径:${data.latestArtifactPath || "待补充"}
1040
+ - 最新 run 或 report id:${data.latestRunOrReportId || "待补充"}
1041
+
1042
+ ## 下一步
1043
+
1044
+ - 立即要做的动作:${data.immediateAction || "待补充"}
1045
+ - 当前阻塞:${data.blocker || "待补充"}
1046
+ - 是否需要人工决策:${data.humanDecision || "待补充"}
1047
+ `;
1048
+ }
1049
+
1050
+ return `# Workflow State
1051
+
1052
+ ## Current Stage
1053
+
1054
+ - Active stage: ${data.stage || "TBD"}
1055
+ - Current objective: ${data.workflowObjective || "TBD"}
1056
+ - Next required output: ${data.nextArtifact || "TBD"}
1057
+
1058
+ ## Latest Update
1059
+
1060
+ - Last completed action: ${data.latestAction || "TBD"}
1061
+ - Latest artifact path: ${data.latestArtifactPath || "TBD"}
1062
+ - Latest run or report id: ${data.latestRunOrReportId || "TBD"}
1063
+
1064
+ ## Next Step
1065
+
1066
+ - Immediate next action: ${data.immediateAction || "TBD"}
1067
+ - Blocking issue: ${data.blocker || "TBD"}
1068
+ - Human decision needed: ${data.humanDecision || "TBD"}
1069
+ `;
1070
+ }
1071
+
938
1072
  function renderSummary(lang, data) {
939
1073
  if (lang === "zh") {
940
1074
  return `# 研究摘要
@@ -1220,7 +1354,7 @@ ${data.problem || "待补充"}
1220
1354
  ## 先读这些文件
1221
1355
 
1222
1356
  1. \`.lab/context/mission.md\`
1223
- 2. \`.lab/context/state.md\`
1357
+ 2. \`.lab/context/workflow-state.md\`
1224
1358
  3. \`.lab/context/evidence-index.md\`
1225
1359
 
1226
1360
  ## 不要静默修改
@@ -1309,7 +1443,7 @@ ${data.problem || "TBD"}
1309
1443
  ## Read First
1310
1444
 
1311
1445
  1. \`.lab/context/mission.md\`
1312
- 2. \`.lab/context/state.md\`
1446
+ 2. \`.lab/context/workflow-state.md\`
1313
1447
  3. \`.lab/context/evidence-index.md\`
1314
1448
 
1315
1449
  ## Do Not Change Silently
@@ -1322,7 +1456,7 @@ ${data.problem || "TBD"}
1322
1456
  function buildContextSnapshot(targetDir) {
1323
1457
  const reportStatus = getCollaboratorReportStatus(targetDir);
1324
1458
  const mission = readFileIfExists(contextFile(targetDir, "mission.md"));
1325
- const state = readFileIfExists(contextFile(targetDir, "state.md"));
1459
+ const workflowState = readWorkflowStateContext(targetDir);
1326
1460
  const evidence = readFileIfExists(contextFile(targetDir, "evidence-index.md"));
1327
1461
  const questions = readFileIfExists(contextFile(targetDir, "open-questions.md"));
1328
1462
  const dataDecisions = readFileIfExists(contextFile(targetDir, "data-decisions.md"));
@@ -1390,16 +1524,22 @@ function buildContextSnapshot(targetDir) {
1390
1524
  return {
1391
1525
  problem: extractValue(mission, ["One-sentence problem", "一句话问题"]),
1392
1526
  direction: extractValue(mission, ["Approved direction", "已批准方向"]),
1393
- stage: extractValue(state, ["Active stage", "当前阶段", "Stage"]),
1394
- nextArtifact: extractValue(state, ["Next required artifact", "下一项必要输出"]),
1395
- immediateAction: extractValue(state, ["Immediate action", "立即要做的动作"]),
1396
- blocker: extractValue(state, ["Current blocker", "当前阻塞"]),
1397
- humanDecision: extractValue(state, ["Human decision needed", "是否需要人工决策"]),
1527
+ stage: extractValue(workflowState, ["Active stage", "当前阶段", "Stage"]),
1528
+ workflowObjective: extractValue(workflowState, ["Current objective", "当前目标"]),
1529
+ nextArtifact: extractValue(workflowState, ["Next required artifact", "下一项必要输出"]),
1530
+ latestAction: extractValue(workflowState, ["Latest completed action", "Last completed action", "最近完成动作"]),
1531
+ latestArtifactPath: extractValue(workflowState, ["Latest artifact path", "最新工件路径"]),
1532
+ latestRunOrReportId: extractValue(workflowState, ["Latest run or report id", "最新 run 或 report id"]),
1533
+ immediateAction: extractValue(workflowState, ["Immediate action", "立即要做的动作"]),
1534
+ blocker: extractValue(workflowState, ["Current blocker", "Blocking issue", "当前阻塞"]),
1535
+ humanDecision: extractValue(workflowState, ["Human decision needed", "是否需要人工决策"]),
1398
1536
  threshold: extractValue(mission, ["Success threshold", "成功阈值"]),
1399
1537
  boundary: extractValue(mission, ["Hard constraints", "硬约束"]),
1400
1538
  claim: extractClaim(evidence),
1401
1539
  question: extractOpenQuestion(questions),
1402
- risk: extractValue(questions, ["Why it matters", "为什么重要"]) || extractValue(state, ["Current blocker", "当前阻塞"]),
1540
+ risk:
1541
+ extractValue(questions, ["Why it matters", "为什么重要"]) ||
1542
+ extractValue(workflowState, ["Current blocker", "Blocking issue", "当前阻塞"]),
1403
1543
  datasetPackage:
1404
1544
  extractValue(dataDecisions, ["Approved dataset package", "已批准数据集包"]) ||
1405
1545
  extractValue(dataDecisions, ["Approved datasets", "已批准数据集"]),
@@ -1583,6 +1723,8 @@ function refreshContext({ targetDir }) {
1583
1723
  hydrateCanonicalContext(targetDir);
1584
1724
  const lang = readWorkflowLanguage(targetDir);
1585
1725
  const snapshot = buildContextSnapshot(targetDir);
1726
+ writeContextFile(targetDir, "state.md", renderResearchState(lang, snapshot));
1727
+ writeContextFile(targetDir, "workflow-state.md", renderWorkflowState(lang, snapshot));
1586
1728
  writeContextFile(targetDir, "summary.md", renderSummary(lang, snapshot));
1587
1729
  writeContextFile(targetDir, "next-action.md", renderNextAction(lang, snapshot));
1588
1730
  writeContextFile(targetDir, "session-brief.md", renderSessionBrief(lang, snapshot));
package/lib/i18n.cjs CHANGED
@@ -55,7 +55,7 @@ const ZH_CONTENT = {
55
55
  [path.join(".codex", "prompts", "lab-report.md")]: codexPrompt(
56
56
  "基于验证后的迭代工件生成最终报告",
57
57
  "report context",
58
- "使用已安装的 `lab` 技能:`.codex/skills/lab/SKILL.md`。\n\n立刻针对用户当前给出的参数执行 `/lab:report`,不要只推荐别的 `/lab` 阶段。只有在缺少阻塞性前提时,才明确指出缺什么,并且一次最多追问一个问题。\n\n本命令运行 `/lab:report` 阶段。它必须生成给用户直接阅读的最终实验报告和受管的 `main-tables.md`,明确写出主指标、次级指标和必要终局证据,并用白话解释这些指标分别衡量什么、哪些只是健康度或支持性指标、以及每张主表到底证明了什么和没证明什么。"
58
+ "使用已安装的 `lab` 技能:`.codex/skills/lab/SKILL.md`。\n\n立刻针对用户当前给出的参数执行 `/lab:report`,不要只推荐别的 `/lab` 阶段。只有在缺少阻塞性前提时,才明确指出缺什么,并且一次最多追问一个问题。\n\n本命令运行 `/lab:report` 阶段。它必须生成给用户直接阅读的最终实验报告、受管的 `main-tables.md`,以及单独的内部 `artifact-status.md`。主报告要明确写出主指标、次级指标和必要终局证据,并用白话解释这些指标分别衡量什么、哪些只是健康度或支持性指标、以及每张主表到底证明了什么和没证明什么。"
59
59
  ),
60
60
  [path.join(".codex", "prompts", "lab-write.md")]: codexPrompt(
61
61
  "把验证过的研究工件转成论文 section,并按小步方式修订",
@@ -102,7 +102,7 @@ const ZH_CONTENT = {
102
102
  "lab-report",
103
103
  "基于验证后的迭代工件生成最终报告",
104
104
  "report context",
105
- "使用已安装的 `lab` 技能:`.claude/skills/lab/SKILL.md`。\n\n立刻针对用户当前给出的参数执行 `report` 阶段,不要只推荐别的 lab 阶段。只有在缺少阻塞性前提时,才明确指出缺什么,并且一次最多追问一个问题。\n\n本命令运行 lab workflow 的 `report` 阶段。它必须生成给用户直接阅读的最终实验报告和受管的 `main-tables.md`,明确写出主指标、次级指标和必要终局证据,并用白话解释这些指标分别衡量什么、哪些只是健康度或支持性指标、以及每张主表到底证明了什么和没证明什么。"
105
+ "使用已安装的 `lab` 技能:`.claude/skills/lab/SKILL.md`。\n\n立刻针对用户当前给出的参数执行 `report` 阶段,不要只推荐别的 lab 阶段。只有在缺少阻塞性前提时,才明确指出缺什么,并且一次最多追问一个问题。\n\n本命令运行 lab workflow 的 `report` 阶段。它必须生成给用户直接阅读的最终实验报告、受管的 `main-tables.md`,以及单独的内部 `artifact-status.md`。主报告要明确写出主指标、次级指标和必要终局证据,并用白话解释这些指标分别衡量什么、哪些只是健康度或支持性指标、以及每张主表到底证明了什么和没证明什么。"
106
106
  ),
107
107
  [path.join(".claude", "commands", "lab-write.md")]: claudeCommand(
108
108
  "lab-write",
@@ -300,6 +300,7 @@ const ZH_SKILL_FILES = {
300
300
  - 实验设置
301
301
  - 已验证主结果
302
302
  - 位于 \`<deliverables_root>/main-tables.md\` 的受管主表工件
303
+ - 位于 \`<deliverables_root>/artifact-status.md\` 的内部工件状态
303
304
  - 怎么看主表的阅读指引
304
305
  - 消融
305
306
  - 失败尝试
@@ -311,6 +312,7 @@ const ZH_SKILL_FILES = {
311
312
 
312
313
  - \`.lab/context/mission.md\`
313
314
  - \`.lab/context/state.md\`
315
+ - \`.lab/context/workflow-state.md\`
314
316
  - \`.lab/context/decisions.md\`
315
317
  - \`.lab/context/evidence-index.md\`
316
318
  - \`.lab/context/eval-protocol.md\`
@@ -320,6 +322,7 @@ const ZH_SKILL_FILES = {
320
322
  - \`.lab/context/mission.md\`
321
323
  - \`.lab/context/eval-protocol.md\`
322
324
  - \`.lab/context/state.md\`
325
+ - \`.lab/context/workflow-state.md\`
323
326
  - \`.lab/context/evidence-index.md\`
324
327
 
325
328
  ## 证据规则
@@ -337,14 +340,14 @@ const ZH_SKILL_FILES = {
337
340
  - 方法概述必须用协作者能读懂的话说明:我们的方法大致怎么做、相对 closest prior work 或 strongest baseline 改了什么、这些 prior 方法各自做了什么,以及它们为什么在当前 claim 下仍然不够。
338
341
  - 只保留少量最关键的 prior work/baseline 锚点;每个锚点都要用一句话交代它做了什么和它的局限。
339
342
  - 在“背景来源”“方法与基线来源”“指标来源”里,每个锚点都必须包含:引用、它做了什么或衡量什么、以及至少一个局限或 caveat。
340
- - 内部 provenance 只能放到 \`工件状态\` 或 \`.lab/context/evidence-index.md\`,不能塞进来源章节。
343
+ - 内部 provenance 只能放到 \`<deliverables_root>/artifact-status.md\` 或 \`.lab/context/evidence-index.md\`,不能塞进来源章节。
341
344
  - 在起草报告前,先检查 \`.lab/context/mission.md\` 和 \`.lab/context/eval-protocol.md\` 是否仍是模板空壳。
342
345
  - 如果 canonical context 还是空壳,要先根据 frozen result artifacts、data-decisions、evidence-index 和已批准上下文回填“最小可信版本”,再写报告。
343
346
  - 如果回填后仍缺少协作者可读所需的关键字段,就必须把输出降级成 \`artifact-anchored interim report\`,不能冒充最终协作者报告。
344
347
  - 如果现有的 \`report.md\` 或 \`main-tables.md\` 缺少受管模板要求的协作者可读章节,也必须视为报告缺陷;rerun 需要补齐这些缺失块,不能直接宣称“正文无变化”或把这次 rerun 当成 no-op。
345
348
  - 报告起草或 rerun 完成后,必须运行 \`.lab/.managed/scripts/validate_collaborator_report.py --report <deliverables_root>/report.md --main-tables <deliverables_root>/main-tables.md\`。如果校验失败,就继续补正文,不能停在“只新增审计痕迹”的状态。
346
349
  - 如果报告依赖了对原始指标或原始实现的偏差,必须明确写出这个偏差。
347
- - workflow 工件状态、rerun id 或 LaTeX 骨架状态不能混进“已验证主结果”;这些内容必须单列到工件状态部分。
350
+ - workflow 工件状态、rerun id 或 LaTeX 骨架状态不能混进“已验证主结果”;这些内容必须单列到 \`<deliverables_root>/artifact-status.md\`。
348
351
  - 如果 workflow language 是中文,\`report.md\` 和 \`<deliverables_root>/main-tables.md\` 也应使用中文,除非文件路径、代码标识符或字面指标名必须保持原样。
349
352
  - 解释优先保守,不要写成营销文案。
350
353
  - 要给 \`/lab:write\` 留下清晰 handoff,尤其是 section draft 可以直接引用的证据链接。
@@ -814,11 +817,6 @@ const ZH_SKILL_FILES = {
814
817
  - 最终表现摘要:
815
818
  - 主表覆盖情况:
816
819
 
817
- ## 工件状态
818
-
819
- - 已就绪的交付物或工作流工件:
820
- - 这些工件状态为什么不是科学结论:
821
-
822
820
  ## 主要结果
823
821
 
824
822
  - 主要发现 1:
@@ -833,6 +831,36 @@ const ZH_SKILL_FILES = {
833
831
 
834
832
  - Claim:
835
833
  - 缺失支持:
834
+ `,
835
+ [path.join(".lab", ".managed", "templates", "artifact-status.md")]:
836
+ `# 工件状态
837
+
838
+ ## 交付物状态
839
+
840
+ - 协作者报告路径:
841
+ - 受管主表路径:
842
+ - 当前报告模式:
843
+ - 为什么当前状态是合理的:
844
+
845
+ ## 工作流审计
846
+
847
+ - 最近完成动作:
848
+ - 最新工件路径:
849
+ - 最新 run 或 report id:
850
+ - rerun 或校验备注:
851
+
852
+ ## 内部溯源
853
+
854
+ - 使用的冻结结果工件:
855
+ - 已刷新 canonical context:
856
+ - Evidence index 锚点:
857
+
858
+ ## 论文交接
859
+
860
+ - 已可进入 \`/lab:write\` 的 sections:
861
+ - 可引用的证据包:
862
+ - 仍需要更强支持的 claims:
863
+ - 仍未完成的 paper-finishing 项:
836
864
  `,
837
865
  [path.join(".lab", ".managed", "templates", "main-tables.md")]:
838
866
  `# 主表工件
@@ -1056,6 +1084,33 @@ const ZH_SKILL_FILES = {
1056
1084
  - 协作者可读状态:
1057
1085
  `,
1058
1086
  [path.join(".lab", "context", "state.md")]:
1087
+ `# 研究状态
1088
+
1089
+ ## 已批准方向
1090
+
1091
+ - One-sentence problem:
1092
+ - Approved direction:
1093
+ - Strongest supported claim:
1094
+
1095
+ ## 证据边界
1096
+
1097
+ - What the current evidence really supports:
1098
+ - What is still outside the boundary:
1099
+ - Biggest research risk:
1100
+
1101
+ ## 当前研究主线
1102
+
1103
+ - Current research focus:
1104
+ - Primary metric:
1105
+ - Dataset or benchmark scope:
1106
+
1107
+ ## 当前研究约束
1108
+
1109
+ - Hard constraints:
1110
+ - Claim boundary:
1111
+ - Conditions that require reopening the direction:
1112
+ `,
1113
+ [path.join(".lab", "context", "workflow-state.md")]:
1059
1114
  `# 工作流状态
1060
1115
 
1061
1116
  ## 当前阶段
@@ -1172,8 +1227,8 @@ const ZH_SKILL_FILES = {
1172
1227
 
1173
1228
  - Run stage contract: write persistent outputs under \`results_root\`.
1174
1229
  - Iterate stage contract: update persistent outputs under \`results_root\`.
1175
- - Review stage contract: update canonical review context such as \`.lab/context/decisions.md\`、\`state.md\`、\`open-questions.md\` or \`evidence-index.md\`.
1176
- - Report stage contract: write the final report to \`<deliverables_root>/report.md\`.
1230
+ - Review stage contract: update canonical review context such as \`.lab/context/decisions.md\`、\`state.md\`、\`workflow-state.md\`、\`open-questions.md\` or \`evidence-index.md\`.
1231
+ - Report stage contract: write \`<deliverables_root>/report.md\`、\`<deliverables_root>/main-tables.md\` and \`<deliverables_root>/artifact-status.md\`.
1177
1232
  - Write stage contract: write LaTeX output under \`<deliverables_root>/paper/\`.
1178
1233
 
1179
1234
  ## 升格策略
@@ -1284,7 +1339,7 @@ ZH_CONTENT[path.join(".lab", "system", "core.md")] = `# Lab 系统核心
1284
1339
 
1285
1340
  1. \`.lab/context/session-brief.md\`
1286
1341
  2. \`.lab/context/mission.md\`
1287
- 3. \`.lab/context/state.md\`
1342
+ 3. \`.lab/context/workflow-state.md\`
1288
1343
  4. \`.lab/context/evidence-index.md\`
1289
1344
  5. \`.lab/context/data-decisions.md\`(当问题涉及数据集、benchmark 或对比方法时)
1290
1345
  6. \`.lab/context/auto-mode.md\` 和 \`.lab/context/auto-status.md\`(当任务涉及自动模式时)
@@ -1293,13 +1348,15 @@ ZH_CONTENT[path.join(".lab", "system", "core.md")] = `# Lab 系统核心
1293
1348
 
1294
1349
  ## 工作流边界
1295
1350
 
1296
- - \`.lab/context/\` 保存持久研究状态。
1351
+ - \`.lab/context/\` 同时保存持久研究状态和轻量工作流状态。
1297
1352
  - \`.lab/changes/\`、\`.lab/iterations/\`、\`.lab/writing/\` 保存工作流控制工件、轻量 manifest 和 change-local harness。
1298
1353
  - \`.lab/.managed/\` 保存工具托管模板和脚本。
1299
1354
  - 持久 run 输出应写到 \`results_root\`,不要写进 \`.lab/changes/\`。
1300
1355
  - 图表和可视化应写到 \`figures_root\`,不要写进 \`.lab/changes/\`。
1301
1356
  - 最终交付物应写到 \`deliverables_root\`,不要写进 \`.lab/context/\`。
1302
1357
  - change-local 的 \`data/\` 目录只应用来放轻量 manifest 或 batch spec,不要当正式数据集入口。
1358
+ - \`.lab/context/state.md\` 保存持久研究状态;\`.lab/context/workflow-state.md\` 保存当前工作流状态。
1359
+ - \`.lab/context/summary.md\` 是长期项目摘要;\`.lab/context/session-brief.md\` 是下一次会话启动简报。
1303
1360
  - \`.lab/context/auto-mode.md\` 定义自动模式边界,\`.lab/context/auto-status.md\` 记录自动运行状态,二者都属于项目状态。
1304
1361
  - 如果用户提供了 LaTeX 模板目录,先校验并通过 \`paper_template_root\` 接入,再开始写作。
1305
1362
  - 已接入的模板目录视为用户资产,默认不要改模板文件,除非用户明确要求。
@@ -1391,7 +1448,7 @@ ZH_CONTENT[path.join(".lab", "context", "session-brief.md")] = `# 会话简报
1391
1448
  ## 先读这些文件
1392
1449
 
1393
1450
  1. \`.lab/context/mission.md\`
1394
- 2. \`.lab/context/state.md\`
1451
+ 2. \`.lab/context/workflow-state.md\`
1395
1452
  3. \`.lab/context/evidence-index.md\`
1396
1453
 
1397
1454
  ## 不要静默修改
package/lib/install.cjs CHANGED
@@ -36,6 +36,7 @@ const PROJECT_OWNED_LOCALIZED_PATHS = [
36
36
  path.join(".lab", "config", "workflow.json"),
37
37
  path.join(".lab", "context", "mission.md"),
38
38
  path.join(".lab", "context", "state.md"),
39
+ path.join(".lab", "context", "workflow-state.md"),
39
40
  path.join(".lab", "context", "decisions.md"),
40
41
  path.join(".lab", "context", "evidence-index.md"),
41
42
  path.join(".lab", "context", "open-questions.md"),
@@ -542,6 +543,7 @@ function localizeInstalledAssets(targetDir, lang, { newlyCreatedProjectOwnedPath
542
543
  path.join(".lab", ".managed", "templates", "review-checklist.md"),
543
544
  path.join(".lab", ".managed", "templates", "final-report.md"),
544
545
  path.join(".lab", ".managed", "templates", "main-tables.md"),
546
+ path.join(".lab", ".managed", "templates", "artifact-status.md"),
545
547
  path.join(".lab", ".managed", "templates", "paper-plan.md"),
546
548
  path.join(".lab", ".managed", "templates", "paper-section.md"),
547
549
  path.join(".lab", ".managed", "templates", "write-iteration.md"),
@@ -0,0 +1,28 @@
1
+ # Artifact Status
2
+
3
+ ## Deliverable Status
4
+
5
+ - Collaborator-facing report path:
6
+ - Managed main tables path:
7
+ - Current report mode:
8
+ - Why this status is appropriate:
9
+
10
+ ## Workflow Audit
11
+
12
+ - Latest completed action:
13
+ - Latest artifact path:
14
+ - Latest run or report id:
15
+ - Rerun or validation notes:
16
+
17
+ ## Internal Provenance
18
+
19
+ - Frozen result artifacts used:
20
+ - Canonical context files refreshed:
21
+ - Evidence index anchors:
22
+
23
+ ## Paper Handoff
24
+
25
+ - Sections ready for `/lab:write`:
26
+ - Evidence bundles to cite:
27
+ - Claims that still need stronger support:
28
+ - Paper-finishing items still open:
@@ -105,11 +105,6 @@
105
105
  - Final performance summary:
106
106
  - Table coverage:
107
107
 
108
- ## Artifact Status
109
-
110
- - Deliverables or workflow artifacts that are ready:
111
- - Artifact status notes that are not scientific findings:
112
-
113
108
  ## Main Results
114
109
 
115
110
  Summarize validated iteration outcomes.
@@ -129,9 +124,3 @@ Describe unresolved risks and external validity limits.
129
124
  ## Next Steps
130
125
 
131
126
  List concrete follow-up actions.
132
-
133
- ## Paper Handoff
134
-
135
- - Sections ready for `/lab:write`:
136
- - Evidence bundles to cite:
137
- - Claims that still need stronger support:
@@ -51,8 +51,8 @@ If `eval-protocol.md` declares structured rung entries, auto mode follows those
51
51
 
52
52
  - Run stage contract: write persistent outputs under `results_root`.
53
53
  - Iterate stage contract: update persistent outputs under `results_root`.
54
- - Review stage contract: update canonical review context such as `.lab/context/decisions.md`, `state.md`, `open-questions.md`, or `evidence-index.md`.
55
- - Report stage contract: write the final report to `<deliverables_root>/report.md`.
54
+ - Review stage contract: update canonical review context such as `.lab/context/decisions.md`, `state.md`, `workflow-state.md`, `open-questions.md`, or `evidence-index.md`.
55
+ - Report stage contract: write `<deliverables_root>/report.md`, `<deliverables_root>/main-tables.md`, and `<deliverables_root>/artifact-status.md`.
56
56
  - Write stage contract: write LaTeX output under `<deliverables_root>/paper/`.
57
57
 
58
58
  ## Promotion Policy
@@ -24,7 +24,7 @@ One sentence describing the active research mission.
24
24
  ## Read First
25
25
 
26
26
  1. `.lab/context/mission.md`
27
- 2. `.lab/context/state.md`
27
+ 2. `.lab/context/workflow-state.md`
28
28
  3. `.lab/context/evidence-index.md`
29
29
 
30
30
  ## Do Not Change Silently
@@ -1,19 +1,25 @@
1
- # Workflow State
1
+ # Research State
2
2
 
3
- ## Current Stage
3
+ ## Approved Direction
4
4
 
5
- - Active stage:
6
- - Current objective:
7
- - Next required output:
5
+ - One-sentence problem:
6
+ - Approved direction:
7
+ - Strongest supported claim:
8
8
 
9
- ## Latest Update
9
+ ## Evidence Boundary
10
10
 
11
- - Last completed action:
12
- - Latest artifact path:
13
- - Latest run or report id:
11
+ - What the current evidence really supports:
12
+ - What is still outside the boundary:
13
+ - Biggest research risk:
14
14
 
15
- ## Next Step
15
+ ## Active Research Track
16
16
 
17
- - Immediate next action:
18
- - Blocking issue:
19
- - Human decision needed:
17
+ - Current research focus:
18
+ - Primary metric:
19
+ - Dataset or benchmark scope:
20
+
21
+ ## Current Research Constraints
22
+
23
+ - Hard constraints:
24
+ - Claim boundary:
25
+ - Conditions that require reopening the direction:
@@ -0,0 +1,19 @@
1
+ # Workflow State
2
+
3
+ ## Current Stage
4
+
5
+ - Active stage:
6
+ - Current objective:
7
+ - Next required output:
8
+
9
+ ## Latest Update
10
+
11
+ - Last completed action:
12
+ - Latest artifact path:
13
+ - Latest run or report id:
14
+
15
+ ## Next Step
16
+
17
+ - Immediate next action:
18
+ - Blocking issue:
19
+ - Human decision needed:
@@ -8,7 +8,7 @@ For a new AI session, read these files in order:
8
8
 
9
9
  1. `.lab/context/session-brief.md`
10
10
  2. `.lab/context/mission.md`
11
- 3. `.lab/context/state.md`
11
+ 3. `.lab/context/workflow-state.md`
12
12
  4. `.lab/context/evidence-index.md`
13
13
 
14
14
  Only expand to additional context when the brief points to it.
@@ -24,13 +24,15 @@ For auto-mode orchestration or long-running experiment campaigns, also read:
24
24
 
25
25
  ## Workflow Boundaries
26
26
 
27
- - `.lab/context/` holds durable project research state.
27
+ - `.lab/context/` holds durable project research state plus lightweight workflow state.
28
28
  - `.lab/changes/`, `.lab/iterations/`, and `.lab/writing/` hold workflow control artifacts, lightweight manifests, and change-local harnesses.
29
29
  - `.lab/.managed/` holds tool-managed templates and scripts.
30
30
  - Durable run outputs belong under the configured `results_root`, not inside `.lab/changes/`.
31
31
  - Figures and plots belong under the configured `figures_root`, not inside `.lab/changes/`.
32
32
  - Deliverables belong under the configured `deliverables_root`, not inside `.lab/context/`.
33
33
  - Change-local `data/` directories may hold lightweight manifests or batch specs, but not the canonical dataset copy.
34
+ - `.lab/context/state.md` holds durable research state; `.lab/context/workflow-state.md` holds live workflow state.
35
+ - `.lab/context/summary.md` is the durable project summary; `.lab/context/session-brief.md` is the next-session startup brief.
34
36
  - `.lab/context/auto-mode.md` defines the bounded autonomous envelope; `.lab/context/auto-status.md` records live state for resume and handoff.
35
37
  - If the user provides a LaTeX template directory, validate it and attach it through `paper_template_root` before drafting.
36
38
  - Treat attached template directories as user-owned assets. Do not rewrite template files unless the user explicitly asks.
@@ -83,7 +83,7 @@ Use this skill when the user invokes `/lab:*` or asks for the structured researc
83
83
  ### `/lab:auto`
84
84
 
85
85
  - Use this stage to orchestrate approved execution stages with bounded autonomy.
86
- - Read `.lab/config/workflow.json`, `.lab/context/mission.md`, `.lab/context/state.md`, `.lab/context/decisions.md`, `.lab/context/data-decisions.md`, `.lab/context/evidence-index.md`, `.lab/context/terminology-lock.md`, `.lab/context/auto-mode.md`, and `.lab/context/auto-status.md` before acting.
86
+ - Read `.lab/config/workflow.json`, `.lab/context/mission.md`, `.lab/context/state.md`, `.lab/context/workflow-state.md`, `.lab/context/decisions.md`, `.lab/context/data-decisions.md`, `.lab/context/evidence-index.md`, `.lab/context/terminology-lock.md`, `.lab/context/auto-mode.md`, and `.lab/context/auto-status.md` before acting.
87
87
  - Treat `.lab/context/auto-mode.md` as the control contract and `.lab/context/auto-status.md` as the live state file.
88
88
  - Require `Autonomy level` and `Approval status` in `.lab/context/auto-mode.md` before execution.
89
89
  - Treat `L1` as safe-run validation, `L2` as bounded iteration, and `L3` as aggressive campaign mode.
@@ -93,13 +93,13 @@ Use this skill when the user invokes `/lab:*` or asks for the structured researc
93
93
  - You may add exploratory datasets, benchmarks, and comparison methods inside the approved exploration envelope.
94
94
  - You may promote an exploratory addition to the primary package only after the promotion policy in `auto-mode.md` is satisfied and the promotion is written back into `.lab/context/data-decisions.md`, `.lab/context/decisions.md`, `.lab/context/state.md`, and `.lab/context/session-brief.md`.
95
95
  - Poll long-running commands until they complete, time out, or hit a stop condition.
96
- - Update `.lab/context/auto-status.md`, `.lab/context/state.md`, `.lab/context/decisions.md`, `.lab/context/data-decisions.md`, `.lab/context/evidence-index.md`, and `.lab/context/session-brief.md` as the campaign advances.
96
+ - Update `.lab/context/auto-status.md`, `.lab/context/state.md`, `.lab/context/workflow-state.md`, `.lab/context/decisions.md`, `.lab/context/data-decisions.md`, `.lab/context/evidence-index.md`, and `.lab/context/session-brief.md` as the campaign advances.
97
97
  - Keep an explicit approval gate when a proposed action would leave the frozen core defined by the auto-mode contract.
98
98
 
99
99
  ### `/lab:spec`
100
100
 
101
101
  - Read `.lab/config/workflow.json` before drafting the change.
102
- - Read `.lab/context/mission.md`, `.lab/context/decisions.md`, `.lab/context/state.md`, and `.lab/context/data-decisions.md` before drafting the change.
102
+ - Read `.lab/context/mission.md`, `.lab/context/decisions.md`, `.lab/context/state.md`, `.lab/context/workflow-state.md`, and `.lab/context/data-decisions.md` before drafting the change.
103
103
  - Use `.lab/changes/<change-id>/` as the canonical lab change directory.
104
104
  - Convert the approved idea into lab change artifacts using `.lab/.managed/templates/proposal.md`, `.lab/.managed/templates/design.md`, `.lab/.managed/templates/spec.md`, and `.lab/.managed/templates/tasks.md`.
105
105
  - Update `.lab/context/state.md` and `.lab/context/decisions.md` after freezing the spec.
@@ -108,12 +108,12 @@ Use this skill when the user invokes `/lab:*` or asks for the structured researc
108
108
  ### `/lab:run`
109
109
 
110
110
  - Start with the smallest meaningful experiment.
111
- - Read `.lab/context/mission.md`, `.lab/context/state.md`, and `.lab/context/data-decisions.md` before choosing the run.
111
+ - Read `.lab/context/mission.md`, `.lab/context/state.md`, `.lab/context/workflow-state.md`, and `.lab/context/data-decisions.md` before choosing the run.
112
112
  - Register the run with `.lab/.managed/scripts/register_run.py`.
113
113
  - Normalize the result with `.lab/.managed/scripts/eval_report.py`.
114
114
  - Validate normalized output with `.lab/.managed/scripts/validate_results.py`.
115
115
  - Read `.lab/context/eval-protocol.md` before choosing the smallest run so the first experiment already targets the approved tables, metrics, and gates.
116
- - Update `.lab/context/state.md`, `.lab/context/evidence-index.md`, and `.lab/context/eval-protocol.md` after the run.
116
+ - Update `.lab/context/state.md`, `.lab/context/workflow-state.md`, `.lab/context/evidence-index.md`, and `.lab/context/eval-protocol.md` after the run.
117
117
  - If the evaluation protocol is still skeletal, initialize the smallest trustworthy source-backed version before treating the run as the protocol anchor.
118
118
 
119
119
  ### `/lab:iterate`
@@ -128,13 +128,13 @@ Use this skill when the user invokes `/lab:*` or asks for the structured researc
128
128
  - maximum iteration count
129
129
  - Only change implementation hypotheses within the loop.
130
130
  - Require a normalized evaluation report each round.
131
- - Read `.lab/context/mission.md`, `.lab/context/state.md`, `.lab/context/decisions.md`, and `.lab/context/evidence-index.md` at the start of each round.
131
+ - Read `.lab/context/mission.md`, `.lab/context/state.md`, `.lab/context/workflow-state.md`, `.lab/context/decisions.md`, and `.lab/context/evidence-index.md` at the start of each round.
132
132
  - Read `.lab/context/data-decisions.md` before changing benchmark-facing experiments.
133
133
  - Read `.lab/context/eval-protocol.md` before changing evaluation ladders, sample sizes, or promotion gates.
134
134
  - Keep metric definitions, baseline behavior, and comparison implementations anchored to the source-backed evaluation protocol before changing thresholds, gates, or ladder transitions.
135
135
  - Switch to diagnostic mode if risk increases for two consecutive rounds.
136
136
  - Write round reports with `.lab/.managed/templates/iteration-report.md`.
137
- - Update `.lab/context/state.md`, `.lab/context/decisions.md`, `.lab/context/evidence-index.md`, `.lab/context/open-questions.md`, and `.lab/context/eval-protocol.md` each round as needed.
137
+ - Update `.lab/context/state.md`, `.lab/context/workflow-state.md`, `.lab/context/decisions.md`, `.lab/context/evidence-index.md`, `.lab/context/open-questions.md`, and `.lab/context/eval-protocol.md` each round as needed.
138
138
  - Keep `.lab/context/eval-protocol.md` synchronized with accepted ladder changes, benchmark scope, and source-backed implementation deviations.
139
139
  - Stop at threshold success or iteration cap, and record blockers plus next-best actions when the campaign ends without success.
140
140
 
@@ -151,13 +151,13 @@ Use this skill when the user invokes `/lab:*` or asks for the structured researc
151
151
  ### `/lab:report`
152
152
 
153
153
  - Summarize all validated iteration summaries.
154
- - Read `.lab/context/mission.md`, `.lab/context/state.md`, `.lab/context/decisions.md`, `.lab/context/evidence-index.md`, and `.lab/context/data-decisions.md` before drafting.
154
+ - Read `.lab/context/mission.md`, `.lab/context/state.md`, `.lab/context/workflow-state.md`, `.lab/context/decisions.md`, `.lab/context/evidence-index.md`, and `.lab/context/data-decisions.md` before drafting.
155
155
  - Read `.lab/context/eval-protocol.md` before choosing tables, thresholds, or final result framing.
156
156
  - Keep metric definitions, comparison semantics, and implementation references anchored to the approved evaluation protocol instead of re-deriving them during reporting.
157
157
  - Aggregate them with `.lab/.managed/scripts/summarize_iterations.py`.
158
- - Write the final document with `.lab/.managed/templates/final-report.md` and the managed table summary with `.lab/.managed/templates/main-tables.md`.
158
+ - Write the final document with `.lab/.managed/templates/final-report.md`, the managed table summary with `.lab/.managed/templates/main-tables.md`, and the internal handoff with `.lab/.managed/templates/artifact-status.md`.
159
159
  - Keep failed attempts and limitations visible.
160
- - Update `.lab/context/mission.md`, `.lab/context/eval-protocol.md`, `.lab/context/state.md`, and `.lab/context/evidence-index.md` with report-level handoff notes.
160
+ - Update `.lab/context/mission.md`, `.lab/context/eval-protocol.md`, `.lab/context/state.md`, `.lab/context/workflow-state.md`, and `.lab/context/evidence-index.md` with report-level handoff notes.
161
161
  - If canonical context is still skeletal, hydrate the smallest trustworthy version from frozen artifacts before finalizing the report.
162
162
  - If collaborator-critical fields remain missing after hydration, downgrade to an `artifact-anchored interim report` instead of presenting a final collaborator-ready report.
163
163
 
@@ -16,6 +16,7 @@
16
16
  - experiment setup
17
17
  - validated main results
18
18
  - managed main tables artifact under `<deliverables_root>/main-tables.md`
19
+ - internal artifact-status artifact under `<deliverables_root>/artifact-status.md`
19
20
  - how-to-read-the-tables guide
20
21
  - ablations
21
22
  - failed attempts
@@ -27,6 +28,7 @@
27
28
 
28
29
  - `.lab/context/mission.md`
29
30
  - `.lab/context/state.md`
31
+ - `.lab/context/workflow-state.md`
30
32
  - `.lab/context/decisions.md`
31
33
  - `.lab/context/evidence-index.md`
32
34
  - `.lab/context/data-decisions.md`
@@ -38,6 +40,7 @@
38
40
  - `.lab/context/mission.md`
39
41
  - `.lab/context/eval-protocol.md`
40
42
  - `.lab/context/state.md`
43
+ - `.lab/context/workflow-state.md`
41
44
  - `.lab/context/evidence-index.md`
42
45
 
43
46
  ## Evidence Rules
@@ -56,7 +59,7 @@
56
59
  - When citing prior work or baselines in the method overview, include only the few anchor references a collaborator needs, and summarize their role and limitation in one short line each.
57
60
  - Report only the few references a collaborator needs to orient themselves quickly; do not turn `report.md` into a full bibliography dump.
58
61
  - In `Background Sources`, `Method and Baseline Sources`, and `Metric Sources`, every anchor must include a citation line, one short line about what it established or measures, and one limitation or caveat.
59
- - Internal provenance belongs in `Artifact Status` or `.lab/context/evidence-index.md`, not in the external-review-ready source sections.
62
+ - Internal provenance belongs in `<deliverables_root>/artifact-status.md` or `.lab/context/evidence-index.md`, not in the external-review-ready source sections.
60
63
  - If the report depends on a deviation from an original metric or implementation, state that deviation explicitly instead of smoothing it over.
61
64
  - Carry the approved `Claim boundary` into the collaborator-facing report instead of implying broader validity than the protocol allows.
62
65
  - If the `Academic Validity Checks` or `Integrity self-check` sections are incomplete, contradictory, or obviously violated by the evidence, degrade the report instead of presenting it as collaborator-ready.
@@ -67,7 +70,7 @@
67
70
  - If collaborator-critical fields still remain missing after hydration, downgrade the output to an `artifact-anchored interim report` instead of presenting it as a final collaborator-ready report.
68
71
  - If the existing `report.md` or `main-tables.md` is missing required collaborator-facing sections from the managed templates, treat that as a report deficiency. A rerun must repair the missing sections instead of declaring "no content change" or treating the rerun as a no-op.
69
72
  - After drafting or rerunning the report, run `.lab/.managed/scripts/validate_collaborator_report.py --report <deliverables_root>/report.md --main-tables <deliverables_root>/main-tables.md`. If it fails, keep editing until it passes; do not stop at a no-op audit rerun.
70
- - Do not mix workflow deliverable status, rerun ids, or manuscript skeleton status into validated scientific findings; keep those in a separate artifact-status section.
73
+ - Do not mix workflow deliverable status, rerun ids, or manuscript skeleton status into validated scientific findings; keep those in `<deliverables_root>/artifact-status.md`.
71
74
  - If `.lab/config/workflow.json` sets the workflow language to Chinese, write `report.md` and `<deliverables_root>/main-tables.md` in Chinese unless a file path, code identifier, or literal metric name must remain unchanged.
72
75
  - Prefer conservative interpretation over marketing language.
73
76
  - Leave a clear handoff path into `/lab:write` with evidence links that section drafts can cite.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superlab",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "description": "Strict /lab research workflow installer for Codex and Claude",
5
5
  "keywords": [
6
6
  "codex",