wicked-crew-api-types 0.105.0 → 0.107.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 (2) hide show
  1. package/index.d.ts +114 -9
  2. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -267,6 +267,12 @@ export interface HealthCapabilities {
267
267
  * receipts. ABSENT on an older daemon — do not send the field (its strict schema 400s on it).
268
268
  */
269
269
  reducedAssurance?: boolean;
270
+ /**
271
+ * (api-types 0.106.0) `LaunchRunBody.skipQeAcceptance` / `forceQeAcceptance` are accepted (the
272
+ * installed addon carries the QE acceptance decision, wicked-core-ts >= 0.7.49), and receipts
273
+ * carry `qe`. ABSENT on an older daemon — do not send the fields (its strict schema 400s on them).
274
+ */
275
+ qeAcceptanceOverride?: boolean;
270
276
  }
271
277
 
272
278
  /** One `GET /health.warnings[]` entry (additive; wicked-core#411 / wicked-crew#497). */
@@ -1972,6 +1978,33 @@ export type AssuranceSkipReason =
1972
1978
  export interface RunAssurance {
1973
1979
  mode: AssuranceMode;
1974
1980
  required: AssuranceRequirement[];
1981
+ /** (api-types 0.106.0; wicked-core-ts >= 0.7.49) The run's QE acceptance decision, present
1982
+ * exactly when `required` holds `qe_acceptance`. ABSENT on an older engine (then a required
1983
+ * `qe_acceptance` is enforced). */
1984
+ qe?: QeAcceptanceDecision;
1985
+ }
1986
+
1987
+ /** (api-types 0.106.0) `QeAcceptanceDecision.status`. */
1988
+ export type QeAcceptanceStatus = 'required' | 'waived' | 'skipped' | (string & {});
1989
+
1990
+ /**
1991
+ * (api-types 0.106.0; wicked-core-ts >= 0.7.49; QE-IN-APP-WORKFLOWS) A run's QE acceptance
1992
+ * decision, on `RunAssurance.qe` and every receipt. `basis: 'plan'` is the launch's provisional
1993
+ * `required` (a plan has no diff); `'operator'` is an explicit skip (with its reason) or force;
1994
+ * `'diff'` is the binding decision the run's QE unit made from the run's diff — `waived` only when
1995
+ * every scoring dimension is in its lowest band (`score <= threshold`, no complexity or novelty).
1996
+ * A creator after a waiver revokes it. `reason` is what a plan, gate or delivery shows.
1997
+ */
1998
+ export interface QeAcceptanceDecision {
1999
+ status: QeAcceptanceStatus;
2000
+ basis: 'plan' | 'operator' | 'diff' | (string & {});
2001
+ score: number | null;
2002
+ threshold: number;
2003
+ reason: string;
2004
+ /** The score's own lines, one per term, when it was scored. */
2005
+ reasons: string[];
2006
+ ord: number | null;
2007
+ tree: string | null;
1975
2008
  }
1976
2009
 
1977
2010
  /** One instrument a receipt did NOT run, and why. */
@@ -2001,6 +2034,10 @@ export interface AssuranceReceipt {
2001
2034
  judge: string | null;
2002
2035
  tree: string | null;
2003
2036
  attempt: number;
2037
+ /** (api-types 0.106.0) The run's QE acceptance decision when the receipt was cut; ABSENT when the
2038
+ * run does not require QE acceptance (or on an older engine). A waived or skipped one is also a
2039
+ * `skipped[]` entry (reason `qe_waived_by_score` | `qe_skipped_by_operator`). */
2040
+ qe?: QeAcceptanceDecision;
2004
2041
  }
2005
2042
 
2006
2043
  /**
@@ -2009,6 +2046,11 @@ export interface AssuranceReceipt {
2009
2046
  * non-PASS verdict, no verdict, an unattributed verdict or an unreadable ledger refuses delivery.
2010
2047
  */
2011
2048
  export interface QeAcceptanceCheck {
2049
+ /** (api-types 0.106.0) `required` — the ledger was read and `satisfied` is its PASS; `waived` —
2050
+ * the run's score waived it (`reason` names the score); `skipped` — the operator skipped it at
2051
+ * launch (`reason` names the reason). A waived or skipped check is `satisfied` with no verdict.
2052
+ * ABSENT on an older daemon (read as `required`). */
2053
+ status?: QeAcceptanceStatus;
2012
2054
  satisfied: boolean;
2013
2055
  /** The gate's own words (`GET /runs/:id/acceptance` → `gate.reason`). */
2014
2056
  reason: string;
@@ -2761,6 +2803,17 @@ export type RunBaseResolvedEvent = {
2761
2803
  runBranch?: string;
2762
2804
  };
2763
2805
 
2806
+ /** (api-types 0.106.0; wicked-core-ts >= 0.7.49) The run's QE acceptance decision changed at a
2807
+ * unit's dispatch: the run's QE unit scored the run's diff (`qe.basis: 'diff'`, `required` or
2808
+ * `waived`), or a creator dispatched after a waiver revoked it. From this point the decision is on
2809
+ * the session's contract (`AgentSession.assurance.qe`). `type` alias on purpose. */
2810
+ export type QeAcceptanceDecidedEvent = {
2811
+ type: 'qeAcceptanceDecided';
2812
+ session: string;
2813
+ ord: number;
2814
+ qe: QeAcceptanceDecision;
2815
+ };
2816
+
2764
2817
  /** The gate-evidence events (wicked-core F-036/F-039, extended by wicked-core#431 — api-types 0.33.0
2765
2818
  * added {@link WorktreeRestoredEvent}, {@link DeliverLiftEvaluatedEvent} and
2766
2819
  * {@link EvaluatorToolCallDeniedEvent}) as a discriminated union for consumers that narrow on `type`;
@@ -4556,6 +4609,20 @@ export interface LaunchRunBody {
4556
4609
  * operator before sending `true`; send it only when `GET /health.capabilities.reducedAssurance === true`.
4557
4610
  */
4558
4611
  reducedAssurance?: boolean;
4612
+ /**
4613
+ * (api-types 0.106.0; wicked-core QE-IN-APP-WORKFLOWS) SKIP a required QE acceptance, for this
4614
+ * reason (non-empty, the operator's own words). Persisted on the contract
4615
+ * (`assurance.qe.status: 'skipped'`, `basis: 'operator'`) and labelled on the run, every gate and
4616
+ * the delivery ("QE acceptance skipped by operator: <reason>"). Omitted: a required QE acceptance
4617
+ * is never skipped. 400 beside `forceQeAcceptance`; the engine refuses it on a run whose workflow
4618
+ * does not require QE acceptance. Send only when `GET /health.capabilities.qeAcceptanceOverride`.
4619
+ */
4620
+ skipQeAcceptance?: { reason: string };
4621
+ /**
4622
+ * (api-types 0.106.0) REQUIRE QE acceptance whatever the run's impact score says (no waiver).
4623
+ * `false` is the same as omitting it. 400 beside `skipQeAcceptance`.
4624
+ */
4625
+ forceQeAcceptance?: boolean;
4559
4626
  }
4560
4627
 
4561
4628
  /** `POST /linked-issues/preview` (crew#825): what a workflow launch of `problem` WOULD append. */
@@ -5091,11 +5158,12 @@ export interface SystemSettings {
5091
5158
  baseSkillPolicy?: 'warn' | 'require';
5092
5159
  /**
5093
5160
  * The DELIVER IDENTITY (crew#549; additive): the GitHub login the deliver phase must push as.
5094
- * The deliver script reads `gh api user` AND asks git which credential it would use for the
5095
- * remote's host, and REFUSES — before anything is staged, committed or pushed — when either
5096
- * disagrees with this login (or, with nothing configured, when those two disagree with each
5097
- * other). `''`/absent ⇒ the `GH_ACCOUNT` env var decides, and unset there means the phase
5098
- * pushes as whatever login gh holds, said aloud on the gate card.
5161
+ * (crew#940) On a github.com origin the deliver script reads THIS login's own token from gh's
5162
+ * keyring and uses it for its gh calls and its git fetch/push alone, whatever account gh has
5163
+ * active; a login gh holds no token for is "GitHub credentials not configured", refused before
5164
+ * anything is staged. An exported `GH_TOKEN` wins, and is refused when it authenticates as
5165
+ * another login. `''`/absent ⇒ the `GH_ACCOUNT` env var decides, and unset there means the phase
5166
+ * pushes as whatever login gh holds (git's credential cross-checked), said aloud on the gate card.
5099
5167
  *
5100
5168
  * A LOGIN ONLY — never a token. The credential itself stays in gh's keyring or in the daemon's
5101
5169
  * `GH_TOKEN`; `GET /settings` returns this login and no secret ever.
@@ -5328,6 +5396,9 @@ export interface RunInventoryResponse {
5328
5396
  export interface PresetStep {
5329
5397
  catalog: string;
5330
5398
  id: string;
5399
+ /** (crew#928, wicked-core#854) The step changes no file in the run's tree; see
5400
+ * {@link TeamPlanStep.writes_nothing}. */
5401
+ writes_nothing?: boolean;
5331
5402
  [k: string]: unknown;
5332
5403
  }
5333
5404
 
@@ -7130,7 +7201,8 @@ export interface DiagnosticsSkillsFinding {
7130
7201
  * an `error` under `'require'` (the engine refuses every launch at intake); cleared by a publish
7131
7202
  * that hands it. Also carried as `DiagnosticsSkills.baseSkill.finding`; `skills.phase-skill`
7132
7203
  * (`warning`, crew#661) = a subsystem's phases declare a skill the published snapshot did not hold
7133
- * when it armed, so they run without it — one per `DiagnosticsSkills.phaseSkillGaps` entry;
7204
+ * when it armed, so they run without it — one per `DiagnosticsSkills.phaseSkillGaps` entry (none
7205
+ * since crew#935);
7134
7206
  * `skills.garden` (`error`, api-types 0.78.0, crew#753) = the installed wicked-garden is older
7135
7207
  * than the daemon requires (`GardenRequiredBody.required`), so it is not used: found at seed,
7136
7208
  * the runtime is `config-error` and the engine is handed a refusal path. Rides
@@ -7207,7 +7279,9 @@ export interface DiagnosticsSkills {
7207
7279
  /** Subsystems whose phases run WITHOUT a skill their workflow declares (crew#661; additive) — one
7208
7280
  * entry per subsystem, judged when that seam ARMED (the decision holds until the daemon restarts).
7209
7281
  * Each entry also rides `findings` as a `skills.phase-skill` warning. `[]` when every armed seam
7210
- * holds its skill; ABSENT on a daemon before this field (read it as unknown, not as `[]`). */
7282
+ * holds its skill; ABSENT on a daemon before this field (read it as unknown, not as `[]`). Always
7283
+ * `[]` from a daemon carrying crew#935: the interactive seams launch wicked-core's presets, which
7284
+ * always run their skill (a snapshot without it fails the run), so no seam arms without it. */
7211
7285
  phaseSkillGaps?: DiagnosticsPhaseSkillGap[];
7212
7286
  }
7213
7287
 
@@ -8065,8 +8139,36 @@ export interface TeamPlanStep {
8065
8139
  * phase's pool; a raise is refused (`wicked.team.plan.refused`, reason `pool_raised`). Omitted
8066
8140
  * when unset. */
8067
8141
  pool?: number;
8142
+ /** (crew#928, wicked-core#854) The step changes no file in the run's tree (capture-learnings'
8143
+ * `capture`, steering-author's `propose`). A plan whose every creator step sets it, and that has
8144
+ * no `run` step, may be scoped `SCOPE {"touch":[]}`, which scores 0. Set on a code phase it is
8145
+ * refused (`writes_nothing_on_code`). Omitted when unset. */
8146
+ writes_nothing?: boolean;
8068
8147
  }
8069
8148
 
8149
+ /**
8150
+ * The stable token of a plan-rule refusal (wicked-core `PlanRefusal::reason`). A refusal formatted
8151
+ * by the engine's `PlanRefusal` reads `<token>: <detail>`; a skin matches the token, never the
8152
+ * prose. NOT every `plan.refused` reason is one: some are plain text (an auto-mode floor override,
8153
+ * a held edit the run ended before applying), and a launch / preview / `propose_plan` error message
8154
+ * CONTAINS the refusal text behind a context prefix (`the plan is refused: <token>: …`), so search
8155
+ * for the token rather than splitting on the first `:`. Open-ended: the engine may add tokens.
8156
+ *
8157
+ * - `pool_raised` (crew#894, wicked-core#810): a step raised its phase's pool.
8158
+ * - `writes_nothing_on_code` (crew#928, wicked-core#854): `writes_nothing: true` on a step whose
8159
+ * phase executes code.
8160
+ * - `security_review_on_non_code_plan` (crew#928, wicked-core#846/#854): a `security_review` in a
8161
+ * plan where no step does code work; its diff evidence floor could never pass. The detail names
8162
+ * the step and either the held testing rule that added it (`rule TST-1002 requires it`) or `the
8163
+ * plan authored it`. Raised mid-run (a rule fired by the diff re-score) it FAILS the run, and
8164
+ * the run's error text carries the rule.
8165
+ */
8166
+ export type PlanRefusalToken =
8167
+ | 'pool_raised'
8168
+ | 'writes_nothing_on_code'
8169
+ | 'security_review_on_non_code_plan'
8170
+ | (string & {});
8171
+
8070
8172
  export interface TeamPlanOverride {
8071
8173
  remove: string[];
8072
8174
  reason: string;
@@ -8149,8 +8251,11 @@ export type TeamPlanAcceptedPayload = TeamEnvelope & {
8149
8251
  export type TeamPlanRefusedPayload = TeamEnvelope & {
8150
8252
  proposal_id: string;
8151
8253
  base_rev: number | null;
8152
- /** The engine's refusal reason, verbatim — e.g. `pool_raised` (crew#894, wicked-core#810: a plan
8153
- * step raised a phase's `pool`; a step may only lower it). */
8254
+ /** The engine's refusal reason, verbatim. A plan-rule refusal reads `<token>: <detail>` with a
8255
+ * {@link PlanRefusalToken} — e.g. `pool_raised` (crew#894, wicked-core#810: a plan step raised a
8256
+ * phase's `pool`; a step may only lower it), `security_review_on_non_code_plan` or
8257
+ * `writes_nothing_on_code` (crew#928); other reasons are plain text. A launch / preview /
8258
+ * `propose_plan` error message contains the same text behind a context prefix. */
8154
8259
  reason: string;
8155
8260
  };
8156
8261
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wicked-crew-api-types",
3
- "version": "0.105.0",
3
+ "version": "0.107.0",
4
4
  "description": "The wire contract of the wicked-crew daemon's /api/v1 REST surface and /ws CoreEvent frames \u2014 types only, zero runtime",
5
5
  "type": "module",
6
6
  "types": "./index.d.ts",