/** * The ONE reader of the verb's message taxonomy. * * Every refusal and every advisory warning leads with its code in brackets — `[INVALID_REQUEST] …`, * `[E_ROLLBACK_INCOMPLETE] …`, `[W_BUDGET_BELOW_STRATEGY_MIN] …`. Two consumers read that prefix * and they must not drift: the gateway stamps it as a span attribute * (`senpi.deploy.refusal.code` / `senpi.deploy.budget.warn.code`) and the CLI classifies a start * error's exit code from it (D-12: `2` refused, `1` internal/transport). * * They had already drifted — one pattern accepted `[A-Z_]+` and the other `[A-Z][A-Z0-9_]*`, so a * code carrying a digit (`[E_MIN_10]`) would have exited 2 with no span attribute to explain why. * One producer of the convention, one reader of it. */ /** Type-only — erased at compile time, so this stays a leaf module at runtime. */ import type { DeployReport } from "./orchestrator.js"; /** The bracketed code a message leads with, or undefined when it carries none. */ export declare function extractTaxonomyCode(message: string | undefined | null): string | undefined; /** * The taxonomy code of the first step that carries an INDETERMINATE outcome — a deploy that stopped * waiting on an install it could not cancel, leaving a wallet whose state nobody knows. * * A second scan rather than a widening of the refusal one, and deliberately keyed on EVIDENCE * rather than on status: this outcome rides a `failed` step (it is not a refusal — nothing was * deliberately declined, and `refused` must keep meaning what it means for the exit-code contract), * so the refusal scans skip it, while `failed` on its own says nothing but "a step did not * succeed". `evidence.indeterminate` is the one flag the orchestrator sets for exactly this case. * * Why it needs a signal at all: this outcome is money-stranding — a funded wallet is left named on * the report and NOT rolled back, on purpose (the carve-out in `orchestrator.ts`) — and because the * rollback is suppressed, `senpi.deploy.rollback.count` does not fire either. Without this the * whole population is indistinguishable in telemetry from an ordinary ENOSPC install failure. This * branch exists because a failure nobody could see ran for a long time. */ export declare function firstIndeterminateCode(report: DeployReport): string | undefined; /** * Is this message a REFUSAL — something that was deliberately not done, which a caller must obey * rather than retry? * * `[W_*]` is the advisory-warning family: it rides a report that DEPLOYED, so it is excluded by * name rather than swept in by the bracket shape. */ export declare function isRefusalMessage(message: string | undefined | null): boolean; //# sourceMappingURL=taxonomy.d.ts.map