paperlint 10.3.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 (139) 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 +70 -10
  20. package/dist/adapters/study-registry/index.d.ts.map +1 -1
  21. package/dist/adapters/study-registry/index.js +84 -10
  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 +33 -3
  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 +57 -10
  39. package/dist/domain/study-registry.d.ts.map +1 -1
  40. package/dist/domain/study-registry.js +106 -30
  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 +6 -3
  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 +50 -22
  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 +17 -1
  73. package/dist/study-registry-rule.d.ts.map +1 -1
  74. package/dist/study-registry-rule.js +34 -13
  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 +6 -0
  82. package/docs/e2e.md +8 -4
  83. package/docs/layout.md +22 -19
  84. package/docs/rules/repro/outputs-before-decision.md +119 -0
  85. package/docs/rules/repro/study-registered.md +47 -14
  86. package/docs/rules.md +54 -53
  87. package/docs/testing.md +1 -0
  88. package/package.json +2 -1
  89. package/scripts/check.ts +6 -0
  90. package/skills/camera-ready/SKILL.md +6 -1
  91. package/skills/camera-ready/SKILL.md.spec.ts +5 -0
  92. package/skills/draft-paper/SKILL.md +11 -3
  93. package/skills/draft-paper/SKILL.md.spec.ts +10 -2
  94. package/skills/harden-paper/SKILL.md +12 -2
  95. package/skills/harden-paper/SKILL.md.spec.ts +11 -1
  96. package/skills/osf-artifact-upload/SKILL.md +7 -1
  97. package/skills/osf-artifact-upload/SKILL.md.spec.ts +6 -0
  98. package/skills/pc-panel-review/SKILL.md +10 -3
  99. package/skills/pc-panel-review/SKILL.md.spec.ts +9 -2
  100. package/skills/tighten-paper/SKILL.md +5 -1
  101. package/skills/tighten-paper/SKILL.md.spec.ts +4 -0
  102. package/src/adapters/git/history.test.ts +121 -0
  103. package/src/adapters/git/index.test.ts +268 -0
  104. package/src/adapters/git/index.ts +227 -0
  105. package/src/adapters/memory/index.test.ts +15 -1
  106. package/src/adapters/memory/index.ts +13 -0
  107. package/src/adapters/node/index.ts +1 -0
  108. package/src/adapters/node/list-entries.io.ts +26 -0
  109. package/src/adapters/node/list-entries.test.ts +43 -0
  110. package/src/adapters/study-registry/index.test.ts +12 -9
  111. package/src/adapters/study-registry/index.ts +130 -24
  112. package/src/adapters/study-registry/mode.test.ts +162 -0
  113. package/src/cli.ts +47 -3
  114. package/src/domain/decide-first.test.ts +258 -0
  115. package/src/domain/decide-first.ts +243 -0
  116. package/src/domain/index-columns.test.ts +216 -0
  117. package/src/domain/index-columns.ts +105 -0
  118. package/src/domain/study-measurements.test.ts +9 -5
  119. package/src/domain/study-mode.test.ts +55 -0
  120. package/src/domain/study-mode.ts +78 -0
  121. package/src/domain/study-registry.test.ts +38 -31
  122. package/src/domain/study-registry.ts +170 -31
  123. package/src/new-paper.test.ts +5 -1
  124. package/src/outputs-before-decision-rule.test.ts +206 -0
  125. package/src/outputs-before-decision-rule.ts +124 -0
  126. package/src/ports/git-history.ts +44 -0
  127. package/src/ports/list-entries.ts +18 -0
  128. package/src/ports/study-registry-codec.ts +10 -3
  129. package/src/rule-cases.test.ts +78 -3
  130. package/src/studies-index-modes.test.ts +129 -0
  131. package/src/studies.test.ts +35 -11
  132. package/src/studies.ts +88 -27
  133. package/src/study-gate.test.ts +316 -0
  134. package/src/study-gate.ts +161 -0
  135. package/src/study-index-input.ts +23 -0
  136. package/src/study-modes.ts +120 -0
  137. package/src/study-registry-rule.test.ts +198 -11
  138. package/src/study-registry-rule.ts +51 -14
  139. package/src/study-run.ts +21 -0
@@ -0,0 +1,102 @@
1
+ /**
2
+ * DECIDE FIRST — the default mode of a measurement study (src/domain/study-mode.ts): the author's
3
+ * decisions on the inputs are committed before any output exists, and git's history is the proof of
4
+ * order. `repro/outputs-before-decision` judges it here, from facts git gave (src/adapters/git/):
5
+ *
6
+ * - each output in the tree or ever committed while the decision file was never committed;
7
+ * - each output whose FIRST commit is not a strict descendant of the decision file's FIRST commit —
8
+ * earlier, on a line of history the decision is not on, or in the very same commit (which says
9
+ * nothing about which came first);
10
+ * - a decision file the outputs match (it would be "produced" by the run it gates);
11
+ * - a decision file committed and since deleted: it is not in HEAD, so there is no decision;
12
+ * - a history that cannot be read: no git, or a shallow clone, whose every file starts at the clone.
13
+ *
14
+ * Outputs that were committed and later deleted count: an output that existed before the decision is
15
+ * evidence after it is gone. Pure.
16
+ */
17
+ import { README } from "./repro-layout.js";
18
+ import { decisionAsOutput, inStudy, isOutput, } from "./study-mode.js";
19
+ /** Whether `path` (relative to the study's folder) is an output and none of the study's own files. */
20
+ const outputOf = (s) => (path) => ![README, s.plan, inStudy(s.folder, s.mode.decision.file)].includes(path) &&
21
+ isOutput(s.mode.outputs, path);
22
+ /** The files of a read history that are outputs of the study, oldest first commit first. */
23
+ export const outputCommits = (s, files) => files.filter((f) => outputOf(s)(f.path));
24
+ /** The findings of a history that was read. */
25
+ const ordered = (s, decision, files) => {
26
+ const isOut = outputOf(s);
27
+ const at = { id: s.id, folder: s.folder };
28
+ if (decision === null)
29
+ // The tree's outputs, then those only history holds: deleting an output does not erase it.
30
+ return [...new Set([...s.tree, ...files.map((f) => f.path)])]
31
+ .filter(isOut)
32
+ .map((path) => ({
33
+ problem: "undecided-output",
34
+ ...at,
35
+ path,
36
+ decision: s.mode.decision.file,
37
+ }));
38
+ return files
39
+ .filter((f) => isOut(f.path) && f.order !== "after")
40
+ .map((f) => ({
41
+ problem: "output-before-decision",
42
+ ...at,
43
+ path: f.path,
44
+ output: { commit: f.commit, date: f.date },
45
+ decision,
46
+ same: f.order === "same",
47
+ }));
48
+ };
49
+ /** Every defect of a decide-first study, in a fixed order: the plan's, then the history's. */
50
+ export const judgeOrder = (s) => {
51
+ const glob = decisionAsOutput(s.folder, s.mode);
52
+ const clash = glob === null
53
+ ? []
54
+ : [
55
+ {
56
+ problem: "decision-is-output",
57
+ id: s.id,
58
+ file: s.mode.decision.file,
59
+ glob,
60
+ },
61
+ ];
62
+ return [...clash, ...historyFindings(s)];
63
+ };
64
+ /** The findings of a decide-first study's history, whatever git could say of it. */
65
+ const historyFindings = (s) => {
66
+ const file = s.mode.decision.file;
67
+ switch (s.facts.kind) {
68
+ case "not-a-file":
69
+ return [
70
+ { problem: "decision-not-file", id: s.id, file, what: s.facts.what },
71
+ ];
72
+ case "unknown":
73
+ return [{ problem: "no-history", id: s.id, why: s.facts.why }];
74
+ case "shallow":
75
+ return [{ problem: "shallow", id: s.id }];
76
+ case "read":
77
+ // A decision deleted since is no decision: the order is not judged against it.
78
+ return s.facts.decisionDeleted
79
+ ? [{ problem: "decision-deleted", id: s.id, file }]
80
+ : ordered(s, s.facts.decision, s.facts.files);
81
+ }
82
+ };
83
+ const RULE = "repro/outputs-before-decision";
84
+ /** Why git's history says nothing of a decision that is not a file. */
85
+ const NOT_A_FILE = {
86
+ directory: "git answers for a directory with the commits of anything under it",
87
+ "symbolic link": "git records the link, not the file it points to",
88
+ };
89
+ const short = (c) => `${c.commit.slice(0, 12)} (${c.date})`;
90
+ const HEADS = {
91
+ "decision-is-output": (f) => `The decision of \`${f.id}\`, \`${f.file}\`, is matched by its output \`${f.glob}\`: the decision would be one of the files its own run produces. What to do: keep the decision out of the outputs — a file the globs do not match, or one elsewhere in the paper — and set \`mode.decision.file\`.`,
92
+ "decision-deleted": (f) => `The decision of \`${f.id}\`, \`${f.file}\`, was committed and then deleted: it is not in HEAD, so the study has no decision its outputs could follow. What to do: restore the decision file as it was decided and commit it — never write a new one after the outputs; if the decision no longer holds, declare the study \`exploratory\` with the reason.`,
93
+ "decision-not-file": (f) => `The decision of \`${f.id}\`, \`${f.file}\`, is a ${f.what}, not a file: ${NOT_A_FILE[f.what]}, so no order can be read from it. What to do: name the decision file itself in \`mode.decision.file\`.`,
94
+ "no-history": (f) => `\`${f.id}\` is decided before its run, and git's history is the proof of that order, but git could not answer: ${f.why}. What to do: lint the paper inside its git repository, with git installed.`,
95
+ shallow: (f) => `\`${f.id}\` is decided before its run, and this clone is shallow: every file's first commit is the clone's first, so the order of decision and outputs cannot be read. What to do: fetch the whole history (\`git fetch --unshallow\`; in GitHub Actions, \`actions/checkout\` with \`fetch-depth: 0\`).`,
96
+ "undecided-output": (f) => `\`repro/${f.folder}/${f.path}\` is an output of \`${f.id}\` — in the tree, or in its history — and the study is decided before its run, but its decision \`${f.decision}\` was never committed. What to do: write and commit the decision, check it with \`npx paperlint studies gate <paper-dir> ${f.id}\`, then run the study again; if the output was made before any decision, declare the study \`exploratory\` with the reason. Deleting the output does not undo it: history keeps it.`,
97
+ "output-before-decision": (f) => `\`repro/${f.folder}/${f.path}\`, an output of \`${f.id}\`, entered history in ${short(f.output)}, ${f.same ? "the very commit" : "not after the commit"} that first recorded its decision, ${short(f.decision)}. The study is declared decided before its run, and its history does not show that order. What to do: if the decision really came first, nothing in this history can prove it — declare the study \`exploratory\` with the reason, or run it again after the decision; never rewrite the history to make it pass.`,
98
+ };
99
+ const headOf = (p, f) => HEADS[p](f);
100
+ /** The one text a finding is reported with: what is wrong, what to do, and the rule's page. */
101
+ export const orderMessage = (f) => `${headOf(f.problem, f)}\nRule ${RULE}: https://github.com/zernie/paperlint/blob/main/docs/rules/${RULE}.md`;
102
+ //# sourceMappingURL=decide-first.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decide-first.js","sourceRoot":"","sources":["../../src/domain/decide-first.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * THE MODE COLUMNS OF THE INDEX — three columns of `repro/README.md`'s study index beyond the row:
3
+ * the study's mode, as its plan declares it, and for a study decided before its run the commit that
4
+ * first recorded its decision and the commit that first recorded an output (docs/design/study-modes.md).
5
+ *
6
+ * The mode comes from the plan, which is in the tree, so `repro/study-registered` compares it. The
7
+ * two commits come from git's history as `paperlint studies index` read it when it ran: a squash merge
8
+ * or a rebase gives the same files new commits, and a shallow CI clone has none to read, so the lint
9
+ * never compares those two columns. `repro/outputs-before-decision` judges the order itself. Pure.
10
+ */
11
+ import { type CommitAt, type DecideFirstStudy } from "./decide-first.ts";
12
+ import type { StudyMode } from "./study-mode.ts";
13
+ /** What git's history says of a decide-first study's decision and outputs. */
14
+ export type IndexHistory =
15
+ /** No order could be read: why, in a few words (`shallow clone`). */
16
+ {
17
+ readonly kind: "unread";
18
+ readonly why: string;
19
+ } | {
20
+ readonly kind: "read";
21
+ /** The decision file's first commit; null: never committed. */
22
+ readonly decision: CommitAt | null;
23
+ /** The decision was committed, then deleted: it is not in HEAD. */
24
+ readonly decisionDeleted: boolean;
25
+ /** The first commit of the oldest output; null: no output was ever committed. */
26
+ readonly firstOutput: CommitAt | null;
27
+ };
28
+ /** What the index shows of a study beyond its row. */
29
+ export interface IndexFacts {
30
+ /** The mode its plan declares; null when its plan declares none, or there is no plan to read. */
31
+ readonly mode: StudyMode | null;
32
+ /** For a decide-first study, its history; null when it was not asked (the lint does not ask). */
33
+ readonly history: IndexHistory | null;
34
+ }
35
+ /** The cell of a column that does not apply to a study. */
36
+ export declare const NOT_APPLICABLE = "\u2014";
37
+ /** The mode cell: `decide_before_run`, `exploratory: <reason>`, or `—`. */
38
+ export declare const modeCell: (f: IndexFacts) => string;
39
+ /** The decision cell: its first commit and date (`, deleted since` when it is not in HEAD), or `not committed`. */
40
+ export declare const decisionCell: (f: IndexFacts) => string;
41
+ /** The first-output cell: the commit and date of the first output, or `none`. */
42
+ export declare const firstOutputCell: (f: IndexFacts) => string;
43
+ /** The history the index shows of a decide-first study, from the facts git gave. */
44
+ export declare const indexHistory: (s: DecideFirstStudy) => IndexHistory;
45
+ //# sourceMappingURL=index-columns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-columns.d.ts","sourceRoot":"","sources":["../../src/domain/index-columns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,8EAA8E;AAC9E,MAAM,MAAM,YAAY;AACtB,qEAAqE;AACnE;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACjD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,iFAAiF;IACjF,QAAQ,CAAC,WAAW,EAAE,QAAQ,GAAG,IAAI,CAAC;CACvC,CAAC;AAEN,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,iGAAiG;IACjG,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC,iGAAiG;IACjG,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;CACvC;AAED,2DAA2D;AAC3D,eAAO,MAAM,cAAc,WAAM,CAAC;AAMlC,2EAA2E;AAC3E,eAAO,MAAM,QAAQ,GAAI,GAAG,UAAU,KAAG,MAKxC,CAAC;AAeF,mHAAmH;AACnH,eAAO,MAAM,YAAY,MARnB,UAAU,KAAG,MAclB,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,eAAe,MAjBtB,UAAU,KAAG,MAoBlB,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,YAAY,GAAI,GAAG,gBAAgB,KAAG,YAqBlD,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * THE MODE COLUMNS OF THE INDEX — three columns of `repro/README.md`'s study index beyond the row:
3
+ * the study's mode, as its plan declares it, and for a study decided before its run the commit that
4
+ * first recorded its decision and the commit that first recorded an output (docs/design/study-modes.md).
5
+ *
6
+ * The mode comes from the plan, which is in the tree, so `repro/study-registered` compares it. The
7
+ * two commits come from git's history as `paperlint studies index` read it when it ran: a squash merge
8
+ * or a rebase gives the same files new commits, and a shallow CI clone has none to read, so the lint
9
+ * never compares those two columns. `repro/outputs-before-decision` judges the order itself. Pure.
10
+ */
11
+ import { outputCommits, } from "./decide-first.js";
12
+ /** The cell of a column that does not apply to a study. */
13
+ export const NOT_APPLICABLE = "—";
14
+ /** A commit as a cell: its first twelve characters, and its date. */
15
+ const commitCell = (c) => `${c.commit.slice(0, 12)} ${c.date.slice(0, 10)}`;
16
+ /** The mode cell: `decide_before_run`, `exploratory: <reason>`, or `—`. */
17
+ export const modeCell = (f) => {
18
+ if (f.mode === null)
19
+ return NOT_APPLICABLE;
20
+ return f.mode.kind === "exploratory"
21
+ ? `exploratory: ${f.mode.reason}`
22
+ : f.mode.kind;
23
+ };
24
+ /** A history cell of a decide-first study: the text `pick` makes of it, `absent` when it makes none. */
25
+ const historyCell = (pick, absent) => (f) => {
26
+ if (f.mode?.kind !== "decide_before_run")
27
+ return NOT_APPLICABLE;
28
+ if (f.history === null)
29
+ return "not read";
30
+ if (f.history.kind === "unread")
31
+ return `unknown (${f.history.why})`;
32
+ return pick(f.history) ?? absent;
33
+ };
34
+ /** The decision cell: its first commit and date (`, deleted since` when it is not in HEAD), or `not committed`. */
35
+ export const decisionCell = historyCell((h) => h.decision === null
36
+ ? null
37
+ : `${commitCell(h.decision)}${h.decisionDeleted ? ", deleted since" : ""}`, "not committed");
38
+ /** The first-output cell: the commit and date of the first output, or `none`. */
39
+ export const firstOutputCell = historyCell((h) => (h.firstOutput === null ? null : commitCell(h.firstOutput)), "none");
40
+ /** The history the index shows of a decide-first study, from the facts git gave. */
41
+ export const indexHistory = (s) => {
42
+ switch (s.facts.kind) {
43
+ case "not-a-file":
44
+ return { kind: "unread", why: `the decision is a ${s.facts.what}` };
45
+ case "unknown":
46
+ return { kind: "unread", why: "git could not answer" };
47
+ case "shallow":
48
+ return { kind: "unread", why: "shallow clone" };
49
+ case "read": {
50
+ const [first] = outputCommits(s, s.facts.files);
51
+ return {
52
+ kind: "read",
53
+ decision: s.facts.decision,
54
+ decisionDeleted: s.facts.decisionDeleted,
55
+ firstOutput: first === undefined
56
+ ? null
57
+ : { commit: first.commit, date: first.date },
58
+ };
59
+ }
60
+ }
61
+ };
62
+ //# sourceMappingURL=index-columns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-columns.js","sourceRoot":"","sources":["../../src/domain/index-columns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { StudyKind } from "./study-registry.ts";
2
+ /** A decision recorded in a file: where, and what it decides. */
3
+ export interface Decision {
4
+ /** Relative to the paper's folder. */
5
+ readonly file: string;
6
+ readonly note: string;
7
+ }
8
+ /** Decide first: the decision on the inputs is committed before any output exists. */
9
+ export interface DecideFirst {
10
+ readonly kind: "decide_before_run";
11
+ /** Globs relative to the study's folder: the files the run produces. */
12
+ readonly outputs: readonly string[];
13
+ readonly decision: Decision;
14
+ }
15
+ /** Exploratory: no gate, and reported as exploratory. */
16
+ export interface Exploratory {
17
+ readonly kind: "exploratory";
18
+ readonly reason: string;
19
+ }
20
+ export type StudyMode = DecideFirst | Exploratory;
21
+ /**
22
+ * The kinds of study whose plan must declare a mode: the ones that measure. A spike, a tool, a data
23
+ * set, an artifact or a salvage may omit it.
24
+ */
25
+ export declare const MODE_REQUIRED: readonly StudyKind[];
26
+ /** Whether a study of `kind` must declare its mode. */
27
+ export declare const needsMode: (kind: StudyKind) => boolean;
28
+ /** `paperPath` relative to the study folder `folder`, when it lies inside it; else null. */
29
+ export declare const inStudy: (folder: string, paperPath: string) => string | null;
30
+ /** Whether the file at `path` (relative to the study's folder) is one of `outputs`. */
31
+ export declare const isOutput: (outputs: readonly string[], path: string) => boolean;
32
+ /**
33
+ * The output glob that matches the study's own decision file, when the file lies in the study's
34
+ * folder: the decision would be "produced" by the run it gates.
35
+ */
36
+ export declare const decisionAsOutput: (folder: string, m: DecideFirst) => string | null;
37
+ //# sourceMappingURL=study-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"study-mode.d.ts","sourceRoot":"","sources":["../../src/domain/study-mode.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,iEAAiE;AACjE,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,sFAAsF;AACtF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,SAAS,EAAoB,CAAC;AAEnE,uDAAuD;AACvD,eAAO,MAAM,SAAS,GAAI,MAAM,SAAS,KAAG,OACd,CAAC;AAE/B,4FAA4F;AAC5F,eAAO,MAAM,OAAO,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,MAAM,GAAG,IAIpE,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,QAAQ,GAAI,SAAS,SAAS,MAAM,EAAE,EAAE,MAAM,MAAM,KAAG,OACnB,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,MAAM,EACd,GAAG,WAAW,KACb,MAAM,GAAG,IAKX,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * A STUDY'S MODE — how its outcomes are kept from the decisions about its inputs. A measurement study
3
+ * declares exactly one (docs/design/study-modes.md):
4
+ *
5
+ * decide_before_run the default: the author's decisions on the inputs (exclusions, veto, the
6
+ * sample's approval) are committed BEFORE any output exists. No key, no extra
7
+ * tool: git's history is the proof of order, and
8
+ * `repro/outputs-before-decision` re-checks it on every lint.
9
+ * exploratory no gate: the study is exploratory and is reported as such, with its reason.
10
+ *
11
+ * "None" and "two at once" cannot be written: the plan holds one `mode`, a union on its `kind`, and a
12
+ * measurement study's plan is not ready without it (the parser, `src/adapters/study-registry/`).
13
+ *
14
+ * Paths: `outputs` are globs relative to the study's folder (the study's results live there); the
15
+ * decision's `file` is relative to the PAPER's folder, so a decision may live beside the study or
16
+ * anywhere in the paper (`research/decisions.md`). Pure.
17
+ */
18
+ import { posix } from "node:path";
19
+ import { REPRO_DIR } from "./repro-layout.js";
20
+ /**
21
+ * The kinds of study whose plan must declare a mode: the ones that measure. A spike, a tool, a data
22
+ * set, an artifact or a salvage may omit it.
23
+ */
24
+ export const MODE_REQUIRED = ["measurement"];
25
+ /** Whether a study of `kind` must declare its mode. */
26
+ export const needsMode = (kind) => MODE_REQUIRED.includes(kind);
27
+ /** `paperPath` relative to the study folder `folder`, when it lies inside it; else null. */
28
+ export const inStudy = (folder, paperPath) => {
29
+ const prefix = `${REPRO_DIR}/${folder}/`;
30
+ const n = posix.normalize(paperPath);
31
+ return n.startsWith(prefix) ? n.slice(prefix.length) : null;
32
+ };
33
+ /** Whether the file at `path` (relative to the study's folder) is one of `outputs`. */
34
+ export const isOutput = (outputs, path) => outputs.some((g) => posix.matchesGlob(path, g));
35
+ /**
36
+ * The output glob that matches the study's own decision file, when the file lies in the study's
37
+ * folder: the decision would be "produced" by the run it gates.
38
+ */
39
+ export const decisionAsOutput = (folder, m) => {
40
+ const rel = inStudy(folder, m.decision.file);
41
+ return rel === null
42
+ ? null
43
+ : (m.outputs.find((g) => posix.matchesGlob(rel, g)) ?? null);
44
+ };
45
+ //# sourceMappingURL=study-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"study-mode.js","sourceRoot":"","sources":["../../src/domain/study-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AA0B9C;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAyB,CAAC,aAAa,CAAC,CAAC;AAEnE,uDAAuD;AACvD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAe,EAAW,EAAE,CACpD,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE/B,4FAA4F;AAC5F,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAiB,EAAE;IAC1E,MAAM,MAAM,GAAG,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC;IACzC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC,CAAC;AAEF,uFAAuF;AACvF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAA0B,EAAE,IAAY,EAAW,EAAE,CAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAAc,EACd,CAAc,EACC,EAAE;IACjB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,GAAG,KAAK,IAAI;QACjB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AACjE,CAAC,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import { STUDIES_FILE } from "./repro-layout.ts";
2
+ import { type StudyMode } from "./study-mode.ts";
3
+ import { type IndexHistory } from "./index-columns.ts";
2
4
  /** The registry, at the top of the paper's `repro/`; the layout allows it there. */
3
5
  export { STUDIES_FILE };
4
6
  export declare const STUDY_KINDS: readonly ["measurement", "spike", "tooling", "data", "artifact", "salvage"];
@@ -115,6 +117,11 @@ export interface StudyPlan {
115
117
  readonly author_check: AuthorCheck | null;
116
118
  /** The paper's own keys: hypotheses, models, budget … Kept, never read; none is a plan field. */
117
119
  readonly extra?: Readonly<Record<string, unknown>> | undefined;
120
+ /**
121
+ * How the outcomes are kept from the decisions on the inputs: decided before the run, or
122
+ * exploratory (src/domain/study-mode.ts). A measurement study's plan is not ready without it.
123
+ */
124
+ readonly mode?: StudyMode | undefined;
118
125
  }
119
126
  /**
120
127
  * How the sample is drawn from the population: a seeded draw, whose seed is part of it, or all of
@@ -132,13 +139,13 @@ export type Draw = {
132
139
  readonly method: string;
133
140
  };
134
141
  /** The top-level fields of a plan: none of them may be a key of `extra`. */
135
- export declare const PLAN_FIELDS: readonly ["question", "population", "arms", "primary_outcome", "author_check", "extra"];
142
+ export declare const PLAN_FIELDS: readonly ["question", "population", "arms", "primary_outcome", "author_check", "extra", "mode"];
136
143
  /** A plan with empty required texts: the author has not approved it. */
137
144
  export type DraftPlan = StudyPlan & {
138
145
  readonly author_check: null;
139
146
  };
140
147
  /** The texts a plan must fill before the study runs, in the order they are named. */
141
- export declare const PLAN_TEXT_FIELDS: readonly ["question", "population.source", "population.draw.method", "primary_outcome"];
148
+ export declare const PLAN_TEXT_FIELDS: readonly ["question", "population.source", "population.draw.method", "primary_outcome", "mode", "mode.outputs", "mode.decision.file", "mode.decision.note", "mode.reason"];
142
149
  export type PlanTextField = (typeof PLAN_TEXT_FIELDS)[number];
143
150
  /**
144
151
  * A plan's text, parsed: ready (every required text filled), a draft (its empty texts named, and
@@ -159,11 +166,17 @@ export type ParsedPlan = {
159
166
  export type PlanState = {
160
167
  readonly kind: "absent";
161
168
  } | ParsedPlan;
169
+ /** The decision file `paperlint studies new` names for a study in `folder`, relative to the paper. */
170
+ export declare const decisionPath: (folder: string) => string;
171
+ /** The decision file's name, beside the plan. */
172
+ export declare const DECISION_FILE = "decision.md";
162
173
  /**
163
- * The plan `paperlint studies new` writes: every field present, its value to fill. Its draw is of
164
- * all the population (a census); a sampled study changes it to `{ "kind": "seeded", "method", "seed" }`.
174
+ * The plan `paperlint studies new` writes for a study of `kind` in `folder`: every field present, its
175
+ * value to fill. Its draw is of all the population (a census); a sampled study changes it to
176
+ * `{ "kind": "seeded", "method", "seed" }`. A study that must declare its mode gets the default one,
177
+ * decided before the run, its decision file named and its outputs and note to fill.
165
178
  */
166
- export declare const planTemplate: () => DraftPlan;
179
+ export declare const planTemplate: (kind: StudyKind, folder: string) => DraftPlan;
167
180
  /** A plan's text as `paperlint studies new` writes it: JSON, two-space indented, a final newline. */
168
181
  export declare const planText: (p: StudyPlan) => string;
169
182
  /** A registry's text, parsed: the registry, or the one reason it is not one. */
@@ -313,33 +326,67 @@ export declare function nextStudyId(r: StudyRegistry): string;
313
326
  export declare const studySlug: (title: string) => string;
314
327
  /** The number of words in a title. */
315
328
  export declare const titleWords: (title: string) => number;
329
+ /**
330
+ * Whether `path` stays inside the folder it is relative to. A backslash or a Windows absolute path
331
+ * is refused outright: `posix.normalize` does not resolve `..\\`, while the host's `join` may.
332
+ */
333
+ export declare const isInside: (path: string) => boolean;
334
+ /**
335
+ * Whether `folder` names one folder directly inside `repro/`: not empty, not `.` or `..`, and no
336
+ * separator or NUL. Every command and rule that reads a study's folder reads only such a one: a row
337
+ * naming `../x` would have them read and write outside the paper.
338
+ */
339
+ export declare const isFolderName: (folder: string) => boolean;
316
340
  /**
317
341
  * The `<folder>/<plan>` of each row whose plan lies inside its folder: the files the judge needs read
318
342
  * (`StudyInput.plans`). A plan outside its folder is reported without being read.
319
343
  */
320
344
  export declare const planKeys: (r: StudyRegistry) => readonly string[];
345
+ /** Each plan `planKeys` names, with the kind of the study whose row names it: what its parser needs. */
346
+ export declare const planRefs: (r: StudyRegistry) => readonly {
347
+ readonly key: string;
348
+ readonly folder: string;
349
+ readonly kind: StudyKind;
350
+ }[];
321
351
  /**
322
352
  * Every defect of a paper's study registry, in a fixed order: the registry itself; the unregistered
323
353
  * folders; each row's; the index. Pure.
324
354
  */
325
355
  export declare function judgeStudies(input: StudyInput): readonly StudyFinding[];
356
+ /**
357
+ * What the index is generated from beyond the registry: the plans by `<folder>/<plan>` (as
358
+ * `StudyInput.plans`), and the history of each decide-first study by id. A study with no history
359
+ * listed shows `not read` — the lint, which never compares those columns, asks none.
360
+ */
361
+ export interface IndexInput {
362
+ readonly plans: ReadonlyMap<string, PlanState>;
363
+ readonly history: ReadonlyMap<string, IndexHistory>;
364
+ }
326
365
  /**
327
366
  * The index of `r`: a markdown table, a row per study in registry order, each column padded to its
328
367
  * widest cell (at least 3), the way prettier writes a table — so formatting the README leaves it as
329
368
  * it is.
330
369
  */
331
- export declare function studyIndex(r: StudyRegistry): string;
332
- /** Whether `readme` holds the index of `r`, whatever padding a formatter gave its table. */
333
- export declare function indexInSync(readme: string | null, r: StudyRegistry): boolean;
370
+ export declare function studyIndex(r: StudyRegistry, at: IndexInput): string;
371
+ /**
372
+ * Whether `readme` holds the index of `r`, whatever padding a formatter gave its table and whatever
373
+ * its two columns read from git say: what `repro/study-registered` checks.
374
+ */
375
+ export declare const indexInSync: (readme: string | null, r: StudyRegistry, at: IndexInput) => boolean;
376
+ /**
377
+ * Whether `readme` holds the index of `r` in every column, whatever its padding: when it does,
378
+ * `studies index` leaves the README as it is, so the padding a formatter gave the table stays.
379
+ */
380
+ export declare const indexCurrent: (readme: string | null, r: StudyRegistry, at: IndexInput) => boolean;
334
381
  /** The index between its markers, a blank line on each side. */
335
- export declare const indexBlock: (r: StudyRegistry) => string;
382
+ export declare const indexBlock: (r: StudyRegistry, at: IndexInput) => string;
336
383
  /** The text between the markers of `readme`; null when it has no begin marker followed by an end one. */
337
384
  export declare function embeddedIndex(readme: string): string | null;
338
385
  /**
339
386
  * `readme` with its index regenerated from `r`: the block replaced in place, appended when the README
340
387
  * has none, a README of its own when there is none.
341
388
  */
342
- export declare function withIndex(readme: string | null, r: StudyRegistry): string;
389
+ export declare function withIndex(readme: string | null, r: StudyRegistry, at: IndexInput): string;
343
390
  /** The registry's text as `paperlint studies new` writes it: JSON, two-space indented, a final newline. */
344
391
  export declare const registryText: (r: StudyRegistry) => string;
345
392
  /** The one text a finding is reported with: what is wrong, what to do, and the rule's page. */
@@ -1 +1 @@
1
- {"version":3,"file":"study-registry.d.ts","sourceRoot":"","sources":["../../src/domain/study-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"study-registry.d.ts","sourceRoot":"","sources":["../../src/domain/study-registry.ts"],"names":[],"mappings":"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"}