---
title: "Get Sweep"
method: GET
path: "/internal/evals/rollout-consistency/sweeps/{sweep_id}"
tags: ["internal"]
---

# Get Sweep

`GET /internal/evals/rollout-consistency/sweeps/{sweep_id}`

## Request

- Base URL: `https://api.kobaltlabs.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.kobaltlabs.com/internal/evals/rollout-consistency/sweeps/{sweep_id}`
- Auth: none declared

## Path parameters

- `sweep_id` string, uuid, required

## Response `200`

Successful Response

- SweepDetail: Everything one sweep produced.
  - `sweep_id` string, uuid, required
  - `company_id` string, uuid, required
  - `company_name` string, nullable, required
  - `window_days` integer, required
  - `status` 'queued' | 'running' | 'succeeded' | 'failed', required: Lifecycle of one sweep. Mirrors `ApplicabilityRunStatus` deliberately.
  - `stage` 'queued' | 'gathering' | 'analysing' | 'comparing' | 'done', required: What the sweep is doing right now. Committed *before* the work it names starts, so a watcher sees the stage currently taking the time rather than the last one that finished. `ANALYSING` is where nearly all of it goes.
  - `error` string, nullable, required
  - `stalled` boolean, required
  - `rollout_enrolled` boolean, required
  - `created` string, date-time, required
  - `started_at` string, date-time, nullable, required
  - `finished_at` string, date-time, nullable, required
  - `collateral_in_window` integer, required
  - `collateral_considered` integer, required
  - `collateral_analysed` integer, required
  - `requirement_pairs` integer, required
  - `requirement_pairs_agreed` integer, required
  - `agreement_rate` number, nullable, required
  - `visible_pairs_agreed` integer, required
  - `visible_agreement_rate` number, nullable, required
  - `unmet_in_a_only` integer, required
  - `unmet_in_b_only` integer, required
  - `visible_flips_from_edits` integer, required
  - `presence_drift` integer, required
  - `outcome_drift` integer, required
  - `revision_drift` integer, required
  - `batches_skipped` integer, required
  - `flagged_carried` integer, required
  - `flagged_lost` integer, required
  - `flagged_recall` number, nullable, required
  - `dismissed_dropped` integer, required
  - `dismissed_reintroduced` integer, required
  - `dismissed_suppression_rate` number, nullable, required
  - `net_new` integer, required
  - `items` SweepItem[], required
    - `item_id` string, uuid, required
    - `file_id` string, uuid, required
    - `upload_id` string, uuid, required
    - `filename` string, nullable, required
    - `run_a_id` string, uuid, nullable, required
    - `run_b_id` string, uuid, nullable, required
    - `baseline_run_id` string, uuid, nullable, required
    - `trial_run_company_id` string, uuid, nullable, required
    - `baseline_on_same_upload` boolean, required
    - `baseline_requirement_checked` boolean, required
    - `resolved_guideline_set_ids` string[], required
    - `skip_reason` 'no_product_lines' | 'no_baseline_run' | 'baseline_already_new_path' | 'analysis_failed' | 'no_guideline_sets' | 'config_not_honoured', required: Why a piece of collateral in the window was not swept. Stored per item rather than filtered out of the cohort, because "we analysed 12 of your 30 pieces" is only meaningful beside why the other 18 were not: a cohort that silently shrank reads as a clean sweep of everything.
    - `error` string, nullable, required
    - `requirement_pairs` integer, required
    - `requirement_pairs_agreed` integer, required
    - `agreement_rate` number, nullable, required
    - `visible_pairs_agreed` integer, required
    - `visible_agreement_rate` number, nullable, required
    - `visible_flips` integer, required
    - `flagged_lost` integer, required
    - `dismissed_reintroduced` integer, required
  - `low_signal` LowSignalRule[], required
    - `requirement_id` string, uuid, required
    - `guideline_file_id` string, uuid, nullable, required
    - `guideline_filename` string, nullable, required
    - `requirement_text` string, nullable, required
    - `state` 'active' | 'disabled' | 'archived' | 'superseded' | 'proposed', required: Whether a requirement is in the working library, and if not, why not. All of them are recorded as revisions, so every one is reversible and readable. ARCHIVED and SUPERSEDED are deliberately distinct: ARCHIVED is a person deciding this obligation does not apply to them, SUPERSEDED is a newer decomposition of the same guideline taking over. A regeneration must never overwrite the first with the second — that would erase a human decision.
    - `kind` 'never_fires' | 'always_fires' | 'never_resolvable', required: Why a requirement told the sweep nothing. A rule that lands the same way on every piece of collateral cannot separate compliant work from non-compliant work, whichever way it lands — but the three reasons want three different fixes, so they are not one "useless" bucket.
    - `checked` integer, required
    - `passed` integer, required
    - `failed` integer, required
    - `not_determined` integer, required
    - `collateral_count` integer, required
  - `low_signal_truncated` boolean, required
  - `rule_drift` RuleDrift[], required
    - `requirement_id` string, uuid, required
    - `guideline_file_id` string, uuid, nullable, required
    - `guideline_filename` string, nullable, required
    - `requirement_text` string, nullable, required
    - `state` 'active' | 'disabled' | 'archived' | 'superseded' | 'proposed', required: Whether a requirement is in the working library, and if not, why not. All of them are recorded as revisions, so every one is reversible and readable. ARCHIVED and SUPERSEDED are deliberately distinct: ARCHIVED is a person deciding this obligation does not apply to them, SUPERSEDED is a newer decomposition of the same guideline taking over. A regeneration must never overwrite the first with the second — that would erase a human decision.
    - `presence_count` integer, required
    - `outcome_count` integer, required
    - `revision_count` integer, required
    - `total_count` integer, required
    - `visible_flip_count` integer, required
    - `collateral_affected` integer, required
    - `matched_trigger_terms` string[], required
  - `rule_drift_truncated` boolean, required
  - `max_requirements_per_state_change` integer, required
  - `config_a` AnalysisConfigOption, required: One configuration an operator may run a sweep under. Served from the registry rather than typed by the frontend so the two cannot disagree about what a key means — a page offering a configuration this build does not have would start a sweep the worker refuses.
    - `key` string, required
    - `label` string, required
    - `judge_model` string, required
    - `judge_temperature` number, required
  - `config_b` AnalysisConfigOption, required: One configuration an operator may run a sweep under. Served from the registry rather than typed by the frontend so the two cannot disagree about what a key means — a page offering a configuration this build does not have would start a sweep the worker refuses.
    - `key` string, required
    - `label` string, required
    - `judge_model` string, required
    - `judge_temperature` number, required
  - `regressions` RegressionRow[], required
    - `regression_id` string, uuid, required
    - `outcome` 'flagged_carried' | 'flagged_lost' | 'dismissed_dropped' | 'dismissed_reintroduced' | 'unreviewed' | 'suppressed', required: What became of one baseline risk under the new path. The reviewer's verdict on the baseline risk decides which pair applies, and the two pairs are different questions. Losing a **flagged** risk is lost recall — a reviewer said it was real. Reproducing a **dismissed** one is a false positive the old path's validation pass caught and `dedupe_findings` does not, which is the number the rollout is expected to move.
    - `baseline_verdict` string, nullable, required
    - `summary` string, nullable, required
    - `source_clause` string, nullable, required
    - `best_match_score` number, nullable, required
    - `near_miss` boolean, required
    - `is_net_new` boolean, required
    - `filename` string, nullable, required
    - `item_id` string, uuid, required
  - `regressions_truncated` boolean, required
  - `reviews` ReviewMark[], required
    - `review_id` string, uuid, required
    - `sweep_id` string, uuid, required
    - `subject_kind` 'rule_drift' | 'low_signal' | 'regression' | 'item', required: What a collaborative review mark is attached to on one sweep. Four kinds, kept apart because a requirement can show up on both the drift worklist and the low-signal list, and a mark on one is not a mark on the other. The id is the row the dashboard already uses as the key: `requirement_id` for the two rule lists, `regression_id` for a baseline risk, `item_id` for a piece of collateral.
    - `subject_id` string, uuid, required
    - `reviewed_by_user_id` string, uuid, nullable, required
    - `reviewed_by_email` string, required
    - `reviewed_by_name` string, required
    - `reviewed_at` string, date-time, required

## Other responses

- `422`: Validation Error

## Changes

- **2026-09-08** `9fe2fb8a3631`: 2 warning, 4 info
  - added the new `config_not_honoured` enum value to the `items/items/skip_reason/anyOf[subschema #1: SkipReason]/` response property for the response status `200`
  - added the new `no_guideline_sets` enum value to the `items/items/skip_reason/anyOf[subschema #1: SkipReason]/` response property for the response status `200`
  - added the required property `config_a` to the response with the `200` status
  - added the required property `config_b` to the response with the `200` status
  - …2 more
- **2026-09-02** `425d5b8a3c17`: 2 warning
  - added the new `proposed` enum value to the `low_signal/items/state/anyOf[subschema #1: GuidelineRequirementState]/` response property for the response status `200`
  - added the new `proposed` enum value to the `rule_drift/items/state/anyOf[subschema #1: GuidelineRequirementState]/` response property for the response status `200`

[Operation history](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/changes/internal/evals/rollout-consistency/sweeps/:sweep_id/get.md)

---

[API](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api.md) - [All operations](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/revisions/8587332d5e43?raw)
