mirror of
https://github.com/yogeshojha/rengine.git
synced 2026-10-21 07:41:28 +02:00
A focused scan was bound to one parent scan, so one target. Selection was a list of row ids, capped at 200 and pruned to the visible page. The project-wide result views could not start one at all. A selection is now a value the server resolves: `SeedSelection` carries either explicit picks or the query that matches them, and resolves into one group per target's covering scan. One action fans out into a focused scan per target, tied by `scans.run_group_id`. `parent_scan_id` + `assets` stays as the older one-scan form, normalized by a validator, so MCP and the row menu are unchanged. Resolution reuses the query grammar rather than a second matcher: a `seeds()` per results service over the existing `_scoped(scope, f, columns=...)` hook, projecting `(value, scan_id)`. Addresses are the exception, since the derived CTE folds them across targets and exposes `target_ids`; the resolver maps those through `SurfaceScopeService.scans_by_target`, as it does for a pick that names no scan. `MAX_SEED_ASSETS = 200` becomes `MAX_RUN_ASSETS = 5000` with `MAX_RUN_SCANS = 25`. One cap, not one per scan: a group is per target, and a lower per-scan cap would need intra-target chunking that `parent_scan_id` and `AssetRecheck` cannot express. `matched` is null once the probe limit is reached, so nothing reports the probe as a total. Frontend: - `RowSelection` replaces the per-table `SvelteSet` and the effect that pruned it to the current page on every page, sort and filter change - the `projectWide` guards are gone, so /surface/* can act on what it shows - the selection bar offers the search as the selection, and states the cap - `POST /scans/rescan/preview` feeds the dialog a per-target breakdown - the Endpoints tab gains a query-only entry point Verified against the dev estate: tech:cloudflare reports 3,484 across 5 targets in the bar, the dialog and the API; title:Census seeded 3 as 2+1 across gov.np and gov.ng under one run group. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01799buekQvDvH41ns8EdhdH
The file is empty.