paperlint 10.2.0 → 10.4.0

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 (147) hide show
  1. package/.github/workflows/ci.yml +15 -4
  2. package/README.md +1 -0
  3. package/dist/adapters/git/index.d.ts +10 -0
  4. package/dist/adapters/git/index.d.ts.map +1 -0
  5. package/dist/adapters/git/index.js +151 -0
  6. package/dist/adapters/git/index.js.map +1 -0
  7. package/dist/adapters/memory/index.d.ts +6 -0
  8. package/dist/adapters/memory/index.d.ts.map +1 -1
  9. package/dist/adapters/memory/index.js +8 -0
  10. package/dist/adapters/memory/index.js.map +1 -1
  11. package/dist/adapters/node/index.d.ts +1 -0
  12. package/dist/adapters/node/index.d.ts.map +1 -1
  13. package/dist/adapters/node/index.js +1 -0
  14. package/dist/adapters/node/index.js.map +1 -1
  15. package/dist/adapters/node/list-entries.io.d.ts +3 -0
  16. package/dist/adapters/node/list-entries.io.d.ts.map +1 -0
  17. package/dist/adapters/node/list-entries.io.js +24 -0
  18. package/dist/adapters/node/list-entries.io.js.map +1 -0
  19. package/dist/adapters/study-registry/index.d.ts +412 -1
  20. package/dist/adapters/study-registry/index.d.ts.map +1 -1
  21. package/dist/adapters/study-registry/index.js +245 -8
  22. package/dist/adapters/study-registry/index.js.map +1 -1
  23. package/dist/cli.d.ts.map +1 -1
  24. package/dist/cli.js +38 -6
  25. package/dist/cli.js.map +1 -1
  26. package/dist/domain/decide-first.d.ts +100 -0
  27. package/dist/domain/decide-first.d.ts.map +1 -0
  28. package/dist/domain/decide-first.js +102 -0
  29. package/dist/domain/decide-first.js.map +1 -0
  30. package/dist/domain/index-columns.d.ts +45 -0
  31. package/dist/domain/index-columns.d.ts.map +1 -0
  32. package/dist/domain/index-columns.js +62 -0
  33. package/dist/domain/index-columns.js.map +1 -0
  34. package/dist/domain/study-mode.d.ts +37 -0
  35. package/dist/domain/study-mode.d.ts.map +1 -0
  36. package/dist/domain/study-mode.js +45 -0
  37. package/dist/domain/study-mode.js.map +1 -0
  38. package/dist/domain/study-registry.d.ts +253 -10
  39. package/dist/domain/study-registry.d.ts.map +1 -1
  40. package/dist/domain/study-registry.js +325 -27
  41. package/dist/domain/study-registry.js.map +1 -1
  42. package/dist/outputs-before-decision-rule.d.ts +17 -0
  43. package/dist/outputs-before-decision-rule.d.ts.map +1 -0
  44. package/dist/outputs-before-decision-rule.js +90 -0
  45. package/dist/outputs-before-decision-rule.js.map +1 -0
  46. package/dist/ports/git-history.d.ts +44 -0
  47. package/dist/ports/git-history.d.ts.map +1 -0
  48. package/dist/ports/git-history.js +2 -0
  49. package/dist/ports/git-history.js.map +1 -0
  50. package/dist/ports/list-entries.d.ts +17 -0
  51. package/dist/ports/list-entries.d.ts.map +1 -0
  52. package/dist/ports/list-entries.js +2 -0
  53. package/dist/ports/list-entries.js.map +1 -0
  54. package/dist/ports/study-registry-codec.d.ts +9 -2
  55. package/dist/ports/study-registry-codec.d.ts.map +1 -1
  56. package/dist/studies.d.ts +4 -0
  57. package/dist/studies.d.ts.map +1 -1
  58. package/dist/studies.js +55 -24
  59. package/dist/studies.js.map +1 -1
  60. package/dist/study-gate.d.ts +14 -0
  61. package/dist/study-gate.d.ts.map +1 -0
  62. package/dist/study-gate.js +95 -0
  63. package/dist/study-gate.js.map +1 -0
  64. package/dist/study-index-input.d.ts +5 -0
  65. package/dist/study-index-input.d.ts.map +1 -0
  66. package/dist/study-index-input.js +13 -0
  67. package/dist/study-index-input.js.map +1 -0
  68. package/dist/study-modes.d.ts +45 -0
  69. package/dist/study-modes.d.ts.map +1 -0
  70. package/dist/study-modes.js +70 -0
  71. package/dist/study-modes.js.map +1 -0
  72. package/dist/study-registry-rule.d.ts +29 -6
  73. package/dist/study-registry-rule.d.ts.map +1 -1
  74. package/dist/study-registry-rule.js +91 -40
  75. package/dist/study-registry-rule.js.map +1 -1
  76. package/dist/study-run.d.ts +19 -0
  77. package/dist/study-run.d.ts.map +1 -0
  78. package/dist/study-run.js +9 -0
  79. package/dist/study-run.js.map +1 -0
  80. package/docs/design/study-modes.md +247 -0
  81. package/docs/design/study-registry.md +137 -15
  82. package/docs/e2e.md +8 -4
  83. package/docs/layout.md +26 -21
  84. package/docs/rules/repro/outputs-before-decision.md +119 -0
  85. package/docs/rules/repro/study-plan-name.md +70 -0
  86. package/docs/rules/repro/study-registered.md +206 -15
  87. package/docs/rules.md +54 -52
  88. package/docs/testing.md +1 -0
  89. package/package.json +2 -1
  90. package/scripts/check.ts +6 -0
  91. package/skills/build-benchmark/SKILL.md +24 -12
  92. package/skills/build-benchmark/SKILL.md.spec.ts +23 -11
  93. package/skills/build-label-page/SKILL.md +9 -7
  94. package/skills/build-label-page/SKILL.md.spec.ts +8 -6
  95. package/skills/camera-ready/SKILL.md +6 -1
  96. package/skills/camera-ready/SKILL.md.spec.ts +5 -0
  97. package/skills/draft-paper/SKILL.md +11 -3
  98. package/skills/draft-paper/SKILL.md.spec.ts +10 -2
  99. package/skills/harden-paper/SKILL.md +12 -2
  100. package/skills/harden-paper/SKILL.md.spec.ts +11 -1
  101. package/skills/osf-artifact-upload/SKILL.md +7 -1
  102. package/skills/osf-artifact-upload/SKILL.md.spec.ts +6 -0
  103. package/skills/pc-panel-review/SKILL.md +10 -3
  104. package/skills/pc-panel-review/SKILL.md.spec.ts +9 -2
  105. package/skills/run-agent-grid/SKILL.md +10 -5
  106. package/skills/run-agent-grid/SKILL.md.spec.ts +9 -4
  107. package/skills/tighten-paper/SKILL.md +5 -1
  108. package/skills/tighten-paper/SKILL.md.spec.ts +4 -0
  109. package/src/adapters/git/history.test.ts +121 -0
  110. package/src/adapters/git/index.test.ts +268 -0
  111. package/src/adapters/git/index.ts +227 -0
  112. package/src/adapters/memory/index.test.ts +15 -1
  113. package/src/adapters/memory/index.ts +13 -0
  114. package/src/adapters/node/index.ts +1 -0
  115. package/src/adapters/node/list-entries.io.ts +26 -0
  116. package/src/adapters/node/list-entries.test.ts +43 -0
  117. package/src/adapters/study-registry/index.test.ts +343 -0
  118. package/src/adapters/study-registry/index.ts +374 -10
  119. package/src/adapters/study-registry/mode.test.ts +162 -0
  120. package/src/cli.ts +52 -6
  121. package/src/domain/decide-first.test.ts +258 -0
  122. package/src/domain/decide-first.ts +243 -0
  123. package/src/domain/index-columns.test.ts +216 -0
  124. package/src/domain/index-columns.ts +105 -0
  125. package/src/domain/study-measurements.test.ts +633 -0
  126. package/src/domain/study-mode.test.ts +55 -0
  127. package/src/domain/study-mode.ts +78 -0
  128. package/src/domain/study-registry.test.ts +48 -32
  129. package/src/domain/study-registry.ts +621 -36
  130. package/src/new-paper.test.ts +6 -1
  131. package/src/outputs-before-decision-rule.test.ts +206 -0
  132. package/src/outputs-before-decision-rule.ts +124 -0
  133. package/src/ports/git-history.ts +44 -0
  134. package/src/ports/list-entries.ts +18 -0
  135. package/src/ports/study-registry-codec.ts +13 -2
  136. package/src/rule-cases.test.ts +103 -1
  137. package/src/studies-cli.test.ts +2 -2
  138. package/src/studies-index-modes.test.ts +129 -0
  139. package/src/studies.test.ts +39 -9
  140. package/src/studies.ts +99 -29
  141. package/src/study-gate.test.ts +316 -0
  142. package/src/study-gate.ts +161 -0
  143. package/src/study-index-input.ts +23 -0
  144. package/src/study-modes.ts +120 -0
  145. package/src/study-registry-rule.test.ts +333 -7
  146. package/src/study-registry-rule.ts +145 -41
  147. package/src/study-run.ts +21 -0
@@ -10,12 +10,16 @@
10
10
  * ── JSON, NEVER MARKDOWN ─────────────────────────────────────────────────────────
11
11
  * The registry is data: its text is parsed once, where it enters, against the schema in
12
12
  * `src/adapters/study-registry/` (`StudyRegistryCodec`). The index in `repro/README.md` is OUTPUT: it is
13
- * generated from the registry and compared as a string, between two fixed markers. Nothing parses it.
13
+ * generated from the registry, the plans' modes and git's history (src/domain/index-columns.ts), and
14
+ * compared cell by cell between two fixed markers, the two columns read from git left out. Nothing
15
+ * else parses it.
14
16
  *
15
17
  * Pure: the caller lists `repro/`, reads the registry and the README, and says which result files exist.
16
18
  */
17
19
  import { isAbsolute, posix, win32 } from "node:path";
18
20
  import { STUDIES_FILE, STUDY_SLUG } from "./repro-layout.js";
21
+ import { needsMode } from "./study-mode.js";
22
+ import { decisionCell, firstOutputCell, modeCell, } from "./index-columns.js";
19
23
  /** The registry, at the top of the paper's `repro/`; the layout allows it there. */
20
24
  export { STUDIES_FILE };
21
25
  export const STUDY_KINDS = [
@@ -47,6 +51,76 @@ export const INDEX_BEGIN = "<!-- studies:begin — generated from studies.json b
47
51
  export const INDEX_END = "<!-- studies:end -->";
48
52
  /** The README written when `repro/` has none. */
49
53
  const INDEX_HEADING = "# Reproduction index";
54
+ /** What a measurement is to the paper: the claim it carries, or what that claim is compared with. */
55
+ export const MEASUREMENT_ROLES = ["headline", "baseline"];
56
+ /**
57
+ * The statuses of a study that has run: its plan was due before the first run. A `designing` study
58
+ * has not run yet, and a `dropped` one never will.
59
+ */
60
+ export const RAN_STATUSES = [
61
+ "running",
62
+ "done",
63
+ "stopped",
64
+ "superseded",
65
+ ];
66
+ /** The file `paperlint studies new` writes a study's plan to, beside its README.md. */
67
+ export const PLAN_FILE = "plan.json";
68
+ /** The plan's name before it was a plan: still read as one, and reported by `repro/study-plan-name`. */
69
+ export const LEGACY_PLAN_FILE = "prereg.json";
70
+ /** The top-level fields of a plan: none of them may be a key of `extra`. */
71
+ export const PLAN_FIELDS = [
72
+ "question",
73
+ "population",
74
+ "arms",
75
+ "primary_outcome",
76
+ "author_check",
77
+ "extra",
78
+ "mode",
79
+ ];
80
+ /** The texts a plan must fill before the study runs, in the order they are named. */
81
+ export const PLAN_TEXT_FIELDS = [
82
+ "question",
83
+ "population.source",
84
+ "population.draw.method",
85
+ "primary_outcome",
86
+ "mode",
87
+ "mode.outputs",
88
+ "mode.decision.file",
89
+ "mode.decision.note",
90
+ "mode.reason",
91
+ ];
92
+ /** The decision file `paperlint studies new` names for a study in `folder`, relative to the paper. */
93
+ export const decisionPath = (folder) => `repro/${folder}/${DECISION_FILE}`;
94
+ /** The decision file's name, beside the plan. */
95
+ export const DECISION_FILE = "decision.md";
96
+ /**
97
+ * The plan `paperlint studies new` writes for a study of `kind` in `folder`: every field present, its
98
+ * value to fill. Its draw is of all the population (a census); a sampled study changes it to
99
+ * `{ "kind": "seeded", "method", "seed" }`. A study that must declare its mode gets the default one,
100
+ * decided before the run, its decision file named and its outputs and note to fill.
101
+ */
102
+ export const planTemplate = (kind, folder) => ({
103
+ question: "",
104
+ population: { source: "", draw: { kind: "all", method: "" } },
105
+ arms: [],
106
+ primary_outcome: "",
107
+ author_check: null,
108
+ ...(needsMode(kind)
109
+ ? {
110
+ mode: {
111
+ kind: "decide_before_run",
112
+ outputs: [],
113
+ decision: { file: decisionPath(folder), note: "" },
114
+ },
115
+ }
116
+ : {}),
117
+ });
118
+ /** A plan's text as `paperlint studies new` writes it: JSON, two-space indented, a final newline. */
119
+ export const planText = (p) => `${JSON.stringify(p, null, 2)}\n`;
120
+ /** The findings `repro/study-plan-name` reports, a warning; every other is `repro/study-registered`'s. */
121
+ export const PLAN_NAME_PROBLEMS = [
122
+ "legacy-plan",
123
+ ];
50
124
  /** The number of an id of `prefix` (`P1-S07` → 7); null for an id of another shape. */
51
125
  function idNumber(prefix, id) {
52
126
  const m = new RegExp(`^${prefix}-S(\\d{2,})$`, "u").exec(id);
@@ -73,12 +147,27 @@ export const titleWords = (title) => title.split(/\s+/u).filter((w) => w !== "")
73
147
  * Whether `path` stays inside the folder it is relative to. A backslash or a Windows absolute path
74
148
  * is refused outright: `posix.normalize` does not resolve `..\\`, while the host's `join` may.
75
149
  */
76
- const isInside = (path) => {
150
+ export const isInside = (path) => {
77
151
  if (path.includes("\\") || isAbsolute(path) || win32.isAbsolute(path))
78
152
  return false;
79
153
  const n = posix.normalize(path);
80
154
  return n !== ".." && !n.startsWith("../");
81
155
  };
156
+ /**
157
+ * Whether `folder` names one folder directly inside `repro/`: not empty, not `.` or `..`, and no
158
+ * separator or NUL. Every command and rule that reads a study's folder reads only such a one: a row
159
+ * naming `../x` would have them read and write outside the paper.
160
+ */
161
+ export const isFolderName = (folder) => folder !== "." && folder !== ".." && /^[^/\\\0]+$/u.test(folder);
162
+ /**
163
+ * The `<folder>/<plan>` of each row whose plan lies inside its folder: the files the judge needs read
164
+ * (`StudyInput.plans`). A plan outside its folder is reported without being read.
165
+ */
166
+ export const planKeys = (r) => planRefs(r).map((p) => p.key);
167
+ /** Each plan `planKeys` names, with the kind of the study whose row names it: what its parser needs. */
168
+ export const planRefs = (r) => r.studies.flatMap((s) => s.plan !== undefined && isInside(s.plan) && isFolderName(s.folder)
169
+ ? [{ key: `${s.folder}/${s.plan}`, folder: s.folder, kind: s.kind }]
170
+ : []);
82
171
  /** Whether the row is the first of the registry with its value of `key`. */
83
172
  const isFirst = ({ r, s, i }, key) => r.studies.findIndex((o) => key(o) === key(s)) === i;
84
173
  const badId = ({ r, s }) => idNumber(r.prefix, s.id) === null
@@ -139,6 +228,82 @@ const noSuccessor = ({ r, s }) => {
139
228
  ? { problem: "no-successor", id: s.id, superseded_by: by }
140
229
  : null;
141
230
  };
231
+ /** A row's `measurement`, when the registry declares its measurements, names one of them. */
232
+ const unknownMeasurement = ({ r, s }) => r.measurements === undefined ||
233
+ s.measurement === undefined ||
234
+ r.measurements.some((m) => m.id === s.measurement)
235
+ ? null
236
+ : { problem: "unknown-measurement", id: s.id, measurement: s.measurement };
237
+ /** The state of the plan the row names (absent when outside its folder); null when it names none. */
238
+ const planOf = ({ s, input }) => {
239
+ if (s.plan === undefined)
240
+ return null;
241
+ return isInside(s.plan)
242
+ ? (input.plans.get(`${s.folder}/${s.plan}`) ?? { kind: "absent" })
243
+ : { kind: "absent" };
244
+ };
245
+ const hasRun = (s) => RAN_STATUSES.includes(s.status);
246
+ /** The finding for the plan `path` of `s`, in the state its folder holds it; null when it stands. */
247
+ const planFinding = (s, path, state) => {
248
+ const at = { problem: "bad-plan", id: s.id, path };
249
+ switch (state.kind) {
250
+ case "absent":
251
+ return { ...at, why: "missing" };
252
+ case "unreadable":
253
+ return { ...at, why: "unreadable", reasons: state.why };
254
+ case "draft":
255
+ return hasRun(s)
256
+ ? { ...at, why: "unfilled", fields: state.empty, status: s.status }
257
+ : null;
258
+ case "ready":
259
+ return null;
260
+ }
261
+ };
262
+ /** The plan a row names is a file inside its folder, of the schema, and ready once the study has run. */
263
+ const badPlan = ({ s, input }) => {
264
+ const path = s.plan;
265
+ if (path === undefined)
266
+ return null;
267
+ if (!isInside(path))
268
+ return { problem: "bad-plan", id: s.id, path, why: "outside" };
269
+ return planFinding(s, path, input.plans.get(`${s.folder}/${path}`) ?? { kind: "absent" });
270
+ };
271
+ /** A plan under its old name: read, and named for renaming. */
272
+ const legacyPlan = ({ s }) => s.plan !== undefined && posix.basename(s.plan) === LEGACY_PLAN_FILE
273
+ ? { problem: "legacy-plan", id: s.id, path: s.plan }
274
+ : null;
275
+ /**
276
+ * A study of a headline measurement that has run carries the author's check of its drawn units in
277
+ * its plan, by the registry's author when it names one. A plan that cannot be read is `badPlan`'s.
278
+ */
279
+ const authorCheck = (row) => {
280
+ const { r, s } = row;
281
+ const m = r.measurements?.find((o) => o.id === s.measurement);
282
+ if (m?.role !== "headline" || !hasRun(s))
283
+ return null;
284
+ const at = {
285
+ problem: "author-check",
286
+ id: s.id,
287
+ measurement: m.id,
288
+ status: s.status,
289
+ };
290
+ const state = planOf(row);
291
+ if (state === null)
292
+ return { ...at, why: "no-plan" };
293
+ const wrong = state.kind === "ready" || state.kind === "draft"
294
+ ? checkProblem(r, state.plan)
295
+ : null;
296
+ return wrong === null ? null : { ...at, ...wrong };
297
+ };
298
+ /** What a read plan's author check lacks: it is not there, or it is not the registry's author's. */
299
+ const checkProblem = (r, plan) => {
300
+ const check = plan.author_check;
301
+ if (check === null)
302
+ return { why: "missing" };
303
+ return r.author === undefined || check.by === r.author
304
+ ? null
305
+ : { why: "not-author", by: check.by, author: r.author };
306
+ };
142
307
  /** The checks of a row, in the order their findings are reported. */
143
308
  const ROW_CHECKS = [
144
309
  badId,
@@ -150,17 +315,60 @@ const ROW_CHECKS = [
150
315
  noResult,
151
316
  resultFile,
152
317
  noSuccessor,
318
+ unknownMeasurement,
319
+ badPlan,
320
+ legacyPlan,
321
+ authorCheck,
153
322
  ];
323
+ /** A headline measurement's approval: missing, or not the registry's author's; null when it stands. */
324
+ const headlineApproval = (r, m) => {
325
+ if (m.role !== "headline")
326
+ return null;
327
+ const author = r.author ?? null;
328
+ if (m.approval === undefined)
329
+ return {
330
+ problem: "headline-approval",
331
+ measurement: m.id,
332
+ why: "missing",
333
+ author,
334
+ };
335
+ return author === null || m.approval.by === author
336
+ ? null
337
+ : {
338
+ problem: "headline-approval",
339
+ measurement: m.id,
340
+ why: "not-author",
341
+ by: m.approval.by,
342
+ author,
343
+ };
344
+ };
345
+ /** What is wrong with one measurement: no study, a requirement not held, a headline not approved. */
346
+ const judgeMeasurement = (r, m) => {
347
+ const approval = headlineApproval(r, m);
348
+ return [
349
+ ...(r.studies.some((s) => s.measurement === m.id)
350
+ ? []
351
+ : [{ problem: "empty-measurement", measurement: m.id }]),
352
+ ...(m.requirements ?? [])
353
+ .filter((id) => !(r.requirements ?? []).some((q) => q.id === id))
354
+ .map((requirement) => ({
355
+ problem: "unknown-requirement",
356
+ measurement: m.id,
357
+ requirement,
358
+ })),
359
+ ...(approval === null ? [] : [approval]),
360
+ ];
361
+ };
154
362
  /** What is wrong with a row, in a fixed order. */
155
363
  const judgeRow = (row) => ROW_CHECKS.map((check) => check(row)).filter((f) => f !== null);
156
364
  /** Whether the README's index is the one `r` generates; the finding when not. */
157
- function judgeIndex(r, readme) {
365
+ function judgeIndex(r, readme, plans) {
158
366
  if (readme === null)
159
367
  return { problem: "stale-index", why: "no-readme" };
160
368
  const block = embeddedIndex(readme);
161
369
  if (block === null)
162
370
  return { problem: "stale-index", why: "no-markers" };
163
- return indexInSync(readme, r)
371
+ return indexInSync(readme, r, { plans, history: new Map() })
164
372
  ? null
165
373
  : { problem: "stale-index", why: "differs" };
166
374
  }
@@ -178,7 +386,7 @@ export function judgeStudies(input) {
178
386
  return [{ problem: "unreadable", why: state.why }];
179
387
  const r = state.registry;
180
388
  const next = nextStudyId(r);
181
- const index = judgeIndex(r, input.readme);
389
+ const index = judgeIndex(r, input.readme, input.plans);
182
390
  return [
183
391
  ...input.folders
184
392
  .filter((f) => !r.studies.some((s) => s.folder === f))
@@ -188,21 +396,50 @@ export function judgeStudies(input) {
188
396
  next,
189
397
  })),
190
398
  ...r.studies.flatMap((s, i) => judgeRow({ r, s, i, input })),
399
+ ...(r.measurements ?? []).flatMap((m) => judgeMeasurement(r, m)),
191
400
  ...(index === null ? [] : [index]),
192
401
  ];
193
402
  }
194
403
  // ── the index ─────────────────────────────────────────────────────────────────────
195
404
  /** A cell's text: one line, a backslash and then a pipe escaped, so `a\\|b` stays one cell. */
196
405
  const cell = (s) => s.replace(/\r?\n/gu, " ").replace(/\\/gu, "\\\\").replace(/\|/gu, "\\|");
197
- /** The columns of the index: each one's header, and its cell for a study. */
406
+ /** The mode the plan of `s` declares; null when it names none, or the plan is absent or unreadable. */
407
+ const declaredMode = (s, plans) => {
408
+ const state = s.plan !== undefined && isInside(s.plan)
409
+ ? plans.get(`${s.folder}/${s.plan}`)
410
+ : undefined;
411
+ return state === undefined ||
412
+ state.kind === "absent" ||
413
+ state.kind === "unreadable"
414
+ ? null
415
+ : (state.plan.mode ?? null);
416
+ };
417
+ /** What the index shows of `s` beyond its row. */
418
+ const factsOf = (s, at) => ({
419
+ mode: declaredMode(s, at.plans),
420
+ history: at.history.get(s.id) ?? null,
421
+ });
422
+ /**
423
+ * The columns of the index: each one's header, its cell for a study, and whether git's history is
424
+ * where the cell comes from — those two are never compared (src/domain/index-columns.ts).
425
+ */
198
426
  const COLUMNS = [
199
- { head: "id", of: (s) => s.id },
200
- { head: "title", of: (s) => cell(s.title) },
201
- { head: "status", of: (s) => s.status },
202
- { head: "result", of: (s) => cell(s.result ?? "—") },
203
- { head: "in paper", of: (s) => s.in_paper },
204
- { head: "folder", of: (s) => `[${s.folder}/](${s.folder}/)` },
427
+ { head: "id", of: (s) => s.id, fromGit: false },
428
+ { head: "title", of: (s) => cell(s.title), fromGit: false },
429
+ { head: "status", of: (s) => s.status, fromGit: false },
430
+ { head: "result", of: (s) => cell(s.result ?? "—"), fromGit: false },
431
+ { head: "in paper", of: (s) => s.in_paper, fromGit: false },
432
+ { head: "mode", of: (_, f) => cell(modeCell(f)), fromGit: false },
433
+ { head: "decision", of: (_, f) => decisionCell(f), fromGit: true },
434
+ { head: "first output", of: (_, f) => firstOutputCell(f), fromGit: true },
435
+ {
436
+ head: "folder",
437
+ of: (s) => `[${s.folder}/](${s.folder}/)`,
438
+ fromGit: false,
439
+ },
205
440
  ];
441
+ /** The positions of the columns read from git: left out when an index is compared. */
442
+ const FROM_GIT = COLUMNS.flatMap((c, i) => (c.fromGit ? [i] : []));
206
443
  /** The width a cell takes: its code points. */
207
444
  const widthOf = (s) => Array.from(s).length;
208
445
  /** `t` padded to `width`. */
@@ -212,16 +449,17 @@ const padded = (t, width) => t + " ".repeat(width - widthOf(t));
212
449
  * widest cell (at least 3), the way prettier writes a table — so formatting the README leaves it as
213
450
  * it is.
214
451
  */
215
- export function studyIndex(r) {
452
+ export function studyIndex(r, at) {
453
+ const studies = r.studies.map((s) => ({ s, f: factsOf(s, at) }));
216
454
  const sized = COLUMNS.map((c) => ({
217
455
  ...c,
218
- width: Math.max(3, widthOf(c.head), ...r.studies.map((s) => widthOf(c.of(s)))),
456
+ width: Math.max(3, widthOf(c.head), ...studies.map(({ s, f }) => widthOf(c.of(s, f)))),
219
457
  }));
220
458
  const line = (cells) => `| ${cells.join(" | ")} |`;
221
459
  return [
222
460
  line(sized.map((c) => padded(c.head, c.width))),
223
461
  line(sized.map((c) => "-".repeat(c.width))),
224
- ...r.studies.map((s) => line(sized.map((c) => padded(c.of(s), c.width)))),
462
+ ...studies.map(({ s, f }) => line(sized.map((c) => padded(c.of(s, f), c.width)))),
225
463
  ].join("\n");
226
464
  }
227
465
  /**
@@ -229,7 +467,7 @@ export function studyIndex(r) {
229
467
  * `---`. The index is judged on this, because the padding belongs to the formatter: prettier sizes a
230
468
  * column by display width, so a wide character pads differently from a code-point count.
231
469
  */
232
- const cellsOf = (table) => table
470
+ const cellsOf = (table, skip) => table
233
471
  .trim()
234
472
  .split("\n")
235
473
  .map((line) => line
@@ -237,15 +475,26 @@ const cellsOf = (table) => table
237
475
  .replace(/^\||\|$/gu, "")
238
476
  .split(/(?<!\\)\|/u)
239
477
  .map((c) => c.trim().replace(/^:?-{3,}:?$/u, "---"))
478
+ .filter((_, i) => !skip.includes(i))
240
479
  .join("|"))
241
480
  .join("\n");
242
- /** Whether `readme` holds the index of `r`, whatever padding a formatter gave its table. */
243
- export function indexInSync(readme, r) {
481
+ /** Whether `readme` holds the index of `r` in every column but those at `skip`, whatever its padding. */
482
+ const sameCells = (readme, index, skip) => {
244
483
  const block = readme === null ? null : embeddedIndex(readme);
245
- return block !== null && cellsOf(block) === cellsOf(studyIndex(r));
246
- }
484
+ return block !== null && cellsOf(block, skip) === cellsOf(index, skip);
485
+ };
486
+ /**
487
+ * Whether `readme` holds the index of `r`, whatever padding a formatter gave its table and whatever
488
+ * its two columns read from git say: what `repro/study-registered` checks.
489
+ */
490
+ export const indexInSync = (readme, r, at) => sameCells(readme, studyIndex(r, at), FROM_GIT);
491
+ /**
492
+ * Whether `readme` holds the index of `r` in every column, whatever its padding: when it does,
493
+ * `studies index` leaves the README as it is, so the padding a formatter gave the table stays.
494
+ */
495
+ export const indexCurrent = (readme, r, at) => sameCells(readme, studyIndex(r, at), []);
247
496
  /** The index between its markers, a blank line on each side. */
248
- export const indexBlock = (r) => `${INDEX_BEGIN}\n\n${studyIndex(r)}\n\n${INDEX_END}`;
497
+ export const indexBlock = (r, at) => `${INDEX_BEGIN}\n\n${studyIndex(r, at)}\n\n${INDEX_END}`;
249
498
  /**
250
499
  * Where `marker` stands alone on a line of `text`, at or after `from`; -1 when it does not. A marker
251
500
  * counts only there, where the generator writes it: prose can mention it and a cell can carry it, but
@@ -266,15 +515,16 @@ export function embeddedIndex(readme) {
266
515
  * `readme` with its index regenerated from `r`: the block replaced in place, appended when the README
267
516
  * has none, a README of its own when there is none.
268
517
  */
269
- export function withIndex(readme, r) {
518
+ export function withIndex(readme, r, at) {
519
+ const fresh = indexBlock(r, at);
270
520
  if (readme === null)
271
- return `${INDEX_HEADING}\n\n${indexBlock(r)}\n`;
521
+ return `${INDEX_HEADING}\n\n${fresh}\n`;
272
522
  const block = embeddedIndex(readme);
273
523
  if (block === null)
274
- return `${readme.trimEnd()}\n\n${indexBlock(r)}\n`;
524
+ return `${readme.trimEnd()}\n\n${fresh}\n`;
275
525
  const begin = markerAt(readme, INDEX_BEGIN);
276
526
  const after = begin + INDEX_BEGIN.length + block.length + INDEX_END.length;
277
- return `${readme.slice(0, begin)}${indexBlock(r)}${readme.slice(after)}`;
527
+ return `${readme.slice(0, begin)}${fresh}${readme.slice(after)}`;
278
528
  }
279
529
  /** The registry's text as `paperlint studies new` writes it: JSON, two-space indented, a final newline. */
280
530
  export const registryText = (r) => `${JSON.stringify(r, null, 2)}\n`;
@@ -284,6 +534,13 @@ const NEW_STUDY = '`npx paperlint studies new <paper-dir> "<title>"`';
284
534
  const RUN_INDEX = "What to do: run `npx paperlint studies index <paper-dir>`; the block is generated, never edited by hand.";
285
535
  const RENAME = "give each other row the next free id and rename its folder to match";
286
536
  const tick = (s) => `\`${s}\``;
537
+ /** `a`, `b` and `c`: names in backticks, the last joined by "and". */
538
+ const listed = (names) => {
539
+ const t = names.map(tick);
540
+ return [t.slice(0, -1).join(", "), ...t.slice(-1)]
541
+ .filter((part) => part !== "")
542
+ .join(" and ");
543
+ };
287
544
  const STALE_HEAD = {
288
545
  differs: `The index in \`repro/README.md\` (between the \`studies:begin\` and \`studies:end\` markers) is not the one ${REGISTRY} generates.`,
289
546
  "no-markers": "`repro/README.md` has no index of the studies (the `studies:begin` and `studies:end` markers).",
@@ -304,11 +561,47 @@ const HEADS = {
304
561
  "result-file": (f) => `${REGISTRY}: the \`result_file\` of ${tick(f.id)}, ${tick(f.path)}, ${f.why === "missing" ? "is not a file in its folder" : "is outside its folder"}. What to do: name a file that exists, relative to the study's folder.`,
305
562
  "no-successor": (f) => `${REGISTRY}: ${tick(f.id)} is \`superseded\` ${f.superseded_by === null ? "without `superseded_by`" : `by ${tick(f.superseded_by)}, which is no study in the registry`}. What to do: name the id of the study that replaced it.`,
306
563
  "stale-index": (f) => `${STALE_HEAD[f.why]} ${RUN_INDEX}`,
564
+ "unknown-measurement": (f) => `${REGISTRY}: the row ${tick(f.id)} names the measurement ${tick(f.measurement)}, which is not in \`measurements\`. What to do: add the measurement to \`measurements\`, or correct the row's \`measurement\`.`,
565
+ "empty-measurement": (f) => `${REGISTRY}: no row names the measurement ${tick(f.measurement)}, and a measurement is made of studies. What to do: set \`"measurement": "${f.measurement}"\` on the rows of its studies, or remove the measurement.`,
566
+ "unknown-requirement": (f) => `${REGISTRY}: the measurement ${tick(f.measurement)} must meet the requirement ${tick(f.requirement)}, which is not in \`requirements\`. What to do: add the requirement — the author's words verbatim in \`text\`, with its \`date\` and \`source\` — or correct the measurement's \`requirements\`.`,
567
+ "headline-approval": (f) => f.why === "missing"
568
+ ? `${REGISTRY}: the measurement ${tick(f.measurement)} is a \`headline\` one and has no \`approval\`. What to do: record ${f.author === null ? "the author's approval" : `the approval of ${f.author}, the registry's \`author\``} — \`by\`, \`date\`, and their words in \`quote\` — or make it a \`baseline\`.`
569
+ : `${REGISTRY}: the measurement ${tick(f.measurement)} is a \`headline\` one, and its \`approval\` is by ${f.by}, not by the registry's \`author\`, ${f.author}. What to do: only the author approves a headline measurement; record their own approval.`,
570
+ "bad-plan": (f) => {
571
+ const of = `the \`plan\` of ${tick(f.id)}, ${tick(f.path)},`;
572
+ const plan = `The plan of ${tick(f.id)}, ${tick(f.path)} in its folder,`;
573
+ switch (f.why) {
574
+ case "missing":
575
+ return `${REGISTRY}: ${of} is not a file in its folder. What to do: write the plan there (its fields are on the rule's page), or correct the row's \`plan\`.`;
576
+ case "outside":
577
+ return `${REGISTRY}: ${of} is outside its folder. What to do: keep the plan in the study's folder, as \`${PLAN_FILE}\`, and name it relative to the folder.`;
578
+ case "unreadable":
579
+ return `${plan} is not a study plan: ${f.reasons}. What to do: give it the fields on the rule's page — \`question\`, \`population\`, \`arms\`, \`primary_outcome\`, and for a measurement its \`mode\`.`;
580
+ case "unfilled":
581
+ return `${plan} leaves ${listed(f.fields)} empty, and the study is ${tick(f.status)}: a plan is written before the runs. What to do: fill them in, or set the study back to \`designing\`.`;
582
+ }
583
+ },
584
+ "author-check": (f) => {
585
+ const head = `${tick(f.id)} is ${tick(f.status)} in the headline measurement ${tick(f.measurement)}, and`;
586
+ switch (f.why) {
587
+ case "no-plan":
588
+ return `${head} its row names no plan to hold the author's check of the drawn units. What to do: write its plan (\`${PLAN_FILE}\` in its folder, named in the row's \`plan\`) with \`author_check\` — \`by\`, \`date\`, and the author's words in \`quote\`.`;
589
+ case "missing":
590
+ return `${head} its plan has no \`author_check\`. What to do: show the author the drawn units, then record their answer in the plan's \`author_check\` — \`by\`, \`date\`, and their words in \`quote\`.`;
591
+ case "not-author":
592
+ return `${head} the \`author_check\` in its plan is by ${f.by}, not by the registry's \`author\`, ${f.author}. What to do: only the author approves the drawn units of a headline measurement; record their own answer.`;
593
+ }
594
+ },
595
+ "legacy-plan": (f) => `The plan of ${tick(f.id)} is ${tick(f.path)}, its old name; it is read as the plan. What to do: rename it to \`${PLAN_FILE}\` in the study's folder (\`git mv\`) and set the row's \`plan\` to \`${PLAN_FILE}\`.`,
307
596
  };
308
597
  /** The head of finding `f` of problem `p`: the lookup, typed by the problem. */
309
598
  const headOf = (p, f) => HEADS[p](f);
599
+ /** The rule that reports finding `f`. */
600
+ const ruleOf = (f) => PLAN_NAME_PROBLEMS.includes(f.problem)
601
+ ? "repro/study-plan-name"
602
+ : "repro/study-registered";
310
603
  /** The one text a finding is reported with: what is wrong, what to do, and the rule's page. */
311
- export const studyMessage = (f) => `${headOf(f.problem, f)}\nRule repro/study-registered: https://github.com/zernie/paperlint/blob/main/docs/rules/repro/study-registered.md`;
604
+ export const studyMessage = (f) => `${headOf(f.problem, f)}\nRule ${ruleOf(f)}: https://github.com/zernie/paperlint/blob/main/docs/rules/${ruleOf(f)}.md`;
312
605
  // ── a new study ───────────────────────────────────────────────────────────────────
313
606
  /** Whether `s` names a kind of study. */
314
607
  export const isStudyKind = (s) => STUDY_KINDS.some((k) => k === s);
@@ -325,7 +618,7 @@ function titleProblem(title) {
325
618
  }
326
619
  /**
327
620
  * `r` with a new study appended: the next id, the folder `<id>-<slug>`, `status: designing`,
328
- * `in_paper: no` and an empty question; or why the title cannot make one.
621
+ * `in_paper: no`, an empty question and its plan, `plan.json`; or why the title cannot make one.
329
622
  */
330
623
  export function addStudy(r, n) {
331
624
  const title = n.title.trim().replace(/\s+/gu, " ");
@@ -342,6 +635,7 @@ export function addStudy(r, n) {
342
635
  status: "designing",
343
636
  date: n.date,
344
637
  in_paper: "no",
638
+ plan: PLAN_FILE,
345
639
  };
346
640
  return {
347
641
  ok: true,
@@ -361,6 +655,10 @@ export const studyReadme = (s) => [
361
655
  `Its row in \`../${STUDIES_FILE}\` holds its status. When the study ends, set \`status\`, \`result\`,`,
362
656
  "`result_file` and `in_paper` there, then run `npx paperlint studies index <paper-dir>`.",
363
657
  "",
658
+ `Its plan is \`${PLAN_FILE}\`: what it measures, the population and the draw, the arms and the primary`,
659
+ "outcome, filled in before the first run; the author's check of the drawn units goes in its",
660
+ "`author_check`.",
661
+ "",
364
662
  "## Question",
365
663
  "",
366
664
  "## How to run",
@@ -1 +1 @@
1
- {"version":3,"file":"study-registry.js","sourceRoot":"","sources":["../../src/domain/study-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"study-registry.js","sourceRoot":"","sources":["../../src/domain/study-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type StudyDeps } from "./study-modes.ts";
2
+ import { type DecideFirstStudy } from "./domain/decide-first.ts";
3
+ import type { FolderRuleModule } from "./folder-venue-rule.ts";
4
+ import type { GitOrder } from "./ports/git-history.ts";
5
+ /** What the rule reads with: the registry's, and git's order. */
6
+ export interface OrderDeps extends StudyDeps {
7
+ readonly git: GitOrder;
8
+ }
9
+ /** Every decide-first study of the paper folder `paper`, with its tree and its history's order. */
10
+ export declare const decideFirstStudies: (paper: string, deps: OrderDeps) => readonly DecideFirstStudy[];
11
+ /** The rule, reading the folder and git through `deps`. */
12
+ export declare const outputsBeforeDecisionRules: (deps: OrderDeps) => Readonly<Record<"outputs-before-decision", FolderRuleModule>>;
13
+ /** Its level in paperlint's own config: an error. */
14
+ export declare const ORDER_RULE_LEVELS: Readonly<{
15
+ "repro/outputs-before-decision": "error";
16
+ }>;
17
+ //# sourceMappingURL=outputs-before-decision-rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputs-before-decision-rule.d.ts","sourceRoot":"","sources":["../src/outputs-before-decision-rule.ts"],"names":[],"mappings":"AAiBA,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAKvD,iEAAiE;AACjE,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;CACxB;AAED,mGAAmG;AACnG,eAAO,MAAM,kBAAkB,GAC7B,OAAO,MAAM,EACb,MAAM,SAAS,KACd,SAAS,gBAAgB,EAoBxB,CAAC;AAiCL,2DAA2D;AAC3D,eAAO,MAAM,0BAA0B,GACrC,MAAM,SAAS,KACd,QAAQ,CAAC,MAAM,CAAC,yBAAyB,EAAE,gBAAgB,CAAC,CAc7D,CAAC;AAEH,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC;IACvC,+BAA+B,EAAE,OAAO,CAAC;CAC1C,CAAgD,CAAC"}