Files
rengine/shared
Yogesh OjhaandClaude Opus 5 dbb341e5a4 feat(engines): IP enrichment is shown and locked on, not hidden
a5d835df made ip_enrichment catalog_hidden. That removed it from the
builder entirely, which is worse: a stage that always runs and that
every address surface reads should not be invisible. An operator has
to know it exists.

It is now `always_on` — served in the catalog with the flag, rendered
as a row with an "Always on" badge and a checked, disabled switch.
asset_seed keeps catalog_hidden: it is the focused-rescan mechanism and
is meaningless in an authored engine.

Neither flag is presentational. Hiding the control was never the
mechanism, because the resolver still honoured a "no" from two other
directions: a launch could send overrides {ip_enrichment: {enabled:
false}} (verified: preview reported "Disabled in engine"), and an
engine document saved before the stage was hidden kept disabling it.
merge_engine_context now takes a hidden stage's defaults outright and
forces enabled=True on an always_on one. validate_overrides and
_validate_stages strip the key rather than reject, so a legacy document
and an imported YAML both keep saving — rejecting is what broke the
Full Sweep and Passive Recon presets in 4600a4c8. preset_stages skips
both, so even Blank cannot author a "no". asset_seed is unaffected by
the force: ScanService enables it on resolved.stages after the merge.

Also fixes the copy, which is what prompted this. The description read
"Sweep up every address the scan found and complete what only the
finished run can know" — the only one of twenty not written as a plain
statement of what the stage produces. Five more in the same pass:
vhost.enabled used jargon and contradicted its own stage description,
endpoint_probe.skip_static said nothing concrete,
dns_batch_concurrency carried a measurement anecdote in a tooltip, and
three stages inherited the placeholder "Run this stage during a scan."
which is the text YAML autocomplete shows for the toggle.

Verified: catalog 18 -> 19 with always_on true; POST/PATCH/import of a
document disabling it all save with the key stripped; preview reports
will_run with the engine document and an override both saying no; a
real scan launched with that override resolved {"enabled": true} and
finished ip_enrichment success {"ips": 2, "new": 0, "enriched": 2},
with the stored overrides recording only the two that applied; a
focused rescan still seeds (asset_seed success). Row checked in light
and dark; the YAML lint warns only on an explicit enabled: false.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N2QTNoW3jEi3pX7uMLXBkk
2026-09-08 08:48:38 +05:30
..
2026-01-26 15:02:53 +05:30
2026-09-04 18:57:42 +05:30