paperlint 10.2.0 → 10.3.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 (46) hide show
  1. package/dist/adapters/study-registry/index.d.ts +352 -1
  2. package/dist/adapters/study-registry/index.d.ts.map +1 -1
  3. package/dist/adapters/study-registry/index.js +171 -8
  4. package/dist/adapters/study-registry/index.js.map +1 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +6 -4
  7. package/dist/cli.js.map +1 -1
  8. package/dist/domain/study-registry.d.ts +201 -5
  9. package/dist/domain/study-registry.d.ts.map +1 -1
  10. package/dist/domain/study-registry.js +224 -2
  11. package/dist/domain/study-registry.js.map +1 -1
  12. package/dist/ports/study-registry-codec.d.ts +6 -2
  13. package/dist/ports/study-registry-codec.d.ts.map +1 -1
  14. package/dist/studies.d.ts.map +1 -1
  15. package/dist/studies.js +7 -4
  16. package/dist/studies.js.map +1 -1
  17. package/dist/study-registry-rule.d.ts +12 -5
  18. package/dist/study-registry-rule.d.ts.map +1 -1
  19. package/dist/study-registry-rule.js +67 -37
  20. package/dist/study-registry-rule.js.map +1 -1
  21. package/docs/design/study-registry.md +131 -15
  22. package/docs/layout.md +23 -21
  23. package/docs/rules/repro/study-plan-name.md +70 -0
  24. package/docs/rules/repro/study-registered.md +164 -6
  25. package/docs/rules.md +53 -52
  26. package/package.json +1 -1
  27. package/skills/build-benchmark/SKILL.md +24 -12
  28. package/skills/build-benchmark/SKILL.md.spec.ts +23 -11
  29. package/skills/build-label-page/SKILL.md +9 -7
  30. package/skills/build-label-page/SKILL.md.spec.ts +8 -6
  31. package/skills/run-agent-grid/SKILL.md +10 -5
  32. package/skills/run-agent-grid/SKILL.md.spec.ts +9 -4
  33. package/src/adapters/study-registry/index.test.ts +340 -0
  34. package/src/adapters/study-registry/index.ts +268 -10
  35. package/src/cli.ts +6 -4
  36. package/src/domain/study-measurements.test.ts +629 -0
  37. package/src/domain/study-registry.test.ts +10 -1
  38. package/src/domain/study-registry.ts +456 -10
  39. package/src/new-paper.test.ts +1 -0
  40. package/src/ports/study-registry-codec.ts +6 -2
  41. package/src/rule-cases.test.ts +27 -0
  42. package/src/studies-cli.test.ts +2 -2
  43. package/src/studies.test.ts +6 -0
  44. package/src/studies.ts +12 -3
  45. package/src/study-registry-rule.test.ts +140 -1
  46. package/src/study-registry-rule.ts +106 -39
@@ -1,6 +1,357 @@
1
- import { type ParsedRegistry } from "../../domain/study-registry.ts";
1
+ /**
2
+ * The schema of `repro/studies.json` — the one place its shape is checked (docs/design/study-registry.md).
3
+ * The text is parsed once, here, into the domain's `StudyRegistry`; whatever reads a registry after it
4
+ * never re-validates.
5
+ *
6
+ * A row is a loose object: a paper merges its own measurement metadata into its rows (`role`, `frame`,
7
+ * `rules_under_test`, `outcome` …), and those fields are kept as they are. The top level is strict, so
8
+ * a misspelt key is an error rather than a key nobody reads. A measurement keeps its extra fields as a
9
+ * row does; a requirement and an approval are exactly their fields.
10
+ *
11
+ * A study's plan (`plan.json`) is parsed here too, strictly: a key of the paper's own goes in `extra`.
12
+ * Its texts may be empty — the template's are — and the parser says which: a plan comes out ready or
13
+ * a draft naming its empty texts, so nothing downstream looks at a text again. A plan still named
14
+ * `prereg.json` has a loose schema of its own.
15
+ */
16
+ import { z } from "zod";
17
+ import { type Approval, type AuthorCheck, type Measurement, type ParsedPlan, type ParsedRegistry, type Requirement, type Study, type StudyPlan, type StudyRegistry } from "../../domain/study-registry.ts";
2
18
  import type { StudyRegistryCodec } from "../../ports/study-registry-codec.ts";
19
+ declare const study: z.ZodObject<{
20
+ id: z.ZodString;
21
+ folder: z.ZodString;
22
+ title: z.ZodString;
23
+ question: z.ZodString;
24
+ kind: z.ZodEnum<{
25
+ data: "data";
26
+ artifact: "artifact";
27
+ measurement: "measurement";
28
+ spike: "spike";
29
+ tooling: "tooling";
30
+ salvage: "salvage";
31
+ }>;
32
+ status: z.ZodEnum<{
33
+ done: "done";
34
+ designing: "designing";
35
+ running: "running";
36
+ stopped: "stopped";
37
+ superseded: "superseded";
38
+ dropped: "dropped";
39
+ }>;
40
+ date: z.ZodISODate;
41
+ result: z.ZodOptional<z.ZodString>;
42
+ result_file: z.ZodOptional<z.ZodString>;
43
+ superseded_by: z.ZodOptional<z.ZodString>;
44
+ in_paper: z.ZodEnum<{
45
+ yes: "yes";
46
+ no: "no";
47
+ registry: "registry";
48
+ }>;
49
+ measurement: z.ZodOptional<z.ZodString>;
50
+ plan: z.ZodOptional<z.ZodString>;
51
+ }, z.core.$loose>;
52
+ declare const requirement: z.ZodObject<{
53
+ id: z.ZodString;
54
+ text: z.ZodString;
55
+ date: z.ZodISODate;
56
+ source: z.ZodString;
57
+ }, z.core.$strict>;
58
+ declare const approval: z.ZodObject<{
59
+ by: z.ZodString;
60
+ date: z.ZodISODate;
61
+ quote: z.ZodString;
62
+ source: z.ZodOptional<z.ZodString>;
63
+ }, z.core.$strict>;
64
+ declare const measurement: z.ZodObject<{
65
+ id: z.ZodString;
66
+ title: z.ZodString;
67
+ rq: z.ZodOptional<z.ZodString>;
68
+ role: z.ZodEnum<{
69
+ baseline: "baseline";
70
+ headline: "headline";
71
+ }>;
72
+ approval: z.ZodOptional<z.ZodObject<{
73
+ by: z.ZodString;
74
+ date: z.ZodISODate;
75
+ quote: z.ZodString;
76
+ source: z.ZodOptional<z.ZodString>;
77
+ }, z.core.$strict>>;
78
+ requirements: z.ZodOptional<z.ZodArray<z.ZodString>>;
79
+ }, z.core.$loose>;
80
+ declare const registry: z.ZodObject<{
81
+ prefix: z.ZodString;
82
+ author: z.ZodOptional<z.ZodString>;
83
+ requirements: z.ZodOptional<z.ZodArray<z.ZodObject<{
84
+ id: z.ZodString;
85
+ text: z.ZodString;
86
+ date: z.ZodISODate;
87
+ source: z.ZodString;
88
+ }, z.core.$strict>>>;
89
+ measurements: z.ZodOptional<z.ZodArray<z.ZodObject<{
90
+ id: z.ZodString;
91
+ title: z.ZodString;
92
+ rq: z.ZodOptional<z.ZodString>;
93
+ role: z.ZodEnum<{
94
+ baseline: "baseline";
95
+ headline: "headline";
96
+ }>;
97
+ approval: z.ZodOptional<z.ZodObject<{
98
+ by: z.ZodString;
99
+ date: z.ZodISODate;
100
+ quote: z.ZodString;
101
+ source: z.ZodOptional<z.ZodString>;
102
+ }, z.core.$strict>>;
103
+ requirements: z.ZodOptional<z.ZodArray<z.ZodString>>;
104
+ }, z.core.$loose>>>;
105
+ studies: z.ZodArray<z.ZodObject<{
106
+ id: z.ZodString;
107
+ folder: z.ZodString;
108
+ title: z.ZodString;
109
+ question: z.ZodString;
110
+ kind: z.ZodEnum<{
111
+ data: "data";
112
+ artifact: "artifact";
113
+ measurement: "measurement";
114
+ spike: "spike";
115
+ tooling: "tooling";
116
+ salvage: "salvage";
117
+ }>;
118
+ status: z.ZodEnum<{
119
+ done: "done";
120
+ designing: "designing";
121
+ running: "running";
122
+ stopped: "stopped";
123
+ superseded: "superseded";
124
+ dropped: "dropped";
125
+ }>;
126
+ date: z.ZodISODate;
127
+ result: z.ZodOptional<z.ZodString>;
128
+ result_file: z.ZodOptional<z.ZodString>;
129
+ superseded_by: z.ZodOptional<z.ZodString>;
130
+ in_paper: z.ZodEnum<{
131
+ yes: "yes";
132
+ no: "no";
133
+ registry: "registry";
134
+ }>;
135
+ measurement: z.ZodOptional<z.ZodString>;
136
+ plan: z.ZodOptional<z.ZodString>;
137
+ }, z.core.$loose>>;
138
+ }, z.core.$strict>;
139
+ declare const authorCheck: z.ZodObject<{
140
+ by: z.ZodString;
141
+ date: z.ZodISODate;
142
+ quote: z.ZodString;
143
+ }, z.core.$strict>;
144
+ /** A plan's shape: closed at every level; the paper's own keys go in `extra`. Null is the one "none". */
145
+ declare const planShape: z.ZodObject<{
146
+ question: z.ZodString;
147
+ population: z.ZodObject<{
148
+ source: z.ZodString;
149
+ draw: z.ZodDiscriminatedUnion<[z.ZodObject<{
150
+ kind: z.ZodLiteral<"seeded">;
151
+ method: z.ZodString;
152
+ seed: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
153
+ }, z.core.$strict>, z.ZodObject<{
154
+ kind: z.ZodLiteral<"all">;
155
+ method: z.ZodString;
156
+ }, z.core.$strict>], "kind">;
157
+ }, z.core.$strict>;
158
+ arms: z.ZodArray<z.ZodObject<{
159
+ name: z.ZodString;
160
+ }, z.core.$strict>>;
161
+ primary_outcome: z.ZodString;
162
+ author_check: z.ZodNullable<z.ZodObject<{
163
+ by: z.ZodString;
164
+ date: z.ZodISODate;
165
+ quote: z.ZodString;
166
+ }, z.core.$strict>>;
167
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
168
+ }, z.core.$strict>;
169
+ /**
170
+ * A plan under its old name, `prereg.json`, written by hand before the plan had a schema: open at
171
+ * every level, its own top-level keys kept in `extra`. A seed makes the draw seeded, none (or null) a
172
+ * draw of all; a size, and keys of its own deeper down, are not read; the file is never rewritten.
173
+ */
174
+ declare const legacyAsPlan: z.ZodPipe<z.ZodObject<{
175
+ question: z.ZodString;
176
+ population: z.ZodObject<{
177
+ source: z.ZodString;
178
+ draw: z.ZodObject<{
179
+ method: z.ZodString;
180
+ seed: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
181
+ }, z.core.$loose>;
182
+ }, z.core.$loose>;
183
+ arms: z.ZodArray<z.ZodObject<{
184
+ name: z.ZodString;
185
+ }, z.core.$loose>>;
186
+ primary_outcome: z.ZodString;
187
+ author_check: z.ZodOptional<z.ZodNullable<z.ZodObject<{
188
+ by: z.ZodString;
189
+ date: z.ZodISODate;
190
+ quote: z.ZodString;
191
+ }, z.core.$strict>>>;
192
+ }, z.core.$loose>, z.ZodTransform<StudyPlan, {
193
+ [x: string]: unknown;
194
+ question: string;
195
+ population: {
196
+ [x: string]: unknown;
197
+ source: string;
198
+ draw: {
199
+ [x: string]: unknown;
200
+ method: string;
201
+ seed?: string | number | null | undefined;
202
+ };
203
+ };
204
+ arms: {
205
+ [x: string]: unknown;
206
+ name: string;
207
+ }[];
208
+ primary_outcome: string;
209
+ author_check?: {
210
+ by: string;
211
+ date: string;
212
+ quote: string;
213
+ } | null | undefined;
214
+ }>>;
215
+ /** A plan that parsed: ready, or a draft. */
216
+ type ReadyOrDraft = Exclude<ParsedPlan, {
217
+ readonly kind: "unreadable";
218
+ }>;
219
+ /** A `plan.json`: strict, then ready or draft. */
220
+ declare const plan: z.ZodPipe<z.ZodObject<{
221
+ question: z.ZodString;
222
+ population: z.ZodObject<{
223
+ source: z.ZodString;
224
+ draw: z.ZodDiscriminatedUnion<[z.ZodObject<{
225
+ kind: z.ZodLiteral<"seeded">;
226
+ method: z.ZodString;
227
+ seed: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
228
+ }, z.core.$strict>, z.ZodObject<{
229
+ kind: z.ZodLiteral<"all">;
230
+ method: z.ZodString;
231
+ }, z.core.$strict>], "kind">;
232
+ }, z.core.$strict>;
233
+ arms: z.ZodArray<z.ZodObject<{
234
+ name: z.ZodString;
235
+ }, z.core.$strict>>;
236
+ primary_outcome: z.ZodString;
237
+ author_check: z.ZodNullable<z.ZodObject<{
238
+ by: z.ZodString;
239
+ date: z.ZodISODate;
240
+ quote: z.ZodString;
241
+ }, z.core.$strict>>;
242
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
243
+ }, z.core.$strict>, z.ZodTransform<{
244
+ readonly kind: "ready";
245
+ readonly plan: StudyPlan;
246
+ } | {
247
+ readonly kind: "draft";
248
+ readonly plan: import("../../domain/study-registry.ts").DraftPlan;
249
+ readonly empty: readonly import("../../domain/study-registry.ts").PlanTextField[];
250
+ }, {
251
+ question: string;
252
+ population: {
253
+ source: string;
254
+ draw: {
255
+ kind: "seeded";
256
+ method: string;
257
+ seed: string | number;
258
+ } | {
259
+ kind: "all";
260
+ method: string;
261
+ };
262
+ };
263
+ arms: {
264
+ name: string;
265
+ }[];
266
+ primary_outcome: string;
267
+ author_check: {
268
+ by: string;
269
+ date: string;
270
+ quote: string;
271
+ } | null;
272
+ extra?: Record<string, unknown> | undefined;
273
+ }>>;
274
+ /** A `prereg.json`: loose, mapped onto the plan, then ready or draft. */
275
+ declare const legacyPlan: z.ZodPipe<z.ZodPipe<z.ZodObject<{
276
+ question: z.ZodString;
277
+ population: z.ZodObject<{
278
+ source: z.ZodString;
279
+ draw: z.ZodObject<{
280
+ method: z.ZodString;
281
+ seed: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
282
+ }, z.core.$loose>;
283
+ }, z.core.$loose>;
284
+ arms: z.ZodArray<z.ZodObject<{
285
+ name: z.ZodString;
286
+ }, z.core.$loose>>;
287
+ primary_outcome: z.ZodString;
288
+ author_check: z.ZodOptional<z.ZodNullable<z.ZodObject<{
289
+ by: z.ZodString;
290
+ date: z.ZodISODate;
291
+ quote: z.ZodString;
292
+ }, z.core.$strict>>>;
293
+ }, z.core.$loose>, z.ZodTransform<StudyPlan, {
294
+ [x: string]: unknown;
295
+ question: string;
296
+ population: {
297
+ [x: string]: unknown;
298
+ source: string;
299
+ draw: {
300
+ [x: string]: unknown;
301
+ method: string;
302
+ seed?: string | number | null | undefined;
303
+ };
304
+ };
305
+ arms: {
306
+ [x: string]: unknown;
307
+ name: string;
308
+ }[];
309
+ primary_outcome: string;
310
+ author_check?: {
311
+ by: string;
312
+ date: string;
313
+ quote: string;
314
+ } | null | undefined;
315
+ }>>, z.ZodTransform<{
316
+ readonly kind: "ready";
317
+ readonly plan: StudyPlan;
318
+ } | {
319
+ readonly kind: "draft";
320
+ readonly plan: import("../../domain/study-registry.ts").DraftPlan;
321
+ readonly empty: readonly import("../../domain/study-registry.ts").PlanTextField[];
322
+ }, StudyPlan>>;
323
+ /** `T`, readonly all the way down: zod's outputs are mutable, the domain's are not. */
324
+ type Frozen<T> = T extends readonly (infer U)[] ? readonly Frozen<U>[] : T extends object ? {
325
+ readonly [K in keyof T]: Frozen<T[K]>;
326
+ } : T;
327
+ /**
328
+ * True when `A` and `B`, both made readonly all the way down, are one type, optional modifiers
329
+ * included: two generic signatures whose returns are deferred conditionals are related only when
330
+ * the conditionals are identical. Written out, not through an alias: an alias is compared by the
331
+ * variance of its parameter, which misses a dropped optional field.
332
+ */
333
+ type Same<A, B> = (<T>() => T extends Frozen<A> ? readonly [T] : 2) extends <T>() => T extends Frozen<B> ? readonly [T] : 2 ? true : false;
334
+ /** Compiles only when every schema's output is its domain type. */
335
+ export type SchemasAreTheDomain = [
336
+ Same<z.output<typeof registry>, StudyRegistry>,
337
+ Same<z.output<typeof study>, Study>,
338
+ Same<z.output<typeof measurement>, Measurement>,
339
+ Same<z.output<typeof requirement>, Requirement>,
340
+ Same<z.output<typeof approval>, Approval>,
341
+ Same<z.output<typeof authorCheck>, AuthorCheck>,
342
+ Same<z.output<typeof planShape>, StudyPlan>,
343
+ Same<z.output<typeof legacyAsPlan>, StudyPlan>,
344
+ Same<z.output<typeof plan>, ReadyOrDraft>,
345
+ Same<z.output<typeof legacyPlan>, ReadyOrDraft>
346
+ ] extends true[] ? true : never;
347
+ /** The proof is used, so the build checks it. */
348
+ export declare const SCHEMAS_ARE_THE_DOMAIN: SchemasAreTheDomain;
3
349
  /** A `studies.json`'s text, parsed once at the boundary: the registry, or every reason it is not one. */
4
350
  export declare function parseStudyRegistry(text: string): ParsedRegistry;
351
+ /** A `plan.json`: strict. */
352
+ export declare const parseStudyPlan: (text: string) => ParsedPlan;
353
+ /** A plan still named `prereg.json`: loose, read only when a row names it. */
354
+ export declare const parseLegacyPlan: (text: string) => ParsedPlan;
5
355
  export declare const studyRegistryCodec: StudyRegistryCodec;
356
+ export {};
6
357
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/study-registry/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAgC9E,yGAAyG;AACzG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAe/D;AAED,eAAO,MAAM,kBAAkB,EAAE,kBAEhC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/study-registry/index.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,16 @@
5
5
  *
6
6
  * A row is a loose object: a paper merges its own measurement metadata into its rows (`role`, `frame`,
7
7
  * `rules_under_test`, `outcome` …), and those fields are kept as they are. The top level is strict, so
8
- * a misspelt key is an error rather than a key nobody reads.
8
+ * a misspelt key is an error rather than a key nobody reads. A measurement keeps its extra fields as a
9
+ * row does; a requirement and an approval are exactly their fields.
10
+ *
11
+ * A study's plan (`plan.json`) is parsed here too, strictly: a key of the paper's own goes in `extra`.
12
+ * Its texts may be empty — the template's are — and the parser says which: a plan comes out ready or
13
+ * a draft naming its empty texts, so nothing downstream looks at a text again. A plan still named
14
+ * `prereg.json` has a loose schema of its own.
9
15
  */
10
16
  import { z } from "zod";
11
- import { IN_PAPER, PREFIX_PATTERN, STUDY_KINDS, STUDY_STATUSES, } from "../../domain/study-registry.js";
17
+ import { IN_PAPER, MEASUREMENT_ROLES, PLAN_FIELDS, PLAN_TEXT_FIELDS, PREFIX_PATTERN, STUDY_KINDS, STUDY_STATUSES, } from "../../domain/study-registry.js";
12
18
  const study = z.looseObject({
13
19
  id: z.string(),
14
20
  folder: z.string(),
@@ -21,13 +27,155 @@ const study = z.looseObject({
21
27
  result_file: z.string().optional(),
22
28
  superseded_by: z.string().optional(),
23
29
  in_paper: z.enum(IN_PAPER),
30
+ measurement: z.string().optional(),
31
+ plan: z.string().optional(),
32
+ });
33
+ const words = z.string().min(1);
34
+ const requirement = z.strictObject({
35
+ id: words,
36
+ text: words,
37
+ date: z.iso.date(),
38
+ source: words,
39
+ });
40
+ const approval = z.strictObject({
41
+ by: words,
42
+ date: z.iso.date(),
43
+ quote: words,
44
+ source: words.optional(),
45
+ });
46
+ const measurement = z.looseObject({
47
+ id: words,
48
+ title: words,
49
+ rq: z.string().optional(),
50
+ role: z.enum(MEASUREMENT_ROLES),
51
+ approval: approval.optional(),
52
+ requirements: z.array(z.string()).optional(),
24
53
  });
25
54
  const registry = z.strictObject({
26
55
  prefix: z
27
56
  .string()
28
57
  .regex(PREFIX_PATTERN, "a capital letter, then capitals or digits (P1)"),
58
+ author: words.optional(),
59
+ requirements: z.array(requirement).optional(),
60
+ measurements: z.array(measurement).optional(),
29
61
  studies: z.array(study),
30
62
  });
63
+ const authorCheck = approval.omit({ source: true });
64
+ /** A draw: seeded, its seed part of it, or of all the population, with none. */
65
+ const draw = z.discriminatedUnion("kind", [
66
+ z.strictObject({
67
+ kind: z.literal("seeded"),
68
+ method: z.string(),
69
+ seed: z.union([z.string(), z.number()]),
70
+ }),
71
+ z.strictObject({ kind: z.literal("all"), method: z.string() }),
72
+ ]);
73
+ /** The values that occur more than once in `values`, each once. */
74
+ const repeated = (values) => [
75
+ ...new Set(values.filter((v, i) => values.indexOf(v) !== i)),
76
+ ];
77
+ /** Arms whose names are unique: a repeated name is an error naming it. */
78
+ const uniquelyNamed = (arms, ctx) => {
79
+ repeated(arms.map((a) => a.name)).forEach((name) => {
80
+ ctx.addIssue({
81
+ code: "custom",
82
+ message: `more than one arm is named «${name}» — an arm's name is unique`,
83
+ });
84
+ });
85
+ };
86
+ /** The paper's own keys: none of them a field of the plan, which would say a thing twice. */
87
+ const extra = z.record(z.string(), z.unknown()).superRefine((e, ctx) => {
88
+ Object.keys(e)
89
+ .filter((k) => PLAN_FIELDS.some((f) => f === k))
90
+ .forEach((k) => {
91
+ ctx.addIssue({
92
+ code: "custom",
93
+ path: [k],
94
+ message: "is a field of the plan itself — set it there, not in extra",
95
+ });
96
+ });
97
+ });
98
+ /** A plan's shape: closed at every level; the paper's own keys go in `extra`. Null is the one "none". */
99
+ const planShape = z.strictObject({
100
+ question: z.string(),
101
+ population: z.strictObject({ source: z.string(), draw }),
102
+ arms: z.array(z.strictObject({ name: words })).superRefine(uniquelyNamed),
103
+ primary_outcome: z.string(),
104
+ author_check: authorCheck.nullable(),
105
+ extra: extra.optional(),
106
+ });
107
+ /**
108
+ * A plan under its old name, `prereg.json`, written by hand before the plan had a schema: open at
109
+ * every level, its own top-level keys kept in `extra`. A seed makes the draw seeded, none (or null) a
110
+ * draw of all; a size, and keys of its own deeper down, are not read; the file is never rewritten.
111
+ */
112
+ const legacyAsPlan = z
113
+ .looseObject({
114
+ question: z.string(),
115
+ population: z.looseObject({
116
+ source: z.string(),
117
+ draw: z.looseObject({
118
+ method: z.string(),
119
+ seed: z.union([z.string(), z.number()]).nullable().optional(),
120
+ }),
121
+ }),
122
+ arms: z.array(z.looseObject({ name: words })).superRefine(uniquelyNamed),
123
+ primary_outcome: z.string(),
124
+ author_check: authorCheck.nullable().optional(),
125
+ })
126
+ .transform((p) => {
127
+ const { question, population, arms, primary_outcome, author_check, ...rest } = p;
128
+ const { method, seed } = population.draw;
129
+ return {
130
+ question,
131
+ population: {
132
+ source: population.source,
133
+ draw: seed === undefined || seed === null
134
+ ? { kind: "all", method }
135
+ : { kind: "seeded", method, seed },
136
+ },
137
+ arms: arms.map((a) => ({ name: a.name })),
138
+ primary_outcome,
139
+ author_check: author_check ?? null,
140
+ extra: rest,
141
+ };
142
+ });
143
+ /** A text that says something: more than white space. */
144
+ const filled = z.string().regex(/\S/u);
145
+ /** The texts a plan fills before its study runs; what fails here is what is still empty. */
146
+ const readyTexts = z.object({
147
+ question: filled,
148
+ population: z.object({
149
+ source: filled,
150
+ draw: z.object({ method: filled }),
151
+ }),
152
+ primary_outcome: filled,
153
+ });
154
+ /**
155
+ * A parsed plan, ready when every required text is filled, else a draft naming the empty ones. A
156
+ * draft that carries the author's check is no plan: the author approved one with empty texts.
157
+ */
158
+ const readyOrDraft = (p, ctx) => {
159
+ const checked = readyTexts.safeParse(p);
160
+ if (checked.success)
161
+ return { kind: "ready", plan: p };
162
+ const paths = checked.error.issues.map((i) => i.path.join("."));
163
+ const empty = PLAN_TEXT_FIELDS.filter((f) => paths.includes(f));
164
+ if (p.author_check === null)
165
+ return { kind: "draft", plan: { ...p, author_check: null }, empty };
166
+ ctx.addIssue({
167
+ code: "custom",
168
+ path: ["author_check"],
169
+ message: `is set, and the plan leaves ${empty.map((f) => `\`${f}\``).join(", ")} empty — the author approves a complete plan: fill them, or set author_check to null`,
170
+ });
171
+ return z.NEVER;
172
+ };
173
+ /** A `plan.json`: strict, then ready or draft. */
174
+ const plan = planShape.transform(readyOrDraft);
175
+ /** A `prereg.json`: loose, mapped onto the plan, then ready or draft. */
176
+ const legacyPlan = legacyAsPlan.transform(readyOrDraft);
177
+ /** The proof is used, so the build checks it. */
178
+ export const SCHEMAS_ARE_THE_DOMAIN = true;
31
179
  /** The JSON `text` holds, or undefined when it is not JSON. */
32
180
  function jsonOf(text) {
33
181
  try {
@@ -37,6 +185,10 @@ function jsonOf(text) {
37
185
  return undefined;
38
186
  }
39
187
  }
188
+ /** Every reason zod gave, each with the path it is about. */
189
+ const reasons = (issues) => issues
190
+ .map((i) => `${i.path.length === 0 ? "(top)" : i.path.join(".")}: ${i.message}`)
191
+ .join("; ");
40
192
  /** A `studies.json`'s text, parsed once at the boundary: the registry, or every reason it is not one. */
41
193
  export function parseStudyRegistry(text) {
42
194
  const json = jsonOf(text);
@@ -45,14 +197,25 @@ export function parseStudyRegistry(text) {
45
197
  const parsed = registry.safeParse(json);
46
198
  return parsed.success
47
199
  ? { ok: true, registry: parsed.data }
48
- : {
49
- ok: false,
50
- why: parsed.error.issues
51
- .map((i) => `${i.path.length === 0 ? "(top)" : i.path.join(".")}: ${i.message}`)
52
- .join("; "),
53
- };
200
+ : { ok: false, why: reasons(parsed.error.issues) };
54
201
  }
202
+ /** A plan's text, parsed once at the boundary by `schema`: ready, a draft, or every reason it is neither. */
203
+ const planParser = (schema) => (text) => {
204
+ const json = jsonOf(text);
205
+ if (json === undefined)
206
+ return { kind: "unreadable", why: "not JSON" };
207
+ const parsed = schema.safeParse(json);
208
+ return parsed.success
209
+ ? parsed.data
210
+ : { kind: "unreadable", why: reasons(parsed.error.issues) };
211
+ };
212
+ /** A `plan.json`: strict. */
213
+ export const parseStudyPlan = planParser(plan);
214
+ /** A plan still named `prereg.json`: loose, read only when a row names it. */
215
+ export const parseLegacyPlan = planParser(legacyPlan);
55
216
  export const studyRegistryCodec = {
56
217
  parse: parseStudyRegistry,
218
+ parsePlan: parseStudyPlan,
219
+ parseLegacyPlan,
57
220
  };
58
221
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/study-registry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,cAAc,EACd,WAAW,EACX,cAAc,GAEf,MAAM,gCAAgC,CAAC;AAGxC,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC;IAC1B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;IACzB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,CAAC,CAAC,YAAY,CAAC;IAC9B,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,KAAK,CAAC,cAAc,EAAE,gDAAgD,CAAC;IAC1E,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;CACxB,CAAC,CAAC;AAEH,+DAA+D;AAC/D,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,OAAO;QACnB,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;QACrC,CAAC,CAAC;YACE,EAAE,EAAE,KAAK;YACT,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;iBACrB,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CACtE;iBACA,IAAI,CAAC,IAAI,CAAC;SACd,CAAC;AACR,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAuB;IACpD,KAAK,EAAE,kBAAkB;CAC1B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/study-registry/index.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -135,8 +135,9 @@ const USAGE = `paperlint — machine-checkable gates for a paper kept in git
135
135
  change and keeps nothing
136
136
  npx paperlint studies new <paper-dir> "<title>" [--kind <kind>]
137
137
  register a study: the next id in repro/studies.json, the folder
138
- repro/<id>-<slug>/ with its README.md, the row (status designing,
139
- today's date), and the index in repro/README.md regenerated
138
+ repro/<id>-<slug>/ with its README.md and plan.json (a template),
139
+ the row (status designing, today's date, its plan), and the
140
+ index in repro/README.md regenerated
140
141
  npx paperlint studies index <paper-dir>
141
142
  regenerate the index in repro/README.md from repro/studies.json
142
143
  npx paperlint hook <name> run an editor hook (.claude/settings.json calls this)
@@ -161,8 +162,9 @@ new:
161
162
 
162
163
  studies:
163
164
  --kind <kind> new: measurement (the default), spike, tooling, data, artifact or salvage.
164
- A study's status, result and in_paper are edited in repro/studies.json;
165
- the rule repro/study-registered checks them (docs/rules/repro/study-registered.md)
165
+ A study's status, result and in_paper are edited in repro/studies.json, its
166
+ plan in its plan.json; the rule repro/study-registered checks them
167
+ (docs/rules/repro/study-registered.md)
166
168
 
167
169
  submission:
168
170
  The venue preset declares the portal — "portal": { "kind": "hotcrp", "url": "<site>" } — and the