opencode-swarm 7.157.0 → 7.158.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 (81) hide show
  1. package/.opencode/skills/swarm-pr-review/SKILL.md +24 -26
  2. package/.opencode/skills/swarm-pr-review/references/findings-persistence-contract.md +11 -3
  3. package/.opencode/skills/swarm-pr-review/references/parser-dry-run.md +1 -1
  4. package/.opencode/skills/swarm-pr-review/references/prompt-templates.md +3 -3
  5. package/dist/background/candidate-contract.d.ts +20 -3
  6. package/dist/background/candidate-parser.d.ts +8 -1
  7. package/dist/background/pr-review-contract.d.ts +93 -5
  8. package/dist/cli/{coder-settlement-dz2x352d.js → coder-settlement-5sexsmqz.js} +9 -9
  9. package/dist/cli/{config-doctor-4jxf9w9e.js → config-doctor-ewn2kw6d.js} +3 -3
  10. package/dist/cli/{core-xf2f087t.js → core-72wdmzps.js} +3 -3
  11. package/dist/cli/{curation-policy-72qx868r.js → curation-policy-vn3m5nq2.js} +4 -4
  12. package/dist/cli/curator-drift-g6w4ga1q.js +1 -1
  13. package/dist/cli/{curator-pjjw3ja4.js → curator-g06sa98p.js} +31 -31
  14. package/dist/cli/{curator-llm-factory-7mfvey3x.js → curator-llm-factory-r8q84m4g.js} +31 -31
  15. package/dist/cli/{evidence-summary-service-5ffkbs50.js → evidence-summary-service-ttd0ntm0.js} +12 -12
  16. package/dist/cli/{gate-evidence-ne9rbdtb.js → gate-evidence-agnxf7md.js} +6 -6
  17. package/dist/cli/{guardrail-explain-b9vr4ta3.js → guardrail-explain-qf4k176t.js} +32 -32
  18. package/dist/cli/{guardrail-log-hrt36jz5.js → guardrail-log-g4qc595v.js} +4 -4
  19. package/dist/cli/{guardrail-reset-pggm9hx4.js → guardrail-reset-zpxk0p1j.js} +31 -31
  20. package/dist/cli/{hive-promoter-7vxm11sm.js → hive-promoter-zxy07gjg.js} +31 -31
  21. package/dist/cli/{index-ebratyzr.js → index-1vxmqvpt.js} +1 -1
  22. package/dist/cli/{index-1dzy1j4v.js → index-5tchehv7.js} +2 -2
  23. package/dist/cli/{index-b5xm177r.js → index-5zgf140g.js} +1 -1
  24. package/dist/cli/{index-2e60kmzg.js → index-663wnh64.js} +6 -6
  25. package/dist/cli/{index-79k7p589.js → index-6xxpwk5x.js} +1 -1
  26. package/dist/cli/{index-3qpr16k2.js → index-745dh1z1.js} +34 -34
  27. package/dist/cli/{index-ngn6jmad.js → index-7s1hmrfh.js} +1 -1
  28. package/dist/cli/{index-dwkrdpz2.js → index-8fqb0ynp.js} +1 -1
  29. package/dist/cli/{index-p0by16z8.js → index-a1884hh4.js} +5 -5
  30. package/dist/cli/{index-93ymj3j5.js → index-bv24pbaj.js} +4 -4
  31. package/dist/cli/{index-vbqssmbs.js → index-c57cyrwn.js} +8 -8
  32. package/dist/cli/{index-tvtvhjh0.js → index-dmfbmnp7.js} +4 -4
  33. package/dist/cli/{index-3vqdt1sx.js → index-f036tggv.js} +5 -5
  34. package/dist/cli/{index-4w20thrc.js → index-f776m4r5.js} +2 -2
  35. package/dist/cli/{index-61nkp124.js → index-fwe1wh6r.js} +2 -2
  36. package/dist/cli/{index-q94gt4n9.js → index-gm10kvne.js} +3 -3
  37. package/dist/cli/{index-xe6zbfps.js → index-h52hs4e9.js} +1 -1
  38. package/dist/cli/{index-n7gv8m7v.js → index-nvta6kcv.js} +3 -3
  39. package/dist/cli/{index-gpf3cjre.js → index-pfnj5pvs.js} +1 -1
  40. package/dist/cli/{index-zq7pw6qg.js → index-pvs2zw1y.js} +2 -2
  41. package/dist/cli/{index-gk6wpq41.js → index-rac2gkvr.js} +862 -461
  42. package/dist/cli/{index-4kd1nqd2.js → index-rc93mm6e.js} +3 -5
  43. package/dist/cli/{index-nd22bsnt.js → index-rd324153.js} +2 -2
  44. package/dist/cli/{index-g0j2hnse.js → index-vwx0by4y.js} +5 -5
  45. package/dist/cli/{index-91ybfvy2.js → index-x4ftmdha.js} +1 -1
  46. package/dist/cli/{index-j3egsxa1.js → index-x71shq8j.js} +6 -6
  47. package/dist/cli/{index-n6ayyadp.js → index-y3hdwh66.js} +4 -4
  48. package/dist/cli/{index-12e2hztp.js → index-yfbp4q09.js} +1 -1
  49. package/dist/cli/{index-9r7gp6cp.js → index-yt75r1er.js} +4 -0
  50. package/dist/cli/{index-t0kxka8n.js → index-z54qw70y.js} +1 -1
  51. package/dist/cli/{index-8n602qc2.js → index-zawd71cg.js} +6 -6
  52. package/dist/cli/{index-6sbx96v6.js → index-zcmwwp1x.js} +5 -4
  53. package/dist/cli/index.js +32 -32
  54. package/dist/cli/{knowledge-escalator-d65mctqy.js → knowledge-escalator-22zaj224.js} +11 -11
  55. package/dist/cli/{knowledge-events-6aet71sp.js → knowledge-events-xbx1k408.js} +9 -9
  56. package/dist/cli/{knowledge-link-z9cchqdj.js → knowledge-link-cj2abbae.js} +3 -3
  57. package/dist/cli/{knowledge-store-vvgxbakx.js → knowledge-store-fnm8xh9c.js} +4 -4
  58. package/dist/cli/{knowledge-validator-4fb6pbpn.js → knowledge-validator-t2jztjy1.js} +6 -6
  59. package/dist/cli/{model-preflight-cv9kvw8h.js → model-preflight-w85ecyxh.js} +1 -1
  60. package/dist/cli/{pending-delegations-f52jtanf.js → pending-delegations-29rtv1gb.js} +1 -1
  61. package/dist/cli/pr-review-reentry-authorization-25dep81m.js +299 -0
  62. package/dist/cli/{pr-subscriptions-76vg2xya.js → pr-subscriptions-cgac3ydd.js} +2 -2
  63. package/dist/cli/{runner-eagt6gf8.js → runner-sj5sf36c.js} +4 -4
  64. package/dist/cli/{scan-cursor-q3530gc8.js → scan-cursor-8acs9kwe.js} +5 -5
  65. package/dist/cli/{schema-5zc62306.js → schema-rjhassd0.js} +2 -2
  66. package/dist/cli/{scope-persistence-fzqf115q.js → scope-persistence-jb1a5dzh.js} +7 -7
  67. package/dist/cli/{skill-generator-kh1z90tm.js → skill-generator-frgppk1w.js} +13 -13
  68. package/dist/cli/{worktree-collision-ownership-2qxjtxt6.js → worktree-collision-ownership-f5sj6ffa.js} +4 -4
  69. package/dist/cli/{worktree-isolation-40v34p0s.js → worktree-isolation-5b0w6bha.js} +31 -31
  70. package/dist/hooks/pr-review-reentry-authorization.d.ts +97 -0
  71. package/dist/hooks/pr-workflow-gate.d.ts +211 -8
  72. package/dist/index.js +468 -461
  73. package/dist/tools/authorize-pr-review-reentry.d.ts +16 -0
  74. package/dist/tools/complete-pr-workflow.d.ts +2 -1
  75. package/dist/tools/index.d.ts +1 -0
  76. package/dist/tools/manifest.d.ts +1 -0
  77. package/dist/tools/repo-graph/types.d.ts +9 -0
  78. package/dist/tools/repo-graph.d.ts +1 -1
  79. package/dist/tools/tool-metadata.d.ts +4 -0
  80. package/dist/tools/write-pr-review-artifact.d.ts +18 -0
  81. package/package.json +1 -1
@@ -142,11 +142,11 @@ ordering, vocabulary, or schema.
142
142
  `test-infrastructure`, `ui-accessibility-i18n`, `privacy-observability`,
143
143
  `generated-provenance`, `unclassified-risk`.
144
144
  - Base candidate header:
145
- `[CANDIDATE] | candidate_id | lane | severity | category | file:line | claim | evidence_summary | impact_context | confidence`
145
+ `[CANDIDATE] | candidate_id | lane | severity | category | file:line | claim | evidence_summary | impact_context | confidence | risk_impact | risk_tags`
146
146
  - Base clean attestation:
147
147
  `[CLEAN] | lane | coverage_scope | evidence`
148
148
  - Micro/council candidate header:
149
- `[CANDIDATE] | candidate_id | micro_lane | severity | category | file:line | claim | invariant_violated | evidence_summary | confidence`
149
+ `[CANDIDATE] | candidate_id | micro_lane | severity | category | file:line | claim | invariant_violated | evidence_summary | confidence | risk_impact | risk_tags`
150
150
  - Micro/council clean attestation:
151
151
  `[CLEAN] | micro_lane | coverage_scope | evidence`
152
152
  - Severity is exactly `INFO | LOW | MEDIUM | HIGH | CRITICAL`; confidence is
@@ -972,14 +972,9 @@ Before Phase 4 or synthesis, all base lanes must be settled. `dispatch_lanes_asy
972
972
  For ANY lane that failed (either mode):
973
973
  1. **Retry** (max 2 attempts after the initial attempt) with materially different parameters — different session or prompt decomposition, while preserving the required structured async mode and exact head provenance.
974
974
  2. If a base lane fails under Profile A, retry only the unresolved `workflow_lane` identifiers with `dispatch_lanes_async`, `mode: "swarm-pr-review:base"`, the same exact `pr_head_sha`, explorer agents, and the staged-resilience fields when that policy is enabled: a singleton `pr_review_wave_stage: "canary"` first, then a matching `"fanout"` batch only for the remaining unresolved obligations. The durable gate joins successful provenance across the initial wave and retry batches, carries unresolved obligations forward attempt by attempt, and rejects typed `retry_exhausted` or `circuit_open` outcomes before any new lane is launched. While that controller is active, blocking `dispatch_lanes` and direct Task dispatch are not equivalent because they cannot satisfy the structured provenance gate. Under Profiles B/C, retry only the failed `workflow_lane` identifiers with a fresh subagent or pass, the same exact `pr_head_sha`, and a materially different prompt decomposition.
975
- 3. If no equivalent alternative can be verified, **STOP and surface the lane failure to the user as BLOCKED** with the lane id, scope, failure mode, retry attempts, and why equivalence could not be proven. Do not present partial findings, do not issue a review verdict, and do not synthesize from successful lanes. A low-quality partial review is worse than no review.
976
- 4. Under Profile A: After the second failed retry, collect every lane to a
977
- terminal state, do not probe downstream writers or micro lanes, call
978
- `abort_pr_workflow` with `mode: "PR_REVIEW"`, `kind: "recovery"`, and a
979
- non-empty one-line `reason` naming the failed lane and exhausted retries.
980
- Then call `prepare_pr_workflow_checkout` with `operation: "restore"`.
981
- Report the preserved failure only after the gate is cleared and the checkout
982
- restoration either succeeds or returns a concrete manual-recovery diagnostic.
975
+ 3. If no equivalent alternative can be verified AND every launched lane is terminal or explicitly cancelled, **settle N-of-6 truthfully (issue #2383)** instead of discarding validated work: admit the terminal settlement with `write_pr_review_artifact` (`kind: "findings"`, `boundary: "post_explorer"`, the sentinel `CLEAN-REVIEW` record when no candidates exist, and `partial_base_coverage: { unresolved_dimensions: [<exactly the dimensions that are not covered>] }`), run the remaining phases over the covered dimensions' findings, and complete with `complete_pr_workflow` carrying the verdict the settlement allows. NEVER fabricate coverage, NEVER present an unresolved dimension as reviewed, and NEVER let a partial report approve.
976
+ 4. **Terminal report kinds (issue #2383):** all six dimensions covered → `COMPLETE` (verdict may be APPROVE, REQUEST_CHANGES, or INCOMPLETE); at least one covered → `PARTIAL` (verdict must be REQUEST_CHANGES or INCOMPLETE; validated findings from covered dimensions remain publishable); zero covered → `NO_COVERAGE` (skip the findings ladder entirely, call `complete_pr_workflow` with `report_verdict: "INCOMPLETE"` directly — the completion returns a truthful operational report with per-dimension reasons and never claims a code-quality review). A still-live lane blocks settlement: poll, cancel explicitly with `cancel_pending`, or let the presumed-stale sweep settle it first.
977
+ 5. Under Profile A, when the bind/checkout path itself is genuinely unreachable or the workflow is publication-armed and exact publication cannot proceed, use the bounded recovery exits: `abort_pr_workflow` with `mode: "PR_REVIEW"`, `kind: "recovery"`, and a non-empty one-line `reason` for an unrecoverable unbound/bound gate, or `kind: "armed_recovery"` (issue #2383) for a publication-armed wedge — then `prepare_pr_workflow_checkout` with `operation: "restore"`. Abort remains a recovery tool for the genuinely unrecoverable, never a shortcut past a settleable coverage obligation.
983
978
 
984
979
  ### Contract-failure diagnosis and recovery
985
980
 
@@ -1109,7 +1104,7 @@ The fence below is documentation formatting only. Emit the header and all
1109
1104
  machine-readable rows as unfenced plain text; do not emit the backticks.
1110
1105
 
1111
1106
  ```text
1112
- [CANDIDATE] | candidate_id | lane | severity | category | file:line | claim | evidence_summary | impact_context | confidence
1107
+ [CANDIDATE] | candidate_id | lane | severity | category | file:line | claim | evidence_summary | impact_context | confidence | risk_impact | risk_tags
1113
1108
  ```
1114
1109
 
1115
1110
  Profile A stores the full assistant transcript, so earlier unmarked progress
@@ -1312,7 +1307,7 @@ The fence below is documentation formatting only. Emit the header and all
1312
1307
  machine-readable rows as unfenced plain text; do not emit the backticks.
1313
1308
 
1314
1309
  ```text
1315
- [CANDIDATE] | candidate_id | micro_lane | severity | category | file:line | claim | invariant_violated | evidence_summary | confidence
1310
+ [CANDIDATE] | candidate_id | micro_lane | severity | category | file:line | claim | invariant_violated | evidence_summary | confidence | risk_impact | risk_tags
1316
1311
  [CLEAN] | micro_lane | coverage_scope | evidence
1317
1312
  ```
1318
1313
 
@@ -1443,7 +1438,7 @@ For each candidate, the reviewer must determine:
1443
1438
  Reviewer output format:
1444
1439
 
1445
1440
  ```text
1446
- [REVIEWED] | item_id | classification | evidence_type | severity | introduced_by_pr | file:line | rationale | probe | reviewer_notes
1441
+ [REVIEWED] | item_id | classification | evidence_type | severity | introduced_by_pr | file:line | rationale | probe | reviewer_notes | risk_impact | risk_tags
1447
1442
  ```
1448
1443
 
1449
1444
  For the mechanically derived `CLEAN-REVIEW` sentinel, use the same exact row
@@ -1486,14 +1481,9 @@ A finding may still be reported without a runnable command if it is structurally
1486
1481
 
1487
1482
  ## Phase 8: Critic Challenge
1488
1483
 
1489
- Route every reviewer-confirmed HIGH or CRITICAL finding to a critic. Also route borderline MEDIUM findings when they involve security, state machines, write authority, evidence integrity, model/tool permissions, git safety, or config ratchets.
1484
+ Route reviewer-confirmed CRITICAL and HIGH findings to a critic always. Route a MEDIUM finding only when its typed risk metadata says so (issue #2383): `risk_impact: "HIGH_IMPACT"`, or any `risk_tags` entry (`SECURITY`, `AUTH_PERMISSIONS`, `STATE_INTEGRITY`, `WRITE_PATH`, `EVIDENCE_INTEGRITY`, `GIT`, `CONFIGURATION`). An ordinary MEDIUM (`risk_impact: "ORDINARY"`, no tags) is NOT critic-routed. `risk_impact: "UNKNOWN"` always routes to critic — never guess impact you could not assess, and never let file paths, dimension names, or prose override the typed `risk_impact`/`risk_tags` the reviewer row carries.
1490
1485
 
1491
- The controller conservatively derives critic ownership from semantic reviewer
1492
- rows: every reviewer-confirmed CRITICAL, HIGH, or MEDIUM item is mandatory
1493
- critic inventory. This intentionally over-routes ordinary MEDIUM items because
1494
- machine enforcement cannot safely infer every repository-specific trust
1495
- boundary from prose. Completion is blocked until that exact derived inventory
1496
- has valid critic rows.
1486
+ The controller derives critic ownership from the typed reviewer rows through the one shared production predicate; every newly written CONFIRMED finding must supply `risk_impact` and `risk_tags` (the write boundary rejects a CONFIRMED record without them, and unknown tag values fail the row). Completion is blocked until that exact derived inventory has valid critic rows.
1497
1487
 
1498
1488
  Reviewer and critic settlement MUST compose successful verdicts item by item
1499
1489
  across complementary partial batches. The newest successful claim wins each
@@ -1694,7 +1684,7 @@ When triggered:
1694
1684
  2. After the default base-dimension and risk-family coverage is complete, launch all supplementary council agents. Under Profile A, use one `dispatch_lanes_async` call with `mode: "swarm-pr-review:council"`, the same exact `pr_head_sha`, and one unique `workflow_lane` per council member; continue independent context preparation while they run, polling with `collect_lane_results` (without `wait`) to process settled agents incrementally, and use `wait: true` only when no independent work remains. All agents must be settled and their candidates added to the ledger before reviewer classification; under Profile A the runtime enforces this join barrier, and blocking, sequential, or direct-Task fallback is not equivalent to the structured council dispatch — bypassing the active controller is `BLOCKED`. Under Profile B, dispatch council members as parallel subagents with the same marker contract and settle them all before reviewer classification; under Profile C, run each council lens as a separate sequential pass.
1695
1685
  3. Each council agent assumes all work is wrong until code evidence proves otherwise.
1696
1686
  4. Each agent hunts within its lane only.
1697
- 5. Council uses the micro-lane row family: `[CANDIDATE] | candidate_id | micro_lane | severity | category | file:line | claim | invariant_violated | evidence_summary | confidence`. Emit one row per `EVIDENCE_FOUND` or `SUSPICIOUS` claim, or a fully populated `[CLEAN] | micro_lane | coverage_scope | evidence` row when no candidate survives. Put the exact council `workflow_lane` value in the `micro_lane` data field. Council prose without one of those markers does not settle the lane.
1687
+ 5. Council uses the micro-lane row family: `[CANDIDATE] | candidate_id | micro_lane | severity | category | file:line | claim | invariant_violated | evidence_summary | confidence | risk_impact | risk_tags`. Emit one row per `EVIDENCE_FOUND` or `SUSPICIOUS` claim, or a fully populated `[CLEAN] | micro_lane | coverage_scope | evidence` row when no candidate survives. Put the exact council `workflow_lane` value in the `micro_lane` data field. Council prose without one of those markers does not settle the lane.
1698
1688
  6. Agents must not return `CONFIRMED`, `DISPROVED`, or final severity; candidate severity remains provisional until reviewer classification.
1699
1689
  7. The independent reviewer then classifies every council candidate as `CONFIRMED`, `DISPROVED`, `UNVERIFIED`, or `PRE_EXISTING`.
1700
1690
  8. Apply critic challenge to reviewer-confirmed HIGH/CRITICAL or borderline findings.
@@ -1770,7 +1760,7 @@ Before writing the final output, print this checklist with filled values. Every
1770
1760
  [VALIDATION] repo graph / impact cone source: ___
1771
1761
  [VALIDATION] deterministic signals ingested: ___
1772
1762
  [VALIDATION] lane dispatch mechanism: controller / native subagents / sequential passes — ___
1773
- [VALIDATION] base dimensions covered with attestation: ___ / 6 (lanes dispatched: ___)
1763
+ [VALIDATION] terminal coverage: COMPLETE (6/6) OR PARTIAL (___/6 + unresolved dimensions settled) OR NO_COVERAGE (0/6) (issue #2383; lanes dispatched: ___)
1774
1764
  [VALIDATION] base explorer lanes returned: ___ / ___
1775
1765
  [VALIDATION] micro risk families evaluated and attested: ___ / 11 OR BLOCKED — <missing rows> (micro lanes dispatched: ___)
1776
1766
  [VALIDATION] Swarm verifier routing used: ___
@@ -1783,7 +1773,7 @@ Before writing the final output, print this checklist with filled values. Every
1783
1773
  [VALIDATION] findings marked PRE_EXISTING: ___
1784
1774
  [VALIDATION] findings left UNVERIFIED: ___
1785
1775
  [VALIDATION] findings escalated to critic: ___
1786
- [VALIDATION] critic dispatched: ___ OR "SKIPPED — no reviewer-confirmed HIGH/CRITICAL or borderline findings"
1776
+ [VALIDATION] critic dispatched: ___ OR "SKIPPED — no typed critic-routed finding (CRITICAL/HIGH, MEDIUM+HIGH_IMPACT, MEDIUM+risk_tags, or UNKNOWN)"
1787
1777
  [VALIDATION] critic returned: ___ OR "N/A"
1788
1778
  [VALIDATION] findings upheld by critic: ___
1789
1779
  [VALIDATION] findings downgraded by critic: ___
@@ -1922,8 +1912,8 @@ For reviewer, critic, and explorer prompt templates, read `references/prompt-tem
1922
1912
 
1923
1913
  Under Profile A, after metrics and durable review artifacts are complete, but
1924
1914
  before emitting the user-facing final report, call `complete_pr_workflow` with
1925
- mode `PR_REVIEW` and the same exact
1926
- `pr_head_sha`. The tool refuses to clear the session gate while required base,
1915
+ mode `PR_REVIEW`, the same exact
1916
+ `pr_head_sha`, and the terminal `report_verdict` the coverage kind allows (issue #2383). The tool refuses to clear the session gate while required base,
1927
1917
  trigger, declared reviewer/critic, or open-lane obligations remain incomplete.
1928
1918
  While the gate remains active, the runtime prepends a workflow-active banner
1929
1919
  to the first substantive text part of each architect message (the model's text
@@ -2015,7 +2005,15 @@ the frozen ledger before re-binding.
2015
2005
  Abort is a recovery tool, not a coverage shortcut. Use it only when the
2016
2006
  bind/checkout path is genuinely unreachable or bounded structural recovery or
2017
2007
  retries are genuinely exhausted; never use it to skip a coverage obligation
2018
- that is still recoverable, merely expensive, or inconvenient.
2008
+ that is still recoverable, merely expensive, or inconvenient. When lanes have
2009
+ settled short of full coverage, the terminal N-of-6 settlement (issue #2383)
2010
+ is the truthful exit — not abort. For a publication-armed workflow whose exact
2011
+ publication cannot proceed, `abort_pr_workflow` with `kind: "armed_recovery"`
2012
+ (plus the armed recovery identity fields from `pr_workflow_status`) is the
2013
+ audited escape: it settles lanes, invalidates the staged publication
2014
+ authorization, preserves validated work, and leaves a recoverable terminal
2015
+ state; exact approved publication via `complete_pr_workflow` remains available
2016
+ and preferred whenever it can proceed.
2019
2017
 
2020
2018
  On Profiles B/C there is no durable gate or auto-resume loop to clear: if the
2021
2019
  head bind is genuinely unreachable or bounded lane recovery is exhausted,
@@ -5,7 +5,7 @@
5
5
  The following machine-readable block mirrors `src/background/pr-review-contract.ts`. CI parses it structurally; changing a skill dialect without the executable schema (or vice versa) fails the contract test.
6
6
 
7
7
  <!-- PR_REVIEW_EXECUTABLE_DIALECT_START -->
8
- reviewer_fields: marker | item_id | classification | evidence_type | severity | introduced_by_pr | file:line | rationale | probe | reviewer_notes
8
+ reviewer_fields: marker | item_id | classification | evidence_type | severity | introduced_by_pr | file:line | rationale | probe | reviewer_notes | risk_impact | risk_tags
9
9
  reviewer_classifications: CONFIRMED | DISPROVED | UNVERIFIED | PRE_EXISTING
10
10
  reviewer_evidence_types: STRUCTURALLY_PROVEN | EXECUTION_PROVEN | STATIC_TRACE_PROVEN | PLAUSIBLE_BUT_UNVERIFIED
11
11
  critic_fields: marker | item_id | status | severity | rationale | required_change
@@ -118,8 +118,16 @@ satisfy two:
118
118
  | `post_critic` | not critic-routed | the reviewer `final_severity` |
119
119
  | `post_critic` | critic-routed | the **critic** `final_severity` — the final word |
120
120
 
121
- A record is critic-routed when the reviewer classification is `CONFIRMED` and the
122
- reviewer severity is `CRITICAL`, `HIGH`, or `MEDIUM`.
121
+ A record is critic-routed by the shared typed predicate (issue #2383): reviewer
122
+ classification `CONFIRMED` AND one of — severity `CRITICAL`/`HIGH`; severity
123
+ `MEDIUM` with `risk_impact: "HIGH_IMPACT"`; severity `MEDIUM` with any
124
+ `risk_tags` entry (`SECURITY`, `AUTH_PERMISSIONS`, `STATE_INTEGRITY`,
125
+ `WRITE_PATH`, `EVIDENCE_INTEGRITY`, `GIT`, `CONFIGURATION`); or
126
+ `risk_impact: "UNKNOWN"`. An `ORDINARY` MEDIUM with no tags is NOT
127
+ critic-routed; `LOW` follows the existing no-critic policy once its metadata
128
+ is known. Every CONFIRMED finding record must carry `risk_impact` and
129
+ `risk_tags`; unknown tag values are rejected, and no path- or dimension-based
130
+ inference ever substitutes for the typed values.
123
131
 
124
132
  Because the critic is authoritative for critic-routed records, a **downgrade is
125
133
  encodable verbatim**: reviewer `MEDIUM` + critic `LOW` persists as
@@ -235,7 +235,7 @@ Candidates (Chunk A — src/utils/):
235
235
  - C-001 | HIGH | null-safety | src/utils/cache.ts:142 | Uncached getter may return undefined on cold start
236
236
 
237
237
  For each candidate, return:
238
- [REVIEWED] | item_id | classification | evidence_type | severity | introduced_by_pr | file:line | rationale | probe | reviewer_notes
238
+ [REVIEWED] | item_id | classification | evidence_type | severity | introduced_by_pr | file:line | rationale | probe | reviewer_notes | risk_impact | risk_tags
239
239
 
240
240
  You must check caller context, reachability, schema/middleware/framework mitigations, state-machine constraints, test coverage, PR-introducedness, and severity.
241
241
 
@@ -20,7 +20,7 @@ Candidates:
20
20
  - ...
21
21
 
22
22
  For each candidate, return:
23
- [REVIEWED] | item_id | classification | evidence_type | severity | introduced_by_pr | file:line | rationale | probe | reviewer_notes
23
+ [REVIEWED] | item_id | classification | evidence_type | severity | introduced_by_pr | file:line | rationale | probe | reviewer_notes | risk_impact | risk_tags
24
24
 
25
25
  Escape free-text fields with the executable verdict codec: `\\` (backslash),
26
26
  `\|` (pipe), `\n` (newline), and `\r` (carriage return). Do not copy the
@@ -97,7 +97,7 @@ You must inspect or mark unavailable:
97
97
  8. the exact `base_sha...pr_head_sha` merge-base range and both endpoint revisions.
98
98
 
99
99
  Return:
100
- [CANDIDATE] | candidate_id | lane | severity | category | file:line | claim | evidence_summary | impact_context | confidence
100
+ [CANDIDATE] | candidate_id | lane | severity | category | file:line | claim | evidence_summary | impact_context | confidence | risk_impact | risk_tags
101
101
 
102
102
  Emit the marker-bearing header once, then unprefixed data rows.
103
103
  For a clean base lane, emit `[CLEAN] | lane | coverage_scope | evidence`.
@@ -138,7 +138,7 @@ You must inspect or mark unavailable:
138
138
  8. the exact `base_sha...pr_head_sha` merge-base range and both endpoint revisions.
139
139
 
140
140
  Return:
141
- [CANDIDATE] | candidate_id | micro_lane | severity | category | file:line | claim | invariant_violated | evidence_summary | confidence
141
+ [CANDIDATE] | candidate_id | micro_lane | severity | category | file:line | claim | invariant_violated | evidence_summary | confidence | risk_impact | risk_tags
142
142
 
143
143
  Emit the marker-bearing header once, then unprefixed data rows.
144
144
  For a clean micro-lane or council lane, emit `[CLEAN] | micro_lane | coverage_scope | evidence`.
@@ -1,3 +1,6 @@
1
+ import { type PrReviewRiskImpact, type PrReviewRiskTag } from './pr-review-contract.js';
2
+ export type { PrReviewRiskImpact, PrReviewRiskTag };
3
+ export { PR_REVIEW_RISK_IMPACTS, PR_REVIEW_RISK_TAGS, parsePrReviewRiskTagsField, } from './pr-review-contract.js';
1
4
  export declare const CANDIDATE_SEVERITIES: readonly ["INFO", "LOW", "MEDIUM", "HIGH", "CRITICAL"];
2
5
  export type CandidateSeverity = (typeof CANDIDATE_SEVERITIES)[number];
3
6
  /**
@@ -23,15 +26,29 @@ export type FindingsSeverity = (typeof FINDINGS_SEVERITIES)[number];
23
26
  export declare const CANDIDATE_CONFIDENCES: readonly ["HIGH", "MEDIUM", "LOW"];
24
27
  export type CandidateConfidence = (typeof CANDIDATE_CONFIDENCES)[number];
25
28
  export type RowFormatFamily = 'base_explorer' | 'micro_lane';
26
- export declare const CANDIDATE_FIELD_COUNT = 9;
29
+ /**
30
+ * Canonical candidate row width (issue #2383): the legacy nine fields plus the
31
+ * two typed risk fields. Lanes emit eleven fields; legacy nine-field rows are
32
+ * normalized to `UNKNOWN` / no tags at the single parse boundary.
33
+ */
34
+ export declare const CANDIDATE_FIELD_COUNT = 11;
35
+ /** Row width of pre-#2383 candidate rows, which lack the two risk fields. */
36
+ export declare const CANDIDATE_LEGACY_FIELD_COUNT = 9;
27
37
  export declare const CLEAN_FIELD_COUNT = 4;
28
38
  export declare const CLEAN_COVERAGE_SCOPE_MIN_CHARS = 12;
29
39
  export declare const CLEAN_EVIDENCE_MIN_CHARS = 20;
30
40
  export declare const CANDIDATE_DIAGNOSTIC_PREVIEW_CHARS = 160;
31
41
  export declare const CANDIDATE_FIELDS: {
32
- readonly base_explorer: readonly ["candidate_id", "lane", "severity", "category", "file_line", "claim", "evidence_summary", "impact_context", "confidence"];
33
- readonly micro_lane: readonly ["candidate_id", "micro_lane", "severity", "category", "file_line", "claim", "invariant_violated", "evidence_summary", "confidence"];
42
+ readonly base_explorer: readonly ["candidate_id", "lane", "severity", "category", "file_line", "claim", "evidence_summary", "impact_context", "confidence", "risk_impact", "risk_tags"];
43
+ readonly micro_lane: readonly ["candidate_id", "micro_lane", "severity", "category", "file_line", "claim", "invariant_violated", "evidence_summary", "confidence", "risk_impact", "risk_tags"];
34
44
  };
45
+ /**
46
+ * Fields whose presence is enforced by the parser's required-field check.
47
+ * The two trailing risk fields are deliberately excluded: `risk_tags` may be
48
+ * legitimately empty, and legacy nine-field rows are normalized to
49
+ * `UNKNOWN` / no tags before the check runs (issue #2383).
50
+ */
51
+ export declare const CANDIDATE_REQUIRED_FIELDS: Record<RowFormatFamily, readonly string[]>;
35
52
  export declare const CANDIDATE_MARKER: "[CANDIDATE]";
36
53
  export declare const CLEAN_MARKER: "[CLEAN]";
37
54
  /** Canonical marker-bearing header derived from the parser's field authority. */
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { type CandidateArtifactRepairKind, type CandidateConfidence, type CandidateSeverity, type RowFormatFamily, type CleanAttestationRecord as SharedCleanAttestationRecord } from './candidate-contract';
2
+ import { type CandidateArtifactRepairKind, type CandidateConfidence, type CandidateSeverity, type PrReviewRiskImpact, type PrReviewRiskTag, type RowFormatFamily, type CleanAttestationRecord as SharedCleanAttestationRecord } from './candidate-contract';
3
3
  declare const ArtifactInputSchema: z.ZodObject<{
4
4
  output_ref: z.ZodString;
5
5
  batchId: z.ZodString;
@@ -70,6 +70,13 @@ export interface CandidateRecord {
70
70
  impact_context: string | null;
71
71
  invariant_violated: string | null;
72
72
  confidence: CandidateConfidence | null;
73
+ /**
74
+ * Typed risk metadata (issue #2383). Advisory at candidate stage — the
75
+ * reviewer's `[REVIEWED]` row is the authoritative producer for confirmed
76
+ * findings. Legacy rows parse as `UNKNOWN` / `[]`.
77
+ */
78
+ risk_impact: PrReviewRiskImpact | null;
79
+ risk_tags: PrReviewRiskTag[] | null;
73
80
  }
74
81
  /** A machine-readable attestation that a complete lane found no candidates. */
75
82
  export type CleanAttestationRecord = SharedCleanAttestationRecord;
@@ -6,6 +6,25 @@ export declare const PR_REVIEW_CRITIC_STATUSES: readonly ["UPHELD", "DOWNGRADED"
6
6
  export declare const PR_REVIEW_FINDING_STATUSES: readonly ["PENDING", "CONFIRMED", "DISPROVED", "PRE_EXISTING"];
7
7
  export declare const PR_REVIEW_FINDING_ACTIONS: readonly ["route_to_reviewer", "route_to_critic", "report", "suppress_with_reason", "handoff_to_feedback"];
8
8
  export declare const PR_REVIEW_ARTIFACT_BOUNDARIES: readonly ["post_explorer", "post_reviewer", "post_critic"];
9
+ /**
10
+ * The six canonical PR-review base dimensions (issue #2383).
11
+ *
12
+ * Single source of truth: this contract module owns the list; the workflow
13
+ * gate re-exports it. No other file may define the literal (guarded by a
14
+ * source-scan test).
15
+ */
16
+ export declare const PR_REVIEW_BASE_DIMENSION_IDS: readonly ["intent-architecture", "correctness-state", "tests-falsifiability", "security-trust", "reliability-performance", "compatibility-delivery"];
17
+ export type PrReviewBaseDimensionId = (typeof PR_REVIEW_BASE_DIMENSION_IDS)[number];
18
+ /** Typed risk-impact classification for critic routing (issue #2383). */
19
+ export declare const PR_REVIEW_RISK_IMPACTS: readonly ["ORDINARY", "HIGH_IMPACT", "UNKNOWN"];
20
+ export type PrReviewRiskImpact = (typeof PR_REVIEW_RISK_IMPACTS)[number];
21
+ /**
22
+ * Typed risk tags for critic routing (issue #2383). Presence of ANY tag on a
23
+ * MEDIUM finding routes it to critic; paths, dimensions, keywords, and prompt
24
+ * prose may suggest risk to the model but can never override the typed result.
25
+ */
26
+ export declare const PR_REVIEW_RISK_TAGS: readonly ["SECURITY", "AUTH_PERMISSIONS", "STATE_INTEGRITY", "WRITE_PATH", "EVIDENCE_INTEGRITY", "GIT", "CONFIGURATION"];
27
+ export type PrReviewRiskTag = (typeof PR_REVIEW_RISK_TAGS)[number];
9
28
  export declare const PR_REVIEW_CONTRACT_CARD_HEADER = "[PR-REVIEW CONTRACT CARD]";
10
29
  export declare const PR_REVIEW_FINDINGS_MAX_BYTES: number;
11
30
  export declare const PR_REVIEW_FINDINGS_WRITE_MAX_BYTES: number;
@@ -40,22 +59,69 @@ export declare const PrReviewFindingSchema: z.ZodObject<{
40
59
  NONE: "NONE";
41
60
  }>>;
42
61
  category: z.ZodOptional<z.ZodString>;
62
+ risk_impact: z.ZodOptional<z.ZodEnum<{
63
+ ORDINARY: "ORDINARY";
64
+ HIGH_IMPACT: "HIGH_IMPACT";
65
+ UNKNOWN: "UNKNOWN";
66
+ }>>;
67
+ risk_tags: z.ZodOptional<z.ZodArray<z.ZodEnum<{
68
+ SECURITY: "SECURITY";
69
+ AUTH_PERMISSIONS: "AUTH_PERMISSIONS";
70
+ STATE_INTEGRITY: "STATE_INTEGRITY";
71
+ WRITE_PATH: "WRITE_PATH";
72
+ EVIDENCE_INTEGRITY: "EVIDENCE_INTEGRITY";
73
+ GIT: "GIT";
74
+ CONFIGURATION: "CONFIGURATION";
75
+ }>>>;
43
76
  }, z.core.$strict>;
77
+ export interface PrReviewCriticRoutingInput {
78
+ classification?: string;
79
+ severity?: string;
80
+ risk_impact?: PrReviewRiskImpact;
81
+ risk_tags?: readonly PrReviewRiskTag[];
82
+ }
83
+ /**
84
+ * THE shared production critic-routing predicate (issue #2383).
85
+ *
86
+ * Exactly one definition, imported by every production consumer (critic
87
+ * inventory derivation, artifact-record validation, coverage admission).
88
+ * Inline severity triples are forbidden — a parity/centralization guard test
89
+ * enforces it. Accepts only the normalized canonical shape:
90
+ *
91
+ * - non-CONFIRMED classifications are never critic-routed;
92
+ * - UNKNOWN/missing/invalid risk metadata routes to critic (fail-safe);
93
+ * - CRITICAL/HIGH always route to critic;
94
+ * - MEDIUM routes iff HIGH_IMPACT or at least one risk tag;
95
+ * - LOW/INFO/NONE follow the existing no-critic policy once metadata is known.
96
+ *
97
+ * Paths, dimensions, keywords, and prompt prose may suggest risk to the model
98
+ * but can never override this typed result.
99
+ */
100
+ export declare function prReviewFindingRequiresCritic(input: PrReviewCriticRoutingInput): boolean;
44
101
  export declare const PrReviewHandoffSchema: z.ZodObject<{
45
102
  pr_url: z.ZodString;
46
103
  finding_ids: z.ZodArray<z.ZodString>;
47
104
  summary: z.ZodString;
48
105
  provenance: z.ZodArray<z.ZodString>;
49
106
  }, z.core.$strict>;
107
+ /**
108
+ * Terminal N-of-6 settlement disclosure input (issue #2383).
109
+ *
110
+ * The controller declares the set of dimensions it believes are unresolved;
111
+ * the gate derives each dimension's terminal state from lane evidence and
112
+ * rejects any declaration that does not exactly match. New writers emit ONLY
113
+ * this array shape; the persisted disclosure record additionally carries the
114
+ * gate-derived per-dimension terminal states (versioned v2).
115
+ */
50
116
  export declare const PrReviewPartialBaseCoverageSchema: z.ZodObject<{
51
- missing_dimension: z.ZodEnum<{
117
+ unresolved_dimensions: z.ZodArray<z.ZodEnum<{
52
118
  "intent-architecture": "intent-architecture";
53
119
  "correctness-state": "correctness-state";
54
120
  "tests-falsifiability": "tests-falsifiability";
55
121
  "security-trust": "security-trust";
56
122
  "reliability-performance": "reliability-performance";
57
123
  "compatibility-delivery": "compatibility-delivery";
58
- }>;
124
+ }>>;
59
125
  }, z.core.$strict>;
60
126
  export declare const WritePrReviewArtifactArgsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
61
127
  kind: z.ZodLiteral<"findings">;
@@ -92,16 +158,30 @@ export declare const WritePrReviewArtifactArgsSchema: z.ZodDiscriminatedUnion<[z
92
158
  NONE: "NONE";
93
159
  }>>;
94
160
  category: z.ZodOptional<z.ZodString>;
161
+ risk_impact: z.ZodOptional<z.ZodEnum<{
162
+ ORDINARY: "ORDINARY";
163
+ HIGH_IMPACT: "HIGH_IMPACT";
164
+ UNKNOWN: "UNKNOWN";
165
+ }>>;
166
+ risk_tags: z.ZodOptional<z.ZodArray<z.ZodEnum<{
167
+ SECURITY: "SECURITY";
168
+ AUTH_PERMISSIONS: "AUTH_PERMISSIONS";
169
+ STATE_INTEGRITY: "STATE_INTEGRITY";
170
+ WRITE_PATH: "WRITE_PATH";
171
+ EVIDENCE_INTEGRITY: "EVIDENCE_INTEGRITY";
172
+ GIT: "GIT";
173
+ CONFIGURATION: "CONFIGURATION";
174
+ }>>>;
95
175
  }, z.core.$strict>>;
96
176
  partial_base_coverage: z.ZodOptional<z.ZodObject<{
97
- missing_dimension: z.ZodEnum<{
177
+ unresolved_dimensions: z.ZodArray<z.ZodEnum<{
98
178
  "intent-architecture": "intent-architecture";
99
179
  "correctness-state": "correctness-state";
100
180
  "tests-falsifiability": "tests-falsifiability";
101
181
  "security-trust": "security-trust";
102
182
  "reliability-performance": "reliability-performance";
103
183
  "compatibility-delivery": "compatibility-delivery";
104
- }>;
184
+ }>>;
105
185
  }, z.core.$strict>>;
106
186
  }, z.core.$strict>, z.ZodObject<{
107
187
  kind: z.ZodLiteral<"handoff">;
@@ -121,6 +201,10 @@ export interface PrReviewVerdictDescriptor {
121
201
  fieldRoles: readonly string[];
122
202
  schema: z.ZodType<readonly string[]>;
123
203
  }
204
+ /** Field count of pre-#2383 reviewer rows, which lack the two risk fields. */
205
+ export declare const PR_REVIEW_REVIEWER_LEGACY_FIELD_COUNT = 10;
206
+ export declare function parsePrReviewRiskTagsField(field: string): PrReviewRiskTag[];
207
+ export declare function encodePrReviewRiskTagsField(tags: readonly PrReviewRiskTag[]): string;
124
208
  export declare const PrReviewReviewerVerdictFieldsSchema: z.ZodTuple<[z.ZodLiteral<"[REVIEWED]">, z.ZodString, z.ZodEnum<{
125
209
  CONFIRMED: "CONFIRMED";
126
210
  DISPROVED: "DISPROVED";
@@ -138,7 +222,11 @@ export declare const PrReviewReviewerVerdictFieldsSchema: z.ZodTuple<[z.ZodLiter
138
222
  LOW: "LOW";
139
223
  INFO: "INFO";
140
224
  NONE: "NONE";
141
- }>, z.ZodString, z.ZodString, z.ZodString, z.ZodString, z.ZodString], null>;
225
+ }>, z.ZodString, z.ZodString, z.ZodString, z.ZodString, z.ZodString, z.ZodEnum<{
226
+ ORDINARY: "ORDINARY";
227
+ HIGH_IMPACT: "HIGH_IMPACT";
228
+ UNKNOWN: "UNKNOWN";
229
+ }>, z.ZodString], null>;
142
230
  export declare const PrReviewCriticVerdictFieldsSchema: z.ZodTuple<[z.ZodLiteral<"[CRITIC]">, z.ZodString, z.ZodEnum<{
143
231
  DISPROVED: "DISPROVED";
144
232
  UPHELD: "UPHELD";
@@ -13,23 +13,23 @@ import {
13
13
  releaseCoderDispatchOwnership,
14
14
  settleCoderDispatch,
15
15
  transferCoderSettlementToBackground
16
- } from "./index-vbqssmbs.js";
17
- import"./index-dwkrdpz2.js";
18
- import"./index-61nkp124.js";
19
- import"./index-p0by16z8.js";
20
- import"./index-ddszzne4.js";
16
+ } from "./index-c57cyrwn.js";
21
17
  import"./index-3f7hqtgg.js";
18
+ import"./index-8fqb0ynp.js";
19
+ import"./index-fwe1wh6r.js";
20
+ import"./index-a1884hh4.js";
21
+ import"./index-ddszzne4.js";
22
22
  import"./index-nwkr6tvv.js";
23
23
  import"./index-556ja8an.js";
24
24
  import"./index-dtn0pne5.js";
25
25
  import"./index-z6xqpmqg.js";
26
26
  import"./index-r3mvsbtq.js";
27
- import"./index-9r7gp6cp.js";
28
- import"./index-zjygnfay.js";
29
27
  import"./index-9e6fdz2h.js";
30
28
  import"./index-4rhhvd1a.js";
31
- import"./index-xe6zbfps.js";
32
- import"./index-6sbx96v6.js";
29
+ import"./index-yt75r1er.js";
30
+ import"./index-zjygnfay.js";
31
+ import"./index-h52hs4e9.js";
32
+ import"./index-zcmwwp1x.js";
33
33
  import"./index-xagq35tf.js";
34
34
  import"./index-ed5ykebp.js";
35
35
  import"./index-h1g8w4v0.js";
@@ -12,10 +12,10 @@ import {
12
12
  shouldRunOnStartup,
13
13
  writeBackupArtifact,
14
14
  writeDoctorArtifact
15
- } from "./index-nd22bsnt.js";
15
+ } from "./index-rd324153.js";
16
16
  import"./index-z6xqpmqg.js";
17
- import"./index-4w20thrc.js";
18
- import"./index-9r7gp6cp.js";
17
+ import"./index-f776m4r5.js";
18
+ import"./index-yt75r1er.js";
19
19
  import"./index-zjygnfay.js";
20
20
  import"./index-bk5tah7q.js";
21
21
  import"./index-bpmtbmy9.js";
@@ -14,13 +14,13 @@ import {
14
14
  resolveWorktreeBaseDir,
15
15
  shortenWorktreePath,
16
16
  writeLaneProfileToDiskReal
17
- } from "./index-p0by16z8.js";
17
+ } from "./index-a1884hh4.js";
18
18
  import"./index-z6xqpmqg.js";
19
19
  import"./index-r3mvsbtq.js";
20
- import"./index-9r7gp6cp.js";
21
- import"./index-zjygnfay.js";
22
20
  import"./index-9e6fdz2h.js";
23
21
  import"./index-4rhhvd1a.js";
22
+ import"./index-yt75r1er.js";
23
+ import"./index-zjygnfay.js";
24
24
  import"./index-zgwm4ryv.js";
25
25
  import"./index-a76rekgs.js";
26
26
  export {
@@ -4,11 +4,11 @@ import {
4
4
  authorizeCuration,
5
5
  buildConfigFingerprintInput,
6
6
  readCohortConfigFingerprint
7
- } from "./index-gpf3cjre.js";
7
+ } from "./index-pfnj5pvs.js";
8
8
  import"./index-rtry5xyf.js";
9
- import"./index-b5xm177r.js";
10
- import"./index-xe6zbfps.js";
11
- import"./index-6sbx96v6.js";
9
+ import"./index-5zgf140g.js";
10
+ import"./index-h52hs4e9.js";
11
+ import"./index-zcmwwp1x.js";
12
12
  import"./index-xagq35tf.js";
13
13
  import"./index-ed5ykebp.js";
14
14
  import"./index-h1g8w4v0.js";
@@ -12,8 +12,8 @@ import {
12
12
  } from "./index-dtn0pne5.js";
13
13
  import"./index-z6xqpmqg.js";
14
14
  import"./index-r3mvsbtq.js";
15
- import"./index-zjygnfay.js";
16
15
  import"./index-4rhhvd1a.js";
16
+ import"./index-zjygnfay.js";
17
17
  import {
18
18
  invalidateCachedArtifact
19
19
  } from "./index-ed5ykebp.js";
@@ -14,59 +14,59 @@ import {
14
14
  runCuratorInit,
15
15
  runCuratorPhase,
16
16
  writeCuratorSummary
17
- } from "./index-gk6wpq41.js";
18
- import"./index-t0kxka8n.js";
19
- import"./index-4kd1nqd2.js";
20
- import"./index-nd22bsnt.js";
21
- import"./index-93ymj3j5.js";
22
- import"./index-ngn6jmad.js";
17
+ } from "./index-rac2gkvr.js";
18
+ import"./index-z54qw70y.js";
19
+ import"./index-rc93mm6e.js";
20
+ import"./index-rd324153.js";
21
+ import"./index-bv24pbaj.js";
22
+ import"./index-7s1hmrfh.js";
23
+ import"./index-txdagbh7.js";
23
24
  import"./index-134d35c1.js";
24
25
  import"./index-nj6rmyeh.js";
25
- import"./index-txdagbh7.js";
26
- import"./index-g0j2hnse.js";
27
- import"./index-1dzy1j4v.js";
26
+ import"./index-y3hdwh66.js";
27
+ import"./index-vwx0by4y.js";
28
+ import"./index-5tchehv7.js";
28
29
  import"./index-70ha9e09.js";
29
30
  import"./index-c8s9a3zh.js";
30
31
  import"./index-9ss2m4rs.js";
31
- import"./index-91ybfvy2.js";
32
+ import"./index-x4ftmdha.js";
32
33
  import"./index-zsrtt42s.js";
33
- import"./index-vbqssmbs.js";
34
- import"./index-dwkrdpz2.js";
35
- import"./index-n6ayyadp.js";
36
- import"./index-tvtvhjh0.js";
37
- import"./index-gpf3cjre.js";
34
+ import"./index-c57cyrwn.js";
35
+ import"./index-3f7hqtgg.js";
36
+ import"./index-8fqb0ynp.js";
37
+ import"./index-dmfbmnp7.js";
38
+ import"./index-pfnj5pvs.js";
38
39
  import"./index-rtry5xyf.js";
39
- import"./index-61nkp124.js";
40
- import"./index-p0by16z8.js";
41
- import"./index-12e2hztp.js";
40
+ import"./index-fwe1wh6r.js";
41
+ import"./index-a1884hh4.js";
42
+ import"./index-yfbp4q09.js";
42
43
  import"./index-ddszzne4.js";
43
- import"./index-3f7hqtgg.js";
44
- import"./index-n7gv8m7v.js";
45
- import"./index-79k7p589.js";
44
+ import"./index-nvta6kcv.js";
45
+ import"./index-6xxpwk5x.js";
46
46
  import"./index-nwkr6tvv.js";
47
47
  import"./index-556ja8an.js";
48
48
  import"./index-4fwbbad3.js";
49
49
  import"./index-b43rt5ph.js";
50
50
  import"./index-q7sjgr1y.js";
51
- import"./index-j3egsxa1.js";
52
- import"./index-3vqdt1sx.js";
53
- import"./index-q94gt4n9.js";
51
+ import"./index-x71shq8j.js";
52
+ import"./index-f036tggv.js";
53
+ import"./index-gm10kvne.js";
54
54
  import"./index-gprxjmm7.js";
55
55
  import"./index-n832052r.js";
56
56
  import"./index-dtn0pne5.js";
57
57
  import"./index-z6xqpmqg.js";
58
58
  import"./index-r3mvsbtq.js";
59
- import"./index-2e60kmzg.js";
60
- import"./index-4w20thrc.js";
61
- import"./index-9r7gp6cp.js";
62
- import"./index-zjygnfay.js";
59
+ import"./index-663wnh64.js";
60
+ import"./index-f776m4r5.js";
63
61
  import"./index-9e6fdz2h.js";
64
62
  import"./index-4rhhvd1a.js";
63
+ import"./index-yt75r1er.js";
64
+ import"./index-zjygnfay.js";
65
65
  import"./index-ae75rja9.js";
66
- import"./index-b5xm177r.js";
67
- import"./index-xe6zbfps.js";
66
+ import"./index-5zgf140g.js";
67
+ import"./index-h52hs4e9.js";
68
68
  import"./index-bk5tah7q.js";
69
- import"./index-6sbx96v6.js";
69
+ import"./index-zcmwwp1x.js";
70
70
  import"./index-xagq35tf.js";
71
71
  import"./index-ed5ykebp.js";
72
72
  import"./index-h1g8w4v0.js";