halfcycle 0.5.3 → 0.7.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.
@@ -478,7 +478,7 @@ halfcycle_pt_branch() {
478
478
  done
479
479
  }
480
480
  halfcycle_pt_time_line() {
481
- local LC_ALL=C hc_val hc_id hc_home hc_folder hc_branch hc_at hc_secs hc_frac hc_dir hc_line hc_f_session_id hc_f_agent_id hc_f_transcript_path hc_f_tool_use_id
481
+ local LC_ALL=C hc_val hc_id hc_home hc_folder hc_branch hc_at hc_secs hc_frac hc_dir hc_line hc_f_session_id hc_f_agent_id hc_f_transcript_path hc_f_tool_use_id hc_f_rollout_path
482
482
  local hc_re='^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$'
483
483
  [ -n "${GUARD_SERVICE_TOKEN:-}" ] || return 0
484
484
  [ -n "${GUARD_ENGAGEMENT_ID:-}" ] || return 0
@@ -494,6 +494,10 @@ halfcycle_pt_time_line() {
494
494
  hc_f_transcript_path=$hc_val
495
495
  halfcycle_pt_optional 'tool_use_id' || return 1
496
496
  hc_f_tool_use_id=$hc_val
497
+ case ${hc_pt_agent:-} in
498
+ '') hc_f_rollout_path=null ;;
499
+ *) hc_f_rollout_path=$hc_f_transcript_path hc_f_transcript_path=null ;;
500
+ esac
497
501
  halfcycle_pt_string cwd
498
502
  case $? in
499
503
  0) hc_folder=$hc_val ;;
@@ -508,7 +512,7 @@ halfcycle_pt_time_line() {
508
512
  fi
509
513
  halfcycle_pt_branch "$hc_folder" || return 1
510
514
  halfcycle_pt_stamp "$1" || return 1
511
- printf -v hc_line '{"at":"%s","event":"action","session":%s,"agent":%s,"folder":"%s","branch":%s,"transcript":%s,"toolUse":%s}' "$hc_at" "$hc_f_session_id" "$hc_f_agent_id" "$hc_folder" "$hc_branch" "$hc_f_transcript_path" "$hc_f_tool_use_id"
515
+ printf -v hc_line '{"at":"%s","event":"action","session":%s,"agent":%s,"folder":"%s","branch":%s,"transcript":%s,"toolUse":%s,"rollout":%s}' "$hc_at" "$hc_f_session_id" "$hc_f_agent_id" "$hc_folder" "$hc_branch" "$hc_f_transcript_path" "$hc_f_tool_use_id" "$hc_f_rollout_path"
512
516
  hc_dir=$hc_home/.halfcycle/engagements/$hc_id/time-log
513
517
  umask 077
514
518
  { printf '%s\n' "$hc_line" >> "$hc_dir/events.jsonl"; } 2>/dev/null ||
package/dist/bin.js CHANGED
File without changes
@@ -0,0 +1,57 @@
1
+ /**
2
+ * `npx halfcycle@latest check-criteria [<record file>] [--repo <root>]`
3
+ * (`whole-phase-criteria-check` AC4, M1–M7; `edge-case-criteria` AC5, M8 and M9).
4
+ *
5
+ * OFFLINE, ALWAYS. This verb reads only files on the person's own machine — the
6
+ * plan file `docs/build-records/task-plan.json`, each spec file the plan lists in
7
+ * `specs` (`docs/features/<name>.md`, once per name), and the criteria record, which
8
+ * is `docs/build-records/criteria-check.json` unless a file is named — and nothing
9
+ * else. It opens no credential file, makes no network call, and needs no sign-in.
10
+ *
11
+ * ONE HOME FOR EACH THING IT READS. The plan is parsed with `taskPlanSchema` through
12
+ * `check-tasks.ts`'s `readJsonFile`, as `check-tasks` and `ready` read it; the spec
13
+ * files are opened only by `readPlanSpecFiles`; the record only by
14
+ * `readCriteriaRecordFile`, through the wire's own schema for it. The rules M1–M9, the
15
+ * clear line and every line's words are `checkCriteriaRecord` (`@halfcycle/core`),
16
+ * which is pure. This module's whole job is reading the files, handing them over,
17
+ * and turning the answer into an exit code: 0 clean, 1 any line, 2 a usage error or a
18
+ * file that is missing, cannot be read, is not JSON or does not match its shape
19
+ * (naming the file and where), as `check-tasks` does.
20
+ *
21
+ * A NAMED RECORD FILE is read from the project's top folder when it is a relative
22
+ * path, or as it is when absolute, and every line names it as it was typed.
23
+ *
24
+ * SHIPS TO CLIENT DISK inside the CLI (INV-001: Node builtins, `@halfcycle/core` and
25
+ * `@halfcycle/events` only, through `check-tasks.ts`). Every string here is a sentence
26
+ * a person reads in their own terminal; no comment sits beside an object member.
27
+ */
28
+ /** The usage line, printed for an extra argument or an unknown flag. */
29
+ export declare const CHECK_CRITERIA_USAGE = "npx halfcycle@latest check-criteria [<record file>] [--repo <root>]";
30
+ /**
31
+ * What the arguments after `check-criteria` came to: at most one positional (the
32
+ * record file) and at most one `--repo <root>`; anything else is usage.
33
+ */
34
+ export type CheckCriteriaArgs = {
35
+ ok: true;
36
+ file: string | undefined;
37
+ repoRoot: string | undefined;
38
+ } | {
39
+ ok: false;
40
+ };
41
+ export declare function parseCheckCriteriaArgs(argv: readonly string[]): CheckCriteriaArgs;
42
+ /** The sentence for a record file that is not there, without the verb's prefix. */
43
+ export declare function missingRecordLine(file: string): string;
44
+ /** What a run of the verb came to. */
45
+ export interface CheckCriteriaRun {
46
+ readonly stdout: string;
47
+ readonly stderr: string;
48
+ readonly exitCode: number;
49
+ }
50
+ /**
51
+ * The whole verb. Reads the plan under `repoRoot`, the specs it lists, and the record
52
+ * (`file`, or `docs/build-records/criteria-check.json`), hands them to
53
+ * `checkCriteriaRecord` and prints its lines, one per line, in the order it returns
54
+ * them, or its clear line when nothing refuses. Never throws.
55
+ */
56
+ export declare function runCheckCriteria(repoRoot: string, file: string | undefined): CheckCriteriaRun;
57
+ //# sourceMappingURL=check-criteria.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-criteria.d.ts","sourceRoot":"","sources":["../src/check-criteria.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAYH,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,wEAAwE,CAAC;AAE1G;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACpE;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC;AAElB,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,iBAAiB,CAiBjF;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAoB7F"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * `npx halfcycle@latest check-report <file | -> --head <sha>` (`checked-worker-reports`
3
+ * AC2).
4
+ *
5
+ * A coordinator saves a pull request's body to a file (or pipes it in as `-`) and
6
+ * runs this before it writes any task's state from the worker's report. It prints
7
+ * one plain line per problem, or one clear line, and exits 0 when the report
8
+ * passes, 1 when it is refused, 2 on a usage error or a file it cannot read.
9
+ *
10
+ * OFFLINE, ALWAYS. This verb reads the one file it is given, or standard input,
11
+ * and nothing else. It opens no credential file, makes no network call and needs
12
+ * no sign-in: the commit to compare with is handed to it as `--head`, so it never
13
+ * asks git or GitHub which commit that is.
14
+ *
15
+ * ONE HOME FOR THE RULES. `checkWorkerReport` (`@halfcycle/core`) holds the
16
+ * block reader, the rules and every line they print; this module only reads the
17
+ * text, passes it the four statuses of the served report block and the head, and
18
+ * turns what it returns into lines and an exit code.
19
+ *
20
+ * SHIPS TO CLIENT DISK inside the CLI: Node builtins and `@halfcycle/core` only.
21
+ * Every string here is a sentence a person reads in their own terminal, so none
22
+ * names an internal register, a route or this project's own tooling; no comment
23
+ * sits beside an object member.
24
+ */
25
+ /** The usage line, printed for a missing report, an extra argument or an unknown flag. */
26
+ export declare const CHECK_REPORT_USAGE = "npx halfcycle@latest check-report <file | -> --head <sha>";
27
+ /** What the arguments after `check-report` came to: one report source and one head, or usage. */
28
+ export type CheckReportArgs = {
29
+ ok: true;
30
+ source: string;
31
+ head: string;
32
+ } | {
33
+ ok: false;
34
+ };
35
+ /**
36
+ * Exactly one positional (a file, or `-` for standard input) and exactly one
37
+ * `--head <sha>`; anything else is usage. A missing `--head` is refused before
38
+ * this is called, from the CLI's table of required flags.
39
+ */
40
+ export declare function parseCheckReportArgs(argv: readonly string[]): CheckReportArgs;
41
+ /** What a run of the verb came to. */
42
+ export interface CheckReportRun {
43
+ readonly stdout: string;
44
+ readonly stderr: string;
45
+ readonly exitCode: number;
46
+ }
47
+ /** Where the report's text comes from; standard input is read only for `-`. */
48
+ export interface CheckReportDeps {
49
+ readonly readStdin?: () => string;
50
+ }
51
+ /**
52
+ * The whole verb. Reads the report from `source` (standard input for `-`),
53
+ * checks it against `head` with the four statuses of the served block, and
54
+ * prints each problem's line, or the clear line. Never throws. A short `--head`
55
+ * is refused first, with exit 2, before the report is read.
56
+ */
57
+ export declare function runCheckReport(source: string, head: string, deps?: CheckReportDeps): CheckReportRun;
58
+ //# sourceMappingURL=check-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-report.d.ts","sourceRoot":"","sources":["../src/check-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAUH,0FAA0F;AAC1F,eAAO,MAAM,kBAAkB,8DAA8D,CAAC;AAE9F,iGAAiG;AACjG,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC;AAEzF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,CAiB7E;AAED,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CACnC;AASD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,cAAc,CA2BvG"}
@@ -2,9 +2,12 @@
2
2
  * `npx halfcycle@latest check-tasks <phase> [--with-task-list] [--repo <root>]`
3
3
  * (`collision-free-parallel-work` AC3; `checks-as-work-lands` AC3, AC6).
4
4
  *
5
- * OFFLINE, ALWAYS. This verb reads at most three files on the person's own machine —
6
- * `docs/build-records/task-plan.json`, `docs/system.json` when it is there, and, with
7
- * `--with-task-list`, `docs/build-records/build-tasks.json` — and nothing else. It opens no credential
5
+ * OFFLINE, ALWAYS. This verb reads only files on the person's own machine —
6
+ * `docs/build-records/task-plan.json`, `docs/system.json` when it is there, the
7
+ * phase's plan file in `docs/phases/` when it is there, each
8
+ * spec file the plan lists in `specs` (`docs/features/<name>.md`, once per name), the
9
+ * newest criteria record at `docs/build-records/criteria-check.json` when it is there,
10
+ * and, with `--with-task-list`, `docs/build-records/build-tasks.json` — and nothing else. It opens no credential
8
11
  * file, makes no network call, and needs no sign-in. Everything it prints comes from
9
12
  * `checkTaskPlan` (`@halfcycle/core`), which is pure: this module's whole job is
10
13
  * reading the files, handing them to that function, and printing what it returns.
@@ -38,13 +41,51 @@
38
41
  * description that is broken, and passing it silently would let through the very
39
42
  * plan this rule exists to catch.
40
43
  *
44
+ * THE PHASE'S OWN PLAN NAMES THE PARTS IT CHANGES (O8, issues #2339 and #2354). When
45
+ * the description passed its check and the phase's plan file (`planFileRel`, the plan
46
+ * verb's one home of that name) is there, reads as JSON, is for this phase and passes
47
+ * the plan verb's own check against that description (`checkPhasePlan`), its parts go
48
+ * to `checkTaskPlan`, which refuses a task building a part outside them with no
49
+ * reason. A missing plan says nothing: this verb runs while the plan may not be
50
+ * written yet. A plan that is there but falls short in any of those ways goes to
51
+ * `checkTaskPlan` as unusable, with why, and is refused there in one O8 line, in the
52
+ * order the plan verb names the same faults (`readAndCheckPlan`): it could not be
53
+ * opened, it is not JSON, it names another phase, then the check's problems. It is a
54
+ * refusal, not a stop (exit 1, every other line still printed), because the plan
55
+ * itself is still worth checking; but never a silent pass, because a typo in the
56
+ * phase plan would otherwise turn the not-in-plan rule off with the clear line
57
+ * printed.
58
+ *
59
+ * THE LISTED SPECS NAME THE CRITERIA (C1–C6, `criteria-coverage`). `readPlanSpecFiles`
60
+ * is the one place spec files are opened: for each name `planSpecNamesToRead` gives
61
+ * (a name that passed the spec-name rule, each once, in the plan's order) it reads
62
+ * `<spec folder>/<name>.md` and hands the criteria `readSpecCriteria` finds, and the
63
+ * Boundary section `readSpecBoundary` reads (B1, B2, N2, N3, `spec-boundaries`), to
64
+ * `checkTaskPlan`. The spec folder is the one the scan already knows for feature
65
+ * designs (`LAYER_ARTEFACT_PATHS`), not a second copy. A missing file is not an
66
+ * error here: the check names it (C6). A file that is there and cannot be read
67
+ * stops the run with exit 2, naming it, as an unreadable plan does.
68
+ *
69
+ * THE NEWEST CRITERIA RECORD HOLDS THE WALK (V6, `whole-phase-criteria-check` AC3).
70
+ * `readCriteriaRecordFile` is the one place a record file is opened, and parses it with
71
+ * the wire's own schema for the record (`workCriteriaRecordSchema`), never a second
72
+ * one; `readCriteriaRecord`, which both callers of `checkTaskPlan` (this verb and
73
+ * `ready`) use, and the `check-criteria` verb (`check-criteria.ts`) both read through
74
+ * it. Missing is not an error here: there is no record yet. There, and unreadable, not
75
+ * JSON or not that shape, stops the run with exit 2 naming it, as an unreadable plan
76
+ * does. A record for another phase, or whose check is not a criteria check of this
77
+ * plan (`criteriaRecordMismatch`), is not read further (`check-criteria` names it as
78
+ * M1 or M2); otherwise its check and the task of each `fix` row go to `checkTaskPlan`.
79
+ *
41
80
  * SHIPS TO CLIENT DISK inside the CLI (INV-001: Node builtins, `@halfcycle/core` and
42
- * `@halfcycle/events` only, the latter for the description's path and check; no
81
+ * `@halfcycle/events` only, the latter for the description's and the phase plan's checks; no
43
82
  * network and no `fetch`). Every string here is
44
83
  * a sentence a person reads in their own terminal, so none names an internal
45
84
  * register, a route, or this project's own tooling; no comment sits beside an
46
85
  * object member.
47
86
  */
87
+ import { type SystemDescription, type WorkCriteriaRecord } from '@halfcycle/events';
88
+ import { type CriteriaRecordFixes, type PlanSpecFiles, type TaskPlan, type TaskPlanCheckRequest, type TaskPlanPhasePlan } from '@halfcycle/core';
48
89
  /** The usage line, printed for no phase, an extra argument or an unknown flag. */
49
90
  export declare const CHECK_TASKS_USAGE = "npx halfcycle@latest check-tasks <phase> [--with-task-list] [--repo <root>]";
50
91
  /**
@@ -61,6 +102,104 @@ export type CheckTasksArgs = {
61
102
  ok: false;
62
103
  };
63
104
  export declare function parseCheckTasksArgs(argv: readonly string[]): CheckTasksArgs;
105
+ /**
106
+ * The sentence for a project with no plan file, without any verb's prefix: this verb
107
+ * and `ready` (`ready.ts`) each print it after their own.
108
+ */
109
+ export declare const MISSING_PLAN_LINE = "there is no docs/build-records/task-plan.json in this project yet. Run the task-graph step to write it, then run this again.";
110
+ /**
111
+ * The crew roster as the plan check takes it, each member's callsign and tier, so a
112
+ * task marked `cheapFirst` is checked against its holder's tier (J2,
113
+ * `cheaper-models-first` AC2). Both verbs that check the plan hand it over.
114
+ */
115
+ export declare function planCrew(): TaskPlanCheckRequest['crew'];
116
+ /** One JSON file, read and parsed: present and valid, missing, or unreadable/unparsable (with the line to print). */
117
+ export type FileRead<T> = {
118
+ kind: 'ok';
119
+ value: T;
120
+ } | {
121
+ kind: 'missing';
122
+ } | {
123
+ kind: 'bad';
124
+ line: string;
125
+ };
126
+ /** A zod `safeParse` result, read structurally so this file never imports `zod` itself (INV-001). */
127
+ type SafeParse<T> = {
128
+ success: true;
129
+ data: T;
130
+ } | {
131
+ success: false;
132
+ error: {
133
+ issues: readonly {
134
+ path: readonly PropertyKey[];
135
+ message: string;
136
+ }[];
137
+ };
138
+ };
139
+ /**
140
+ * Read and parse one JSON file under `repoRoot` (`rel` from the project's top folder,
141
+ * or an absolute path, which is read as it is). The line in a `bad` answer carries
142
+ * no verb's prefix; this verb, `ready` (`ready.ts`) and `check-criteria`
143
+ * (`check-criteria.ts`) each add their own. Never throws.
144
+ */
145
+ export declare function readJsonFile<T>(repoRoot: string, rel: string, parse: (raw: unknown) => SafeParse<T>): FileRead<T>;
146
+ /**
147
+ * The phase's own plan, as `checkTaskPlan` takes it: where it lives and the parts its
148
+ * changes name; or where it lives and why it could not be used (it could not be
149
+ * opened, is not JSON, is the plan for another phase, or fails the plan verb's check
150
+ * against `description`); or `undefined` when there is no plan to compare with (the
151
+ * phase is not a phase name, or the file is missing). Never throws, never stops the
152
+ * run (see the module header).
153
+ */
154
+ export declare function readPhasePlanParts(repoRoot: string, phase: string, description: SystemDescription): TaskPlanPhasePlan | undefined;
155
+ /**
156
+ * The plan's listed specs, read: `ok` with the request's `specFiles`, or `bad` with
157
+ * the line naming a spec file that is there and could not be read, without any
158
+ * verb's prefix (each caller adds its own, as with `readJsonFile`'s line). A listed
159
+ * name with no file is an entry with no criteria, which the check names.
160
+ */
161
+ export type PlanSpecFilesRead = {
162
+ kind: 'ok';
163
+ specFiles: PlanSpecFiles;
164
+ } | {
165
+ kind: 'bad';
166
+ line: string;
167
+ };
168
+ /**
169
+ * The one place spec files are opened. Reads `<spec folder>/<name>.md` under
170
+ * `repoRoot` once for each name `planSpecNamesToRead` gives for `plan`, in that
171
+ * order, and returns each one's criteria as `readSpecCriteria` finds them and its
172
+ * Boundary section as `readSpecBoundary` reads it. Never throws.
173
+ */
174
+ export declare function readPlanSpecFiles(repoRoot: string, plan: TaskPlan): PlanSpecFilesRead;
175
+ /**
176
+ * The newest criteria record, read: `ok` with what `checkTaskPlan` takes from it, or
177
+ * with nothing when there is no record or it is not this plan's to read further; or
178
+ * `bad` with the line naming the file, without any verb's prefix (each caller adds its
179
+ * own, as with `readJsonFile`'s line).
180
+ */
181
+ export type CriteriaRecordRead = {
182
+ kind: 'ok';
183
+ record: CriteriaRecordFixes | undefined;
184
+ } | {
185
+ kind: 'bad';
186
+ line: string;
187
+ };
188
+ /**
189
+ * The one place a criteria record file is opened and parsed: `rel` under `repoRoot`
190
+ * (`docs/build-records/criteria-check.json` unless the caller names another, as
191
+ * `check-criteria` lets a person do), through the wire's schema for the record, never a
192
+ * second one. The `bad` line names the file as the caller named it. Never throws.
193
+ */
194
+ export declare function readCriteriaRecordFile(repoRoot: string, rel?: string): FileRead<WorkCriteriaRecord>;
195
+ /**
196
+ * The newest criteria record, as the plan check takes it. Reads
197
+ * `docs/build-records/criteria-check.json` under `repoRoot` when it is there
198
+ * (`readCriteriaRecordFile`). A record for another phase than `plan`'s, or whose check
199
+ * is not a criteria check of `plan` (`criteriaRecordMismatch`, the rule M1 and M2 of
200
+ * `check-criteria` print from), gives nothing. Never throws.
201
+ */
202
+ export declare function readCriteriaRecord(repoRoot: string, plan: TaskPlan): CriteriaRecordRead;
64
203
  /** What a run of the verb came to. */
65
204
  export interface CheckTasksRun {
66
205
  readonly stdout: string;
@@ -69,7 +208,10 @@ export interface CheckTasksRun {
69
208
  }
70
209
  /**
71
210
  * The whole verb. Reads `docs/build-records/task-plan.json` under `repoRoot`,
72
- * `docs/system.json` when it is there, and, with `withTaskList`,
211
+ * `docs/system.json` when it is there, the phase's plan file when that is there too
212
+ * (`readPhasePlanParts`), each spec file the plan lists in `specs`
213
+ * (`docs/features/<name>.md`, through `readPlanSpecFiles`), the criteria record when it
214
+ * is there (`readCriteriaRecord`), and, with `withTaskList`,
73
215
  * `docs/build-records/build-tasks.json`; hands them to
74
216
  * `checkTaskPlan` and prints its lines, one per line, in the order it returns them,
75
217
  * or `checkTaskPlan`'s own clear line when there is nothing to report. Never throws.
@@ -80,4 +222,5 @@ export interface CheckTasksRun {
80
222
  * an error (see the module header) and never changes the exit code on its own.
81
223
  */
82
224
  export declare function runCheckTasks(repoRoot: string, phase: string, withTaskList: boolean): CheckTasksRun;
225
+ export {};
83
226
  //# sourceMappingURL=check-tasks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"check-tasks.d.ts","sourceRoot":"","sources":["../src/check-tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAkBH,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,gFAAgF,CAAC;AAE/G;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAChF;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC;AAElB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAuB3E;AA8ED,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,aAAa,CAqCnG"}
1
+ {"version":3,"file":"check-tasks.d.ts","sourceRoot":"","sources":["../src/check-tasks.ts"],"names":[],"mappings":"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"}
@@ -62,7 +62,7 @@
62
62
  * home is the failure mode it exists to prevent.
63
63
  */
64
64
  /** The verbs the CLI dispatches. Anything else after `halfcycle ` is unknown. */
65
- export declare const CLI_VERBS: readonly ["install", "check-drift", "build-record", "open-phase", "close-phase", "system", "draw", "plan", "review", "check-tasks", "uninstall", "change", "pace", "prove", "preview", "doctor", "restore"];
65
+ export declare const CLI_VERBS: readonly ["install", "check-drift", "build-record", "open-phase", "close-phase", "system", "draw", "plan", "review", "check-tasks", "check-criteria", "check-report", "ready", "uninstall", "change", "pace", "route", "prove", "preview", "doctor", "restore"];
66
66
  export type CliVerb = (typeof CLI_VERBS)[number];
67
67
  /** A flag every invocation of the verb must carry. */
68
68
  export interface RequiredFlag {
@@ -1 +1 @@
1
- {"version":3,"file":"cli-contract.d.ts","sourceRoot":"","sources":["../src/cli-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAIH,iFAAiF;AACjF,eAAO,MAAM,SAAS,6MAA8M,CAAC;AAErO,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAC1C;AAwID,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAElE;AAED,iDAAiD;AACjD,MAAM,WAAW,SAAS;IACxB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAmBD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,CAyBxF;AAuBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMvE;AASD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;CAErB,CAAC;AA0BX;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAa1F"}
1
+ {"version":3,"file":"cli-contract.d.ts","sourceRoot":"","sources":["../src/cli-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAIH,iFAAiF;AACjF,eAAO,MAAM,SAAS,iQAAkQ,CAAC;AAEzR,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAC1C;AAgKD,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAElE;AAED,iDAAiD;AACjD,MAAM,WAAW,SAAS;IACxB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAmBD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,CAyBxF;AAuBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMvE;AASD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;CAErB,CAAC;AA0BX;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAa1F"}