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.
- 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 +70 -10
- package/dist/adapters/study-registry/index.d.ts.map +1 -1
- package/dist/adapters/study-registry/index.js +84 -10
- package/dist/adapters/study-registry/index.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +33 -3
- 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 +57 -10
- package/dist/domain/study-registry.d.ts.map +1 -1
- package/dist/domain/study-registry.js +106 -30
- 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 +6 -3
- 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 +50 -22
- 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 +17 -1
- package/dist/study-registry-rule.d.ts.map +1 -1
- package/dist/study-registry-rule.js +34 -13
- 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 +6 -0
- package/docs/e2e.md +8 -4
- package/docs/layout.md +22 -19
- package/docs/rules/repro/outputs-before-decision.md +119 -0
- package/docs/rules/repro/study-registered.md +47 -14
- package/docs/rules.md +54 -53
- package/docs/testing.md +1 -0
- package/package.json +2 -1
- package/scripts/check.ts +6 -0
- 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/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 +12 -9
- package/src/adapters/study-registry/index.ts +130 -24
- package/src/adapters/study-registry/mode.test.ts +162 -0
- package/src/cli.ts +47 -3
- 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 +9 -5
- package/src/domain/study-mode.test.ts +55 -0
- package/src/domain/study-mode.ts +78 -0
- package/src/domain/study-registry.test.ts +38 -31
- package/src/domain/study-registry.ts +170 -31
- package/src/new-paper.test.ts +5 -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 +10 -3
- package/src/rule-cases.test.ts +78 -3
- package/src/studies-index-modes.test.ts +129 -0
- package/src/studies.test.ts +35 -11
- package/src/studies.ts +88 -27
- 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 +198 -11
- package/src/study-registry-rule.ts +51 -14
- package/src/study-run.ts +21 -0
package/.github/workflows/ci.yml
CHANGED
|
@@ -28,9 +28,12 @@
|
|
|
28
28
|
# what took the job from `timeout-minutes: 20` to 10. Re-measure when the counts move again; do not
|
|
29
29
|
# cite the table above without re-running it.
|
|
30
30
|
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
33
|
-
#
|
|
31
|
+
# MEASURED 2026-10-16 on GitHub's runner, not locally: `gates` on main took 9m38s (run 38854596880),
|
|
32
|
+
# 6m43s of it `npm test, under coverage`; a branch adding a 16-second step was cancelled by the
|
|
33
|
+
# 10-minute bond (run 38909690302). The ~3-minute estimate this bond was set against no longer holds,
|
|
34
|
+
# so `timeout-minutes: 15` is ~1.5× the measured job — a bond against a hang, not a budget the suite
|
|
35
|
+
# lives inside. `npm ci` carries its OWN bond because a job-level bond cannot tell "the registry hung"
|
|
36
|
+
# from "the suite is slow" and so hands a hang the whole job.
|
|
34
37
|
name: ci
|
|
35
38
|
|
|
36
39
|
on:
|
|
@@ -66,7 +69,7 @@ jobs:
|
|
|
66
69
|
# there is no pull_request object, and a bare `.draft` would be missing and kill every check there.
|
|
67
70
|
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
|
|
68
71
|
runs-on: ubuntu-latest
|
|
69
|
-
timeout-minutes:
|
|
72
|
+
timeout-minutes: 15
|
|
70
73
|
steps:
|
|
71
74
|
- uses: actions/checkout@v7
|
|
72
75
|
|
|
@@ -188,6 +191,14 @@ jobs:
|
|
|
188
191
|
run: npm run test:e2e:install
|
|
189
192
|
timeout-minutes: 10
|
|
190
193
|
|
|
194
|
+
# A study decided before its run, through the real binary in a real git repository
|
|
195
|
+
# (test/e2e/studies/): `studies gate`, `repro/outputs-before-decision`, and the commits
|
|
196
|
+
# `studies index` writes. git is on the runner image; `CI` is set, so a missing git FAILS the
|
|
197
|
+
# run (test/e2e/need.ts). 16 s on the runner (run 38909690302), 10 s locally.
|
|
198
|
+
- name: npm run test:e2e:studies
|
|
199
|
+
run: npm run test:e2e:studies
|
|
200
|
+
timeout-minutes: 5
|
|
201
|
+
|
|
191
202
|
# ── BUILDING THE PAPER WITH REAL pdflatex, ON LINUX AND macOS ──────────────────────────────────
|
|
192
203
|
#
|
|
193
204
|
# 🔴 ONE JOB, TWO OPERATING SYSTEMS. TeX Live comes from `paperlint toolchain` — the same command a user
|
package/README.md
CHANGED
|
@@ -162,6 +162,7 @@ Each stage's skills, what it writes and what checks it, drawn as one flow, with
|
|
|
162
162
|
| `npx paperlint submission update <paper>` | checks a new PDF/abstract against the portal; `--save` sends it for real |
|
|
163
163
|
| `npx paperlint studies new <paper> "<title>"` | registers a study: the next id in `repro/studies.json`, its folder, the index |
|
|
164
164
|
| `npx paperlint studies index <paper>` | regenerates the index of the studies in `repro/README.md` |
|
|
165
|
+
| `npx paperlint studies gate <paper> <id>` | exits 0 only once the study's decision is committed: run it before the study |
|
|
165
166
|
| `npx paperlint --help` | every command and flag |
|
|
166
167
|
|
|
167
168
|
## 🧠 Skills
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CommitAt, GitHistory, GitOrder } from "../../ports/git-history.ts";
|
|
2
|
+
import type { RunProcess } from "../../ports/process.ts";
|
|
3
|
+
/**
|
|
4
|
+
* The first commit of each path in `git log --reverse --format=%x01%H%x09%cI --name-only` output:
|
|
5
|
+
* a line starting with \x01 opens a commit, the lines after it name its files.
|
|
6
|
+
*/
|
|
7
|
+
export declare const firstCommitsOf: (log: string) => ReadonlyMap<string, CommitAt>;
|
|
8
|
+
/** The committed state of files. */
|
|
9
|
+
export declare function gitHistory(run: RunProcess, env: Readonly<Record<string, string>>): GitHistory & GitOrder;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/git/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,QAAQ,EAGR,UAAU,EACV,QAAQ,EAGT,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAoDtE;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,CAWtC,CAAC;AAEpC,oCAAoC;AACpC,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACpC,UAAU,GAAG,QAAQ,CAoBvB"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
const TIMEOUT_MS = 60_000;
|
|
2
|
+
/** git's stdout, or why it gave none; `allowed` lists the exit statuses that are answers. */
|
|
3
|
+
const stdoutOf = (x, allowed = [0]) => {
|
|
4
|
+
switch (x.kind) {
|
|
5
|
+
case "exited":
|
|
6
|
+
return allowed.includes(x.status)
|
|
7
|
+
? { out: x.stdout, status: x.status }
|
|
8
|
+
: { why: x.stderr.trim() || `git exited ${String(x.status)}` };
|
|
9
|
+
case "not-found":
|
|
10
|
+
return { why: "git is not installed" };
|
|
11
|
+
case "spawn-failed":
|
|
12
|
+
return { why: x.message };
|
|
13
|
+
case "signalled":
|
|
14
|
+
case "timed-out":
|
|
15
|
+
return { why: `git did not finish (${x.kind})` };
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
/** git, run through `run` in `cwd` with `env` as its whole environment. */
|
|
19
|
+
const gitIn = (run, env) => (cwd, args, allowed) => stdoutOf(run.run({
|
|
20
|
+
file: "git",
|
|
21
|
+
args: ["-c", "core.quotepath=false", ...args],
|
|
22
|
+
env,
|
|
23
|
+
timeoutMs: TIMEOUT_MS,
|
|
24
|
+
cwd,
|
|
25
|
+
maxOutputBytes: 64 * 1024 * 1024,
|
|
26
|
+
}), allowed);
|
|
27
|
+
/** `<sha>\t<date>` as a commit. */
|
|
28
|
+
const commitAt = (line) => {
|
|
29
|
+
const parts = line.split("\t");
|
|
30
|
+
return { commit: nth(parts, 0), date: nth(parts, 1) };
|
|
31
|
+
};
|
|
32
|
+
/** The `i`th of `parts`, "" when there are fewer. */
|
|
33
|
+
const nth = (parts, i) => parts.slice(i, i + 1).join("");
|
|
34
|
+
/**
|
|
35
|
+
* The first commit of each path in `git log --reverse --format=%x01%H%x09%cI --name-only` output:
|
|
36
|
+
* a line starting with \x01 opens a commit, the lines after it name its files.
|
|
37
|
+
*/
|
|
38
|
+
export const firstCommitsOf = (log) => log
|
|
39
|
+
.split("\x01")
|
|
40
|
+
.slice(1)
|
|
41
|
+
.reduce((seen, block) => {
|
|
42
|
+
const lines = block.split("\n");
|
|
43
|
+
const at = commitAt(nth(lines, 0));
|
|
44
|
+
const names = lines.slice(1);
|
|
45
|
+
return names
|
|
46
|
+
.filter((n) => n !== "" && !seen.has(n))
|
|
47
|
+
.reduce((m, n) => new Map([...m, [n, at]]), seen);
|
|
48
|
+
}, new Map());
|
|
49
|
+
/** The committed state of files. */
|
|
50
|
+
export function gitHistory(run, env) {
|
|
51
|
+
const git = gitIn(run, env);
|
|
52
|
+
return {
|
|
53
|
+
committed: (paper, file) => {
|
|
54
|
+
const log = git(paper, ["log", "-1", "--format=%H%x09%cI", "--", file]);
|
|
55
|
+
if ("why" in log)
|
|
56
|
+
return { kind: "unknown", why: log.why };
|
|
57
|
+
const { commit, date } = commitAt(log.out.trim());
|
|
58
|
+
if (commit === "")
|
|
59
|
+
return { kind: "not-committed" };
|
|
60
|
+
// `git log -1` names a deleting commit too, and a deleted file leaves a clean status.
|
|
61
|
+
const head = inHead(git, paper, file);
|
|
62
|
+
if ("why" in head)
|
|
63
|
+
return { kind: "unknown", why: head.why };
|
|
64
|
+
if (!head.present)
|
|
65
|
+
return { kind: "deleted", commit };
|
|
66
|
+
const status = git(paper, ["status", "--porcelain=v1", "--", file]);
|
|
67
|
+
if ("why" in status)
|
|
68
|
+
return { kind: "unknown", why: status.why };
|
|
69
|
+
return status.out.trim() === ""
|
|
70
|
+
? { kind: "committed", commit, date }
|
|
71
|
+
: { kind: "changed", commit };
|
|
72
|
+
},
|
|
73
|
+
order: (studyDir, decision) => orderIn(git, studyDir, decision),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/** Whether `file` is in HEAD's tree (`git ls-tree`, which takes an absolute path in the worktree). */
|
|
77
|
+
const inHead = (git, cwd, file) => {
|
|
78
|
+
const t = git(cwd, ["ls-tree", "--name-only", "HEAD", "--", file]);
|
|
79
|
+
return "why" in t ? t : { present: t.out.trim() !== "" };
|
|
80
|
+
};
|
|
81
|
+
/** The decision's first commit (null: never committed), and whether HEAD's tree still holds it. */
|
|
82
|
+
const decisionIn = (git, studyDir, decision) => {
|
|
83
|
+
const d = git(studyDir, ["log", "--format=%H%x09%cI", "--", decision]);
|
|
84
|
+
if ("why" in d)
|
|
85
|
+
return d;
|
|
86
|
+
const lines = d.out.trim().split("\n");
|
|
87
|
+
const first = commitAt(nth(lines, lines.length - 1));
|
|
88
|
+
if (first.commit === "")
|
|
89
|
+
return { at: null, deleted: false };
|
|
90
|
+
const head = inHead(git, studyDir, decision);
|
|
91
|
+
return "why" in head ? head : { at: first, deleted: !head.present };
|
|
92
|
+
};
|
|
93
|
+
/** The order facts of the study in `studyDir`, decided by `decision`. */
|
|
94
|
+
function orderIn(git, studyDir, decision) {
|
|
95
|
+
const shallow = git(studyDir, ["rev-parse", "--is-shallow-repository"]);
|
|
96
|
+
if ("why" in shallow)
|
|
97
|
+
return { kind: "unknown", why: shallow.why };
|
|
98
|
+
if (shallow.out.trim() === "true")
|
|
99
|
+
return { kind: "shallow" };
|
|
100
|
+
const d = decisionIn(git, studyDir, decision);
|
|
101
|
+
if ("why" in d)
|
|
102
|
+
return { kind: "unknown", why: d.why };
|
|
103
|
+
const files = git(studyDir, [
|
|
104
|
+
"log",
|
|
105
|
+
"--reverse",
|
|
106
|
+
"--format=%x01%H%x09%cI",
|
|
107
|
+
"--name-only",
|
|
108
|
+
"--relative",
|
|
109
|
+
"--",
|
|
110
|
+
".",
|
|
111
|
+
]);
|
|
112
|
+
if ("why" in files)
|
|
113
|
+
return { kind: "unknown", why: files.why };
|
|
114
|
+
const ordered = ordersOf(git, studyDir, d.at, firstCommitsOf(files.out));
|
|
115
|
+
return "why" in ordered
|
|
116
|
+
? { kind: "unknown", why: ordered.why }
|
|
117
|
+
: {
|
|
118
|
+
kind: "read",
|
|
119
|
+
decision: d.at,
|
|
120
|
+
decisionDeleted: d.deleted,
|
|
121
|
+
files: ordered.files,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const isFailed = (a) => "why" in a;
|
|
125
|
+
const isOrdered = (a) => "order" in a;
|
|
126
|
+
/** The order of `commit` against `decision`'s first commit. */
|
|
127
|
+
const answerFor = (git, cwd, decision, commit) => {
|
|
128
|
+
if (decision === null)
|
|
129
|
+
return { commit, order: "not-after" };
|
|
130
|
+
if (commit === decision.commit)
|
|
131
|
+
return { commit, order: "same" };
|
|
132
|
+
const a = git(cwd, ["merge-base", "--is-ancestor", decision.commit, commit], [0, 1]);
|
|
133
|
+
if ("why" in a)
|
|
134
|
+
return { commit, why: a.why };
|
|
135
|
+
return { commit, order: a.status === 0 ? "after" : "not-after" };
|
|
136
|
+
};
|
|
137
|
+
/** Each file's first commit with its order against `decision`'s; git asked once per distinct commit. */
|
|
138
|
+
function ordersOf(git, cwd, decision, firsts) {
|
|
139
|
+
const answers = [...new Set([...firsts.values()].map((c) => c.commit))].map((c) => answerFor(git, cwd, decision, c));
|
|
140
|
+
const failed = answers.find(isFailed);
|
|
141
|
+
if (failed !== undefined)
|
|
142
|
+
return { why: failed.why };
|
|
143
|
+
return {
|
|
144
|
+
files: answers
|
|
145
|
+
.filter(isOrdered)
|
|
146
|
+
.flatMap(({ commit, order }) => [...firsts]
|
|
147
|
+
.filter(([, c]) => c.commit === commit)
|
|
148
|
+
.map(([path, c]) => ({ path, ...c, order }))),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/git/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Download } from "../../ports/download.ts";
|
|
2
2
|
import type { Files } from "../../ports/files.ts";
|
|
3
3
|
import type { ListDir } from "../../ports/talk-media.ts";
|
|
4
|
+
import type { ListEntries } from "../../ports/list-entries.ts";
|
|
4
5
|
import type { Command, ProcessExit, RunProcess } from "../../ports/process.ts";
|
|
5
6
|
import type { Workspace } from "../../ports/workspace.ts";
|
|
6
7
|
export interface ScriptedProcess extends RunProcess {
|
|
@@ -16,6 +17,11 @@ export interface MemoryFiles extends Files {
|
|
|
16
17
|
export declare function memoryFiles(initial?: Readonly<Record<string, string | Uint8Array>>): MemoryFiles;
|
|
17
18
|
/** `ListDir` over `memoryFiles`: the names directly under a directory, none when it holds no file. */
|
|
18
19
|
export declare const memoryListDir: (files: MemoryFiles) => ListDir;
|
|
20
|
+
/**
|
|
21
|
+
* `ListEntries` over `memoryFiles`: each name directly under a directory, a file when it is one, else a
|
|
22
|
+
* directory. Memory holds no links: the walk's refusal to follow one is the node adapter's to show.
|
|
23
|
+
*/
|
|
24
|
+
export declare const memoryListEntries: (files: MemoryFiles) => ListEntries;
|
|
19
25
|
export interface MemoryWorkspace extends Workspace {
|
|
20
26
|
/** Every file written into a scratch directory, in order. */
|
|
21
27
|
readonly written: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/memory/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAwB,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGhF,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;CAC3B;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,WAAW,GAClC,eAAe,CASjB;AAED,kDAAkD;AAClD,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,eAAU,KAAG,WAKtD,CAAC;AAEH,MAAM,WAAW,WAAY,SAAQ,KAAK;IACxC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACvC;AAED,wBAAgB,WAAW,CACzB,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAM,GAC1D,WAAW,CAYb;AAED,sGAAsG;AACtG,eAAO,MAAM,aAAa,GACvB,OAAO,WAAW,KAAG,OAYrB,CAAC;AAEJ,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KAChC,EAAE,CAAC;IACJ,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC;CAC1C;AAED,wBAAgB,eAAe,CAAC,GAAG,SAAa,GAAG,eAAe,CAyBjE;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,uGAAuG;AACvG,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtD,aAAa,CAUf;AAED,4FAA4F;AAC5F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,IAAI,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAQxE"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/memory/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAwB,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGhF,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;CAC3B;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,WAAW,GAClC,eAAe,CASjB;AAED,kDAAkD;AAClD,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,EAAE,eAAU,KAAG,WAKtD,CAAC;AAEH,MAAM,WAAW,WAAY,SAAQ,KAAK;IACxC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACvC;AAED,wBAAgB,WAAW,CACzB,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAM,GAC1D,WAAW,CAYb;AAED,sGAAsG;AACtG,eAAO,MAAM,aAAa,GACvB,OAAO,WAAW,KAAG,OAYrB,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC3B,OAAO,WAAW,KAAG,WAKjB,CAAC;AAER,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KAChC,EAAE,CAAC;IACJ,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC;CAC1C;AAED,wBAAgB,eAAe,CAAC,GAAG,SAAa,GAAG,eAAe,CAyBjE;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,uGAAuG;AACvG,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtD,aAAa,CAUf;AAED,4FAA4F;AAC5F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,IAAI,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAQxE"}
|
|
@@ -41,6 +41,14 @@ export const memoryListDir = (files) => (dir) => [
|
|
|
41
41
|
.split("/", 1)
|
|
42
42
|
.join(""))),
|
|
43
43
|
];
|
|
44
|
+
/**
|
|
45
|
+
* `ListEntries` over `memoryFiles`: each name directly under a directory, a file when it is one, else a
|
|
46
|
+
* directory. Memory holds no links: the walk's refusal to follow one is the node adapter's to show.
|
|
47
|
+
*/
|
|
48
|
+
export const memoryListEntries = (files) => (dir) => memoryListDir(files)(dir).map((name) => ({
|
|
49
|
+
name,
|
|
50
|
+
kind: files.isFile(absolutePath(`${dir}/${name}`)) ? "file" : "dir",
|
|
51
|
+
}));
|
|
44
52
|
export function memoryWorkspace(dir = "/scratch") {
|
|
45
53
|
const written = [];
|
|
46
54
|
const ended = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/memory/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/memory/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,4 +23,5 @@ export { nodeFiles } from "./files.io.ts";
|
|
|
23
23
|
export { spawnProcess, type SpawnSync } from "./process.io.ts";
|
|
24
24
|
export { hostDirs } from "./host.io.ts";
|
|
25
25
|
export { nodeListDir } from "./list-dir.io.ts";
|
|
26
|
+
export { nodeListEntries } from "./list-entries.io.ts";
|
|
26
27
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG/D,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC5B;AAED,8CAA8C;AAC9C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAM7D;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG/D,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC5B;AAED,8CAA8C;AAC9C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAM7D;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -12,4 +12,5 @@ export { nodeFiles } from "./files.io.js";
|
|
|
12
12
|
export { spawnProcess } from "./process.io.js";
|
|
13
13
|
export { hostDirs } from "./host.io.js";
|
|
14
14
|
export { nodeListDir } from "./list-dir.io.js";
|
|
15
|
+
export { nodeListEntries } from "./list-entries.io.js";
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/node/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAgBjD,MAAM,UAAU,YAAY,CAAC,CAAqB;IAChD,OAAO;QACL,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1B,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/node/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAgBjD,MAAM,UAAU,YAAY,CAAC,CAAqB;IAChD,OAAO;QACL,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1B,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-entries.io.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/list-entries.io.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAQzE,eAAO,MAAM,eAAe,EAAE,WAa7B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** `ListEntries` over `node:fs`: `readdir` with its file types, which `lstat` each entry, never following a link. */
|
|
2
|
+
import { readdirSync } from "node:fs";
|
|
3
|
+
import { codeOf } from "../../domain/text.js";
|
|
4
|
+
/** What a directory entry is, its link never followed. */
|
|
5
|
+
const kindOf = (d) => {
|
|
6
|
+
if (d.isSymbolicLink())
|
|
7
|
+
return "symlink";
|
|
8
|
+
return d.isDirectory() ? "dir" : "file";
|
|
9
|
+
};
|
|
10
|
+
export const nodeListEntries = (dir) => {
|
|
11
|
+
try {
|
|
12
|
+
return readdirSync(dir, { withFileTypes: true }).map((d) => ({
|
|
13
|
+
name: d.name,
|
|
14
|
+
kind: kindOf(d),
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
catch (e) {
|
|
18
|
+
const code = codeOf(e);
|
|
19
|
+
if (code === "ENOENT" || code === "ENOTDIR")
|
|
20
|
+
return [];
|
|
21
|
+
throw e;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=list-entries.io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-entries.io.js","sourceRoot":"","sources":["../../../src/adapters/node/list-entries.io.ts"],"names":[],"mappings":"AAAA,qHAAqH;AACrH,OAAO,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,0DAA0D;AAC1D,MAAM,MAAM,GAAG,CAAC,CAAmB,EAAoB,EAAE;IACvD,IAAI,CAAC,CAAC,cAAc,EAAE;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAgB,CAC1C,GAAiB,EACI,EAAE;IACvB,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;SAChB,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACvD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -12,9 +12,14 @@
|
|
|
12
12
|
* Its texts may be empty — the template's are — and the parser says which: a plan comes out ready or
|
|
13
13
|
* a draft naming its empty texts, so nothing downstream looks at a text again. A plan still named
|
|
14
14
|
* `prereg.json` has a loose schema of its own.
|
|
15
|
+
*
|
|
16
|
+
* A plan's `mode` (docs/design/study-modes.md) is parsed here too, strictly, a union on its `kind`:
|
|
17
|
+
* one mode at most, a glob that leaves the study's folder or a decision outside the paper refused,
|
|
18
|
+
* and a measurement's plan ready only with a mode.
|
|
15
19
|
*/
|
|
16
20
|
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";
|
|
21
|
+
import { type Approval, type AuthorCheck, type Measurement, type ParsedPlan, type ParsedRegistry, type Requirement, type Study, type PlanTextField, type StudyKind, type StudyPlan, type StudyRegistry } from "../../domain/study-registry.ts";
|
|
22
|
+
import { type Decision, type StudyMode } from "../../domain/study-mode.ts";
|
|
18
23
|
import type { StudyRegistryCodec } from "../../ports/study-registry-codec.ts";
|
|
19
24
|
declare const study: z.ZodObject<{
|
|
20
25
|
id: z.ZodString;
|
|
@@ -141,6 +146,22 @@ declare const authorCheck: z.ZodObject<{
|
|
|
141
146
|
date: z.ZodISODate;
|
|
142
147
|
quote: z.ZodString;
|
|
143
148
|
}, z.core.$strict>;
|
|
149
|
+
declare const decisionShape: z.ZodObject<{
|
|
150
|
+
file: z.ZodString;
|
|
151
|
+
note: z.ZodString;
|
|
152
|
+
}, z.core.$strict>;
|
|
153
|
+
/** How the outcomes are kept from the decisions: exactly one mode, by its `kind`. */
|
|
154
|
+
declare const mode: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
155
|
+
kind: z.ZodLiteral<"decide_before_run">;
|
|
156
|
+
outputs: z.ZodArray<z.ZodString>;
|
|
157
|
+
decision: z.ZodObject<{
|
|
158
|
+
file: z.ZodString;
|
|
159
|
+
note: z.ZodString;
|
|
160
|
+
}, z.core.$strict>;
|
|
161
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
162
|
+
kind: z.ZodLiteral<"exploratory">;
|
|
163
|
+
reason: z.ZodString;
|
|
164
|
+
}, z.core.$strict>], "kind">;
|
|
144
165
|
/** A plan's shape: closed at every level; the paper's own keys go in `extra`. Null is the one "none". */
|
|
145
166
|
declare const planShape: z.ZodObject<{
|
|
146
167
|
question: z.ZodString;
|
|
@@ -165,6 +186,17 @@ declare const planShape: z.ZodObject<{
|
|
|
165
186
|
quote: z.ZodString;
|
|
166
187
|
}, z.core.$strict>>;
|
|
167
188
|
extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
189
|
+
mode: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
190
|
+
kind: z.ZodLiteral<"decide_before_run">;
|
|
191
|
+
outputs: z.ZodArray<z.ZodString>;
|
|
192
|
+
decision: z.ZodObject<{
|
|
193
|
+
file: z.ZodString;
|
|
194
|
+
note: z.ZodString;
|
|
195
|
+
}, z.core.$strict>;
|
|
196
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
197
|
+
kind: z.ZodLiteral<"exploratory">;
|
|
198
|
+
reason: z.ZodString;
|
|
199
|
+
}, z.core.$strict>], "kind">>;
|
|
168
200
|
}, z.core.$strict>;
|
|
169
201
|
/**
|
|
170
202
|
* A plan under its old name, `prereg.json`, written by hand before the plan had a schema: open at
|
|
@@ -216,8 +248,8 @@ declare const legacyAsPlan: z.ZodPipe<z.ZodObject<{
|
|
|
216
248
|
type ReadyOrDraft = Exclude<ParsedPlan, {
|
|
217
249
|
readonly kind: "unreadable";
|
|
218
250
|
}>;
|
|
219
|
-
/** A `plan.json`: strict, then ready or draft. */
|
|
220
|
-
declare const
|
|
251
|
+
/** A `plan.json` of a study of `kind`: strict, then ready or draft — a measurement's ready only with its mode. */
|
|
252
|
+
declare const planFor: (kind: StudyKind) => z.ZodPipe<z.ZodObject<{
|
|
221
253
|
question: z.ZodString;
|
|
222
254
|
population: z.ZodObject<{
|
|
223
255
|
source: z.ZodString;
|
|
@@ -240,13 +272,24 @@ declare const plan: z.ZodPipe<z.ZodObject<{
|
|
|
240
272
|
quote: z.ZodString;
|
|
241
273
|
}, z.core.$strict>>;
|
|
242
274
|
extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
275
|
+
mode: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
276
|
+
kind: z.ZodLiteral<"decide_before_run">;
|
|
277
|
+
outputs: z.ZodArray<z.ZodString>;
|
|
278
|
+
decision: z.ZodObject<{
|
|
279
|
+
file: z.ZodString;
|
|
280
|
+
note: z.ZodString;
|
|
281
|
+
}, z.core.$strict>;
|
|
282
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
283
|
+
kind: z.ZodLiteral<"exploratory">;
|
|
284
|
+
reason: z.ZodString;
|
|
285
|
+
}, z.core.$strict>], "kind">>;
|
|
243
286
|
}, z.core.$strict>, z.ZodTransform<{
|
|
244
287
|
readonly kind: "ready";
|
|
245
288
|
readonly plan: StudyPlan;
|
|
246
289
|
} | {
|
|
247
290
|
readonly kind: "draft";
|
|
248
291
|
readonly plan: import("../../domain/study-registry.ts").DraftPlan;
|
|
249
|
-
readonly empty: readonly
|
|
292
|
+
readonly empty: readonly PlanTextField[];
|
|
250
293
|
}, {
|
|
251
294
|
question: string;
|
|
252
295
|
population: {
|
|
@@ -270,8 +313,23 @@ declare const plan: z.ZodPipe<z.ZodObject<{
|
|
|
270
313
|
quote: string;
|
|
271
314
|
} | null;
|
|
272
315
|
extra?: Record<string, unknown> | undefined;
|
|
316
|
+
mode?: {
|
|
317
|
+
kind: "decide_before_run";
|
|
318
|
+
outputs: string[];
|
|
319
|
+
decision: {
|
|
320
|
+
file: string;
|
|
321
|
+
note: string;
|
|
322
|
+
};
|
|
323
|
+
} | {
|
|
324
|
+
kind: "exploratory";
|
|
325
|
+
reason: string;
|
|
326
|
+
} | undefined;
|
|
273
327
|
}>>;
|
|
274
|
-
/**
|
|
328
|
+
/**
|
|
329
|
+
* A `prereg.json`: loose, mapped onto the plan, then ready or draft. Written before modes existed, it
|
|
330
|
+
* is never asked for one; `repro/study-plan-name` already asks to move it to `plan.json`, where the
|
|
331
|
+
* strict parser does.
|
|
332
|
+
*/
|
|
275
333
|
declare const legacyPlan: z.ZodPipe<z.ZodPipe<z.ZodObject<{
|
|
276
334
|
question: z.ZodString;
|
|
277
335
|
population: z.ZodObject<{
|
|
@@ -318,7 +376,7 @@ declare const legacyPlan: z.ZodPipe<z.ZodPipe<z.ZodObject<{
|
|
|
318
376
|
} | {
|
|
319
377
|
readonly kind: "draft";
|
|
320
378
|
readonly plan: import("../../domain/study-registry.ts").DraftPlan;
|
|
321
|
-
readonly empty: readonly
|
|
379
|
+
readonly empty: readonly PlanTextField[];
|
|
322
380
|
}, StudyPlan>>;
|
|
323
381
|
/** `T`, readonly all the way down: zod's outputs are mutable, the domain's are not. */
|
|
324
382
|
type Frozen<T> = T extends readonly (infer U)[] ? readonly Frozen<U>[] : T extends object ? {
|
|
@@ -341,15 +399,17 @@ export type SchemasAreTheDomain = [
|
|
|
341
399
|
Same<z.output<typeof authorCheck>, AuthorCheck>,
|
|
342
400
|
Same<z.output<typeof planShape>, StudyPlan>,
|
|
343
401
|
Same<z.output<typeof legacyAsPlan>, StudyPlan>,
|
|
344
|
-
Same<z.output<typeof
|
|
345
|
-
Same<z.output<typeof legacyPlan>, ReadyOrDraft
|
|
402
|
+
Same<z.output<ReturnType<typeof planFor>>, ReadyOrDraft>,
|
|
403
|
+
Same<z.output<typeof legacyPlan>, ReadyOrDraft>,
|
|
404
|
+
Same<z.output<typeof mode>, StudyMode>,
|
|
405
|
+
Same<z.output<typeof decisionShape>, Decision>
|
|
346
406
|
] extends true[] ? true : never;
|
|
347
407
|
/** The proof is used, so the build checks it. */
|
|
348
408
|
export declare const SCHEMAS_ARE_THE_DOMAIN: SchemasAreTheDomain;
|
|
349
409
|
/** A `studies.json`'s text, parsed once at the boundary: the registry, or every reason it is not one. */
|
|
350
410
|
export declare function parseStudyRegistry(text: string): ParsedRegistry;
|
|
351
|
-
/** A `plan.json`: strict. */
|
|
352
|
-
export declare const parseStudyPlan: (text: string) => ParsedPlan;
|
|
411
|
+
/** A `plan.json` of a study of `kind`: strict. */
|
|
412
|
+
export declare const parseStudyPlan: (text: string, kind: StudyKind) => ParsedPlan;
|
|
353
413
|
/** A plan still named `prereg.json`: loose, read only when a row names it. */
|
|
354
414
|
export declare const parseLegacyPlan: (text: string) => ParsedPlan;
|
|
355
415
|
export declare const studyRegistryCodec: StudyRegistryCodec;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/study-registry/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/study-registry/index.ts"],"names":[],"mappings":"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"}
|