Accept the current /sender/hls route in the Sender HLS plug while preserving the legacy plugin-slug path. Add direct plug coverage for both path shapes.
Treat an already-started HLS edge media session as a successful stream.start response so the edge reconciler can race safely with explicit cluster starts.
Build Sender TypeScript through esbuild as an IIFE so host plugin asset tags can load it as a classic script, and suppress noisy host Ash domain warnings during dev compilation.
Add Sender.LocalStreams for IEx and no-Legion local stream operation. The helper composes existing management handlers and can optionally launch a MuonTrap-supervised ffmpeg test-video publisher. Document the public API surface in docs/API.md and cover the helper with tests.
Declare control lanes on Sender topology/state-machine resources now that AshNostrSync defaults new resources to bulk.
Keep endpoint history and snapshots on bulk and add coverage for the Sender lane split.
Replace Sender architecture references to context.services with direct Tribes.Plugin.Services usage. Refresh the lockfile after fetching the host-backed test dependencies.
Add a forward-only compatibility migration for databases that already ran the earlier Sender streaming migration before the topology model was simplified.
The migration backfills media endpoint type values from the legacy kind column, adds the source endpoint relation expected by current resources, and adds the stream generation delivery mode default.
Forward ash.codegen and ecto.migration through the Sender plugin wrapper and update agent guidance to prefer AshPostgres codegen for resource-driven migrations.
Keep Sender's default as ffmpeg on PATH, while allowing Guix deployments to inject an exact store ffmpeg path via SENDER_FFMPEG_EXECUTABLE. Remove per-stream executable selection so the runtime has one simple executable resolution model.
Use the current node_info node_pubkey field in the Docker e2e runner and refresh the Nix Mix dependency hash after the muontrap dependency update. Keep edge session reconciliation alive when it runs before the host repo is ready during startup.
Share HLS timing and retention config across origin and edge sessions, pass live-window settings through to ffmpeg, prune edge pull-through segments, and schedule stopped generation spool cleanup. Include the dependency lock refresh present in this worktree.
Persist edge start options that affect source fetching and add a periodic reconciler that restarts missing local HLS edge sessions from synced endpoint and generation state. This lets an edge node resume pull-through service after a reboot without Legion re-pushing the stream setup.
Pass the source TLS verification option from stream lifecycle into the HLS pull-through worker so Legion can disable origin certificate verification during self-signed supertest runs. Cover the default and explicit disabled paths in sender tests.
Use Tribes.RequestInfo for HLS and player event attribution so trusted proxy traffic is served without feeding Sender's internal viewer metric.
Append a stable vsid query parameter to browser HLS playlist URLs, count playlist reloads as viewer sessions in standalone mode, keep IP fallback for plain HLS clients, and update docs plus e2e coverage.
Track active Sender viewers from browser heartbeats and HLS IP fallback, filtering localhost access and exporting a low-cardinality plugin metric for Tribes rollups.
Extend the Docker origin/edge E2E harness with VictoriaMetrics/vmagent scraping and assertions for live /metrics export plus compact rollup storage. Update docs for the host metrics path.
Add flake outputs for the sender assets, packaged plugin, bundled Tribes release, and single-image Docker E2E target.
Update the Docker E2E runner to build that image through Nix with the local Tribes checkout override before running the origin/edge compose scenario.
Add the edge-side pull-through startup path and make stream startup tolerant of sources that are not live yet. Keep ffmpeg managed through MuonTrap while adding the options needed by the multi-node flow.
Add a docker-oriented origin/edge E2E scenario that starts both nodes before RTMP ingest and verifies HLS playback from the edge node.
Expose standalone /sender/hls file serving for local spool playback and add the hls_edge media-session mode for tribes_edge endpoints.\n\nThe edge backend mirrors an upstream generation playlist and referenced segments into the local spool, while management lifecycle methods can start, stop, and report hls_edge sessions separately from origin ingest.\n\nVerified with scripts/plugin test, scripts/plugin validate, scripts/plugin precommit, and scripts/plugin smoke.
Collapse endpoint routing around endpoint types and source links, remove the StreamRoute resource and HLS fallback plug, and move generated HLS paths to /sender/hls for Vinyl-backed serving.\n\nUpdate the initial schema, management payloads, docs, and tests to match generation-level renditions and stream generation delivery modes.
Register Sender supervision children through the Tribes plugin spec so the host PluginManager starts the media session, backend, readiness, stats, and snapshot processes in packaged deployments.
Reuse the same child list from Sender.Application and cover the plugin spec with a management test.
Route raw Mix test and precommit aliases through the plugin wrapper workflow.
Document that normal plugin checks should use plugin test or plugin precommit.
Wrap the sender LiveView with the plugin-facing Tribes layout and mount optional host auth so the player appears inside the normal Tribes navigation chrome. Declare ui@1 because the host chrome is provided through the UI capability and assert that chrome in the page test.
Add the Tribes host path dependency for dev compilation as compile-only so the plugin manager can load the generated entry-module beam from _build/dev.
Keep the test dependency runtime-enabled so Tribes.Repo starts for migration-backed tests, and move the bridge module out of the old template path.
Add local streaming counters, telemetry emissions, snapshot publishing into EndpointSnapshot rows, and an optional periodic snapshot worker with tests.
Expose plugin API routes for playback metadata, HLS file serving, and player events. Add a typed Video.js v10 HTML player bootstrap and host-backed API tests.