Parent
#46
What to build
Widen fingerprint::target::TargetContext to carry optional Warm/Cold-tier inputs. The existing Hot-tier fields (final_url, status, headers, body) stay required. New optional borrows are added: h2_settings, robots_body, well_known, favicon_md5, peer_cert, dns, asn.
Hot-tier sources continue to ignore the new fields (their analyze reads only the required slots). Warm/Cold sources that previously stubbed empty analyze impls now read from the appropriate optional slot when populated; they continue to return empty Vec when the slot is None. The change is additive — every existing call site that constructed a TargetContext::http_only keeps working.
Acceptance criteria
Blocked by
None - can start immediately
Parent
#46
What to build
Widen
fingerprint::target::TargetContextto carry optional Warm/Cold-tier inputs. The existing Hot-tier fields (final_url,status,headers,body) stay required. New optional borrows are added:h2_settings,robots_body,well_known,favicon_md5,peer_cert,dns,asn.Hot-tier sources continue to ignore the new fields (their
analyzereads only the required slots). Warm/Cold sources that previously stubbed emptyanalyzeimpls now read from the appropriate optional slot when populated; they continue to return emptyVecwhen the slot isNone. The change is additive — every existing call site that constructed aTargetContext::http_onlykeeps working.Acceptance criteria
TargetContextgains 7 optional borrow fields covering Warm + Cold inputsTargetContext::http_onlyconstructor keeps the existing 4-arg signature, leaves the new fields asNoneTargetContext::with_warm(...)builds a context with Warm-tier slots filledTargetContext::with_cold(...)builds a context with Cold-tier slots filledH2SettingsSource) is updated to read fromctx.h2_settingsand emit a Detection when presentDnsSource) is updated to read fromctx.dnsand emit a Detection when presentBlocked by
None - can start immediately