audit-tools 0.32.67 → 0.33.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 (183) hide show
  1. package/dist/audit/cli/advanceAuditCommand.d.ts.map +1 -1
  2. package/dist/audit/cli/advanceAuditCommand.js +8 -3
  3. package/dist/audit/cli/advanceAuditCommand.js.map +1 -1
  4. package/dist/audit/cli/args.d.ts +9 -27
  5. package/dist/audit/cli/args.d.ts.map +1 -1
  6. package/dist/audit/cli/args.js +116 -50
  7. package/dist/audit/cli/args.js.map +1 -1
  8. package/dist/audit/cli/auditStep.d.ts +15 -1
  9. package/dist/audit/cli/auditStep.d.ts.map +1 -1
  10. package/dist/audit/cli/auditStep.js +2 -0
  11. package/dist/audit/cli/auditStep.js.map +1 -1
  12. package/dist/audit/cli/dispatch/quotaPool.d.ts +2 -1
  13. package/dist/audit/cli/dispatch/quotaPool.d.ts.map +1 -1
  14. package/dist/audit/cli/dispatch/quotaPool.js +43 -77
  15. package/dist/audit/cli/dispatch/quotaPool.js.map +1 -1
  16. package/dist/audit/cli/dispatch/types.d.ts +9 -0
  17. package/dist/audit/cli/dispatch/types.d.ts.map +1 -1
  18. package/dist/audit/cli/dispatch.d.ts.map +1 -1
  19. package/dist/audit/cli/dispatch.js +17 -6
  20. package/dist/audit/cli/dispatch.js.map +1 -1
  21. package/dist/audit/cli/hybridDispatch.d.ts +3 -1
  22. package/dist/audit/cli/hybridDispatch.d.ts.map +1 -1
  23. package/dist/audit/cli/hybridDispatch.js +1 -0
  24. package/dist/audit/cli/hybridDispatch.js.map +1 -1
  25. package/dist/audit/cli/nextStepCommand.d.ts +0 -9
  26. package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
  27. package/dist/audit/cli/nextStepCommand.js +151 -92
  28. package/dist/audit/cli/nextStepCommand.js.map +1 -1
  29. package/dist/audit/cli/nextStepHelpers.d.ts +11 -2
  30. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  31. package/dist/audit/cli/nextStepHelpers.js +56 -8
  32. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  33. package/dist/audit/cli/prepareDispatchCommand.d.ts.map +1 -1
  34. package/dist/audit/cli/prepareDispatchCommand.js +15 -9
  35. package/dist/audit/cli/prepareDispatchCommand.js.map +1 -1
  36. package/dist/audit/cli/prompts.d.ts +12 -32
  37. package/dist/audit/cli/prompts.d.ts.map +1 -1
  38. package/dist/audit/cli/prompts.js +19 -33
  39. package/dist/audit/cli/prompts.js.map +1 -1
  40. package/dist/audit/cli/providerConfirmationStep.d.ts +13 -5
  41. package/dist/audit/cli/providerConfirmationStep.d.ts.map +1 -1
  42. package/dist/audit/cli/providerConfirmationStep.js +47 -8
  43. package/dist/audit/cli/providerConfirmationStep.js.map +1 -1
  44. package/dist/audit/cli/quotaCommand.d.ts.map +1 -1
  45. package/dist/audit/cli/quotaCommand.js +16 -10
  46. package/dist/audit/cli/quotaCommand.js.map +1 -1
  47. package/dist/audit/cli/rollingAuditDispatch.d.ts.map +1 -1
  48. package/dist/audit/cli/rollingAuditDispatch.js +8 -0
  49. package/dist/audit/cli/rollingAuditDispatch.js.map +1 -1
  50. package/dist/audit/cli/semanticReviewStep.d.ts +11 -1
  51. package/dist/audit/cli/semanticReviewStep.d.ts.map +1 -1
  52. package/dist/audit/cli/semanticReviewStep.js +11 -15
  53. package/dist/audit/cli/semanticReviewStep.js.map +1 -1
  54. package/dist/audit/cli/validateCommand.d.ts.map +1 -1
  55. package/dist/audit/cli/validateCommand.js +3 -3
  56. package/dist/audit/cli/validateCommand.js.map +1 -1
  57. package/dist/audit/contracts/wrapperResponse.d.ts +6 -6
  58. package/dist/audit/orchestrator/advance.d.ts.map +1 -1
  59. package/dist/audit/orchestrator/advance.js +39 -7
  60. package/dist/audit/orchestrator/advance.js.map +1 -1
  61. package/dist/audit/orchestrator/advanceTypes.d.ts +52 -1
  62. package/dist/audit/orchestrator/advanceTypes.d.ts.map +1 -1
  63. package/dist/audit/orchestrator/executorRunners.d.ts.map +1 -1
  64. package/dist/audit/orchestrator/executorRunners.js +9 -1
  65. package/dist/audit/orchestrator/executorRunners.js.map +1 -1
  66. package/dist/audit/orchestrator/intakeExecutors.d.ts +27 -3
  67. package/dist/audit/orchestrator/intakeExecutors.d.ts.map +1 -1
  68. package/dist/audit/orchestrator/intakeExecutors.js +119 -19
  69. package/dist/audit/orchestrator/intakeExecutors.js.map +1 -1
  70. package/dist/audit/orchestrator/nextStep.d.ts +7 -0
  71. package/dist/audit/orchestrator/nextStep.d.ts.map +1 -1
  72. package/dist/audit/orchestrator/nextStep.js +3 -0
  73. package/dist/audit/orchestrator/nextStep.js.map +1 -1
  74. package/dist/audit/orchestrator/providerConfirmation.d.ts.map +1 -1
  75. package/dist/audit/orchestrator/providerConfirmation.js +0 -2
  76. package/dist/audit/orchestrator/providerConfirmation.js.map +1 -1
  77. package/dist/audit/orchestrator/state.d.ts +17 -0
  78. package/dist/audit/orchestrator/state.d.ts.map +1 -1
  79. package/dist/audit/orchestrator/state.js +13 -1
  80. package/dist/audit/orchestrator/state.js.map +1 -1
  81. package/dist/audit/quota/index.d.ts +128 -128
  82. package/dist/audit/supervisor/sessionConfig.d.ts +3 -11
  83. package/dist/audit/supervisor/sessionConfig.d.ts.map +1 -1
  84. package/dist/audit/supervisor/sessionConfig.js +3 -25
  85. package/dist/audit/supervisor/sessionConfig.js.map +1 -1
  86. package/dist/audit/types/analyzerCapability.d.ts +6 -6
  87. package/dist/audit/types/externalAnalyzer.d.ts +10 -10
  88. package/dist/remediate/phases/plan.d.ts.map +1 -1
  89. package/dist/remediate/phases/plan.js +5 -4
  90. package/dist/remediate/phases/plan.js.map +1 -1
  91. package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
  92. package/dist/remediate/steps/contractPipeline.js +9 -3
  93. package/dist/remediate/steps/contractPipeline.js.map +1 -1
  94. package/dist/remediate/steps/dispatch/marshal.d.ts.map +1 -1
  95. package/dist/remediate/steps/dispatch/marshal.js +5 -4
  96. package/dist/remediate/steps/dispatch/marshal.js.map +1 -1
  97. package/dist/remediate/steps/dispatch/waveScheduling.d.ts +4 -2
  98. package/dist/remediate/steps/dispatch/waveScheduling.d.ts.map +1 -1
  99. package/dist/remediate/steps/dispatch/waveScheduling.js +33 -85
  100. package/dist/remediate/steps/dispatch/waveScheduling.js.map +1 -1
  101. package/dist/remediate/steps/nextStep.d.ts +0 -10
  102. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  103. package/dist/remediate/steps/nextStep.js +33 -24
  104. package/dist/remediate/steps/nextStep.js.map +1 -1
  105. package/dist/remediate/steps/providerNodeDispatch.d.ts +8 -0
  106. package/dist/remediate/steps/providerNodeDispatch.d.ts.map +1 -1
  107. package/dist/remediate/steps/providerNodeDispatch.js +4 -0
  108. package/dist/remediate/steps/providerNodeDispatch.js.map +1 -1
  109. package/dist/remediate/steps/sessionConfigLoad.d.ts +46 -0
  110. package/dist/remediate/steps/sessionConfigLoad.d.ts.map +1 -0
  111. package/dist/remediate/steps/sessionConfigLoad.js +32 -0
  112. package/dist/remediate/steps/sessionConfigLoad.js.map +1 -0
  113. package/dist/shared/config/resolveSessionConfig.d.ts +72 -0
  114. package/dist/shared/config/resolveSessionConfig.d.ts.map +1 -0
  115. package/dist/shared/config/resolveSessionConfig.js +105 -0
  116. package/dist/shared/config/resolveSessionConfig.js.map +1 -0
  117. package/dist/shared/dispatch/admissionLoop.d.ts +12 -12
  118. package/dist/shared/friction/stepBoundaryCapture.d.ts +22 -1
  119. package/dist/shared/friction/stepBoundaryCapture.d.ts.map +1 -1
  120. package/dist/shared/friction/stepBoundaryCapture.js +40 -0
  121. package/dist/shared/friction/stepBoundaryCapture.js.map +1 -1
  122. package/dist/shared/index.d.ts +14 -8
  123. package/dist/shared/index.d.ts.map +1 -1
  124. package/dist/shared/index.js +11 -5
  125. package/dist/shared/index.js.map +1 -1
  126. package/dist/shared/providers/auditorSources.d.ts +102 -0
  127. package/dist/shared/providers/auditorSources.d.ts.map +1 -0
  128. package/dist/shared/providers/auditorSources.js +226 -0
  129. package/dist/shared/providers/auditorSources.js.map +1 -0
  130. package/dist/shared/providers/openAiCompatibleProvider.d.ts +20 -5
  131. package/dist/shared/providers/openAiCompatibleProvider.d.ts.map +1 -1
  132. package/dist/shared/providers/openAiCompatibleProvider.js +123 -19
  133. package/dist/shared/providers/openAiCompatibleProvider.js.map +1 -1
  134. package/dist/shared/providers/providerConfirmation.d.ts +3 -20
  135. package/dist/shared/providers/providerConfirmation.d.ts.map +1 -1
  136. package/dist/shared/providers/providerConfirmation.js +3 -37
  137. package/dist/shared/providers/providerConfirmation.js.map +1 -1
  138. package/dist/shared/providers/providerFactory.d.ts +6 -0
  139. package/dist/shared/providers/providerFactory.d.ts.map +1 -1
  140. package/dist/shared/providers/providerFactory.js +6 -0
  141. package/dist/shared/providers/providerFactory.js.map +1 -1
  142. package/dist/shared/providers/sharedProviderConfirmation.d.ts +264 -75
  143. package/dist/shared/providers/sharedProviderConfirmation.d.ts.map +1 -1
  144. package/dist/shared/providers/sharedProviderConfirmation.js +534 -113
  145. package/dist/shared/providers/sharedProviderConfirmation.js.map +1 -1
  146. package/dist/shared/providers/types.d.ts +17 -0
  147. package/dist/shared/providers/types.d.ts.map +1 -1
  148. package/dist/shared/quota/apiPool.d.ts +34 -11
  149. package/dist/shared/quota/apiPool.d.ts.map +1 -1
  150. package/dist/shared/quota/apiPool.js +21 -23
  151. package/dist/shared/quota/apiPool.js.map +1 -1
  152. package/dist/shared/quota/capacity.d.ts +50 -50
  153. package/dist/shared/quota/hostPool.d.ts +107 -0
  154. package/dist/shared/quota/hostPool.d.ts.map +1 -0
  155. package/dist/shared/quota/hostPool.js +103 -0
  156. package/dist/shared/quota/hostPool.js.map +1 -0
  157. package/dist/shared/quota/quotaSource.d.ts +2 -2
  158. package/dist/shared/types/auditorDescriptor.d.ts +112 -0
  159. package/dist/shared/types/auditorDescriptor.d.ts.map +1 -0
  160. package/dist/shared/types/auditorDescriptor.js +28 -0
  161. package/dist/shared/types/auditorDescriptor.js.map +1 -0
  162. package/dist/shared/types/providerConfirmation.d.ts +64 -6
  163. package/dist/shared/types/providerConfirmation.d.ts.map +1 -1
  164. package/dist/shared/types/providerConfirmation.js +1 -1
  165. package/dist/shared/types/sessionConfig.d.ts +73 -65
  166. package/dist/shared/types/sessionConfig.d.ts.map +1 -1
  167. package/dist/shared/types/sessionConfig.js +48 -0
  168. package/dist/shared/types/sessionConfig.js.map +1 -1
  169. package/dist/shared/validation/sessionConfig.d.ts +26 -14
  170. package/dist/shared/validation/sessionConfig.d.ts.map +1 -1
  171. package/dist/shared/validation/sessionConfig.js +72 -70
  172. package/dist/shared/validation/sessionConfig.js.map +1 -1
  173. package/docs/audit-pkg/contracts.md +4 -4
  174. package/docs/audit-pkg/operator-guide.md +43 -24
  175. package/package.json +1 -1
  176. package/skills/audit-code/SKILL.md +17 -14
  177. package/skills/audit-code/audit-code.prompt.md +17 -16
  178. package/wrapper/audit-code-wrapper-install-hosts.mjs +6 -10
  179. package/wrapper/remediate-code-wrapper-install-hosts.mjs +4 -8
  180. package/dist/shared/quota/repairProxyRegistry.d.ts +0 -84
  181. package/dist/shared/quota/repairProxyRegistry.d.ts.map +0 -1
  182. package/dist/shared/quota/repairProxyRegistry.js +0 -144
  183. package/dist/shared/quota/repairProxyRegistry.js.map +0 -1
@@ -2,43 +2,51 @@
2
2
  * DC-2 — shared, session-scoped provider confirmation (Gate-0).
3
3
  *
4
4
  * The design wants ONE provider confirmation spanning an audit→remediate run:
5
- * the first tool to run writes the confirmed provider pool to a SHARED artifact
6
- * at `<root>/.audit-tools/provider-confirmation.json` (NOT the per-tool audit
7
- * artifacts dir); the second tool reads and honors it unless the roster has
8
- * since changed. "Session" = the shared `.audit-tools` dir for that repo+run, so
9
- * no new identity scheme is needed.
10
- *
11
- * Two invariants are in tension and are reconciled here by the CE-012 third
12
- * state:
13
- * - INV-DC1-6 (never-block): remediate run standalone with no prior audit must
14
- * resolve its provider independently, exactly as today — absence of the
15
- * artifact is NOT an error.
16
- * - INV-DC2-3 (roster-stale-re-confirm): a confirmation whose discovered roster
17
- * no longer matches the current one must NOT be silently honored (it could
18
- * pin a provider that has since disappeared) — it must re-confirm.
19
- * A single `null` return cannot carry both meanings (CE-012). So the accessor
20
- * returns a THREE-valued result: `null` for absent/malformed (never-block),
21
- * `{ status: 'confirmed' }` for a fresh honor, and the DISTINCT
22
- * `{ status: 'reconfirm' }` for roster-stale — so honoring INV-DC2-3 no longer
23
- * contradicts INV-DC1-6.
5
+ * the first tool to run writes the operator's confirmed route DECISION to a
6
+ * SHARED artifact at `<root>/.audit-tools/provider-confirmation.json` (NOT the
7
+ * per-tool audit artifacts dir); the second tool reads and honors it. "Session" =
8
+ * the shared `.audit-tools` dir for that repo+run, so no new identity scheme is
9
+ * needed.
10
+ *
11
+ * **What this artifact carries is POLICY, not reach (G3).** The operator's
12
+ * decision — exclusions, cost order, λ — is a set of *rules*, valid for any
13
+ * auditor. What is *reachable* is per-auditor capability and is re-resolved from
14
+ * live env/PATH at the moment of use, never inherited from whoever wrote this
15
+ * file. So every read here is reach-free: it returns the persisted decision and
16
+ * nothing else.
17
+ *
18
+ * INV-DC1-6 (never-block) is the only invariant left in tension, and it now
19
+ * resolves to a plain two-valued read: a remediate run standalone with no prior
20
+ * audit resolves its provider independently — absence or corruption of the
21
+ * artifact is NOT an error, it is `null`.
22
+ *
23
+ * The former roster-staleness check (and its CE-012 three-valued `reconfirm`
24
+ * state) is GONE. It compared the *writing* auditor's roster against the reader's
25
+ * — meaningless cross-auditor by construction — and answered a real event (a
26
+ * backend the operator never confirmed became reachable) by silently discarding
27
+ * the operator's cost order and λ, while reaching no obligation at all. The
28
+ * `autonomous_mode`-keyed reconciliation gate
29
+ * ({@link computeNewlyReachableBackends}) replaces it: it compares the operator's
30
+ * DECISION against *this* auditor's freshly-resolved reach, which is well-defined
31
+ * across auditors, and it actually fires.
24
32
  *
25
33
  * CE-003 (lockless read races the writer rename): writes go through the shared
26
34
  * atomic writer (temp + atomic rename) under `withFileLock`, so a lockless
27
35
  * reader always observes either the complete old file or the complete new file —
28
36
  * never a torn intermediate.
29
37
  *
30
- * PB-1 (opencode opt-in): the roster is derived from `discoverProviders`, which
31
- * already withholds a bare-PATH opencode unless it is explicitly configured, so
32
- * the shared confirmation inherits that opt-in for free.
38
+ * PB-1 (opencode opt-in): the confirmed pool is derived from `discoverProviders`,
39
+ * which already withholds a bare-PATH opencode unless it is explicitly
40
+ * configured, so the shared confirmation inherits that opt-in for free.
33
41
  */
34
42
  import type { DispatchableSource, ResolvedProviderName, SessionConfig } from "../types/sessionConfig.js";
35
43
  import type { RunLogger } from "../observability/runLog.js";
36
- import type { ConfirmedPoolEntry, HostModelCostEntry, SourcePoolCostEntry, ProviderConfirmationInput } from "../types/providerConfirmation.js";
44
+ import type { ConfirmedPoolEntry, PersistedPoolEntry, HostModelCostEntry, SourcePoolCostEntry, ProviderConfirmationInput } from "../types/providerConfirmation.js";
37
45
  /**
38
46
  * Schema version for the shared confirmation artifact. Bumped independently of
39
47
  * the per-tool seam contract (PROVIDER_CONFIRMATION_RESULT_VERSION) — this is
40
- * the cross-tool session artifact, a distinct shape that also carries the
41
- * roster snapshot used for staleness.
48
+ * the cross-tool session artifact carrying the operator's route DECISION
49
+ * (exclusions, cost order, λ), a distinct shape from the seam's pool snapshot.
42
50
  */
43
51
  export declare const SHARED_PROVIDER_CONFIRMATION_VERSION: "1.0.0";
44
52
  /**
@@ -52,22 +60,88 @@ export declare const SHARED_PROVIDER_CONFIRMATION_FILENAME = "provider-confirmat
52
60
  /** `<root>/.audit-tools/provider-confirmation.json` (absolute). */
53
61
  export declare function sharedProviderConfirmationPath(root: string): string;
54
62
  /**
55
- * The shared session-level provider confirmation. Single-sourced so both
56
- * orchestrators read/write exactly the same shape.
63
+ * The operator's explicit route DECISION — reach-free by construction.
64
+ *
65
+ * This is the POLICY half of the Gate-0 confirmation: it names *rules* (which
66
+ * provider names the operator ruled out, which self-spawn-blocked ones they ruled
67
+ * back in), never *reachable endpoints*. It is deliberately the operator's raw
68
+ * `exclude` / `include` input rather than the derived per-entry `excluded` flag,
69
+ * because that flag folds in the WRITING auditor's `CLAUDECODE`/`CODEX` env via
70
+ * `isSelfSpawnBlocked` — persisting it would make one auditor's environment
71
+ * decide another's routing. Self-spawn-blocked is therefore recomputed in the
72
+ * READING process (see {@link resolveDispatchExclusion}).
57
73
  *
58
- * `roster` is the sorted snapshot of the provider names discovered at write
59
- * time. Staleness is "the current discovered roster differs from this snapshot"
60
- * — a provider appearing or disappearing forces a re-confirm.
74
+ * Because policy is reach-independent, it stays valid when the discovered reach
75
+ * changes. No read of this artifact gates on a reach check, for exactly that
76
+ * reason: an exclusion must fail CLOSED (keep excluding) when reach shifts, never
77
+ * fail open — and neither may the cost order or λ be discarded by a reach event
78
+ * they do not depend on (G3 step 1).
79
+ */
80
+ export interface ConfirmedDispatchPolicy {
81
+ /**
82
+ * {@link DispatchExclusionPattern}s the operator ruled out of the dispatchable
83
+ * pool. Model-granular by default (`provider:model`) — the operator confirms
84
+ * *model* choices, so excluding one model of a multi-model backend must not drop
85
+ * the backend's other models.
86
+ */
87
+ exclude?: DispatchExclusionPattern[];
88
+ /** Self-spawn-blocked provider names the operator explicitly opted back IN. */
89
+ include?: ResolvedProviderName[];
90
+ }
91
+ /**
92
+ * One rule in the operator's exclusion grammar — **reach-independent by
93
+ * construction**, so a rule authored on one auditor means the same thing to an
94
+ * auditor with a different reachable set (spec/unified-dispatch-worker-model.md).
95
+ *
96
+ * Three forms, disambiguated by the head token against the CLOSED set of provider
97
+ * names ({@link RESOLVED_PROVIDER_NAMES}) — so no form can shadow another:
98
+ *
99
+ * | Pattern | Head is a provider name? | Matches |
100
+ * |---|---|---|
101
+ * | `openai-compatible:gpt-oss-120b` | yes | that provider AND that exact model — the **default** granularity |
102
+ * | `codex` | yes (no `:`) | every backend of that provider — the coarse provider tier |
103
+ * | `integrate.api.nvidia.com` / `localhost:8000` | no | every source whose `endpoint` host (and port, when the pattern names one) matches — the coarse endpoint tier |
104
+ *
105
+ * ⚠ This is a THIRD keyspace, deliberately distinct from the quota-ledger pool
106
+ * identity (`provider[#account]/model`, `buildProviderModelKey`): an account is
107
+ * irrelevant to a rule about a backend. Do not unify them.
108
+ */
109
+ export type DispatchExclusionPattern = string;
110
+ /** A backend an exclusion rule can be evaluated against — structurally a `DispatchableSource`. */
111
+ export interface ExcludableBackend {
112
+ provider: string;
113
+ model?: string;
114
+ endpoint?: string;
115
+ }
116
+ /**
117
+ * The resolved exclusion rule set for THIS process: the operator's persisted
118
+ * patterns plus every locally self-spawn-blocked provider. Applied as a
119
+ * set-difference FILTER over freshly-gathered reach, never additively.
61
120
  */
121
+ export interface DispatchExclusion {
122
+ /** True ⇒ this backend is ruled out and must not become a dispatch pool. */
123
+ excludes(backend: ExcludableBackend): boolean;
124
+ }
62
125
  export interface SharedProviderConfirmation {
63
126
  /** Must equal SHARED_PROVIDER_CONFIRMATION_VERSION. */
64
127
  schema_version: typeof SHARED_PROVIDER_CONFIRMATION_VERSION;
128
+ /**
129
+ * The operator's explicit, reach-free route decision. Read at dispatch by
130
+ * {@link resolveDispatchExclusion} and applied as a set-difference filter over
131
+ * freshly-discovered reach — never additively. Absent ⇒ no operator exclusions
132
+ * (self-spawn-blocked providers are still excluded, recomputed locally).
133
+ */
134
+ policy?: ConfirmedDispatchPolicy;
65
135
  /** Always true: the pool applies to the whole audit→remediate session. */
66
136
  session_level: true;
67
137
  /** ISO-8601 timestamp of when the pool was confirmed. */
68
138
  confirmed_at: string;
69
- /** Confirmed provider pool, with exclusion flags. */
70
- provider_pool: ConfirmedPoolEntry[];
139
+ /**
140
+ * The confirmed provider pool as PERSISTED — decision only, no reach (G3 B+D).
141
+ * See {@link PersistedPoolEntry}: the reach half is deliberately unrepresentable
142
+ * here, so one auditor's environment can never route another's.
143
+ */
144
+ provider_pool: PersistedPoolEntry[];
71
145
  /**
72
146
  * Host self-reported model tiers with their operator-confirmed cost positions
73
147
  * (follow-up c). Merged into the model-keyed dispatch positions map by
@@ -92,34 +166,26 @@ export interface SharedProviderConfirmation {
92
166
  * (or a headless run) behaves exactly as before.
93
167
  */
94
168
  dispatch_bias?: number;
95
- /**
96
- * Sorted snapshot of the provider NAMES discovered when this was written.
97
- * Compared against the current discovered roster to detect staleness.
98
- */
99
- roster: ResolvedProviderName[];
100
169
  }
101
170
  /**
102
- * Outcome of reading the shared confirmation. THREE-valued (CE-012):
103
- * - `null` absent or malformed → never-block (INV-DC1-6)
104
- * - `{ status: 'confirmed' }` present + roster matches → honor it
105
- * - `{ status: 'reconfirm' }` present + roster changed → re-confirm (INV-DC2-3)
171
+ * The Gate-0 confirmation as RENDERED to the operator — identical to the persisted
172
+ * {@link SharedProviderConfirmation} except that `provider_pool` carries the FULL
173
+ * {@link ConfirmedPoolEntry} (this auditor's freshly-derived reach: tier, price, why
174
+ * a backend is excluded). This shape exists ONLY in memory; it never reaches disk.
106
175
  */
107
- export type SharedProviderConfirmationRead = {
108
- status: "confirmed";
109
- confirmation: SharedProviderConfirmation;
110
- } | {
111
- status: "reconfirm";
112
- confirmation: SharedProviderConfirmation;
113
- reason: string;
114
- } | null;
176
+ export interface RenderedProviderConfirmation extends Omit<SharedProviderConfirmation, "provider_pool"> {
177
+ provider_pool: ConfirmedPoolEntry[];
178
+ }
115
179
  /**
116
- * The current discovered provider roster: the sorted set of provider names
117
- * `discoverProviders` surfaces for this session config + environment. PB-1's
118
- * opencode opt-in is inherited from `discoverProviders` (a bare-PATH opencode is
119
- * not surfaced unless explicitly configured), so it never spuriously perturbs
120
- * the roster.
180
+ * Project the render DTO down to what actually gets PERSISTED: the operator's
181
+ * decision, with this auditor's reach assessment dropped (G3 B+D).
182
+ *
183
+ * The PRODUCER is split — not the write site. `writeSharedProviderConfirmation`
184
+ * receives an already-typed value, so projecting THERE would leave the reach fields
185
+ * representable on the persisted type and a future caller could put them back.
186
+ * Projecting here makes the persisted shape carry no reach BY CONSTRUCTION.
121
187
  */
122
- export declare function currentProviderRoster(sessionConfig: SessionConfig, env?: NodeJS.ProcessEnv, detectCommand?: (command: string) => boolean): ResolvedProviderName[];
188
+ export declare function buildSharedProviderConfirmation(...args: Parameters<typeof buildProviderConfirmationRender>): SharedProviderConfirmation;
123
189
  /**
124
190
  * Build a fresh shared confirmation from auto-discovery. Guarantees the
125
191
  * always-available `worker-command` fallback is present in the pool (it blocks
@@ -137,7 +203,10 @@ export declare function currentProviderRoster(sessionConfig: SessionConfig, env?
137
203
  *
138
204
  * @param sessionConfig - Current session config; may be an empty `{}`.
139
205
  * @param env - Process env snapshot; defaults to `process.env`.
140
- * @param exclude - Provider names to pre-exclude (from a prior gate).
206
+ * @param exclude - {@link DispatchExclusionPattern}s to pre-exclude (from a
207
+ * prior gate). A `provider:model` pattern marks a pool entry excluded only when
208
+ * that entry's `representativeModelId` IS that model — the same key the routing
209
+ * filter matches on, so display and dispatch cannot disagree.
141
210
  * @param include - Provider names the operator explicitly opts back IN,
142
211
  * overriding the default self-spawn-blocked exclusion for those names.
143
212
  * @param detectCommand - Injectable PATH-detection hook, forwarded to
@@ -150,7 +219,100 @@ export declare function currentProviderRoster(sessionConfig: SessionConfig, env?
150
219
  * passed via the dedicated params above (the executor forwards them from the
151
220
  * same input), so this arg governs ordering + host roster only.
152
221
  */
153
- export declare function buildSharedProviderConfirmation(sessionConfig?: SessionConfig, env?: NodeJS.ProcessEnv, exclude?: ResolvedProviderName[], include?: ResolvedProviderName[], detectCommand?: (command: string) => boolean, input?: ProviderConfirmationInput, sources?: DispatchableSource[]): SharedProviderConfirmation;
222
+ export declare function buildProviderConfirmationRender(sessionConfig?: SessionConfig, env?: NodeJS.ProcessEnv, exclude?: DispatchExclusionPattern[], include?: ResolvedProviderName[], detectCommand?: (command: string) => boolean, input?: ProviderConfirmationInput, sources?: DispatchableSource[]): RenderedProviderConfirmation;
223
+ /**
224
+ * The keys of the operator's persisted DECISION — the CONFIRMED half of the gate.
225
+ *
226
+ * All three pools contribute, and each is load-bearing: `annotateConfirmedPool`
227
+ * folds a source away when its model is already claimed by a provider entry, so a
228
+ * source can be represented ONLY by `provider_pool[].model_id`; and a host tier
229
+ * appears only in `host_model_cost_order`. Reading fewer than all three would
230
+ * manufacture a phantom delta for an already-confirmed backend.
231
+ */
232
+ export declare function confirmedBackendKeys(confirmation: SharedProviderConfirmation): Set<string>;
233
+ /** One backend in the gate's delta: reachable now, absent from the decision. */
234
+ export interface NewlyReachableBackend {
235
+ /** The gate key — `model_id ?? provider name`. Stable, operator-facing. */
236
+ key: string;
237
+ /** The backend's provider name. Display only — the prompt names it beside `key`. */
238
+ provider: ResolvedProviderName;
239
+ /**
240
+ * The {@link DispatchExclusionPattern} that rules out **exactly this backend** —
241
+ * `provider:model` where the model is knowable, else the coarse `provider` tier.
242
+ * Built HERE rather than re-derived by the autonomous fail-closed write, so the
243
+ * rule the gate persists cannot drift from the key the gate compared.
244
+ */
245
+ exclusion_pattern: DispatchExclusionPattern;
246
+ }
247
+ /**
248
+ * DELTA = **REACH-NOW \ CONFIRMED**: the backends this auditor can reach *right
249
+ * now* that the operator's persisted decision never mentions. Sorted by key, so the
250
+ * result is stable for prompt rendering + comparison.
251
+ *
252
+ * This is a **set difference — a FILTER over fresh reach, never additive.** The
253
+ * opposite direction (CONFIRMED \ REACH-NOW: a backend the operator confirmed that
254
+ * this auditor cannot reach) is the harmless *subset* case and is deliberately
255
+ * silent — it is also why the synthetic `worker-command` entry and
256
+ * `host_model_cost_order` need no special-casing here.
257
+ *
258
+ * @param confirmation - The persisted decision (CONFIRMED).
259
+ * @param sessionConfig - The EFFECTIVE config, so `representativeModelId` derives
260
+ * keys identically to the write side.
261
+ * @param sources - REACH-NOW's source half. MUST come from the
262
+ * `gatherDispatchableSources` chokepoint — the single async source-gather point
263
+ * both `buildSourcePools` and the Gate-0 surface consume, so what the operator
264
+ * confirms is exactly what routes. Re-deriving it from `resolveAmbientSources`
265
+ * would reintroduce the display/dispatch drift that invariant forbids, and is
266
+ * structurally blind to descriptor-supplied sources, the demoted primary, and the
267
+ * legacy `openai_compatible` fold.
268
+ * @param env - Process env, for `discoverProviders` (REACH-NOW's provider half).
269
+ * @param detectCommand - Injectable PATH-detection hook so tests drive discovery
270
+ * deterministically instead of shelling out.
271
+ */
272
+ export declare function computeNewlyReachableBackends(confirmation: SharedProviderConfirmation, sessionConfig: SessionConfig, sources?: readonly DispatchableSource[], env?: NodeJS.ProcessEnv, detectCommand?: (command: string) => boolean): NewlyReachableBackend[];
273
+ /**
274
+ * The dispatchable-pool exclusion rules for THIS process: the operator's explicit
275
+ * {@link DispatchExclusionPattern}s, plus every provider that is self-spawn-blocked
276
+ * *in this process's env* and was not explicitly opted back in.
277
+ *
278
+ * Reach is recomputed here rather than read from the artifact's derived `excluded`
279
+ * flag — that flag encodes the WRITING auditor's env, and an auditor for whom a
280
+ * provider is perfectly spawnable must not inherit another's block. The operator's
281
+ * decision is inherited (it is a rule); the reach assessment is not.
282
+ *
283
+ * ⚠ **These rules are only safe to apply to SOURCE pools.** Inside any agent session
284
+ * the self-spawn half ALWAYS names that agent (`CLAUDECODE` ⇒ `claude-code`, `CODEX`
285
+ * ⇒ `codex`) — i.e. the conversation host itself. Applying them to HOST pools would
286
+ * zero out dispatch entirely: the driver would exclude itself. It is harmless at
287
+ * `buildSourcePools` only because a host can never BE a source — `claude-code` is
288
+ * structurally absent from `DISPATCHABLE_SOURCE_PROVIDERS`, so in a Claude Code
289
+ * session the filter is a no-op. Honoring an operator exclusion of the host/primary
290
+ * provider therefore is NOT a matter of passing these rules to the host-pool builder;
291
+ * it needs a separate decision about what excluding your own driver should even mean.
292
+ */
293
+ export declare function resolveDispatchExclusion(policy: ConfirmedDispatchPolicy | null | undefined, env?: NodeJS.ProcessEnv): DispatchExclusion;
294
+ /**
295
+ * Read the operator's confirmed route policy from the shared Gate-0 confirmation.
296
+ *
297
+ * Deliberately reads the artifact DIRECTLY rather than going through
298
+ * {@link readSharedProviderConfirmation}, so that **a corrupt sibling field cannot
299
+ * discard the decision**: `parseSharedProviderConfirmation` returns `null` wholesale
300
+ * on any malformed required field or a `schema_version` mismatch. Routing policy
301
+ * through it would make an unrelated corruption (or a future version bump) silently
302
+ * lift the operator's exclusions — failing OPEN on the one field that must fail
303
+ * closed. Parsing `policy` on its own keeps that blast radius out.
304
+ *
305
+ * (Before G3 this bypass carried a second rationale — dodging the roster-freshness
306
+ * gate. That gate is gone: no read of this artifact is reach-gated any more, so the
307
+ * remaining reason is blast radius alone.)
308
+ *
309
+ * **Honest limit — this is not absolutely fail-closed.** An absent or unparseable
310
+ * artifact yields `null` (no operator policy). That residue is irreducible here: with
311
+ * no readable decision on disk there is nothing to fail closed ON. Self-spawn-blocked
312
+ * providers are still excluded locally by {@link resolveDispatchExclusion}, which
313
+ * needs no artifact.
314
+ */
315
+ export declare function readConfirmedDispatchPolicy(root: string | undefined): Promise<ConfirmedDispatchPolicy | null>;
154
316
  /**
155
317
  * Atomically write the shared confirmation to
156
318
  * `<root>/.audit-tools/provider-confirmation.json`. The durable write goes
@@ -161,44 +323,55 @@ export declare function buildSharedProviderConfirmation(sessionConfig?: SessionC
161
323
  */
162
324
  export declare function writeSharedProviderConfirmation(root: string, confirmation: SharedProviderConfirmation, logger?: RunLogger): Promise<void>;
163
325
  /**
164
- * Read + interpret the shared confirmation for `root`. THREE-valued (CE-012):
326
+ * Read + parse the shared confirmation for `root`. TWO-valued:
165
327
  *
166
328
  * - returns `null` when the artifact is ABSENT or MALFORMED — the caller then
167
329
  * resolves its provider independently, exactly as today (INV-DC1-6
168
330
  * never-block). Absence is the standalone-remediate case and is not an error.
169
- * - returns `{ status: 'confirmed', confirmation }` when the artifact is valid
170
- * AND the stamped roster still matches the currently-discovered roster — the
171
- * caller honors the recorded pool.
172
- * - returns `{ status: 'reconfirm', confirmation, reason }` when the artifact
173
- * is valid but the roster has CHANGED since it was written (a provider
174
- * appeared or disappeared) — a DISTINCT signal so the caller re-confirms
175
- * rather than pinning a stale pool (INV-DC2-3). This is the CE-012 third
176
- * state that keeps INV-DC2-3 from collapsing into the never-block `null`.
331
+ * - returns the parsed confirmation otherwise — the operator's persisted route
332
+ * DECISION, honored as-is.
333
+ *
334
+ * **Reach-free by construction (G3).** This read does NOT check whether the
335
+ * reachable backend set still matches whatever the writing auditor saw. It cannot
336
+ * meaningfully: a *different* auditor legitimately has different reach, so that
337
+ * comparison was noise cross-auditor — and answering it by discarding the
338
+ * operator's decision fails OPEN on a policy question. A backend becoming newly
339
+ * reachable is a real event, handled by the reconciliation gate
340
+ * ({@link computeNewlyReachableBackends}), which compares the DECISION against
341
+ * *this* auditor's reach and is keyed on `autonomous_mode`.
177
342
  *
178
343
  * Never throws: a read/parse failure is treated as absent/malformed → `null`.
179
344
  * The read is lockless (no lock needed: the writer's atomic rename guarantees a
180
345
  * complete file either way — CE-003) and so cannot deadlock against a writer.
181
346
  */
182
- export declare function readSharedProviderConfirmation(root: string, sessionConfig?: SessionConfig, env?: NodeJS.ProcessEnv): Promise<SharedProviderConfirmationRead>;
347
+ export declare function readSharedProviderConfirmation(root: string): Promise<SharedProviderConfirmation | null>;
183
348
  /**
184
349
  * Read the operator-confirmed cost ordering (rung 1 of costRank; see
185
350
  * spec/cost-first-routing.md) from the shared Gate-0 confirmation as a model-keyed
186
351
  * `Map<model_id, cost_order>` for the dispatch build sites. Single-sourced so audit
187
352
  * and remediate honor it identically. Best-effort and never throws: an absent
188
- * `root`, a missing/malformed confirmation, or a roster that has since changed
189
- * (`reconfirm`) all yield an empty map — dispatch then falls to real price then
190
- * tier. Only a `confirmed` (roster-fresh) confirmation contributes positions.
353
+ * `root` or a missing/malformed confirmation yields an empty map — dispatch then
354
+ * falls to real price then tier.
355
+ *
356
+ * **Not gated on reach (G3 step 1).** The cost order is the operator's POLICY —
357
+ * "the operator may reorder" — so a shift in what happens to be reachable must not
358
+ * silently discard it. The former roster-freshness gate did exactly that, on the
359
+ * false premise that these positions are reach-derived; they are not, and it was
360
+ * the live defect this fixes.
191
361
  */
192
- export declare function readConfirmedCostPositions(root: string | undefined, sessionConfig?: SessionConfig, env?: NodeJS.ProcessEnv): Promise<Map<string, number>>;
362
+ export declare function readConfirmedCostPositions(root: string | undefined): Promise<Map<string, number>>;
193
363
  /**
194
364
  * Read the operator-confirmed cost↔speed dispatch bias (λ ∈ [0,1]) from the shared
195
365
  * Gate-0 confirmation for the dispatch build sites (spec/dispatch-cost-speed-dial.md).
196
366
  * Single-sourced so audit and remediate apply the identical operating point.
197
- * Best-effort and never throws: an absent `root`, a missing/malformed confirmation, a
198
- * roster that has since changed (`reconfirm`), or an absent field all yield the
199
- * cost-first default `0`. Only a `confirmed` (roster-fresh) confirmation contributes.
367
+ * Best-effort and never throws: an absent `root`, a missing/malformed confirmation,
368
+ * or an absent field all yield the cost-first default `0`.
369
+ *
370
+ * **Not gated on reach (G3 step 1)** — λ is the operator's durable operating point
371
+ * on the cost-vs-throughput frontier, i.e. POLICY. See
372
+ * {@link readConfirmedCostPositions}.
200
373
  */
201
- export declare function readConfirmedDispatchBias(root: string | undefined, sessionConfig?: SessionConfig, env?: NodeJS.ProcessEnv): Promise<number>;
374
+ export declare function readConfirmedDispatchBias(root: string | undefined): Promise<number>;
202
375
  /** File name of the host-written Gate-0 input under the audit artifacts dir. */
203
376
  export declare const PROVIDER_CONFIRMATION_INPUT_FILENAME = "provider-confirmation.input.json";
204
377
  /**
@@ -215,4 +388,20 @@ export declare function parseProviderConfirmationInput(value: unknown): Provider
215
388
  * has not acted yet" signal the gate uses to decide emit-vs-consume. Never throws.
216
389
  */
217
390
  export declare function readProviderConfirmationInput(artifactsDir: string): Promise<ProviderConfirmationInput | null>;
391
+ /**
392
+ * Invalidate a CONSUMED Gate-0 input by deleting it — the second half of
393
+ * consume-and-invalidate, paired here with {@link readProviderConfirmationInput} so
394
+ * the two cannot drift apart.
395
+ *
396
+ * The input's presence is the "operator has acted" signal the gate reads to decide
397
+ * emit-vs-consume. Once promoted into the canonical artifacts it is SPENT: leaving it
398
+ * on disk means a later reconciliation delta silently re-consumes a submission that
399
+ * answered an older question, auto-satisfying the gate instead of asking the
400
+ * operator. Deleting it is what makes the gate able to fire a second time at all.
401
+ *
402
+ * Best-effort and never throws: an already-absent file is the desired end state, and
403
+ * a failed unlink must not break the in-flight obligation (the promotion itself
404
+ * already succeeded).
405
+ */
406
+ export declare function unlinkProviderConfirmationInput(artifactsDir: string): Promise<void>;
218
407
  //# sourceMappingURL=sharedProviderConfirmation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sharedProviderConfirmation.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/sharedProviderConfirmation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sharedProviderConfirmation.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/sharedProviderConfirmation.ts"],"names":[],"mappings":"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"}