@feigi/fleet-ctl 3.95.2 → 3.95.4

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.
@@ -240,7 +240,7 @@ including if the `Sizing:` line was written before the run and corrected after;
240
240
  `sizing.verdict` and `sizing.signal` are that line's verdict and signal.
241
241
  Nothing in the PR body separates a measured verdict from one typed in early;
242
242
  that field is the only thing that does, and an unreported ordering costs the
243
- covariate. A bail is `outcome` `bailed`, its cause in `bailCause`: the
243
+ covariate. A bail is `outcome` `bailed`, its cause in `bailCause`, with `pr` and `head` `null`: the
244
244
  pre-code outcome, before you touch code. A block or ambiguity you find after
245
245
  implementation began — the work cannot finish without a ruling or human hands
246
246
  you do not have — is `outcome` `blocked` instead, with `pr`, `head` and `bailCause` `null` and
@@ -240,7 +240,7 @@ including if the `Sizing:` line was written before the run and corrected after;
240
240
  `sizing.verdict` and `sizing.signal` are that line's verdict and signal.
241
241
  Nothing in the PR body separates a measured verdict from one typed in early;
242
242
  that field is the only thing that does, and an unreported ordering costs the
243
- covariate. A bail is `outcome` `bailed`, its cause in `bailCause`: the
243
+ covariate. A bail is `outcome` `bailed`, its cause in `bailCause`, with `pr` and `head` `null`: the
244
244
  pre-code outcome, before you touch code. A block or ambiguity you find after
245
245
  implementation began — the work cannot finish without a ruling or human hands
246
246
  you do not have — is `outcome` `blocked` instead, with `pr`, `head` and `bailCause` `null` and
@@ -240,7 +240,7 @@ including if the `Sizing:` line was written before the run and corrected after;
240
240
  `sizing.verdict` and `sizing.signal` are that line's verdict and signal.
241
241
  Nothing in the PR body separates a measured verdict from one typed in early;
242
242
  that field is the only thing that does, and an unreported ordering costs the
243
- covariate. A bail is `outcome` `bailed`, its cause in `bailCause`: the
243
+ covariate. A bail is `outcome` `bailed`, its cause in `bailCause`, with `pr` and `head` `null`: the
244
244
  pre-code outcome, before you touch code. A block or ambiguity you find after
245
245
  implementation began — the work cannot finish without a ruling or human hands
246
246
  you do not have — is `outcome` `blocked` instead, with `pr`, `head` and `bailCause` `null` and
@@ -240,7 +240,7 @@ including if the `Sizing:` line was written before the run and corrected after;
240
240
  `sizing.verdict` and `sizing.signal` are that line's verdict and signal.
241
241
  Nothing in the PR body separates a measured verdict from one typed in early;
242
242
  that field is the only thing that does, and an unreported ordering costs the
243
- covariate. A bail is `outcome` `bailed`, its cause in `bailCause`: the
243
+ covariate. A bail is `outcome` `bailed`, its cause in `bailCause`, with `pr` and `head` `null`: the
244
244
  pre-code outcome, before you touch code. A block or ambiguity you find after
245
245
  implementation began — the work cannot finish without a ruling or human hands
246
246
  you do not have — is `outcome` `blocked` instead, with `pr`, `head` and `bailCause` `null` and
@@ -240,7 +240,7 @@ including if the `Sizing:` line was written before the run and corrected after;
240
240
  `sizing.verdict` and `sizing.signal` are that line's verdict and signal.
241
241
  Nothing in the PR body separates a measured verdict from one typed in early;
242
242
  that field is the only thing that does, and an unreported ordering costs the
243
- covariate. A bail is `outcome` `bailed`, its cause in `bailCause`: the
243
+ covariate. A bail is `outcome` `bailed`, its cause in `bailCause`, with `pr` and `head` `null`: the
244
244
  pre-code outcome, before you touch code. A block or ambiguity you find after
245
245
  implementation began — the work cannot finish without a ruling or human hands
246
246
  you do not have — is `outcome` `blocked` instead, with `pr`, `head` and `bailCause` `null` and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feigi/fleet-ctl",
3
- "version": "3.95.2",
3
+ "version": "3.95.4",
4
4
  "description": "Agent fleet: run-team controller, merge bot, PR reviewer, and the ticket pipeline they share",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -2507,7 +2507,9 @@ function recordFiled(id, subject) {
2507
2507
  // reads OPEN and its closingIssuesReferences in its
2508
2508
  // own repository name N;
2509
2509
  // the Check-step record (below) holds for <head>
2510
- // impl-N=bailed bailCause is not null; the receipt names it
2510
+ // impl-N=bailed bailCause is not null; the receipt names it.
2511
+ // report-schema.mjs already refuses a bail that
2512
+ // names a pr or a head
2511
2513
  // impl-N=blocked nothing to check: report-schema.mjs already
2512
2514
  // refuses a block that names a bailCause, a pr or
2513
2515
  // a head, or gives no reason in bailDetail
@@ -25,7 +25,8 @@
25
25
  // `$.bailCause: "<cause>" is not null, with outcome "blocked" — a block
26
26
  // is no bail`, gives no reason in `bailDetail`, or names a `pr` or a
27
27
  // `head`, as `$.pr: <pr> is not null, with outcome "blocked" — a block
28
- // reports no PR`
28
+ // reports no PR`, or whose `bailed` outcome names a `pr` or a `head`, as
29
+ // `$.pr: <pr> is not null, with outcome "bailed" — a bail reports no PR`
29
30
  // 2 usage: no or unknown subcommand, a wrong argument count, an unknown
30
31
  // family, any flag; or <file> could not be read; or print could not
31
32
  // write the schema to stdout. Refused on stderr, nothing on stdout
@@ -185,10 +186,11 @@ export function mergeBotVerdicts(report) {
185
186
  // no schema keyword states. For an impl report: a `blocked` outcome names no
186
187
  // `bailCause`, since a block is no bail, gives its reason in `bailDetail`,
187
188
  // text that is not only whitespace, and names no `pr` or `head`, since a block
188
- // reports no PR — a PR it opened is outcome `pr`, which settle checks. For a
189
- // merge-bot report: each PR gets one verdict — merged, held, conflict-held or
190
- // refused — the last it reached in the pass, so a PR named twice, in one list
191
- // or in two, is a violation at its second entry.
189
+ // reports no PR; a `bailed` outcome names no `pr` or `head` either, since a
190
+ // bail is the pre-code outcome — a PR the member opened is outcome `pr`, which
191
+ // settle checks. For a merge-bot report: each PR gets one verdict — merged,
192
+ // held, conflict-held or refused — the last it reached in the pass, so a PR
193
+ // named twice, in one list or in two, is a violation at its second entry.
192
194
  export function reportViolation(family, value) {
193
195
  const found = validate(SCHEMAS[family], value);
194
196
  if (found !== null) return found;
@@ -199,6 +201,11 @@ export function reportViolation(family, value) {
199
201
  if (value[field] !== null) return `$.${field}: ${show(value[field])} is not null, with outcome "blocked" — a block reports no PR`;
200
202
  }
201
203
  }
204
+ if (family === "impl" && value.outcome === "bailed") {
205
+ for (const field of ["pr", "head"]) {
206
+ if (value[field] !== null) return `$.${field}: ${show(value[field])} is not null, with outcome "bailed" — a bail reports no PR`;
207
+ }
208
+ }
202
209
  if (family !== "merge-bot") return null;
203
210
  const first = new Map();
204
211
  for (const { pr, path } of mergeBotVerdicts(value)) {