review-council 4.1.10 → 4.1.12

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 (172) hide show
  1. package/README.md +73 -10
  2. package/dist/config/defaults.d.ts +9 -14
  3. package/dist/config/defaults.js +8 -14
  4. package/dist/config/defaults.js.map +1 -1
  5. package/dist/config/schema.d.ts +23 -1
  6. package/dist/config/schema.js +4 -1
  7. package/dist/config/schema.js.map +1 -1
  8. package/dist/consensus/claim-contract.d.ts +9 -0
  9. package/dist/consensus/claim-contract.js +307 -0
  10. package/dist/consensus/claim-contract.js.map +1 -0
  11. package/dist/consensus/claim-identity.d.ts +5 -0
  12. package/dist/consensus/claim-identity.js +39 -0
  13. package/dist/consensus/claim-identity.js.map +1 -0
  14. package/dist/consensus/gating.d.ts +20 -6
  15. package/dist/consensus/gating.js +46 -34
  16. package/dist/consensus/gating.js.map +1 -1
  17. package/dist/consensus/semantic-deduper.d.ts +10 -0
  18. package/dist/consensus/semantic-deduper.js +70 -0
  19. package/dist/consensus/semantic-deduper.js.map +1 -0
  20. package/dist/consensus/types.d.ts +3 -0
  21. package/dist/consensus/verification-contract.d.ts +8 -0
  22. package/dist/consensus/verification-contract.js +95 -0
  23. package/dist/consensus/verification-contract.js.map +1 -0
  24. package/dist/converge/attempt-budget.d.ts +7 -2
  25. package/dist/converge/attempt-budget.js +26 -12
  26. package/dist/converge/attempt-budget.js.map +1 -1
  27. package/dist/converge/cycle-remote.d.ts +6 -0
  28. package/dist/converge/cycle-remote.js +41 -0
  29. package/dist/converge/cycle-remote.js.map +1 -0
  30. package/dist/converge/fresh-review.d.ts +37 -0
  31. package/dist/converge/fresh-review.js +351 -0
  32. package/dist/converge/fresh-review.js.map +1 -0
  33. package/dist/converge/launch-guard.d.ts +13 -3
  34. package/dist/converge/launch-guard.js +83 -2
  35. package/dist/converge/launch-guard.js.map +1 -1
  36. package/dist/converge/review-cycle.d.ts +49 -0
  37. package/dist/converge/review-cycle.js +26 -0
  38. package/dist/converge/review-cycle.js.map +1 -0
  39. package/dist/converge/run-state.d.ts +6 -3
  40. package/dist/converge/run-state.js +25 -2
  41. package/dist/converge/run-state.js.map +1 -1
  42. package/dist/converge/stale-report.js +8 -1
  43. package/dist/converge/stale-report.js.map +1 -1
  44. package/dist/dispatch/adapter.d.ts +3 -0
  45. package/dist/dispatch/anthropic.js +3 -1
  46. package/dist/dispatch/anthropic.js.map +1 -1
  47. package/dist/dispatch/async-lane.d.ts +1 -1
  48. package/dist/dispatch/async-lane.js +3 -1
  49. package/dist/dispatch/async-lane.js.map +1 -1
  50. package/dist/dispatch/capture-council.d.ts +59 -0
  51. package/dist/dispatch/capture-council.js +112 -0
  52. package/dist/dispatch/capture-council.js.map +1 -0
  53. package/dist/dispatch/captured-async.d.ts +67 -0
  54. package/dist/dispatch/captured-async.js +40 -0
  55. package/dist/dispatch/captured-async.js.map +1 -0
  56. package/dist/dispatch/captured-inputs.d.ts +50 -0
  57. package/dist/dispatch/captured-inputs.js +188 -0
  58. package/dist/dispatch/captured-inputs.js.map +1 -0
  59. package/dist/dispatch/checkpoint-async-context.d.ts +25 -0
  60. package/dist/dispatch/checkpoint-async-context.js +38 -0
  61. package/dist/dispatch/checkpoint-async-context.js.map +1 -0
  62. package/dist/dispatch/checkpoint-async-store.d.ts +95 -0
  63. package/dist/dispatch/checkpoint-async-store.js +369 -0
  64. package/dist/dispatch/checkpoint-async-store.js.map +1 -0
  65. package/dist/dispatch/checkpoint-async.d.ts +198 -0
  66. package/dist/dispatch/checkpoint-async.js +208 -0
  67. package/dist/dispatch/checkpoint-async.js.map +1 -0
  68. package/dist/dispatch/checkpoint-verification-context.d.ts +15 -0
  69. package/dist/dispatch/checkpoint-verification-context.js +48 -0
  70. package/dist/dispatch/checkpoint-verification-context.js.map +1 -0
  71. package/dist/dispatch/checkpoint-verification.d.ts +189 -0
  72. package/dist/dispatch/checkpoint-verification.js +357 -0
  73. package/dist/dispatch/checkpoint-verification.js.map +1 -0
  74. package/dist/dispatch/checkpoint.d.ts +315 -0
  75. package/dist/dispatch/checkpoint.js +1374 -0
  76. package/dist/dispatch/checkpoint.js.map +1 -0
  77. package/dist/dispatch/openai.js +2 -0
  78. package/dist/dispatch/openai.js.map +1 -1
  79. package/dist/dispatch/original-launch.d.ts +36 -0
  80. package/dist/dispatch/original-launch.js +117 -0
  81. package/dist/dispatch/original-launch.js.map +1 -0
  82. package/dist/dispatch/recovery-operation.d.ts +44 -0
  83. package/dist/dispatch/recovery-operation.js +146 -0
  84. package/dist/dispatch/recovery-operation.js.map +1 -0
  85. package/dist/evidence/claim-recovery/claim-index.d.ts +12 -0
  86. package/dist/evidence/claim-recovery/claim-index.js +56 -0
  87. package/dist/evidence/claim-recovery/claim-index.js.map +1 -0
  88. package/dist/evidence/claim-recovery/context.d.ts +15 -0
  89. package/dist/evidence/claim-recovery/context.js +40 -0
  90. package/dist/evidence/claim-recovery/context.js.map +1 -0
  91. package/dist/evidence/claim-recovery/proof-storage.d.ts +6 -0
  92. package/dist/evidence/claim-recovery/proof-storage.js +97 -0
  93. package/dist/evidence/claim-recovery/proof-storage.js.map +1 -0
  94. package/dist/evidence/claim-recovery/validation/claims.d.ts +20 -0
  95. package/dist/evidence/claim-recovery/validation/claims.js +108 -0
  96. package/dist/evidence/claim-recovery/validation/claims.js.map +1 -0
  97. package/dist/evidence/claim-recovery/validation/lexical.d.ts +18 -0
  98. package/dist/evidence/claim-recovery/validation/lexical.js +91 -0
  99. package/dist/evidence/claim-recovery/validation/lexical.js.map +1 -0
  100. package/dist/evidence/claim-recovery/validation/materials.d.ts +19 -0
  101. package/dist/evidence/claim-recovery/validation/materials.js +160 -0
  102. package/dist/evidence/claim-recovery/validation/materials.js.map +1 -0
  103. package/dist/evidence/claim-recovery/validation/primitives.d.ts +11 -0
  104. package/dist/evidence/claim-recovery/validation/primitives.js +41 -0
  105. package/dist/evidence/claim-recovery/validation/primitives.js.map +1 -0
  106. package/dist/evidence/claim-recovery/validation/receipts.d.ts +37 -0
  107. package/dist/evidence/claim-recovery/validation/receipts.js +83 -0
  108. package/dist/evidence/claim-recovery/validation/receipts.js.map +1 -0
  109. package/dist/evidence/claim-recovery/validation/recovery-json.d.ts +8 -0
  110. package/dist/evidence/claim-recovery/validation/recovery-json.js +42 -0
  111. package/dist/evidence/claim-recovery/validation/recovery-json.js.map +1 -0
  112. package/dist/evidence/event-receipts.d.ts +16 -0
  113. package/dist/evidence/event-receipts.js +41 -0
  114. package/dist/evidence/event-receipts.js.map +1 -0
  115. package/dist/evidence/original-run/decode.d.ts +6 -0
  116. package/dist/evidence/original-run/decode.js +30 -1
  117. package/dist/evidence/original-run/decode.js.map +1 -1
  118. package/dist/evidence/original-run/remote.js +5 -0
  119. package/dist/evidence/original-run/remote.js.map +1 -1
  120. package/dist/evidence/original-run/source.js +19 -5
  121. package/dist/evidence/original-run/source.js.map +1 -1
  122. package/dist/evidence/status.d.ts +2 -1
  123. package/dist/evidence/status.js +2 -1
  124. package/dist/evidence/status.js.map +1 -1
  125. package/dist/index.js +93 -23
  126. package/dist/index.js.map +1 -1
  127. package/dist/report/aggregation-inputs.d.ts +51 -0
  128. package/dist/report/aggregation-inputs.js +114 -0
  129. package/dist/report/aggregation-inputs.js.map +1 -0
  130. package/dist/report/assembly.js +2 -1
  131. package/dist/report/assembly.js.map +1 -1
  132. package/dist/report/recovery-source.d.ts +7 -0
  133. package/dist/report/recovery-source.js +7 -0
  134. package/dist/report/recovery-source.js.map +1 -0
  135. package/dist/report/run-header.d.ts +10 -1
  136. package/dist/report/run-header.js +10 -1
  137. package/dist/report/run-header.js.map +1 -1
  138. package/dist/roles/builtin.js +0 -44
  139. package/dist/roles/builtin.js.map +1 -1
  140. package/dist/roles/loader.d.ts +1 -2
  141. package/dist/roles/loader.js +3 -27
  142. package/dist/roles/loader.js.map +1 -1
  143. package/dist/telemetry/abort-signal.js +11 -1
  144. package/dist/telemetry/abort-signal.js.map +1 -1
  145. package/dist/telemetry/attested-retry.js +2 -1
  146. package/dist/telemetry/attested-retry.js.map +1 -1
  147. package/dist/telemetry/deliver.js +0 -1
  148. package/dist/telemetry/deliver.js.map +1 -1
  149. package/dist/telemetry/envelope-validation.js +21 -1
  150. package/dist/telemetry/envelope-validation.js.map +1 -1
  151. package/dist/telemetry/envelope.d.ts +2 -0
  152. package/dist/telemetry/envelope.js +1 -0
  153. package/dist/telemetry/envelope.js.map +1 -1
  154. package/dist/telemetry/events.d.ts +9 -1
  155. package/dist/telemetry/events.js +3 -0
  156. package/dist/telemetry/events.js.map +1 -1
  157. package/dist/telemetry/read-sink.d.ts +2 -0
  158. package/dist/telemetry/read-sink.js +1 -0
  159. package/dist/telemetry/read-sink.js.map +1 -1
  160. package/dist/telemetry/recovery/source.d.ts +6 -5
  161. package/dist/telemetry/recovery/source.js +1 -0
  162. package/dist/telemetry/recovery/source.js.map +1 -1
  163. package/dist/telemetry/recovery-request-budget.d.ts +39 -0
  164. package/dist/telemetry/recovery-request-budget.js +102 -0
  165. package/dist/telemetry/recovery-request-budget.js.map +1 -0
  166. package/dist/telemetry/scrub.d.ts +2 -2
  167. package/dist/telemetry/scrub.js +5 -5
  168. package/dist/telemetry/scrub.js.map +1 -1
  169. package/dist/telemetry/sink.d.ts +25 -2
  170. package/dist/telemetry/sink.js +285 -48
  171. package/dist/telemetry/sink.js.map +1 -1
  172. package/package.json +1 -1
package/README.md CHANGED
@@ -44,8 +44,21 @@ rcl review changes.patch --ci --markdown report.md
44
44
  | 🏗️ `architecture` | Module boundaries, coupling, and architectural patterns |
45
45
  | 🐛 `bug-hunter` | Logic errors, null paths, race conditions, off-by-one |
46
46
  | ♿ `accessibility-auditor` | WCAG compliance, ARIA roles, keyboard navigation |
47
- | 📋 `project-rules` | Enforces repo conventions from `AGENTS.md`, `CLAUDE.md`, etc. |
48
47
  | 📄 `spec-compliance` | Checks implementation against a spec or plan file |
48
+ | `regression-hunter` | Changed defaults, weakened guards, and lost behavior |
49
+ | `dependency-hygiene` | Unnecessary dependencies, external requests, and privacy leaks |
50
+ | `edge-case-hunter` | Boundary values, unusual inputs, and failure paths |
51
+
52
+ `project-rules` and `dead-code` are no longer built-in reviewer roles. Repository
53
+ rules discovered in `AGENTS.md`, `CLAUDE.md`, or the other supported rules files
54
+ are supplied as shared context to the remaining reviewers. Remove the retired
55
+ names from explicit role lists; they follow the usual unknown-role warning and
56
+ skip behavior unless you define a custom role with that name.
57
+
58
+ The default Fable and Sol general reviewers plus specialist assignments schedule
59
+ 13 blocking seats, or 14 when a specification enables `spec-compliance`. Gemini
60
+ is eligible for specialist assignments only. The async general reviewer
61
+ and verifier are separate; quorum is calculated from the blocking roster.
49
62
 
50
63
  List roles in the terminal:
51
64
 
@@ -91,6 +104,7 @@ Review a PR, a local diff, or uncommitted work.
91
104
  | `--expect-head-sha <sha>` | Fail fast unless the resolved head commit equals this SHA |
92
105
  | `--spec-source <source>` | Where `--spec` came from: `flag`, `repo_file`, or `harness_issue:<ID>` |
93
106
  | `--converge-target <key>` / `--round <n>` / `--attempt <n>` | Converge context recorded in the report (or `RCL_CONVERGE_TARGET` / `_ROUND` / `_ATTEMPT`) |
107
+ | `--start-over` | Explicitly start a fresh PR review with a new normal budget; preserve all prior spending and evidence |
94
108
  | `--guarded-converge` | Validate and claim inside this process; derive the next round from native admitted state |
95
109
  | `--launch-intent <intent>` | Guarded intent: `review` (default), `stop-upstream`, `stop-review`, or `retry-delivery` |
96
110
  | `--retry-reason <reason>` | Explicit bounded recovery decision for a failed/unknown launch; preserves spent attempts |
@@ -165,6 +179,20 @@ rcl roles show <name> # Show system prompt and details for a role
165
179
 
166
180
  ---
167
181
 
182
+ ### Start a fresh review
183
+
184
+ ```bash
185
+ rcl review owner/repo#123 --start-over
186
+ ```
187
+
188
+ This reviews the full current inputs again, even on an unchanged head or after an exhausted previous cycle. RCL archives the original native state and spending, creates a Harness review cycle, and starts at attempt 1 / round 1 with the normal 20-attempt / 15-round budget. Previous approvals, dismissals and reviewer responses stay historical. Explicit `--max-attempts` / `--max-rounds` select different limits for the new cycle; old overrides are not inherited.
189
+
190
+ The command enables guarded launch and chooses private JSON/Markdown paths under the Git common directory when omitted. It prints the cycle and cumulative prior spending. Keep the files in place. A captured patch can use the same flag with `--for-pr owner/repo#123 --head-sha <captured-head>`. Full Harness evidence and a user/API actor credential are required; unbound local and attested starts are refused.
191
+
192
+ An unfinished start resumes with the same command and operation, keeping spent claims. A durable terminal dispatch record marks completion, including a recorded failure. If the command output or acknowledgement is lost or uncertain, inspect the native current operation and retained launch/report before retrying; reuse a completed result instead of blindly repeating `--start-over`. An invocation after terminal completion represents a new request; identical command text cannot distinguish an acknowledgement retry from a later deliberate fresh request. No user-supplied operation ID or additional confirmation is required. Ordinary `rcl review owner/repo#123` discovers the local cycle and continues its existing budget; it does not replenish it. A concurrent fresh request cannot silently create another cycle after waiting for the first.
193
+
194
+ Stop an active review through its recorded host task before replacing it. Late reports and verdicts remain bound to their original cycle. After checking reviewer health and exact-head freshness, admit the report with `converge-report`; use `converge-verdict --run-id <report-run-id>` for triage in a fresh cycle. All native, enforced and CI merge gates still apply. To complete missing reviewers while preserving successful work, use the supported recovery workflow instead of starting over.
195
+
168
196
  ### Guarded convergence launches
169
197
 
170
198
  ```bash
@@ -1008,6 +1036,9 @@ Place `.review-council.yml` in your project root and run `rcl` from there. rcl l
1008
1036
  models:
1009
1037
  - anthropic/claude-fable-5-1
1010
1038
  - openai/gpt-6-sol
1039
+
1040
+ # Specialist assignments only; no additional general reviewer.
1041
+ secondaryModels:
1011
1042
  - google/gemini-3.8-flash
1012
1043
 
1013
1044
  # Async bonus reviewers — fired with each round, never awaited. Results that
@@ -1046,8 +1077,8 @@ thresholds:
1046
1077
  jaccardThreshold: 0.3 # weighted title+description similarity threshold for dedup
1047
1078
 
1048
1079
  # Convergence gating: which findings block convergence / CI (RCL-23).
1049
- # A finding gates when multi-model, critical, or unrefuted by a cheap
1050
- # verification pass; refuted single-model claims stay in the report but
1080
+ # A finding gates when multi-model, critical, or confirmed with source evidence by the
1081
+ # verifier; refuted or insufficient-evidence single-model claims stay visible but
1051
1082
  # stop blocking, and so does a claim the pass could not check (verdict
1052
1083
  # unavailable): verification promotes nothing it did not check. Report
1053
1084
  # JSON marks every finding with gating.reason
@@ -1055,7 +1086,8 @@ thresholds:
1055
1086
  gating:
1056
1087
  mode: verified-consensus # or all-findings (legacy: severity alone decides)
1057
1088
  minModels: 2 # distinct models for consensus gating
1058
- verificationModel: google/gemini-3.8-flash # direct-API only
1089
+ verificationModel: openai/gpt-6-astra # direct-API only
1090
+ verificationReasoningEffort: high # OpenAI verifier only; separate from reviewer effort
1059
1091
  verificationPassTimeout: 180000 # ms for the complete verification queue
1060
1092
 
1061
1093
  # Output defaults
@@ -1065,19 +1097,21 @@ output:
1065
1097
  belowThresholdAppendix: true # false drops below-threshold findings outright
1066
1098
 
1067
1099
  # Concurrency and reliability
1068
- concurrency: 6
1100
+ concurrency: 9 # maximum simultaneous blocking reviewer calls per process
1101
+ # set to 6 to retain the previous limit
1069
1102
  timeout: 540000 # ms per blocking model call (matches the current default)
1070
1103
  asyncTimeout: 900000 # ms per async-lane call (slow reasoning models get headroom; nothing waits on them)
1071
- # quorumFraction: 0.75 # round closes once this share of calls has completed; stragglers
1072
- # are canceled and recorded (core `models` are never canceled).
1104
+ # quorumFraction: 0.75 # round closes once this share of blocking seats succeeds
1105
+ # on every chunk; all stragglers can be canceled, including core models.
1073
1106
  # Default: exactly 2/3 — leave unset for that; 1 disables.
1074
1107
  maxRetries: 3
1075
1108
 
1076
1109
  # Reasoning budget for providers that support it (currently OpenRouter).
1077
- # low | medium | high — default medium. Unbounded reasoning makes these
1110
+ # low | medium | high — default low (supported by the default Kimi K3).
1111
+ # Check the selected model's supported levels before overriding. Unbounded reasoning makes these
1078
1112
  # models spend the whole completion budget thinking before they answer;
1079
- # raise to 'high' for deeper review at the cost of latency and tokens.
1080
- reasoningEffort: medium
1113
+ # select a supported higher level when evaluation justifies deeper review.
1114
+ reasoningEffort: low
1081
1115
 
1082
1116
  # Context files to attach to every review
1083
1117
  context:
@@ -1091,6 +1125,11 @@ spec: SPEC.md
1091
1125
  # githubToken: ghp_...
1092
1126
  ```
1093
1127
 
1128
+ `concurrency` limits blocking reviewer calls within one RCL process. Separate
1129
+ RCL processes share provider capacity without sharing this limit; async reviewers
1130
+ and verification use their own scheduling. Set `concurrency: 6` in the applicable
1131
+ configuration to restore the previous limit for new reviews.
1132
+
1094
1133
  `maxRetries` limits additional adapter SDK invocations after the first attempt;
1095
1134
  all attempts share the call's `timeout` and parent cancellation signal. Supported
1096
1135
  transient connection failures and HTTP status errors may retry; cancellation,
@@ -1103,6 +1142,30 @@ exposes, not proof of total charges across retries.
1103
1142
 
1104
1143
  Supported config file names: `.review-council.yml`, `.review-council.yaml`, `.review-council.json`. Executable JS config is never discovered: rcl often runs in untrusted checkouts with provider keys in the environment.
1105
1144
 
1145
+ The verifier uses three verdicts: `confirmed`, `refuted`, and
1146
+ `insufficient_evidence`. Confirmation requires a reachable failure mechanism and
1147
+ exact code excerpts from the supplied change; citations are checked against that
1148
+ source before a claim can be promoted to `verified`. Missing context or inability
1149
+ to refute a claim is not confirmation. This checks citation provenance, not semantic
1150
+ truth: the verifier still has to reason correctly. Infrastructure failures remain
1151
+ `unavailable`. Historical `unrefuted` verdicts retain their original meaning.
1152
+
1153
+ Astra defaults to `high` effort. Set `gating.verificationReasoningEffort` to `low`,
1154
+ `medium`, `high`, `xhigh`, or `max` for an OpenAI verifier. The setting is included
1155
+ in the report header and retained verification plan. Other provider overrides
1156
+ retain their provider effort defaults and reject this OpenAI-only setting.
1157
+
1158
+ The top-level `reasoningEffort` applies only to OpenRouter reviewers. Direct
1159
+ Sol and Gemini reviewers use their provider defaults (currently `medium`).
1160
+ Fable 5.1 reviews explicitly use `high`, streaming, and a 65,536-token output
1161
+ ceiling so thinking and findings share adequate headroom. This follows
1162
+ [Anthropic's recommended starting effort](https://platform.claude.com/docs/en/build-with-claude/effort)
1163
+ while preserving RCL's whole-call timeout and rejection of incomplete output.
1164
+ OpenRouter reviewers default to `low`, a supported level for the default Kimi K3;
1165
+ explicit `reasoningEffort` overrides are preserved. Kimi K3 advertises `low`,
1166
+ `high`, and `max`, so avoid overriding it to `medium`. Effort labels are
1167
+ provider-specific and do not imply equal compute or quality across models.
1168
+
1106
1169
  Verifier calls default to the remaining whole-pass budget. Set the optional
1107
1170
  `gating.verificationTimeout` in milliseconds to impose a shorter per-call limit;
1108
1171
  every call is still capped by the remaining `verificationPassTimeout` deadline.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Core (blocking) council — every round waits for these and only these.
2
+ * Primary council — general reviewers; specialists also use secondary models.
3
3
  * Direct-API models only: the RCL-21 audit (922 rounds, 15,268 calls) found
4
4
  * the OpenRouter wing at p50 7–9.5 min per call with 19–39% dead calls,
5
5
  * last-finisher in 97.6% of rounds; the audited direct trio answered in
@@ -7,7 +7,7 @@
7
7
  * topology drops the median round from 14.4 to 2.0 min while 91% of
8
8
  * multi-model findings still surface.
9
9
  */
10
- export declare const DEFAULT_MODELS: readonly ["anthropic/claude-fable-5-1", "openai/gpt-6-sol", "google/gemini-3.8-flash"];
10
+ export declare const DEFAULT_MODELS: readonly ["anthropic/claude-fable-5-1", "openai/gpt-6-sol"];
11
11
  /**
12
12
  * Async bonus reviewers — fired with the round but never awaited; whatever
13
13
  * has arrived by the NEXT round's dedup is merged then, marked async in the
@@ -15,14 +15,8 @@ export declare const DEFAULT_MODELS: readonly ["anthropic/claude-fable-5-1", "op
15
15
  * corroboration rate (62%) but is ~6× slower than the core trio.
16
16
  */
17
17
  export declare const DEFAULT_ASYNC_MODELS: readonly ["openrouter/moonshotai/kimi-k3"];
18
- /**
19
- * Secondary models — specialized round-robin only, no general role.
20
- * Empty by default since RCL-25: qwen3.8-max, deepseek-v4-flash and grok-4.5
21
- * were removed after the audit (24–39% dead calls, worst finding-cost in the
22
- * council). Before any slow model earns a seat back, try it via its direct
23
- * provider API instead of OpenRouter and re-measure.
24
- */
25
- export declare const DEFAULT_SECONDARY_MODELS: readonly [];
18
+ /** Gemini contributes specialist reviews without adding a general-review seat. */
19
+ export declare const DEFAULT_SECONDARY_MODELS: readonly ["google/gemini-3.8-flash"];
26
20
  export declare const DEFAULT_THRESHOLDS: {
27
21
  readonly minConsensusScore: 0.4;
28
22
  readonly minConfidence: 0.2;
@@ -64,11 +58,12 @@ export declare const DEFAULT_MAX_RETRIES = 3;
64
58
  /**
65
59
  * Reasoning budget for OpenRouter-hosted models. Unbounded, they spend the
66
60
  * whole completion budget (and many minutes) thinking before emitting any
67
- * findings; 'medium' is calibrated against this repo's own diffs, where it
68
- * took the council from 10/17 to 17/17 completed reviews.
61
+ * findings. Kimi K3, the default async model, supports low/high/max, not
62
+ * medium. Use the supported low level while retaining the output/time caps;
63
+ * explicit configuration can still select another effort for other models.
69
64
  */
70
- export declare const DEFAULT_REASONING_EFFORT = "medium";
71
- export declare const DEFAULT_CONCURRENCY = 6;
65
+ export declare const DEFAULT_REASONING_EFFORT = "low";
66
+ export declare const DEFAULT_CONCURRENCY = 9;
72
67
  export declare const DEFAULT_SEVERITY_ORDER: readonly ["critical", "important", "minor", "nitpick"];
73
68
  export declare const CONFIDENCE_THRESHOLDS: {
74
69
  readonly veryHigh: 0.8;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Core (blocking) council — every round waits for these and only these.
2
+ * Primary council — general reviewers; specialists also use secondary models.
3
3
  * Direct-API models only: the RCL-21 audit (922 rounds, 15,268 calls) found
4
4
  * the OpenRouter wing at p50 7–9.5 min per call with 19–39% dead calls,
5
5
  * last-finisher in 97.6% of rounds; the audited direct trio answered in
@@ -10,7 +10,6 @@
10
10
  export const DEFAULT_MODELS = [
11
11
  'anthropic/claude-fable-5-1',
12
12
  'openai/gpt-6-sol',
13
- 'google/gemini-3.8-flash',
14
13
  ];
15
14
  /**
16
15
  * Async bonus reviewers — fired with the round but never awaited; whatever
@@ -19,14 +18,8 @@ export const DEFAULT_MODELS = [
19
18
  * corroboration rate (62%) but is ~6× slower than the core trio.
20
19
  */
21
20
  export const DEFAULT_ASYNC_MODELS = ['openrouter/moonshotai/kimi-k3'];
22
- /**
23
- * Secondary models — specialized round-robin only, no general role.
24
- * Empty by default since RCL-25: qwen3.8-max, deepseek-v4-flash and grok-4.5
25
- * were removed after the audit (24–39% dead calls, worst finding-cost in the
26
- * council). Before any slow model earns a seat back, try it via its direct
27
- * provider API instead of OpenRouter and re-measure.
28
- */
29
- export const DEFAULT_SECONDARY_MODELS = [];
21
+ /** Gemini contributes specialist reviews without adding a general-review seat. */
22
+ export const DEFAULT_SECONDARY_MODELS = ['google/gemini-3.8-flash'];
30
23
  export const DEFAULT_THRESHOLDS = {
31
24
  minConsensusScore: 0.4,
32
25
  minConfidence: 0.2,
@@ -68,11 +61,12 @@ export const DEFAULT_MAX_RETRIES = 3;
68
61
  /**
69
62
  * Reasoning budget for OpenRouter-hosted models. Unbounded, they spend the
70
63
  * whole completion budget (and many minutes) thinking before emitting any
71
- * findings; 'medium' is calibrated against this repo's own diffs, where it
72
- * took the council from 10/17 to 17/17 completed reviews.
64
+ * findings. Kimi K3, the default async model, supports low/high/max, not
65
+ * medium. Use the supported low level while retaining the output/time caps;
66
+ * explicit configuration can still select another effort for other models.
73
67
  */
74
- export const DEFAULT_REASONING_EFFORT = 'medium';
75
- export const DEFAULT_CONCURRENCY = 6;
68
+ export const DEFAULT_REASONING_EFFORT = 'low';
69
+ export const DEFAULT_CONCURRENCY = 9;
76
70
  export const DEFAULT_SEVERITY_ORDER = [
77
71
  'critical',
78
72
  'important',
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,4BAA4B;IAC5B,kBAAkB;IAClB,yBAAyB;CACjB,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,+BAA+B,CAAU,CAAC;AAE/E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAW,CAAC;AAEpD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,iBAAiB,EAAE,GAAG;IACtB,aAAa,EAAE,GAAG;IAClB,gBAAgB,EAAE,CAAC;IACnB;;;;;;;;OAQG;IACH,gBAAgB,EAAE,GAAG;CACb,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC;AACjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,UAAU;IACV,WAAW;IACX,OAAO;IACP,SAAS;CACD,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,GAAG,EAAE,GAAG;CACA,CAAC"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,4BAA4B;IAC5B,kBAAkB;CACV,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,+BAA+B,CAAU,CAAC;AAE/E,kFAAkF;AAClF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,yBAAyB,CAAU,CAAC;AAE7E,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,iBAAiB,EAAE,GAAG;IACtB,aAAa,EAAE,GAAG;IAClB,gBAAgB,EAAE,CAAC;IACnB;;;;;;;;OAQG;IACH,gBAAgB,EAAE,GAAG;CACb,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,UAAU;IACV,WAAW;IACX,OAAO;IACP,SAAS;CACD,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,GAAG,EAAE,GAAG;CACA,CAAC"}
@@ -44,9 +44,17 @@ export declare const ReasoningEffortSchema: z.ZodEnum<{
44
44
  medium: "medium";
45
45
  high: "high";
46
46
  }>;
47
+ export declare const VerificationReasoningEffortSchema: z.ZodEnum<{
48
+ low: "low";
49
+ medium: "medium";
50
+ high: "high";
51
+ xhigh: "xhigh";
52
+ max: "max";
53
+ }>;
54
+ export type VerificationReasoningEffort = z.infer<typeof VerificationReasoningEffortSchema>;
47
55
  /**
48
56
  * Convergence gating (RCL-23). `verified-consensus` (default): a finding
49
- * gates only when multi-model, critical, or unrefuted by the verification
57
+ * gates only when multi-model, critical, or confirmed with evidence by the verification
50
58
  * pass. `all-findings` restores the legacy behavior where every
51
59
  * critical/important finding gates.
52
60
  */
@@ -57,6 +65,13 @@ export declare const GatingSchema: z.ZodObject<{
57
65
  }>>;
58
66
  minModels: z.ZodOptional<z.ZodNumber>;
59
67
  verificationModel: z.ZodOptional<z.ZodString>;
68
+ verificationReasoningEffort: z.ZodOptional<z.ZodEnum<{
69
+ low: "low";
70
+ medium: "medium";
71
+ high: "high";
72
+ xhigh: "xhigh";
73
+ max: "max";
74
+ }>>;
60
75
  verificationTimeout: z.ZodOptional<z.ZodNumber>;
61
76
  verificationPassTimeout: z.ZodOptional<z.ZodNumber>;
62
77
  }, z.core.$strip>;
@@ -105,6 +120,13 @@ export declare const ConfigSchema: z.ZodObject<{
105
120
  }>>;
106
121
  minModels: z.ZodOptional<z.ZodNumber>;
107
122
  verificationModel: z.ZodOptional<z.ZodString>;
123
+ verificationReasoningEffort: z.ZodOptional<z.ZodEnum<{
124
+ low: "low";
125
+ medium: "medium";
126
+ high: "high";
127
+ xhigh: "xhigh";
128
+ max: "max";
129
+ }>>;
108
130
  verificationTimeout: z.ZodOptional<z.ZodNumber>;
109
131
  verificationPassTimeout: z.ZodOptional<z.ZodNumber>;
110
132
  }, z.core.$strip>>;
@@ -41,9 +41,10 @@ export const OutputSchema = z.object({
41
41
  belowThresholdAppendix: z.boolean().optional(),
42
42
  });
43
43
  export const ReasoningEffortSchema = z.enum(['low', 'medium', 'high']);
44
+ export const VerificationReasoningEffortSchema = z.enum(['low', 'medium', 'high', 'xhigh', 'max']);
44
45
  /**
45
46
  * Convergence gating (RCL-23). `verified-consensus` (default): a finding
46
- * gates only when multi-model, critical, or unrefuted by the verification
47
+ * gates only when multi-model, critical, or confirmed with evidence by the verification
47
48
  * pass. `all-findings` restores the legacy behavior where every
48
49
  * critical/important finding gates.
49
50
  */
@@ -53,6 +54,8 @@ export const GatingSchema = z.object({
53
54
  minModels: z.number().int().min(2).optional(),
54
55
  /** Direct-API model for the refutation pass (openrouter/ is rejected). */
55
56
  verificationModel: z.string().optional(),
57
+ /** OpenAI verifier effort, independent of reviewer reasoning effort. */
58
+ verificationReasoningEffort: VerificationReasoningEffortSchema.optional(),
56
59
  /** Per-call timeout (ms) for the verification pass. */
57
60
  verificationTimeout: TimerDelaySchema.optional(),
58
61
  /** Whole-pass timeout (ms) across every verification batch. */
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Finding } from './types.js';
2
+ import type { ClaimDescriptor } from '../evidence/claim-recovery/validation/claims.js';
3
+ type ClaimText = Pick<Finding, 'file' | 'title' | 'description' | 'suggestedFix'>;
4
+ /** Every accepted sentence is parsed; no subset of a compound claim qualifies. */
5
+ export declare function describeContract(f: ClaimText): ClaimDescriptor | undefined;
6
+ export declare function isContractDescriptor(descriptor: ClaimDescriptor): boolean;
7
+ /** Applies only to explicitly generated contracts, never to retained free text. */
8
+ export declare function compareContractDescriptors(a: ClaimDescriptor, b: ClaimDescriptor): 'exact_descriptor' | 'supported_paraphrase' | undefined;
9
+ export {};