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.
- package/.github/workflows/ci.yml +15 -4
- package/README.md +1 -0
- package/dist/adapters/git/index.d.ts +10 -0
- package/dist/adapters/git/index.d.ts.map +1 -0
- package/dist/adapters/git/index.js +151 -0
- package/dist/adapters/git/index.js.map +1 -0
- package/dist/adapters/memory/index.d.ts +6 -0
- package/dist/adapters/memory/index.d.ts.map +1 -1
- package/dist/adapters/memory/index.js +8 -0
- package/dist/adapters/memory/index.js.map +1 -1
- package/dist/adapters/node/index.d.ts +1 -0
- package/dist/adapters/node/index.d.ts.map +1 -1
- package/dist/adapters/node/index.js +1 -0
- package/dist/adapters/node/index.js.map +1 -1
- package/dist/adapters/node/list-entries.io.d.ts +3 -0
- package/dist/adapters/node/list-entries.io.d.ts.map +1 -0
- package/dist/adapters/node/list-entries.io.js +24 -0
- package/dist/adapters/node/list-entries.io.js.map +1 -0
- package/dist/adapters/study-registry/index.d.ts +412 -1
- package/dist/adapters/study-registry/index.d.ts.map +1 -1
- package/dist/adapters/study-registry/index.js +245 -8
- package/dist/adapters/study-registry/index.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +38 -6
- package/dist/cli.js.map +1 -1
- package/dist/domain/decide-first.d.ts +100 -0
- package/dist/domain/decide-first.d.ts.map +1 -0
- package/dist/domain/decide-first.js +102 -0
- package/dist/domain/decide-first.js.map +1 -0
- package/dist/domain/index-columns.d.ts +45 -0
- package/dist/domain/index-columns.d.ts.map +1 -0
- package/dist/domain/index-columns.js +62 -0
- package/dist/domain/index-columns.js.map +1 -0
- package/dist/domain/study-mode.d.ts +37 -0
- package/dist/domain/study-mode.d.ts.map +1 -0
- package/dist/domain/study-mode.js +45 -0
- package/dist/domain/study-mode.js.map +1 -0
- package/dist/domain/study-registry.d.ts +253 -10
- package/dist/domain/study-registry.d.ts.map +1 -1
- package/dist/domain/study-registry.js +325 -27
- package/dist/domain/study-registry.js.map +1 -1
- package/dist/outputs-before-decision-rule.d.ts +17 -0
- package/dist/outputs-before-decision-rule.d.ts.map +1 -0
- package/dist/outputs-before-decision-rule.js +90 -0
- package/dist/outputs-before-decision-rule.js.map +1 -0
- package/dist/ports/git-history.d.ts +44 -0
- package/dist/ports/git-history.d.ts.map +1 -0
- package/dist/ports/git-history.js +2 -0
- package/dist/ports/git-history.js.map +1 -0
- package/dist/ports/list-entries.d.ts +17 -0
- package/dist/ports/list-entries.d.ts.map +1 -0
- package/dist/ports/list-entries.js +2 -0
- package/dist/ports/list-entries.js.map +1 -0
- package/dist/ports/study-registry-codec.d.ts +9 -2
- package/dist/ports/study-registry-codec.d.ts.map +1 -1
- package/dist/studies.d.ts +4 -0
- package/dist/studies.d.ts.map +1 -1
- package/dist/studies.js +55 -24
- package/dist/studies.js.map +1 -1
- package/dist/study-gate.d.ts +14 -0
- package/dist/study-gate.d.ts.map +1 -0
- package/dist/study-gate.js +95 -0
- package/dist/study-gate.js.map +1 -0
- package/dist/study-index-input.d.ts +5 -0
- package/dist/study-index-input.d.ts.map +1 -0
- package/dist/study-index-input.js +13 -0
- package/dist/study-index-input.js.map +1 -0
- package/dist/study-modes.d.ts +45 -0
- package/dist/study-modes.d.ts.map +1 -0
- package/dist/study-modes.js +70 -0
- package/dist/study-modes.js.map +1 -0
- package/dist/study-registry-rule.d.ts +29 -6
- package/dist/study-registry-rule.d.ts.map +1 -1
- package/dist/study-registry-rule.js +91 -40
- package/dist/study-registry-rule.js.map +1 -1
- package/dist/study-run.d.ts +19 -0
- package/dist/study-run.d.ts.map +1 -0
- package/dist/study-run.js +9 -0
- package/dist/study-run.js.map +1 -0
- package/docs/design/study-modes.md +247 -0
- package/docs/design/study-registry.md +137 -15
- package/docs/e2e.md +8 -4
- package/docs/layout.md +26 -21
- package/docs/rules/repro/outputs-before-decision.md +119 -0
- package/docs/rules/repro/study-plan-name.md +70 -0
- package/docs/rules/repro/study-registered.md +206 -15
- package/docs/rules.md +54 -52
- package/docs/testing.md +1 -0
- package/package.json +2 -1
- package/scripts/check.ts +6 -0
- package/skills/build-benchmark/SKILL.md +24 -12
- package/skills/build-benchmark/SKILL.md.spec.ts +23 -11
- package/skills/build-label-page/SKILL.md +9 -7
- package/skills/build-label-page/SKILL.md.spec.ts +8 -6
- package/skills/camera-ready/SKILL.md +6 -1
- package/skills/camera-ready/SKILL.md.spec.ts +5 -0
- package/skills/draft-paper/SKILL.md +11 -3
- package/skills/draft-paper/SKILL.md.spec.ts +10 -2
- package/skills/harden-paper/SKILL.md +12 -2
- package/skills/harden-paper/SKILL.md.spec.ts +11 -1
- package/skills/osf-artifact-upload/SKILL.md +7 -1
- package/skills/osf-artifact-upload/SKILL.md.spec.ts +6 -0
- package/skills/pc-panel-review/SKILL.md +10 -3
- package/skills/pc-panel-review/SKILL.md.spec.ts +9 -2
- package/skills/run-agent-grid/SKILL.md +10 -5
- package/skills/run-agent-grid/SKILL.md.spec.ts +9 -4
- package/skills/tighten-paper/SKILL.md +5 -1
- package/skills/tighten-paper/SKILL.md.spec.ts +4 -0
- package/src/adapters/git/history.test.ts +121 -0
- package/src/adapters/git/index.test.ts +268 -0
- package/src/adapters/git/index.ts +227 -0
- package/src/adapters/memory/index.test.ts +15 -1
- package/src/adapters/memory/index.ts +13 -0
- package/src/adapters/node/index.ts +1 -0
- package/src/adapters/node/list-entries.io.ts +26 -0
- package/src/adapters/node/list-entries.test.ts +43 -0
- package/src/adapters/study-registry/index.test.ts +343 -0
- package/src/adapters/study-registry/index.ts +374 -10
- package/src/adapters/study-registry/mode.test.ts +162 -0
- package/src/cli.ts +52 -6
- package/src/domain/decide-first.test.ts +258 -0
- package/src/domain/decide-first.ts +243 -0
- package/src/domain/index-columns.test.ts +216 -0
- package/src/domain/index-columns.ts +105 -0
- package/src/domain/study-measurements.test.ts +633 -0
- package/src/domain/study-mode.test.ts +55 -0
- package/src/domain/study-mode.ts +78 -0
- package/src/domain/study-registry.test.ts +48 -32
- package/src/domain/study-registry.ts +621 -36
- package/src/new-paper.test.ts +6 -1
- package/src/outputs-before-decision-rule.test.ts +206 -0
- package/src/outputs-before-decision-rule.ts +124 -0
- package/src/ports/git-history.ts +44 -0
- package/src/ports/list-entries.ts +18 -0
- package/src/ports/study-registry-codec.ts +13 -2
- package/src/rule-cases.test.ts +103 -1
- package/src/studies-cli.test.ts +2 -2
- package/src/studies-index-modes.test.ts +129 -0
- package/src/studies.test.ts +39 -9
- package/src/studies.ts +99 -29
- package/src/study-gate.test.ts +316 -0
- package/src/study-gate.ts +161 -0
- package/src/study-index-input.ts +23 -0
- package/src/study-modes.ts +120 -0
- package/src/study-registry-rule.test.ts +333 -7
- package/src/study-registry-rule.ts +145 -41
- package/src/study-run.ts +21 -0
|
@@ -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"];
|
|
@@ -17,6 +19,45 @@ export declare const DEFAULT_KIND: StudyKind;
|
|
|
17
19
|
/** The markers around the generated index in `repro/README.md`. Fixed: the rule finds the block by them. */
|
|
18
20
|
export declare const INDEX_BEGIN = "<!-- studies:begin \u2014 generated from studies.json by `paperlint studies index`; do not edit -->";
|
|
19
21
|
export declare const INDEX_END = "<!-- studies:end -->";
|
|
22
|
+
/** What a measurement is to the paper: the claim it carries, or what that claim is compared with. */
|
|
23
|
+
export declare const MEASUREMENT_ROLES: readonly ["headline", "baseline"];
|
|
24
|
+
export type MeasurementRole = (typeof MEASUREMENT_ROLES)[number];
|
|
25
|
+
/**
|
|
26
|
+
* The statuses of a study that has run: its plan was due before the first run. A `designing` study
|
|
27
|
+
* has not run yet, and a `dropped` one never will.
|
|
28
|
+
*/
|
|
29
|
+
export declare const RAN_STATUSES: readonly StudyStatus[];
|
|
30
|
+
/** A requirement of the author's on the paper's measurements, in their words. */
|
|
31
|
+
export interface Requirement {
|
|
32
|
+
readonly id: string;
|
|
33
|
+
/** The author's words, verbatim. */
|
|
34
|
+
readonly text: string;
|
|
35
|
+
readonly date: string;
|
|
36
|
+
/** Where they said it: a chat, a message, a review comment. */
|
|
37
|
+
readonly source: string;
|
|
38
|
+
}
|
|
39
|
+
/** Someone's approval, in their words: of a measurement, or of a study's drawn units. */
|
|
40
|
+
export interface Approval {
|
|
41
|
+
readonly by: string;
|
|
42
|
+
readonly date: string;
|
|
43
|
+
readonly quote: string;
|
|
44
|
+
readonly source?: string | undefined;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* One measurement: what the paper measures, made of one or more studies (a pilot, the main run, a
|
|
48
|
+
* replication) whose rows name it in `measurement`. A measurement may carry more fields.
|
|
49
|
+
*/
|
|
50
|
+
export interface Measurement {
|
|
51
|
+
readonly id: string;
|
|
52
|
+
readonly title: string;
|
|
53
|
+
/** The research question it answers. */
|
|
54
|
+
readonly rq?: string | undefined;
|
|
55
|
+
readonly role: MeasurementRole;
|
|
56
|
+
readonly approval?: Approval | undefined;
|
|
57
|
+
/** The ids of the requirements it must meet. */
|
|
58
|
+
readonly requirements?: readonly string[] | undefined;
|
|
59
|
+
readonly [extra: string]: unknown;
|
|
60
|
+
}
|
|
20
61
|
/**
|
|
21
62
|
* One study. The named fields are the registry's; a row may carry more (a paper merges its own
|
|
22
63
|
* measurement metadata into it), and they are kept as they are.
|
|
@@ -33,12 +74,111 @@ export interface Study {
|
|
|
33
74
|
readonly result_file?: string | undefined;
|
|
34
75
|
readonly superseded_by?: string | undefined;
|
|
35
76
|
readonly in_paper: InPaper;
|
|
77
|
+
/** The id of the measurement the study belongs to. */
|
|
78
|
+
readonly measurement?: string | undefined;
|
|
79
|
+
/** The study's plan: a path inside its folder, `plan.json`. */
|
|
80
|
+
readonly plan?: string | undefined;
|
|
36
81
|
readonly [extra: string]: unknown;
|
|
37
82
|
}
|
|
38
83
|
export interface StudyRegistry {
|
|
39
84
|
readonly prefix: string;
|
|
85
|
+
/** The paper's author: the one person whose approval makes a measurement the headline. */
|
|
86
|
+
readonly author?: string | undefined;
|
|
87
|
+
readonly requirements?: readonly Requirement[] | undefined;
|
|
88
|
+
/** When present, every row's `measurement` names one of them. */
|
|
89
|
+
readonly measurements?: readonly Measurement[] | undefined;
|
|
40
90
|
readonly studies: readonly Study[];
|
|
41
91
|
}
|
|
92
|
+
/** The file `paperlint studies new` writes a study's plan to, beside its README.md. */
|
|
93
|
+
export declare const PLAN_FILE = "plan.json";
|
|
94
|
+
/** The plan's name before it was a plan: still read as one, and reported by `repro/study-plan-name`. */
|
|
95
|
+
export declare const LEGACY_PLAN_FILE = "prereg.json";
|
|
96
|
+
/** The author's check of a study's drawn units, before the runs. */
|
|
97
|
+
export type AuthorCheck = Omit<Approval, "source">;
|
|
98
|
+
/**
|
|
99
|
+
* A study's plan, fixed before its runs: what it measures, on what population and how it is drawn,
|
|
100
|
+
* its arms, its primary outcome, and the author's check of the drawn units. Closed: a key the paper
|
|
101
|
+
* needs of its own goes in `extra`, so a misspelt key is an error, not a key nobody reads. "Not
|
|
102
|
+
* known" and "not yet" have one spelling each: null.
|
|
103
|
+
*/
|
|
104
|
+
export interface StudyPlan {
|
|
105
|
+
readonly question: string;
|
|
106
|
+
readonly population: {
|
|
107
|
+
/** Where the units come from: the census, crawl or registry, with its date. */
|
|
108
|
+
readonly source: string;
|
|
109
|
+
readonly draw: Draw;
|
|
110
|
+
};
|
|
111
|
+
/** The conditions compared, each name once; none for a census. */
|
|
112
|
+
readonly arms: readonly {
|
|
113
|
+
readonly name: string;
|
|
114
|
+
}[];
|
|
115
|
+
readonly primary_outcome: string;
|
|
116
|
+
/** null: the author has not checked the drawn units yet. Only a ready plan carries one. */
|
|
117
|
+
readonly author_check: AuthorCheck | null;
|
|
118
|
+
/** The paper's own keys: hypotheses, models, budget … Kept, never read; none is a plan field. */
|
|
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;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* How the sample is drawn from the population: a seeded draw, whose seed is part of it, or all of
|
|
128
|
+
* the population (a census), which has none. The size of the population is not stored: it is
|
|
129
|
+
* counted from the source, and a stored copy would only contradict it.
|
|
130
|
+
*/
|
|
131
|
+
export type Draw = {
|
|
132
|
+
readonly kind: "seeded";
|
|
133
|
+
/** `random`, `stratified` … */
|
|
134
|
+
readonly method: string;
|
|
135
|
+
readonly seed: string | number;
|
|
136
|
+
} | {
|
|
137
|
+
readonly kind: "all";
|
|
138
|
+
/** `census` … */
|
|
139
|
+
readonly method: string;
|
|
140
|
+
};
|
|
141
|
+
/** The top-level fields of a plan: none of them may be a key of `extra`. */
|
|
142
|
+
export declare const PLAN_FIELDS: readonly ["question", "population", "arms", "primary_outcome", "author_check", "extra", "mode"];
|
|
143
|
+
/** A plan with empty required texts: the author has not approved it. */
|
|
144
|
+
export type DraftPlan = StudyPlan & {
|
|
145
|
+
readonly author_check: null;
|
|
146
|
+
};
|
|
147
|
+
/** The texts a plan must fill before the study runs, in the order they are named. */
|
|
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"];
|
|
149
|
+
export type PlanTextField = (typeof PLAN_TEXT_FIELDS)[number];
|
|
150
|
+
/**
|
|
151
|
+
* A plan's text, parsed: ready (every required text filled), a draft (its empty texts named, and
|
|
152
|
+
* no check of the author's: only a complete plan is approved), or the reasons it is not a plan. Whether a plan is complete is decided here, once, by the parser.
|
|
153
|
+
*/
|
|
154
|
+
export type ParsedPlan = {
|
|
155
|
+
readonly kind: "ready";
|
|
156
|
+
readonly plan: StudyPlan;
|
|
157
|
+
} | {
|
|
158
|
+
readonly kind: "draft";
|
|
159
|
+
readonly plan: DraftPlan;
|
|
160
|
+
readonly empty: readonly PlanTextField[];
|
|
161
|
+
} | {
|
|
162
|
+
readonly kind: "unreadable";
|
|
163
|
+
readonly why: string;
|
|
164
|
+
};
|
|
165
|
+
/** What a study's folder holds of the plan its row names: absent, or what its text parsed to. */
|
|
166
|
+
export type PlanState = {
|
|
167
|
+
readonly kind: "absent";
|
|
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";
|
|
173
|
+
/**
|
|
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.
|
|
178
|
+
*/
|
|
179
|
+
export declare const planTemplate: (kind: StudyKind, folder: string) => DraftPlan;
|
|
180
|
+
/** A plan's text as `paperlint studies new` writes it: JSON, two-space indented, a final newline. */
|
|
181
|
+
export declare const planText: (p: StudyPlan) => string;
|
|
42
182
|
/** A registry's text, parsed: the registry, or the one reason it is not one. */
|
|
43
183
|
export type ParsedRegistry = {
|
|
44
184
|
readonly ok: true;
|
|
@@ -66,6 +206,8 @@ export interface StudyInput {
|
|
|
66
206
|
readonly readme: string | null;
|
|
67
207
|
/** Each `<folder>/<result_file>` of the registry that is a file. */
|
|
68
208
|
readonly existingResults: ReadonlySet<string>;
|
|
209
|
+
/** The plan each row names, by `<folder>/<plan>`; one not listed is absent. */
|
|
210
|
+
readonly plans: ReadonlyMap<string, PlanState>;
|
|
69
211
|
}
|
|
70
212
|
/** One defect of the registry, of a row, or of the index. */
|
|
71
213
|
export type StudyFinding = {
|
|
@@ -117,35 +259,134 @@ export type StudyFinding = {
|
|
|
117
259
|
} | {
|
|
118
260
|
readonly problem: "stale-index";
|
|
119
261
|
readonly why: "no-readme" | "no-markers" | "differs";
|
|
262
|
+
} | {
|
|
263
|
+
readonly problem: "unknown-measurement";
|
|
264
|
+
readonly id: string;
|
|
265
|
+
readonly measurement: string;
|
|
266
|
+
} | {
|
|
267
|
+
readonly problem: "empty-measurement";
|
|
268
|
+
readonly measurement: string;
|
|
269
|
+
} | {
|
|
270
|
+
readonly problem: "unknown-requirement";
|
|
271
|
+
readonly measurement: string;
|
|
272
|
+
readonly requirement: string;
|
|
273
|
+
} | {
|
|
274
|
+
readonly problem: "headline-approval";
|
|
275
|
+
readonly measurement: string;
|
|
276
|
+
readonly why: "missing";
|
|
277
|
+
readonly author: string | null;
|
|
278
|
+
} | {
|
|
279
|
+
readonly problem: "headline-approval";
|
|
280
|
+
readonly measurement: string;
|
|
281
|
+
readonly why: "not-author";
|
|
282
|
+
readonly by: string;
|
|
283
|
+
readonly author: string;
|
|
284
|
+
} | {
|
|
285
|
+
readonly problem: "bad-plan";
|
|
286
|
+
readonly id: string;
|
|
287
|
+
readonly path: string;
|
|
288
|
+
readonly why: "missing" | "outside";
|
|
289
|
+
} | {
|
|
290
|
+
readonly problem: "bad-plan";
|
|
291
|
+
readonly id: string;
|
|
292
|
+
readonly path: string;
|
|
293
|
+
readonly why: "unreadable";
|
|
294
|
+
readonly reasons: string;
|
|
295
|
+
} | {
|
|
296
|
+
readonly problem: "bad-plan";
|
|
297
|
+
readonly id: string;
|
|
298
|
+
readonly path: string;
|
|
299
|
+
readonly why: "unfilled";
|
|
300
|
+
readonly fields: readonly PlanTextField[];
|
|
301
|
+
readonly status: StudyStatus;
|
|
302
|
+
} | {
|
|
303
|
+
readonly problem: "author-check";
|
|
304
|
+
readonly id: string;
|
|
305
|
+
readonly measurement: string;
|
|
306
|
+
readonly status: StudyStatus;
|
|
307
|
+
readonly why: "no-plan" | "missing";
|
|
308
|
+
} | {
|
|
309
|
+
readonly problem: "author-check";
|
|
310
|
+
readonly id: string;
|
|
311
|
+
readonly measurement: string;
|
|
312
|
+
readonly status: StudyStatus;
|
|
313
|
+
readonly why: "not-author";
|
|
314
|
+
readonly by: string;
|
|
315
|
+
readonly author: string;
|
|
316
|
+
} | {
|
|
317
|
+
readonly problem: "legacy-plan";
|
|
318
|
+
readonly id: string;
|
|
319
|
+
readonly path: string;
|
|
120
320
|
};
|
|
321
|
+
/** The findings `repro/study-plan-name` reports, a warning; every other is `repro/study-registered`'s. */
|
|
322
|
+
export declare const PLAN_NAME_PROBLEMS: readonly StudyFinding["problem"][];
|
|
121
323
|
/** The id after the highest one in `r`, at least two digits: `P1-S01` in an empty registry. */
|
|
122
324
|
export declare function nextStudyId(r: StudyRegistry): string;
|
|
123
325
|
/** The slug of a title: lowercase Latin letters and digits, words joined by single hyphens; "" when none. */
|
|
124
326
|
export declare const studySlug: (title: string) => string;
|
|
125
327
|
/** The number of words in a title. */
|
|
126
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;
|
|
340
|
+
/**
|
|
341
|
+
* The `<folder>/<plan>` of each row whose plan lies inside its folder: the files the judge needs read
|
|
342
|
+
* (`StudyInput.plans`). A plan outside its folder is reported without being read.
|
|
343
|
+
*/
|
|
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
|
+
}[];
|
|
127
351
|
/**
|
|
128
352
|
* Every defect of a paper's study registry, in a fixed order: the registry itself; the unregistered
|
|
129
353
|
* folders; each row's; the index. Pure.
|
|
130
354
|
*/
|
|
131
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
|
+
}
|
|
132
365
|
/**
|
|
133
366
|
* The index of `r`: a markdown table, a row per study in registry order, each column padded to its
|
|
134
367
|
* widest cell (at least 3), the way prettier writes a table — so formatting the README leaves it as
|
|
135
368
|
* it is.
|
|
136
369
|
*/
|
|
137
|
-
export declare function studyIndex(r: StudyRegistry): string;
|
|
138
|
-
/**
|
|
139
|
-
|
|
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;
|
|
140
381
|
/** The index between its markers, a blank line on each side. */
|
|
141
|
-
export declare const indexBlock: (r: StudyRegistry) => string;
|
|
382
|
+
export declare const indexBlock: (r: StudyRegistry, at: IndexInput) => string;
|
|
142
383
|
/** The text between the markers of `readme`; null when it has no begin marker followed by an end one. */
|
|
143
384
|
export declare function embeddedIndex(readme: string): string | null;
|
|
144
385
|
/**
|
|
145
386
|
* `readme` with its index regenerated from `r`: the block replaced in place, appended when the README
|
|
146
387
|
* has none, a README of its own when there is none.
|
|
147
388
|
*/
|
|
148
|
-
export declare function withIndex(readme: string | null, r: StudyRegistry): string;
|
|
389
|
+
export declare function withIndex(readme: string | null, r: StudyRegistry, at: IndexInput): string;
|
|
149
390
|
/** The registry's text as `paperlint studies new` writes it: JSON, two-space indented, a final newline. */
|
|
150
391
|
export declare const registryText: (r: StudyRegistry) => string;
|
|
151
392
|
/** The one text a finding is reported with: what is wrong, what to do, and the rule's page. */
|
|
@@ -159,11 +400,8 @@ export interface NewStudy {
|
|
|
159
400
|
/** The day it is registered, `YYYY-MM-DD`. */
|
|
160
401
|
readonly date: string;
|
|
161
402
|
}
|
|
162
|
-
/**
|
|
163
|
-
|
|
164
|
-
* `in_paper: no` and an empty question; or why the title cannot make one.
|
|
165
|
-
*/
|
|
166
|
-
export declare function addStudy(r: StudyRegistry, n: NewStudy): {
|
|
403
|
+
/** A registry with a study added, and the study; or why it could not be. */
|
|
404
|
+
export type Added = {
|
|
167
405
|
readonly ok: true;
|
|
168
406
|
readonly registry: StudyRegistry;
|
|
169
407
|
readonly study: Study;
|
|
@@ -171,6 +409,11 @@ export declare function addStudy(r: StudyRegistry, n: NewStudy): {
|
|
|
171
409
|
readonly ok: false;
|
|
172
410
|
readonly why: string;
|
|
173
411
|
};
|
|
412
|
+
/**
|
|
413
|
+
* `r` with a new study appended: the next id, the folder `<id>-<slug>`, `status: designing`,
|
|
414
|
+
* `in_paper: no`, an empty question and its plan, `plan.json`; or why the title cannot make one.
|
|
415
|
+
*/
|
|
416
|
+
export declare function addStudy(r: StudyRegistry, n: NewStudy): Added;
|
|
174
417
|
/** The `README.md` a new study's folder starts with: its id and title in frontmatter, then the sections. */
|
|
175
418
|
export declare const studyReadme: (s: Study) => string;
|
|
176
419
|
//# sourceMappingURL=study-registry.d.ts.map
|
|
@@ -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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"}
|