Skip to content

C10: Coherence wired with real SelfFingerprint #57

Description

@filipeforattini

Parent

#46

What to build

Wire Coherence::compute_coherence against a real SelfFingerprint populated from live capture (C8) and compared against the real catalog (C9). After this slice, every FingerprintReport produced by the engine carries a populated Coherence block with our_ja3_matches_profile, their_antibot_compatible_with_our_profile, and warnings reflecting actual measurements rather than placeholder values.

Fingerprinter::analyze_hot and analyze_warm both accept an optional SelfFingerprint argument (or read from a Fingerprinter-held field set via builder) so the coherence cross-check runs whenever a fingerprint is available. The constructed scenarios from B13 keep passing; new tests cover the integration with real catalog data.

Acceptance criteria

  • Fingerprinter holds an optional Arc<SelfFingerprint> set via with_self_fingerprint(fp)
  • Fingerprinter::analyze_hot populates report.coherence when self-fingerprint is set
  • Coherence.our_ja3_matches_profile reports Some(true) on a clean run with measured catalog hashes (C9)
  • Coherence.our_ja3_matches_profile reports Some(false) + drift warning when the live capture diverges from catalog
  • Coherence.their_antibot_compatible_with_our_profile populates from the antibot Detections in the same report
  • All existing coherence::tests pass
  • New integration test exercises the full pipeline: live capture → catalog diff → coherence in report
  • NDJSON regression byte-stable

Blocked by

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestneeds-triageAwaiting triagerustPull requests that update rust code

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions