← Files LegalQuants TransactionalARCHIVED FILE
skills/timenarratives/scripts/packet_filters.py
2.93 KB · Oct 3, 2026 · 06:34 UTC
"""Apply selected-root filters and propagate descendant dispositions."""
from __future__ import annotations
from packet_core import parse_time
def _filter_source(
source_type: str, source_time: str | None, filters: dict
) -> tuple[str, str | None]:
if source_type not in filters["sourceTypes"]:
return "excluded", "source_type_filter"
since = parse_time(filters["since"], "filters.since", nullable=True)
until = parse_time(filters["until"], "filters.until", nullable=True)
if since is None and until is None:
return "included", None
if source_time is None:
return "filter_indeterminate", "source_time_missing"
observed = parse_time(source_time, "sourceTime", nullable=False)
if (since and observed and observed < since) or (
until and observed and observed > until
):
return "excluded", "time_filter"
return "included", None
def apply_source_filter(container: dict, root: dict, filters: dict) -> bool:
disposition, reason = _filter_source(
container["sourceType"], container["sourceTime"], filters
)
container["filterDisposition"] = disposition
if disposition == "excluded":
container.update(disposition="excluded", reason=reason)
if container["containerId"] == root["containerId"]:
root.update(disposition="excluded", reason=reason)
return False
if disposition == "filter_indeterminate":
container.update(disposition="requiresConfirmation", reason=reason)
root.update(disposition="requiresConfirmation", reason=reason)
return True
def apply_selected_source_type_filter(
container: dict, root: dict, filters: dict
) -> bool:
if (
container["parentContainerId"] is not None
or container["sourceType"] in filters["sourceTypes"]
):
return True
root.update(disposition="excluded", reason="source_type_filter")
container.update(
filterDisposition="excluded",
disposition="excluded",
reason="source_type_filter",
)
return False
def apply_selected_source_filter(container: dict, root: dict, filters: dict) -> bool:
if container["parentContainerId"] is not None:
return True
return apply_source_filter(container, root, filters)
def propagate_leaf_uncertainty(
roots: list[dict], containers: list[dict], leaves: list[dict]
) -> None:
uncertain_roots = {
container["rootId"]
for container in containers
if container["parentContainerId"] is not None
and container["disposition"] in {"requiresConfirmation", "unreadable"}
}
uncertain_roots.update(
leaf["containerId"].split("-A", 1)[0]
for leaf in leaves
if leaf["disposition"] == "unreadable"
)
for root in roots:
if root["rootId"] in uncertain_roots and root["disposition"] == "ready":
root.update(
disposition="requiresConfirmation", reason="descendant_unreadable"
)
SHA-256: aeff4761a0a169b2285792ba19245b2e7e8cba1deff67d4461f7b6319e20f03d