src.dackar.RCA.cross_pattern.linker

Attributes

LOGGER

Classes

CrossPatternLinker

Links historical signal episodes to doc extractions for each RCA candidate.

Functions

_dataclass_to_dict(obj)

Recursively convert dataclasses (and nested structures) to plain dicts.

Module Contents

src.dackar.RCA.cross_pattern.linker.LOGGER[source]
src.dackar.RCA.cross_pattern.linker._dataclass_to_dict(obj)[source]

Recursively convert dataclasses (and nested structures) to plain dicts.

Parameters:

obj (Any)

Return type:

Any

class src.dackar.RCA.cross_pattern.linker.CrossPatternLinker(config)[source]

Links historical signal episodes to doc extractions for each RCA candidate.

Usage

linker = CrossPatternLinker(config) result = linker.run(episodes, doc_extractions, candidates)

The returned dict is JSON-serializable and contains: - “candidate_evidence”: list of CandidateCrossPatternEvidence as dicts - “all_links”: all CrossPatternLink as dicts - “summary”: top-level counts and distribution

config[source]
_warned_episode_shape = False[source]
run(episodes, doc_extractions, candidates)[source]

Build cross-pattern evidence.

Algorithm per candidate

  1. Check index_status on all episodes. If all are “no_episodes_indexed” or no doc_extractions exist → outcome = “no_data”.

  2. Filter episodes by signal_similarity_floor.

  3. For each surviving episode × doc_extraction pair: a. Check asset compatibility (same asset_id). b. Determine precedence level. c. Compute temporal overlap (level ≤ 2) or skip (level 3). d. Apply temporal gate if mode == “gate”. e. Compute fm_alignment_score: 1.0 when fm_id_candidate matches

    candidate.fm_id, else None.

    1. Compute document_similarity_score: None (Phase 2 placeholder).

    2. Compute temporal_compatibility_score from overlap hours.

    3. Compute link_confidence.

    4. Apply stale cap when episode.index_status == “stale”.

  4. Redundancy suppression: for each (episode_id, doc_id) pair keep only the highest-precedence link.

  5. Filter links by link_confidence_threshold.

  6. Build CandidateCrossPatternEvidence.

This method does NOT mutate its inputs. Episode↔doc linkage is reported entirely in the returned dict (per-candidate linked_episode_ids / linked_doc_ids and the flat all_links), so callers can safely reuse the same episodes / doc_extractions lists across calls.

Parameters:
Return type:

Dict[str, Any]

Parameters:

config (src.dackar.RCA.cross_pattern.config.CrossPatternConfig)