Skip to content

[MeshCore P3] M1 - Passive packet path MVP (capture + resolution table + hourly rollup + edges API) #372

@pskillen

Description

@pskillen

Parent

Part of #267 — MeshCore Phase 3 path parity. Milestone M1 of the passive packet path subsystem.

Design: ADR-0001 docs/features/meshcore/packet-path-tracing/adr/0001-meshcore-packet-path-tracing-subsystem.md
Progress/outstanding: docs/features/meshcore/packet-path-tracing/

Goal

Honest, scalable, hash-only passive path evidence. No resolver, no Neo4j, no WebSocket, no write endpoints.

Scope

  • New app meshcore_packet_path (or bounded package under meshcore_packets).
  • Capture: persist path_hash_size + path_hash_mode on MeshCorePacketObservation; ingest PATH rx_log_data frames that carry path but no business message.
  • Resolution table (unknowns only): MeshCorePathSegmentResolution keyed (hash_mode, hash_size, segment_hash), all rows status=unknown.
  • Hourly rollup: MeshCorePathEdgeBucket + Celery task emitting ordered hash-to-hash edges (plus observer dimension) per ADR "Edge semantics"; checkpointed, idempotent; manage.py backfill.
  • Eviction: Celery beat job pruning rows older than 6 months.
  • Read-only API: GET /api/meshcore/path-tracing/edges/; direction labelled "list order"; documented in openapi.yaml.

Out of scope

  • Hash → node resolution (M3, gated on M2 spike).
  • Neo4j export (M4), realtime WS (M5), centrality (M6), UI (M7).

Acceptance criteria

  • Two feeders, two paths, one packet → distinct hash-chain edges per observation.
  • Rollup is idempotent and checkpointed; eviction respects 6-month cutoff.
  • Edges API documented in OpenAPI; tests green.

Decisions (locked)

  • App meshcore_packet_path; 6-month retention with eviction job; direction = list order (not forwarding direction).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions