v26.09.2 - 2026-09-29
- Embedded OpenCache: New Peering insights page — traffic served to and filled from other PoPs, with per-peer bandwidth, requests, status codes, latency, cache-vs-origin split and a per-peer summary table
- Embedded OpenCache: Connectivity's Peering panel keeps its headline bidirectional chart and links to the new Peering page for the per-peer details
- Embedded OpenCache: Node Config editor can save edits as a draft without applying them to the appliance, and shows stored drafts with who saved them and when
- Embedded OpenCache: Node Config fleet table chips appliances with a saved draft, and search finds them
- Platform: Recent and pinned pages remember the project they belong to, show it when it differs from the current one, and open in that project
- Platform: Right-click a recent or pinned page to open it in a new tab or go to it in the current project
- Platform: Sidebar rows are more compact — the pin appears over the row on hover instead of reserving space, and other-project tags sit under the item name
- Platform: Long-press a pin to pin just the page or the page in the current project
- Platform: Pinned lists only show the unpin button on hover
- Platform: Recent and pinned rows use compact product codes (OC, OIX, …)
- Platform: Recent and pinned rows always name their project — items in the current project are tagged 'Current Project'
- Platform: Pinned rows only highlight when they match both the current page and the current project
2026-09-28
- Embedded OpenCache: Node Config fleet table gains Release and Applied columns showing each appliance's software version and whether it runs the current settings, with a rollout counter on the fleet defaults row
- Embedded OpenCache: Node Config editor shows an appliance's release and config state in its status line, and confirms with a toast once a save is applied on the appliance
- Embedded OpenCache: Overview status strip shows the appliance's software version next to its hostname
- Embedded OpenCache: Prefix Performances lists each client prefix once — "Multi-PoP only" is now just a filter, and selecting PoPs shows those PoPs' figures for each prefix while the PoPs column still shows everywhere it was seen
- Embedded OpenCache: New Support → Node Config page lets support staff view and edit every appliance setting and the fleet defaults, with an explanation for each field, a review step that shows what will restart before saving, and a change history
- Embedded OpenCache: The BGP page no longer offers a neighbour AS number, and labels the AS number as the one used on both sides of the session
- Embedded OpenCache: Choosing Incomplete as the required origin on the BGP page now stores it in the spelling the appliance expects (the old spelling matched no routes), including requests already waiting for approval
- Embedded OpenCache: The Peers page shows peer scoring as on by default when the appliance has an active peer class
- Embedded OpenCache: The drain time explanation now describes what it does: before nginx stops for an upgrade, restart or maintenance, the appliance reports itself unavailable and waits that long
- Embedded OpenCache: The approval queue and pending-request lists only show change requests submitted through the console
- Embedded OpenCache: Node Config gains the TLS handshake timeout and the TLS failure-cycle threshold (Monitoring / Availability): the timeout must stay below the metrics interval, and the threshold note shows how long the appliance stays in rotation before its score drains
- Embedded OpenCache: Node Config gains automatic cache-index and tier-dictionary sizing — set an index or dictionary size to Auto and the appliance sizes it from capacity, with the resolved bytes, before/after impacts and per-appliance support checks shown in the editor, memory budget and review step
- Embedded OpenCache: Node Config memory budget now counts tier dictionaries alongside indexes and the RAM disk, and reads Partial instead of Fits while Auto sizes it cannot resolve stay unknown
- OpenCache: Edge-resource cache zones accept Auto index sizes (zone level and per-volume), gated on every serving PoP running a supporting edge release
2026-09-27
- OpenCache: CDN77 traffic reaches Insights faster and catches up after a backlog instead of stalling on a slow connection
- OpenCache: CDN77 traffic for 22–26 Sep is corrected (duplicate requests removed, missing hours restored)
2026-09-26
- OpenCache: CDN77 traffic in Insights no longer stalls or counts requests twice when CDN77 re-sends its logs
2026-09-25
- Embedded OpenCache: Hardware page gains a Disk I/O panel with total throughput, total IOPS, and per-disk throughput, busy and latency
- Embedded OpenCache: Overview gains a live Disk I/O card with total throughput, a read/write sparkline, IOPS and the busiest cache disk
- Embedded OpenCache: IO wait chart now describes what it reports — the busiest cache disk's busy fraction
- Embedded OpenCache: Fix the Throughput, Busy and Latency by disk charts on the Hardware page showing no data; a cache disk that also holds the operating system is now labelled with its cache volume
- OpenCache: Datacamp traffic now appears under the "default" cache zone in Insights cache-zone charts
2026-09-23
- NRCS: Playout migration and rollback allow up to five seconds for saved values to become visible, retrying verification reads without repeating writes
- NRCS: The playout migration and rollback preserve killed records and existing story statuses, and stop if a record disappears before writing
- NRCS: Stories now carry an explicit Float flag, so a zero-duration draft or CG-only story is no longer mistaken for a floated one
- NRCS: Rundown reads now report exactly which referenced stories are missing or failed instead of silently dropping them
- NRCS: Stories placed in a rundown keep a stable identity across reorders and cross-segment moves, and the live cursor follows the placed occurrence rather than the story
- NRCS: Floating a story now uses an explicit toggle that preserves duration, with distinct HELD and FLOAT badges and a scope note when a story appears more than once in a rundown
- NRCS: Next and Back now skip held, floated, killed and unavailable stories, and a repeated story highlights only the occurrence that is actually on air
- NRCS: Rundowns saved before the playout update now show a migration notice with a reload prompt instead of navigating blindly
- NRCS: Rundown print now looks timing up per story placement and labels held and floated rows HELD and FLOAT
2026-09-22
- Real-time translation: Sessions now appear in the Inference Log with runtime, Gemini usage, and a per-request cost breakdown
- Real-time translation: Fix sessions showing no Gemini cost when Google omits per-modality token details — Live Translate, Live Transcribe and Flash usage now bills at the expected modality rates instead of as unpriced
- Inference: Real-time Translation (Transcribe + Flash) now sends and translates stable clauses at commas by default so subtitles appear sooner; turn it off with the new Split sentences on commas switch in the Engine card
- NRCS: Voice Over, SOT and Package blocks now pick their offline media from the files available on the station instead of typing a path
- NRCS: A media file that is no longer on the station stays visible on its block as "not available on this station" rather than being cleared from the story
2026-09-21
- OpenCache: Insights now include traffic served by the CDN77 partner network on every page; CDN77 PoPs are selectable in the PoP filter
v26.09.1 - 2026-09-12
- Inference: Add Real-time Translation — live speech translation for broadcast with per-site servers, job assignment, fleet status, job history, and reusable settings templates
2026-09-10
- OpenCache: Comparison badges now compare the selected period with the immediately preceding equal-length period, with tooltips showing both ranges and values
- OpenCache: Avg Delivery Time now shows the request-weighted average for the selected period instead of the latest bucket
- OCE: Comparison badges now compare the selected period with the immediately preceding equal-length period, with tooltips showing both ranges and values
- ONS: Comparison badges now compare the selected period with the immediately preceding equal-length period, with tooltips showing both ranges and values
- OpenCache: Avg Delivery Time comparison turns red when delivery time rises and green when it falls (lower is better), on the OpenCache and OCE Insights pages
- ONS: IP Country breakdowns now open as a world map with the ranked country list below and a Map/Chart toggle using matching colors, on Insights and campaign pages
- ONS: Breakdowns now show all dimensions at once (IP country first) instead of a dropdown, on Insights and campaign pages
2026-09-09
- ONS: Breakdowns now default to IP country, and the device region option is labeled Device Region
- ONS: Insights charts now report per minute up to 24h, hourly up to 3 days, and daily above
- ONS: Insights range selector gains 1h, 6h, 12h, 6-month, and 1-year presets
- ONS: Insights breakdowns (Delivery reach, Engagement opens/open rate, Audience composition) and the campaign "Who opened" chart can now be split by IP country, IP city, and ASN
- ONS: Campaign list and campaign page now show the app's reference instead of its key
- ONS: Product icon is now a buzzing phone instead of a bell
- ONS: Campaign page header gains a refresh button for the record and delivery data
- ONS: Give sent, delivered, opened, and rejected distinct chart colors (sent and rejected collided)
- ONS: Campaign timeline now plots sends and opens on separate axes so both shapes stay visible
- ONS: Campaign timeline now defaults to 24h with per-minute buckets (hourly on wider views)
- ONS: Remove the per-device table from the campaign page
- ONS: Fix campaign, device, and app analytics failing to load ("Failed to fetch") — the API crashed serving them
- ONS: Add Insights pages (Overview, Delivery, Engagement, Audience) with push funnel, time-to-open, and audience analytics per project
- ONS: Campaign pages now show a send-anchored timeline, time-to-open stats, opens by device dimension, and a filterable device list
- ONS: Device pages gain a Pushes tab, warehouse profile and permission state, activity filters, and payload inspection
- ONS: Fix delivery analytics failing to load and delivery rate reading 0% when no receipts were reported yet
- Platform: Fix product tooltips covering icons and blocking sidebar navigation
- ONS: Device, campaign and app pages now show delivery analytics (sent, delivered, opened) and a per-device activity timeline
- Platform: Sidebar rail shows horizontal tooltips centered beside product icons; the active product no longer shows a tooltip
- Platform: Sidebar rail now shows the active product's name vertically above its icon
- ONS: Add option to send a test push notification to a device from its detail page
- OCE: The Routes page now shows each accepted prefix's AS path (origin highlighted) once the appliance reports it
- OpenCache: Insights filters (resource, PoP, hostname) are now remembered per project — switching projects no longer carries the previous project's selection over
2026-09-08
- Media: Search previews use compact side thumbnails and content-sized cards; show two mentions per video in tighter quote rows with inline speaker labels, compact actions and expandable quotes and mentions
2026-09-07
- Media: Search conversations now keep their full history with no message or conversation caps, and a failed question can be retried without losing it
- Media: Search offers research modes (find moments, summarize, compare statements) and a per-conversation scope (videos, dates, season/episode, tags); refining a result set starts a new scoped search
- Media: Search moments now show the exact transcript quote with its speaker, plus a transcript-context view and copyable timestamped citations
- Media: Search results play bounded ranges in the floating player (pausing at the moment end) and timestamp links keep millisecond precision
- Media: Search adds a per-conversation shortlist — save moments across answers, add editorial notes, copy all or export CSV
- Media: Search history supports title search, pinning, renaming and pagination, with a jump-to-latest control in long threads
- Media: Searches started before this update no longer appear in history
2026-09-05
- Media: Search shows the time under each message (with the date when older than a day) and how long the run took next to the step summary, ticking live while the reply streams
- Media: Search groups clips by episode — one card per video with its moments listed inside, instead of repeating the same thumbnail
- Media: Search shows 3 wider episode cards per row, with a moments count and the full description on hover over a moment
2026-09-04
- Media: Ask is now Search (/media/search) — conversational search across your project's video transcripts in any language. It reads transcripts to pin the exact moment, then shows playable video cards (Show more for the rest) with a short brief that cites videos as named timestamps with Play/Open. Conversations are saved per project, each with its own bookmarkable address and a title taken from the first answer; follow-ups keep the full conversation, and tool calls collapse under a summary once the reply finishes
- Inference: New Inference Log at /inference/log — every AI call in the project with cost, tokens, model, outcome and per-step detail; filter by time range, feature, model, outcome and user, click a row for a side panel with its own link. Cost is recorded after the project's configured multiplier and metered to Stripe when the project has a connected Stripe account
- Dev: Media captions sync can name speakers with Muse Spark via OpenCode Go (
--model opencode-go/…), records every naming run per model, compares two models side by side (--compare + --report), and honors the Go rate limit (Retry-After, backoff on 429s, parks the run at the quota wall)
2026-09-03
- Dev: New media captions sync script names speakers across all cc-ar/cc-ar2 captions, stores the result, and pushes each transcript to the Cloudflare AI Search instance (hms) with media id, key, date and project attached
- OpenCache: Time-range picker opens as a bottom sheet on phones, with a quick-range grid, From/To tabs showing each bound, and larger touch targets (also applies to OpenIX and Embedded OpenCache insights)
- Platform: Clicking the active product or docs section in the sidebar rail now only expands the panel; collapse it with the toggle at the bottom of the rail
- Platform: Sidebar rail is now 50px wide, lining up exactly under the logo square; the expanded sidebar stays 270px
- Media: The audio player bar no longer overlaps the expanded sidebar's bottom edge
- Platform: The full P Foundation logo shows briefly when the console loads, then slides away to the left (text first, then the stripes) and the square mark slides back in; hovering the mark plays the same animation in reverse
- OpenCache: Drag across any timeseries chart to zoom the time range to the selected period
- OpenIX: Drag across any traffic chart to zoom the time range to the selected period
- OpenCache Embedded: Drag across any insights chart to zoom the time range to the selected period
2026-09-02
- OpenCache Embedded: Hardware charts every gauge over the selected time range (compute, network incl. pf state table, storage per volume, service health); live readings moved to the Overview
- OpenCache Embedded: Routes watches for new prefix reports and refreshes in place, showing what was added/removed, with a changed-only filter
- OpenCache Embedded: Link offload now reads as a multiplier (4.2×) in charts
- OpenCache Embedded: New Insights Overview at /oce — live appliance status (every 15 s, six-hour sparklines) plus headline KPIs (delivered bytes, uplink offload, requests, error rate) and one chart per area over the last 6 hours
- OpenCache Embedded: Insights reorganised into Throughput, Traffic, Performance, Errors and Connectivity (peer traffic and status codes moved off Throughput; the Throughput URL is unchanged)
- OpenCache Embedded: Traffic shows request rate, connections, and protocol mix including IPv6 share
- OpenCache Embedded: Performance shows subscriber delivery time, download speed, and breakdown by the host's own client networks
- OpenCache Embedded: Connectivity shows uplink ingress/egress, NIC throughput, link offload, peer fill by counterparty, and origin-path latency
- OpenCache Embedded: Content hostname and content-type mix remain visible to P Foundation support only
2026-09-01
- OpenCache: Time-range picker adds 14d, 30d and 90d presets
- OpenIX: Time-range picker adds 48h and 90d presets
- OpenIX: Insights and Flow Visualizer time-range picker now matches OpenCache's — compact quick ranges (1h … 45d) plus a custom absolute date/time range
- OpenCache: Time-range picker now shows compact quick ranges (30m, 1h, … 7d) and adds a 48h preset
v26.09 - 2026-09-01
- OpenCache: Draft edge resources are no longer sent to PoPs in the edge-config payload (only
status: active); each site object now includes status so the generator can filter independently. Draft sites with a PoP still listed in enabledPops had been generated since the DSB cut-over.
- OpenCache: Top URI tables now load automatically on ranges up to 24 hours, and can be loaded on request up to 7 days (was 1 hour auto / 6 hour cap)
- OpenCache: Insights reorganised into nine question-driven pages under a new Insights section — Overview, Traffic, Bandwidth, Cache, Origin, Performance, Errors, Content and Client Networks. Every chart from the former Traffic / Bandwidth / Observability pages keeps a home (Observability's charts now live on Cache, Origin, Performance and Errors); old links redirect
- OpenCache: New Insights Overview page — four headline KPIs (requests, cache hit rate, edge bandwidth, delivery time) plus one headline chart per area, each linking to its detail page
- OpenCache: Cache page brings cache status, efficiency (bandwidth savings / offload), hit rate by content type and tiering (cache layer, zones, fill source) together in one place
- OpenCache: Traffic shows Requests by Hostname as its own stacked chart; Request Rate now shows the total only
- OpenIX: Port, peer, community-cache and premium-cache traffic charts now show event annotations (maintenance/upgrade windows) with details on hover; labels include the date when the selected range spans multiple days
- OpenCache: prefix steering now detects offline appliances from their live metrics (nginx down or metrics silent >18s) and automatically moves their prefixes to other PoPs that announce them; unique prefixes fall back to default routing
- OpenCache: prefix steering watch mode now accepts second-granularity intervals (e.g.
--interval 30s) for faster offline-PoP failover
2026-08-29
- OpenCache: SSL certificates now renew automatically before expiry
- Platform: automated alert emails to support on elevated OpenCache 5xx errors — tracked as incidents: every email shows when the incident started, repeat alerts are labeled as the same incident, a recovery email goes out once the error rate has been back to normal for 10 minutes, and each incident is recorded for history
- Dev: Scheduler daemon ships in the consumer image and runs as a
scheduler compose service (Docker-supervised; pm2 dropped)
- Media: Video search now also matches tags (including programmable tags), waits until you stop typing before querying, and no longer lets a slow response overwrite newer results
2026-08-27
- OpenCache: Embedded OpenCache Throughput now shows a Traffic by Resource chart (bandwidth per served hostname) — visible to OCE/Support policy holders only
- OpenCache: Edge resource PoPs map now includes a CARTO API key, complying with their new basemap requirement
2026-08-26
- Platform: Sign-in and documentation pages are now indexable by search engines
- Auth: Sign-in page now has a language switcher, Changelog link, and Support link
- OpenCache: Security tab now previews upcoming Hotlink Protection, Geo Protection, ACL and Rate Limiting features (early release — contact support to activate)
2026-08-25
- Platform: The "What's New" popup no longer auto-opens for announcements older than 15 days
- Docs: The docs navigator now lists third- and fourth-level headings of the open guide, indented under their parent sections
- OpenCache: Edge resources can require signed URLs — new Security tab (token placement, secret, IP lock, require-expiry) plus a Generate signed URL tester; Routes can opt a path out. Unsigned/invalid/expired requests 403 once the fleet is on a bundle that includes the feature
- Docs: New Signed URLs guide under OpenCache — algorithm, parameter vs path, reference signers (TS/PHP/Python), exemptions, and validator rules ST1–ST8
2026-08-23
- Auth: Fixed spurious "Session expired" sign-outs when several tabs or windows refresh the session at the same time — concurrent refreshes now converge on one token (rotation grace window) and tabs coordinate so only one refreshes
- Auth: Session and sign-in records are no longer served from the API response cache, removing another source of unexpected sign-outs
- Auth: A permission denial while your session is still valid no longer burns a session refresh
2026-08-22
- Docs: New OpenCache Embedded section — program overview plus the inf5e40 and inf5e100 node hardware builds with full parts and pricing
- OpenCache: Edge resource upstreams can now override the DNS resolvers used to resolve origin hostnames (Upstream tab, next to the DNS re-resolve window)
- OpenCache: Embedded appliances can set node-level DNS resolvers from the OCE Network settings; the fleet default is now 8.8.8.8 8.8.4.4 9.9.9.11 149.112.112.11
2026-08-21
- OpenCache: Origin passthrough (lancache-style) on edge resource upstreams is now shown only to OpenCache/Support policy holders
- OpenCache: Edge resources support lancache-style origin passthrough (fetch from the client-requested hostname over HTTP) and wildcard alternate domains (
*.cdn.example.com)
- OpenIX: Port Insights traffic tooltip now shows the timestamp and matches the tooltip style used across all OpenIX charts
- OpenCache: The served-prefix list now collapses adjacent and covered prefixes (supernetting) by default — pass
?supernet=false for the raw as-announced list
- Docs: The Served Prefixes API guide documents the new
supernet parameter and the supernetted response field
- Docs: Try-it panels now support boolean toggles and predefined option lists — schedule mode / parse-streams on prefill, purge mode on purge, supernet on served prefixes
2026-08-20
- OpenCache: Bandwidth and Traffic dashboards now break down delivery by client network — stacked top-10 ASN charts plus Other (auto-loads up to 24 hours)
- OpenCache: Bandwidth and Traffic dashboards now break down delivery by PoP — new Bandwidth by PoP, Volume by PoP, and Requests by PoP charts with per-PoP share donuts
- OpenCache: New served-prefixes API — list every prefix the fleet currently serves (policy-gated)
- Docs: New Served Prefixes API guide
2026-08-19
- OpenCache: Saving an edge resource now rejects an empty custom proxy-header name — that used to emit a broken
proxy_set_header and fail nginx validation on every enabled PoP
- OpenCache: Adding a custom proxy header no longer writes a blank name until you confirm it
- OpenCache: Saving an edge resource now rejects empty or incomplete response-header rows (name required; Add requires a value; the same name cannot be both added and removed) — an empty header row previously persisted and froze config generation on every enabled PoP
- OpenCache: Adding a response header no longer writes a blank row until you confirm it — cancelling or saving the resource mid-edit no longer leaves an empty header behind
- Docs: The Prefill and Purge API guide now states that v1.1 is a rolling release (beta) and v1 is the stable release
- OpenCache: Creating a pre-fill with Parse streams now expands HLS/DASH manifests automatically — no extra step
- Docs: API examples are now interactive multi-language code blocks — switch between cURL, JavaScript, TypeScript, Python, and Go
2026-08-18
- Org: New service account tokens are 64 characters and start with
sa-
- Org: Resetting a service account token now displays the new token to copy
- Docs: Try-it panels can copy the configured request as cURL, JavaScript, TypeScript, Python, or Go
- Docs: Try-it panel titles show the API path, not the full host URL
- Docs: Each API Try-it panel sits beside the section it belongs to, so you can read that part of the guide and run its sample at the same time
- Org: Service accounts now record Last Access when they use the KVS, purge, and prefill APIs
- Docs: The Prefill and Purge API guide now names the public base URL (
https://baas.p.foundation/opencache/v1.1/)
- Docs: API guides can now execute sample calls live from the page — the OpenCache Prefill & Purge guide gets Try-it panels for all six endpoints
- Docs: Signing in from a documentation page now returns you to that page
- Org: Organization in the sidebar now uses a building icon
- Org: Service accounts (
@serviceaccounts.p.foundation) no longer appear on the Users page
- Org: New Service Accounts page — create a machine account with a one-time Directus token, edit its policies/projects/status, and reset the token
- OpenCache: New Purge page — remove cached content from all POPs by exact URL, wildcard path pattern (/*), or entire resource
- OpenCache: Creating a pre-fill now requires the OpenCache/Pre-fill: Write policy
- Docs: New Prefill and Purge API guide
- Dev: Prefill and Purge create endpoints are now
POST /opencache/prefill and POST /opencache/purge (the /create suffix is gone)
- Dev: Prefill and Purge status is tracked via
GET /opencache/prefill / GET /opencache/purge (and /{id})
v26.08 - 2026-08-17
- Dev: prefixSync
--probe can sweep every shared prefix in a time window (--probe-cover 6h / options.probe.coverWindow). Under apply --watch --probe that rotates through all common prefixes about every 6 hours. A refused apply no longer records those prefixes as already probed
- Dev: prefixSync treats a feed as stale after 48 hours (was 24), so a quiet appliance does not block the watcher
2026-08-15
- OpenCache Embedded: New fleet-wide Prefix Performances page under Insights — average throughput per /24 client prefix per PoP, filterable by network (AS) and PoP, with prefix search and sortable columns. Unlike the other Embedded OpenCache pages it covers every PoP in the fleet rather than the appliances your projects own, so it is gated on a separate "Fleet Insights: Read" policy
- OpenCache Embedded: Prefix Performances can filter by a minimum request count (10 / 100 / 1k / 10k) so sparse /24s drop out of the ranking
- OpenCache Embedded: Prefix Performances is sorted by request count by default
- OpenCache Embedded: Expanding a Prefix Performances row no longer lists the same appliance twice when some requests in the window have no GeoIP ASN
- OpenCache Embedded: Prefix Performances now shows how many PoPs served each /24 and lets you expand a multi-PoP row to compare throughput between those appliances. "Multi-PoP only" is on by default — each prefix is listed once (numbers are the prefix as a whole; expand for the per-PoP split). Turn it off to see every prefix/PoP pair
- OpenCache Embedded: Prefix Performances reports three throughput figures side by side — the average (total bits ÷ total time, used for ranking), the median response, and p90 — because they legitimately disagree: throughput measured on a small cached object reflects how fast the first buffer flushed rather than the client's link. Responses under 64 KB are excluded by default for the same reason, and the floor is adjustable
- Dev: prefixSync can now run continuously (
apply --watch) and apply whenever appliance prefix feeds change. Quiet ticks skip Route 53; a full reconcile still runs about hourly so out-of-band edits heal. --probe keeps rotating overlap prefixes for the whole time the watcher is up
2026-08-14
- OpenCache: Status Codes & Errors on Traffic can hide 442 responses (an appliance refusing a peer fill when origin fetch is off) so they do not look like client errors. The Error Rate card follows the same toggle
- OpenCache Embedded: Throughput now includes a Status Codes & Errors section. 442 responses (this appliance refusing a peer fill when origin fetch is off) can be hidden so they do not look like client errors
- OpenCache: Every dashboard panel now reads the self-hosted ClickHouse warehouse instead of Grafana Cloud. All 68 metric queries (Traffic, Bandwidth, Observability, Embedded OpenCache Throughput + Hardware trends) were rewritten from LogQL/PromQL to SQL over the warehouse's typed tables and minute aggregates; panel names, legends, units and API shapes are unchanged, so saved views keep working
- OpenCache: Top-N tables (URIs, client networks) are one warehouse scan instead of up to ten chunked log queries — the client-network table computes its hit/miss percentiles and hit rate in the same pass that ranks the rows, and absent cells still mean "no data" rather than zero
- OpenCache: Panels no longer degrade on high-traffic windows: the Loki-era range chunking, series-limit bisection and sketch-based top-N (
approx_topk) are gone, as is the Prometheus dual-datasource machinery (promAlternate / USE_OPENCACHE_PROM_METRICS) — there is one datasource and one query per panel
- OpenCache Embedded: Hardware trend sparklines (CPU, memory, disk, network, headroom, cache, response time) read the warehouse's
otel_metrics_* tables; the Grafana-era ~16h trend-window ceiling (long-term-store staleness) no longer applies
- OpenCache: Filter dropdowns (PoP / resource / site) list values from the warehouse's minute aggregate — cheap over any window
- Dev:
CLICKHOUSE_URL / CLICKHOUSE_USER / CLICKHOUSE_PASSWORD replace the five GRAFANA_* env vars; scripts/probeWarehouse.ts replaces the two Grafana probe scripts (checks credentials, expected tables, and per-PoP data freshness)
- Dev: prefixSync can temporarily steer a slice of shared prefixes onto a sibling appliance (
--probe) so TTLB is measured on more than one node. Only prefixes announced by two hosts in the same site (e.g. inf3-bey1) move; a prefix never lands on a host that has not seen it. Duration is 15m or until the next apply; recent time-of-day windows are not repeated for 7 days
- Dev: prefixSync config gains
disregardedHosts — listed appliances are excluded from DNS steering: their feeds are ignored (even when stale or broken, so a dead appliance no longer blocks the fleet from converging) and their Route 53 location is drained. Drain removals still count toward the remove-ratio safety rail
- OpenCache Embedded: The two Throughput bandwidth charts now read pre-aggregated metrics instead of scanning raw logs. Both were Loki range queries that re-read every access-log line in the selected window on every refresh, which is why they were the slowest panels on the page and got slower the more traffic an appliance carried. They now answer from counters computed once at ingest, so cost no longer scales with the window or with the appliance's request rate
- OpenCache Embedded: New "Response time" card on the Insights → Hardware page, showing average, median and p95 delivery time with a 6-hour trend. This is the first client-facing latency figure available for an appliance — the health agent measures only its own liveness probe against a static endpoint, which says whether nginx is answering, not how long real requests take
- OpenCache Embedded: The average is shown alongside the median deliberately. Response time is measured to the LAST byte, so it includes sending the body and scales with object size and client bandwidth — every appliance in the fleet averages far above its median, one of them by 147× (0.56s against 0.004s). Read alone, that average looks like an outage on an appliance serving every request normally
- OpenCache Embedded: p95 was previously unreportable and would have read as a flat 10.0s. The underlying histogram stopped at 10s and a measurable share of requests exceed that, so every percentile above ~92 was pinned to the top bucket and looked like a real measurement. The range now extends to 120s; p95 reads 4.6s / 1.3s / 1.1s across the fleet and nothing exceeds the new ceiling
- OpenCache Embedded: The Hardware page's "nginx response" figure is relabelled "Health probe" and carries a note saying what it measures. It is the agent's own liveness check against a static endpoint and is unrelated to the new Response time card; two latency figures differing by orders of magnitude under near-identical labels would have read as a contradiction
- OpenCache Embedded: New "Peer traffic" section on Insights → Throughput, showing cache fill exchanged with other PoPs in BOTH directions, each broken down by the counterparty appliance. Neither direction was visible before: traffic served to other appliances arrives on the normal public port carrying the end user's hostname and browser, so nothing distinguished it from ordinary client traffic, and traffic pulled from them had no accurate source at all. Verified against the appliance at the other end of each live link — the two agree to within 0.7%
- OpenCache Embedded: Getting the inbound direction right needed a change on the appliance. The two fields that looked like they could report it are both wrong: one undercounts by 13× because it records which cache tier answered a given client request rather than accounting for each fill, and the other overcounts by roughly 2× because a peer miss that falls through to origin files origin's bytes under the peer's name. Appliances now report the figure directly, counting only fills a peer actually served
- OpenCache Embedded: Each half of the section appears only if the appliance does that thing, so one that only serves peers is never shown an empty "Fill from peers" chart it could not populate. Peers are named rather than numbered: an appliance identifies itself to the peer it is talking to, so both ends of a link show the same name. A peer running an older build appears as an address instead — its traffic is still counted correctly
- OpenCache Embedded: Response time can also be split by client versus peer fill. The two travel over completely different network paths and are not comparable — peer fill currently measures about twice as fast as client traffic at the median and nearly nine times as fast at p95, so blending them makes client-facing latency look better than it is
- OpenCache: Fixed a misattribution that counted some cross-PoP cache fill as local. The Bandwidth by Cache Layer chart recognises peer classes by name from a configured list, and a class present on an appliance but missing from that list is silently counted under "Edge" — i.e. as traffic that never left the PoP.
regional70 was configured on two appliances and absent from the list. It is currently dormant, so no chart was wrong in practice, but it would have been the moment it started carrying traffic
- Dev: Twelve dashboard panels that were pinned to Loki because they needed the
cache_fill field now have Prometheus equivalents, including cache hit rate by resource, zone and content type, cache offload rate and bandwidth savings. Embedded OpenCache opts into them per query; the fleet-wide switch remains off pending a parity check across all panels
- Dev: Fixed a latent fault that would have made every Prometheus-backed chart render blank. Rate calculations need at least two samples inside their window, metrics are collected every 15 seconds, and the chart step floors at 15 seconds — so on a one-hour view each rate was computed over a window containing a single sample and returned nothing at all, with no error raised. Windows are now widened to the standard
max(step + interval, 4 × interval). This affected every Prometheus panel in the registry, not only the new ones; it had never surfaced because that path had never been switched on
- Dev: The published cardinality forecasts in
docs/grafanaCostOptimization.md were wrong by more than two orders of magnitude (~2.1K series fleet-wide against a predicted ~50K per PoP), and that estimate is what deferred this change. Corrected, along with the counter names in that document, which carry no _total suffix
2026-08-13
- NRCS: Reference videos added to a Package block are now queued for download to the station. Previously a pasted link was only checked for downloadability and then left as a link. Saving a story now hands each newly added link to the NRCS agent running in the facility, which fetches the file onto local disk next to the edit suite. Existing links are untouched — only links added after this release are queued, and a link that is moved between blocks or merely re-saved is never queued twice
- NRCS: Download progress is tracked per link and is visible on the agent in the facility. Nothing is written back into the story, so a download can never overwrite an editor's work in progress
- Dev:
docs/specs/nrcsAgentBus.md documents the NRCS agent bus — the stream and per-project consumers ops must create before a facility can receive work, and the job record contract
2026-08-12
- Dev: New
prefixSync tool deconflicts the BGP prefixes learned by each embedded OpenCache appliance and loads them into an AWS Route 53 CIDR collection, so DNS answers can be steered by client IP. Where two appliances announce the same address space, a nominated priority appliance keeps it and the others give it up. Runs read-only by default; plan previews the change and apply performs it
2026-08-09
- NRCS: RSS stories now import in full. Feeds that publish the whole article separately from its summary were importing only the one-line teaser — around 100 characters in place of a 1,600-character story. The full text now comes through, which also gives the AI far more to work with when it drafts a script or suggests a priority and category
- NRCS: Pictures from RSS feeds now show on feed items. Images published in the Media RSS format were being dropped altogether, leaving BBC Arabic and Alwasat items with no thumbnail. Where a publisher blocks us from fetching the image, the story still imports — just without one
- NRCS: RSS feed items now carry their language, so they show a language badge and can be filtered by language alongside wire items
- NRCS: Feed sources can now correct a publisher's mislabelled publish times. Some feeds stamp stories with the wrong time zone, leaving them dated hours ahead of everything else and stuck permanently at the top of the feed. A new optional setting on each source corrects the time as stories arrive
- NRCS: Anchor Read blocks can now name the anchor who reads them. Pick from the project members whose profile title is "Anchor"; the choice is shown on the block and included when you print the story
- NRCS: Assigning an anchor to a block also adds them to the story's assignees, so the work shows up on their plate without a second step. Changing or clearing a block's anchor never removes anyone who is already assigned
- NRCS: People pickers now show each member's real job title instead of labelling everybody "Reporter". Members who haven't set a title on their profile simply show no title, rather than being labelled with a job they may not hold. You can also search the list by title — typing "anchor" now finds your anchors
- NRCS: Fixed the people picker being all but empty for most newsroom users. Unless you also had user-administration access, the list showed a single "Unknown" entry rather than your colleagues. Member names, titles and profile photos now load for everyone on the project
- NRCS: Hovering a team member's avatar now shows who they are — in the rundown Team column, assignment cards, the story list and the assignee picker. Members who haven't set a first and last name show their email address instead
- NRCS: Suspended and archived accounts no longer appear as assignable people
2026-08-07
- Platform: Table values can now be selected and copied. Text inside table cells could not be selected anywhere in the console — dragging across an IP, an ASN or a hostname simply did nothing. Selecting a value no longer opens the row you were selecting in, so you can drag across it and copy without being navigated away
- OpenIX: One-click copy for addresses in the Looking Glass — neighbour IP, prefix, next hop and the route server's own Router ID. The button appears when you hover the value; prefixes copy with their mask, ready to paste straight into a prefix lookup
- OpenIX: The Looking Glass address bar now follows what you are looking at. Opening a BGP session, switching between received and exported routes, and picking All / Accepted / Filtered are all reflected in the URL, so any view you reach can be copied to a colleague or bookmarked and will open exactly as you left it
- OpenIX: Switching route server now keeps the session you were viewing instead of dropping you back on the full session list. Moving between the IPv4 and IPv6 route servers for the same peer keeps you on that peer's routes
- OpenIX: If the session you were viewing has no equivalent on the route server you switch to — a member peering on only one address family, for example — the Looking Glass says so and shows that route server's session list, rather than silently landing you somewhere unexplained. The same applies to an old link pointing at a session that no longer exists
- OpenIX: The browser Back button now works through the Looking Glass — it returns you to the session list rather than leaving the page. Switching direction or route view no longer stacks up history entries you have to step back through
- OpenCache: A resource that can't be saved now says why. A banner above the tabs lists every issue blocking the save, and each one links straight to the tab that owns the offending field. Previously the Save button simply sat greyed out with no explanation, and the underlying error was only visible if you happened to already be on the right tab
- OpenCache: Hovering a disabled Save button now shows the reason it's disabled. The explanation was already there but browsers never displayed it, because a disabled button ignores the mouse entirely
- OpenCache: The Save button now counts every outstanding issue, including invalid alternate domains and upstream retry settings, rather than only the ones reported by the last save attempt
2026-08-06
- Embedded OpenCache: Every figure on the Hardware page now carries a six-hour trend line beneath it — serving headroom, CPU, memory, system disk, network throughput, link offload and cache usage. A single reading tells you the appliance is at 12% CPU; the trend tells you whether it has been climbing all afternoon
- Embedded OpenCache: Hovering any trend line shows the exact value and time at that point. With two lines on one plot both are listed together, so receive and transmit can be read against each other at the same instant. Hovering a period where the appliance wasn't reporting says "no data" rather than showing the nearest reading from either side of the gap
- Embedded OpenCache: Receive and transmit are now drawn in blue and orange. The previous two greens were close enough to be effectively one colour on a thin line, and the new pair stays distinguishable for the most common forms of colour blindness. The ↓ and ↑ figures below the chart are tinted to match, so they double as its key
- Embedded OpenCache: Receive and transmit share one plot and one scale, so the gap between the two lines is the real difference between them rather than an artefact of each being scaled separately. This keeps the Network card the same size as the others, and there is no separate link-utilization trend — link utilization is simply receive plus transmit against the link speed, which the bar above already shows
- Embedded OpenCache: Hovering the cache storage trend now shows how much the cache holds at that moment as well as the percentage — the same order as the figures below it. A percentage on its own is unreadable on a 159 TB cache, where 0.5% is over 700 GB
- Embedded OpenCache: Busiest volume on the Hardware page now shows how much that volume holds and its capacity, with the percentage and the volume's own path beneath — matching how Used reads beside it. A bare percentage told you nothing on an appliance whose volumes range from gigabytes to hundreds of terabytes
- Embedded OpenCache: The cache usage trend sits beside the Cache storage heading rather than under one of the four figures below it, so the row of figures stays aligned
- Embedded OpenCache: A period where the appliance stopped reporting is drawn as a break in the line, not a straight line joining the two sides. Interpolating across a gap would show a steady, healthy-looking trend through exactly the window an appliance was silent
- Embedded OpenCache: The trend window is fixed at six hours and is not selectable. Longer ranges are returned by the metrics backend up to a day out of date without any indication, and a stale trend sitting under a live reading is worse than no trend at all
- Embedded OpenCache: Trends refresh every five minutes rather than on the page's 30-second cycle — a six-hour window barely moves in half a minute — and are skipped entirely while the tab is in the background. If they can't be loaded the page still shows every live reading as before
- Embedded OpenCache: The Network card on the Hardware page now shows a link offload figure — how many bytes the appliance sent for each byte it received on the monitored interface. A value near 1 means it is pulling almost as much as it serves
- Embedded OpenCache: This is a raw network-interface ratio, not a cache hit rate. It counts everything crossing the wire, including fills from peer appliances and incoming request traffic, so it reads lower than the cache's actual offload — Insights → Throughput remains the place to see how much traffic the cache saves. Hovering the figure explains this
- OpenCache: Fix every "Top 30" table reporting a 0% cache hit rate. On the Traffic, Bandwidth and Observability pages these tables showed rows with correct request and byte counts next to a hit rate of zero. The figure was never real — on the resource this was reported against, the true rate is 99–100%
- OpenCache: The cause was how the tables worked around a query size limit. Each table ran three separate queries — the requests, the cache hits, and the cacheable total — and each was split into time slices independently. On a busy resource they ended up covering different slices of the range and ranking different URIs, so a row's hit count was matched against an unrelated total, or against nothing at all, and the rate came out as zero
- OpenCache: These tables are now a single query per column, which removes the size limit entirely rather than working around it. On the busiest resource the Top URIs tables previously returned nothing at all on most loads, or a handful of rows assembled from whichever 21-second windows happened to fit under the limit
- OpenCache: A hit rate of exactly 0% now means what it says — the URI was requested and served from cache none of those times. Where the rate genuinely cannot be worked out, the cell shows a dash instead of zero
- OpenCache: URIs in these tables are now grouped with the query string and trailing segment number removed, so
index_video_11_0_3.mp4 and its thousands of sibling segments count as one row. For streaming resources the old tables ranked individual six-second segments — the top entry accounted for 0.03% of traffic and was indistinguishable from the next few thousand rows. Each row is now one asset representation, and the top entry is a meaningful share of traffic
- OpenCache: Top-N tables now load automatically up to a 1 hour range, offer a Load button between 1 and 6 hours, and are unavailable beyond that. These queries read every log line in the selected range, so a wide range is slow and expensive — previously a 24 hour range took over four minutes and scanned 137 GB to produce thirty rows
- Dev: Fix the API, consumer, KVS-consumer and reaper dev servers crashing on start under Node 24.16 — the pretty-log worker was being killed by watch mode's new module reporting before the server could listen
2026-08-05
- Embedded OpenCache: The Peers page now shows how your appliance fills from other PoPs, not just which peers it has. Two new panels, Raced fill and Peer selection, cover the settings that decide how a cache miss chooses between your peers
- Embedded OpenCache: Raced fill asks every peer at once for small objects — playlists and manifests — and serves whichever answers first, instead of trying them one at a time. Large files deliberately do not race: their speed depends on how fast the bytes transfer rather than on the initial round trip, so racing them would add traffic without making them arrive sooner. Which objects qualify is measured automatically from earlier fills, so there is nothing to configure per file type
- Embedded OpenCache: Peer selection covers how a peer is picked when the object is too large to race — either taking each peer in turn, preferring whichever has the fewest requests in flight, or choosing by measured speed from previous fills
- Embedded OpenCache: These settings are shown with a padlock and set by operations, not by you. They are fleet-level tuning with real cost implications — racing multiplies fill traffic on every miss — so they are visible for context but not requestable. Contact support if you want them changed
- Embedded OpenCache: Settings that are stored nowhere now correctly read as Default with the value the cache actually uses, instead of Not set. Previously a locked setting your appliance had never been given explicitly showed no value at all, which read as though nothing was configured when the cache was in fact applying a specific default
- OpenCache: New Peer Fill section in the OpenCache runtime documentation, covering peer classes and their ordering, serving other appliances, the raced-fill and peer-selection settings, and what the Overridden / Inherited / Default badges on the Peers page mean
2026-08-04
- OpenCache: Fix Total Origin Bandwidth showing an error instead of a figure on any time range longer than about an hour. Short ranges worked, which is what made this look like an intermittent loading problem rather than a broken query. A handful of requests per day are served through the cache's tier fallback path, and those record their origin byte count in a multi-part form the query could not read; a single one of them anywhere in the selected range discarded the entire result. Total Edge Bandwidth was never affected, since it reads a field that always holds a single number
- OpenCache: The same fault silently affected Bandwidth: Edge vs Origin, Volume: Edge vs Origin, Cache Bandwidth Savings, Upstream Response Time, Upstream Connect Time and Upstream TTFB — all of which read origin-side numbers the same way. Every one of them now renders across the full range
- OpenCache: These panels now accept only values they can actually read, rather than trying to exclude the shapes they cannot. Historical data is not rewritten, so this is what makes long ranges work today; the cache itself was fixed in the same release to stop producing the unreadable values in the first place
- Embedded OpenCache: Fix configuration change requests staying in the review queue after being approved or declined. The decision was recorded, and approved changes did reach the appliance, but the request itself kept reading as pending
- Embedded OpenCache: New Peers page under Configuration. Peer fill lets your appliance satisfy a cache miss from another PoP before going out to origin, and the page shows which peers it uses, their endpoints and how it connects to them
- Embedded OpenCache: Peer classes can be one of IX, local, regional, country, geo or global, ordered from the nearest fill source to the furthest
- Embedded OpenCache: You can now add, remove and tune peer classes yourself, and toggle whether your appliance answers peer requests from others — including a serve-only mode where it shares what it already has cached without fetching from origin on their behalf. Endpoints must be IP addresses, because the cache resolves them once at startup and a name that later stops resolving would take it down
- Embedded OpenCache: Settings your appliance has never been given explicitly now show the value the cache actually uses, labelled Default, instead of reading as unset
- Embedded OpenCache: Peer changes follow the same review flow as BGP, and the two are tracked separately — a BGP request awaiting review no longer blocks a peer change
- Embedded OpenCache: The Peers page explains when peer fill is not available on an appliance, rather than offering settings that could not take effect
- Embedded OpenCache: New BGP page under Configuration, showing your appliance's peering session, its route acceptance policy and its network settings in one place. Each setting says whether it is inherited from the fleet defaults — and so moves when they do — or pinned to your appliance
- Embedded OpenCache: You can now request changes to those settings yourself. Pick the values you want, see exactly what will change before you send it, and clear any field to hand it back to the fleet default. Requests are reviewed before they take effect, and you get an email when one is received and again when it is applied or declined
- Embedded OpenCache: Only one change request can be open per appliance at a time, so a second request cannot quietly overwrite the first while it is still being reviewed
- Embedded OpenCache: Reviewers see every project's pending requests in one queue at the top of both Configuration pages — including when their own projects have no appliance, which is the normal case when reviewing someone else's request — and can apply a request as submitted, adjust the values first, or decline it with a reason. The appliance's own side of the BGP session — its cache AS number, router ID and BGP protocol instance — is shown for context but cannot be requested, since it is assigned when the appliance is provisioned
- Embedded OpenCache: The BGP page is now unlocked by the Embedded OpenCache read and write policies. It was previously listed in the navigation but granted by no policy, so it never appeared. A new "Changes: Apply" policy grants review access and is intended to be assigned sparingly
- Platform: Configuration changes are written without disturbing neighbouring settings. Updates to a nested group of settings previously replaced the whole group, which would have dropped every value the change did not mention
2026-08-03
- OpenCache: Request collapsing is now a setting on the edge resource itself, under Cache → Global Cache Settings. Previously it could only be set on individual cache rules, so there was no way to say "collapse requests everywhere on this property" — and parts of a resource that have no cache rule, such as automatically-cached static files, could not be controlled at all. The new setting covers every cached path on the resource
- OpenCache: Cache rules now default to inheriting the resource's request-collapsing setting instead of silently switching it off. Every rule created in the console was previously created with collapsing disabled, so most resources were sending every concurrent miss straight to the origin without anyone choosing that
- OpenCache: Cache rules can still override request collapsing where a route genuinely needs to differ, and can now turn it on for a single route on a resource that has it off — the reverse was previously impossible. The Lock Age value is also editable in the console for the first time
- OpenCache: The Global Cache Settings card now reports how many cache rules override request collapsing, so a property-level change that some rules ignore is visible rather than appearing to do nothing
- OpenCache: Fixed a fault that could stop an edge node loading its configuration entirely. A cache rule with sub-rules that did not specify a Lock Age produced an invalid setting in the generated configuration, which nginx rejects outright
- OpenCache: The cache settings now warn when Lock Age is set longer than Lock Timeout. In that combination the age can never take effect — waiting requests have already been sent to the origin, and those responses are not cached — so it silently does nothing. The warning appears as you type and does not prevent saving, and it accounts for values inherited from the resource, so a rule that changes only one of the two is still checked
- OpenCache: Validation problems with the resource-wide cache settings are now highlighted on the field they relate to. Previously the save message told you to check the highlighted fields while nothing was highlighted, because these particular findings were never passed to the Cache tab
2026-07-31
- OpenCache: Edge nodes can now fetch their whole configuration from this API instead of reading the Directus collection directly. A single call returns the edge resources that enable a given PoP — including resources belonging to different projects, which a PoP legitimately serves side by side — together with the certificates they use and the node's own settings. Reads are filtered by the calling account's own permissions, so a node sees exactly what its credentials already allowed and nothing more
- OpenCache: Certificates delivered to an edge node now include the certificate and private key themselves. Reading them through the general-purpose key-value endpoints strips those two fields, which meant a node fetching a certificate that way received an empty one and would have served no HTTPS. The new endpoint returns them only for certificates the node is authorised to read and that are actually referenced by its own resources, plus any wildcard certificate covering its edge domains
- OpenCache: Edits to edge resources are now recorded against the person who made them. Every save and every new resource was previously attributed to the platform service account, so revision history couldn't tell you who changed what
- OpenCache: Saving an edge resource is now checked against your own permissions. Previously the check was skipped entirely, so an account without edit access — or without access to the project at all — could still save. Saving without edit access is now refused instead of quietly accepted
- OpenIX: Premium cache peers in the Peers table were showing two labels side by side. The redundant one is removed — the link through to Premium Caches remains
- Embedded OpenCache: New product in the navigation, with an Overview page, an Insights section (Throughput, Hardware, Connectivity, Routes) and a Configuration section (BGP, Geofeed, Maintenance). Access is granted by the new Embedded OpenCache read and write policies — until one is assigned to you, the product appears locked
- Embedded OpenCache: New Hardware page under Insights, showing your appliance's live health — whether it's serving, how much CPU, memory, system disk and network it's using, and the state of every cache volume including which one is filling fastest. Cache storage is broken down by tier, so you can see at a glance that your hot tier is filling while bulk storage sits nearly empty. Readings refresh automatically while the page is open, and the page tells you if the appliance stops reporting
- Embedded OpenCache: New Routes page under Insights, showing the client networks your appliance accepts over BGP and will serve. Check whether a specific client IP is covered, browse the prefixes flat or rolled up by parent block, and search or filter them by size. The acceptance policy — maximum AS-path length and excluded networks — is shown alongside, so an address that isn't served comes with its explanation, and the page tells you when your appliance last reported in
- Embedded OpenCache: Opening the product from the sidebar now takes you to Throughput instead of a missing page. The Overview page isn't built yet
- Embedded OpenCache: The Throughput page under Insights is now live. Pick one of your appliances and see "Bandwidth: Edge vs Origin" and "Bandwidth by Cache Layer" over the time range you choose, including a custom date range. The selected appliance and time range are remembered per project and follow you between devices. If your project has no appliance yet, the page explains what OpenCache Embedded is and links you to apply
- Platform: Machine writers that rewrite the same record every few minutes can now save without recording a revision. Edge telemetry was the worst offender — it alone accounted for 1.19 million of the 2.76 million stored revisions, none of which anyone reads. Those records now update without adding to the pile, so revision history stays useful for the content you actually edit. Nothing changes for records you edit yourself: their history is kept in full, and permissions are enforced identically either way
2026-07-29
- OpenCache: Cache hit rate was reading higher than it should. Revalidated, bypassed and error-stale responses all contacted the origin, but were counted as neither a hit nor a miss and so dropped out of the calculation entirely. They now count as misses — expect the headline Cache Hit Rate, the HIT/MISS charts and offload rate to report a lower, accurate figure
- OpenCache: "Cache Hit vs Miss by Resource" was also leaving expired responses off the miss side, so it read higher still than the equivalent chart by content type. The two now agree
- OpenCache: Hit rate and offload rate are now measured against requests that actually reached the cache, rather than all traffic — redirects and other responses that were never cacheable no longer drag the figures down
- OpenCache: The top URI and client-network tables (requested URIs, bandwidth, errors, origin fetches and client networks) were under-reporting request and bandwidth totals on ranges longer than six hours, and could show a hit rate above 100%. Both are fixed — the totals shown are now complete
- OpenCache: Those same tables are limited to a 24-hour range. Beyond that they show a message instead of results, and the queries behind them are skipped rather than run
- OpenCache: The top URI tables now list 30 rows instead of 25, matching the client-network table. This adds no query cost — the extra rows come from data already being fetched
- OpenCache: Origin bandwidth was counting cache fills from internal tiers and peer PoPs as origin traffic. On a request served by another tier, nginx reports the bytes read from that tier, and those were being reported as origin. "Bandwidth: Edge vs Origin", "Volume: Edge vs Origin" and the Total Origin Bandwidth figure now exclude them — expect origin to drop, by more the better your tiering is working
- OpenCache: Those figures also now include origin bytes from bypassed and revalidated requests, which reached the origin but were previously left out. "Cache Bandwidth Savings" gets the same treatment, so all four now report origin identically
- OpenCache: New "Bandwidth by Cache Layer" chart on the Bandwidth page — delivered bandwidth split by how far the bytes travelled: Edge (this PoP, including its local cache tiers), Peers (served by another PoP), Origin (left the CDN), and Direct (traffic that never entered a cache). The bands always add up to total delivered bandwidth
2026-07-28
- OpenCache: "Upstream Backend Distribution" now groups internal cache-tier sockets by tier name —
oc-tier1, oc-tier2 and so on — instead of listing one entry per tier per site. Traffic to the same tier is added together, so the top 10 shows ten real backends rather than ten variants of the same one. Origin backends still show their address
- OpenCache: New "Client Networks" section on the Observability page — a table of the top 30 client networks (ASN) by request volume, showing p25, p50, p75 and p90 delivery time under grouped HIT and MISS headings — requests served from cache versus requests that reached the origin — plus each network's hit rate. p75 is highlighted as the headline figure, matching the percentile OpenCache's own ASN reporting uses. Networks with fewer than 20 requests are omitted so the percentiles stay meaningful
v26.07.1 - 2026-07-28
- OpenCache: Hit rate, offload, bandwidth savings and origin-fetch figures now count content served from any of a PoP's internal cache tiers as a hit — previously only "cold" tier counted, so nodes using their own tier names had those savings reported as origin traffic. Historical numbers are unchanged
- OpenCache: Responses served from cache without contacting the origin at all — such as a stale object served while it refreshes in the background — now count toward hit rate and offload instead of being left out
- Docs: The OpenCache runtime guide's cache fill, tiering and
Pf-Cache-Status sections now describe named cache tiers, and the origin-offload query it recommends no longer misses traffic served by tiers not named "cold"
- OpenCache: Cache tiers now keep the same color in every chart on the Observability and Bandwidth pages, and tier colors run from cyan to violet by depth. Previously a tier could appear in one color in a chart and a different one in the panel beside it, and could change color when you switched the time range
- OpenCache: Chart colors are now derived from the series name, so any given hostname, backend or cache tier keeps its color across every chart it appears in
- Account: Newly invited users are no longer assigned the legacy "HMS - Editors" role — their access comes entirely from the policies and projects selected in the invite
- Account: Inviting a user now requires a valid email address, the DataStudio/Core policy plus at least one other policy, and at least one project — the dialog flags what's missing and the required Core policy is locked on
- Account: The same minimums apply when editing a user's policies or projects (only for the sections you actually change)
- Account: The invite and edit user dialogs now always fit the screen — header and buttons stay visible, the policy and project lists scroll — and both lists are searchable
- Account: You can only grant policies you hold yourself and assign projects you belong to — now enforced by the server, not just the form
- Account: Invitation email addresses are normalized to lowercase so users invited with a mixed-case address can sign in
2026-07-27
- Account: Invited users are now created active immediately and receive an email to sign in. The old set-a-password invitation email is gone
- Account: Re-activating a suspended or archived user (status set back to Active) now re-sends the invitation email so they know their access is restored
- Auth: The old set-a-password invitation page (/accept-invite) has been removed — sign-in is fully passwordless
2026-07-26
- OpenCache: Cache hit rate, offload, and bandwidth-savings figures now count content served from a PoP's cold storage tier as a hit instead of a miss. Previously, when hot/cold tiering was in use, an object served from the node's own cold tier was reported as a miss even though the origin was never contacted — understating your real origin offload. Today's numbers are unchanged; the correction takes effect as tiering is enabled
- OpenCache: "Top 25 Cache Miss URIs" is now "Top 25 Origin Fetch URIs" and lists only URIs that actually reached the origin, excluding those served from the cold tier — so it reflects real origin load
- OpenCache: New "Cache Fill Source" charts on the Observability page (under Cache Zones) break traffic down by where the bytes came from — this node's cache, its cold tier, or the origin
- OpenCache: Fixed origin bandwidth being overstated on tiered nodes — bytes read from the internal cold-tier hop were previously counted as origin traffic in Cache Bandwidth Savings
- OpenCache: Fixed the "Avg Delivery Time: HIT vs MISS" chart mixing fast local cold-tier reads into the MISS line, which made origin latency look better than it was
- OpenCache: Fixed "MISS/EXPIRED" series rendering in an arbitrary palette colour instead of the standard miss red on the Traffic page
2026-07-24
- Newsroom: New read-style script blocks (Anchor Read, Voice Over, Live Shot) now have auto-timing (150 WPM) enabled by default — read time is estimated from the copy as you type; you can still turn it off per block, and Voice Over still locks to a linked clip's length
- Newsroom: Story rows in the rundown template builder can now be reordered with up/down arrows, matching the segment controls
- Newsroom: The CG (character generator) block picker now shows a preview image of each template; a selected CG block shows the chosen template's preview beside its fields, and clicking it opens the graphic full-size — so writers can see at a glance which graphic they are picking or have picked
- Newsroom: Replaced the sample CG templates with the station's actual on-air graphics — Lower Third and Lower Third Title-Only (White/Pink), Phone Call (White/Pink), Location Tag, and Credit/Follow-Us
- Newsroom: Rundown template rows can now link an existing story instead of always creating a new one — use "Link existing story" in a template segment to reuse the same shared story (e.g. a branded bumper) in every rundown created from that template
- Newsroom: The "Prime Time News" template now opens Economy, Sports, and Culture with a shared "Bumper Intro News", a fresh per-rundown section intro, and a shared per-section bumper (Bumper Economy/Sports/Culture); attach each bumper's clip once and it appears in every rundown
- Newsroom: A story shared across multiple rundown segments (e.g. a bumper) now drags, reorders, and shows its air times correctly for each placement instead of affecting every copy at once
- Newsroom: Dragging a story onto a segment that already contains it now shows a clear warning ("… is already in this segment") instead of silently snapping back
- OpenCache: New "Cache Zones" section on the Observability page — per-zone request volume, hit rate, distribution, and average delivery time, including the hot/cold tier zones and bypassed ("off") traffic
- OpenCache: The Bandwidth page now charts bandwidth by cache zone (hot/cold tiers, named zones, and bypass)
2026-07-23
- OpenCache: Edge resource upstreams gain new origin-resolution tuning — peer zone size, DNS re-resolve window, and max keepalive connection lifetime — with guidance for rotating CDN origins
- OpenCache: Cache zones can now set a "min free" disk floor (filesystem free-space eviction threshold); left empty it is auto-derived from the zone's max size
- OpenCache: Stale content serving in cache rules is now a three-way choice — Default (on, recommended), Custom conditions (now incl. HTTP 429 and a max stale age limit), or Off — matching the platform's new stale-by-default behavior
- OpenCache: New upstream servers default to passive failure detection off (Max Fails 0); a warning explains that Max Fails is ignored on single-server upstreams
- OpenCache: Resource validation now distinguishes advisory warnings (shown in amber, never block saving) from blocking errors
- OpenCache: Preset time ranges (e.g. Last 30m) on the Traffic, Bandwidth, and Observability pages now always cover the period ending now when you open or switch to a metrics page, instead of reusing the window from a previous session. Data reloads only when you open a page, change the time range or filters, or click Refresh — never on tab switches or in the background. Custom ranges keep their exact dates
- OpenIX: Insights time ranges likewise cover the period ending now each time you open an insights page, reloading only on navigation or Refresh
- OpenIX: Premium-cache traffic in the Peers view is now shown under the cache service itself (with a cyan "Premium Cache" badge) instead of disappearing from the table — masked caches get their own selectable rows with full Avg/Current/Max stats and can be plotted in the peer overlay chart alongside ASN peers
- OpenIX: Premium caches served from a dedicated ASN (e.g. CDNetwork / Meteverse AS54994) keep their ASN attribution but are now badged as premium caches in the Peers table and colored/legended as premium caches in the Real-time view
2026-07-22
- OpenCache: The cache zone picker for request routes and cache rules now always offers "default" and "memory", even when they aren't defined in the resource's cache zones — these zones are always available at runtime
2026-07-21
- Newsroom: Creating or editing stories, rundowns, assignments, contacts, feed items, and publish targets is now recorded under the person who made the change — so revision history and "last edited by" show the actual user instead of the system account
- Newsroom: Package blocks now include an "Editor guidance" section — free-text notes plus reference video links for the video editor — so the writer/producer preps the package and the editor attaches the final cut to the same block. Paste a video link and it's checked for downloadability before being added; if the checker is unavailable the link is still added and flagged "unverified"
- Newsroom: The story editor now explains each script block type — the Add-block menu shows a one-line description under every block, and hovering a block's type label reveals what it means and when to use it
2026-07-18
- OpenCache: Auto-managed SSL certificates (both DNS-01 and edge HTTP-01) can now be renewed in bulk before they expire — a new operator-run tool reissues any certificate expiring within the next few days using the existing certificate-provisioning flow, so certificates no longer lapse waiting for a manual re-issue
2026-07-15
- Platform: The project selector now jumps back to the top of the list as soon as you start typing a search — while still opening scrolled to your currently selected project
2026-07-14
- OpenCache: Refreshing metrics or changing the time range now shows a clear reloading indicator (spinning Refresh button, a thin progress bar under the filters, and a subtle overlay on each panel) while the current charts stay visible — instead of the page appearing to freeze
- OpenCache: The Refresh button is disabled while data is loading, and auto-refresh no longer stacks on top of an in-progress reload, so metrics can't be double-loaded
- OpenIX: Insights and the Flow Visualizer now show a reloading overlay on each panel (plus a progress bar under the toolbar) when refreshing or changing the time range, so it's obvious data is being pulled while the previous view stays on screen
- OpenCache: Upstream retry / failover is now a dedicated, validated section in edge resource settings — set the retry conditions, max tries (counting the first attempt), and a timeout budget, with built-in guidance on when retries actually happen. Broadening retries to 5xx errors or more than one try now requires a timeout budget before you can save
- OpenIX: The CDNetwork / Meteverse premium cache is now enabled by default for all members — it appears as Enabled under Services → Premium Caches, and your announced routes are tagged for the cache automatically on the next route-server reconfigure
- Dev: OpenIX Premium Caches catalog and per-IX configuration (including the exchange's own service prefixes) now load from editable KVS config instead of hardcoded defaults, so they can be updated without a deploy — no change to functionality
2026-07-13
- Newsroom: The Rundown now works on phones and tablets — the desktop-only gate is removed and the table scrolls horizontally on small screens while the toolbar stays fixed in place
- Newsroom: Rundown rows now use alternating shading for easier scanning, on all screen sizes
v26.07 - 2026-07-10
- Platform: User profiles no longer accumulate a revision-history entry on every sign-in and hourly session refresh — the "last access" timestamp is now updated silently, and the existing noise entries can be purged by an admin
- Account: Enable or disable push notifications directly from Account Settings → Notification Devices — no need to hunt for the option in the header menu
- Platform: The Enable Notifications option in the header menu now appears reliably (it previously could stay hidden right after loading the app)
- Platform: On iPhone and iPad browsers, the app now explains that notifications become available after adding it to your Home Screen, instead of hiding the option entirely
- Auth: Sign in with a passkey — after entering your email, accounts with a passkey get a Face ID / fingerprint / security-key prompt instead of waiting for an email link (cancelling falls back to the normal email sign-in, and a "Use passkey" retry stays available)
- Auth: Saved passkeys are also offered directly in the email field's autofill dropdown on the sign-in page — pick one to sign in without typing anything
- Auth: Passkeys require a browser with Related Origin Requests support (Chrome/Edge/Brave 128+, Safari 18+) — on Firefox, sign-in automatically falls back to the email link
- Account: Add and manage passkeys from Account Settings — add a passkey for each of your devices or password managers, rename them, and remove ones you no longer use
2026-07-07
- OpenIX: Route servers and collectors are now ordered consistently — RS v4, then RC v4, then RS v6, then RC v6 — on both the BGP page and the Looking Glass overview (unreachable route servers still sort last on the Looking Glass)
- OpenIX: The BGP page's per-session Filtered count now matches the Looking Glass — it reflects the routes the route server actually dropped from its master table (RPKI / IRRDB / bogon / policy) instead of always showing 0
- OpenIX: Manage your route-server session settings from the BGP page — view and request changes to your AS macro (IRRDB AS-SET) and prefix limit for each address family (IPv4/IPv6), alongside the RS/RC MD5 password. As with the other settings, changes are coordinated with the operations team rather than applied instantly
- OpenIX: The Ports page no longer shows the max-prefix and AS macro fields — they now live on the BGP page under Session Settings
2026-07-03
- OpenIX: Add a BGP page (Services → BGP Sessions) showing your network's session status with every route server and collector — each session's state, imported / exported / filtered route counts, and a link to view its routes in the Looking Glass
- OpenIX: You can now request an RS/RC BGP MD5 session password change from the BGP page — the change is coordinated with the operations team so your session isn't dropped, rather than applied instantly
- OpenIX: Route-server filtering on the BGP page now works in both directions — advertise controls (don't announce / announce / AS-path prepend 1–3× to a specific peer or all peers) and receive controls (drop / accept / prepend routes you receive from a peer) — each optionally scoped to specific prefixes you can pick from your own or the peer's IRRDB set, plus reject specific prefixes. Enforced by the route servers on your behalf on the next reconfigure
2026-07-01
- OpenIX: The Looking Glass now orders route servers by health (reachable first) on the overview, and each route-server page has a switcher in its header to jump straight to another route server
- Auth: Fix passwordless sign-in showing "This request expired" right after requesting a new link; requesting too many links in a short time now shows a clear "please wait a few minutes" message instead
- Auth: Fix passwordless (magic-link) sign-in failing with an internal server error — the API can now send the sign-in email
- OpenIX: The Looking Glass now flags filtered routes with the reason they were dropped (RPKI invalid, IRRDB, bogon, etc.) via an All / Accepted / Filtered switch on each session, and labels known BGP communities (RPKI/IRRDB status, announce/prepend controls, well-known) with a description on hover
- OpenIX: Add a Looking Glass (Tools → Looking Glass) to inspect the route servers' live BGP state — browse each route server's status and sessions, drill into the routes a peer sends or receives, search sessions by ASN / neighbour IP / member name, and look up any prefix across all route servers
- OpenIX: Premium Caches are now enabled for your whole network (your ASN) instead of per port — enable a service once and it applies across all your ports; the enable dialog no longer asks you to pick a port
- Dev: Newsroom, OpenIX, and passwordless (magic-link) sign-in endpoints now run on the standalone Fastify API alongside the other backend services (moved out of Next.js) — no change to functionality
- OpenIX: A Premium Cache enablement can now name the serving network(s) that receive your opted-in routes — the exchange keeps the cache's BGP community on those routes to the serving network (and strips it from every other peer) so the cache can identify and serve your traffic
- OpenIX: Enabling a Premium Cache now feeds the exchange's route-server configuration directly — your access choice (all prefixes, tag with the service's BGP community, or specific prefixes) is applied via BGP communities once OpenIX activates the service, instead of being handled entirely by hand
2026-06-30
- NRCS: The Rundown and story editor now load each story's full details on demand when you open it, so the NRCS loads noticeably faster
- Platform: The project selector opens with your current project highlighted and scrolled into view, and marks it with a check
2026-06-29
- NRCS: Rundown template segments can be marked as a recap that reuses an earlier segment's stories (the same items) instead of creating new ones — e.g. closing headlines that repeat the opening
- NRCS: Add a "Prime Time News" sample rundown template — Headlines, two news blocks, Economy, Sports, Culture, Weather, and a closing-headlines recap
v26.06.1 - 2026-06-27
- OpenIX: Premium caches can be flagged to stay out of peering insights — their traffic is removed from the Peers table, Flow Visualizer, and the real-time flow's peer networks (your port totals are unchanged), and is instead shown as its own node in the real-time flow
2026-06-26
- OpenIX: Charts and insights now clearly distinguish a load error (with a "Try Again" button) from genuinely empty data, instead of always showing a "no data" message — e.g. real-time flow no longer shows "Waiting for live traffic…" when a request actually failed
- Dev: KVS listings (including OpenIX ports) consistently exclude archived items; callers can opt in with
includeArchived (e.g. ?includeArchived=true) to include them
- OpenIX: Remember your selected port per project — it now stays selected as you move between OpenIX pages and is restored (instead of resetting) when you switch projects
- Platform: Make the "new version available" refresh reliable — it no longer hangs (a fallback now forces the reload) and the banner clears correctly after updating
- Platform: Stop auto-reloading the page when the network reconnects
2026-06-25
- OpenIX: Real-time flow now shows "No ports provisioned for this organisation yet." when your organisation has no ports, matching the other OpenIX pages
- Platform: Project selector now lists projects alphabetically by slug and adds a search box when you have more than 5 projects
- Account: Remove the Change Password option from account settings
2026-06-24
- OpenIX: Peers, Flow Visualizer, and real-time flow now measure inbound and outbound traffic independently, so each direction shows its own top networks and "Other" remainder — previously inbound reused the outbound ranking, collapsing inbound-heavy peers into "Other"
2026-06-23
- OpenIX: Premium Caches — when enabling a service, choose how it applies to your prefixes: all announced prefixes, tag with the service's BGP community (copyable community values), or enter specific prefixes
- OpenIX: Premium Caches — validate entered prefixes (IPv4 ≤ /24, IPv6 ≤ /48) and verify they originate from your port's ASN via RPKI, blocking ones that don't, with live feedback as you type
- OpenIX: Premium Caches — OpenIX's IRR/RPKI route-server filtering still applies to all announced prefixes, with a link to the peering-security guide
v26.06 - 2026-06-20
- OpenIX: Add Route Servers page (Tools → Routes) — route-server update status and staleness, per-VLAN IP address utilization, and switch inventory
- OpenIX: Resolve ports live from IXP Manager by VLAN-interface id instead of storing a copy of each port — interfaces, addresses, MACs, and services are always current; unresolvable references are flagged
- OpenIX: Show reverse-DNS hostnames on port addresses
2026-06-19
- OpenIX: Add Flow Visualizer (Tools → Flow) with drag-to-reorder multi-dimension group-by, per-query IPv4/IPv6 prefix-length control, and overlay / stacked / small-multiples graph types
- OpenIX: Add structured filter bar with akvorado-backed value autocomplete and per-clause validation
2026-06-17
- OpenIX: First release — port details, traffic / peer / real-time insights (d3-sankey flow visualization), community-cache breakdown, and a Premium Caches catalog with ordering and cancellation
- OpenIX: Add member change requests (peering policy and per-family MAC) and a Premium Cache service-details dialog
- Auth: Add passwordless magic-link login
- KVS: Enhance request body validation and add value encoding for the Directus JSON column
2026-06-16
- NRCS: Prevent duplicate records from rapid/double-clicks across Feed (promote to story), Editor (new story), Assignments (create assignment, add contact), Rundown (create story), and Publishing (publish/post)
- NRCS: Add a confirmation prompt before deleting a story
- NRCS: Consistent loading indicators and disabled buttons while create/publish/generate actions are in progress
- Platform: Modernize runtime and dependencies — Node 24, Next.js 16.2.9, React 19.2, TypeScript 6, Directus SDK 22, zod 4, react-day-picker 10, react-resizable-panels 4, AG-Grid 35.3, and Tailwind 4.3
- Auth: Fix login for the Directus SDK 22 object-argument signature (caused by the upgrade)
- API: Allow all REST methods in the CORS configuration
- Docs: Add Media app documentation
- Dev: Resolve
next dev out-of-memory by pinning the Turbopack workspace root
2026-06-12
- Docs: Improve layout and functionality
- Docs: Add OpenCache general documentation
- Docs: Add Dubbing general documentation
- Docs: Add NRCS general documentation
2026-06-09
- NRCS: add rundown templates and held story support
- Dubbing: Adds a new option to execute the full pipeline (transcription, OCR, and audio track separation) with a single action
2026-06-04
- Improve beta release banner dismiss mechanism
- Dubbing: add support for single and multi-track lip-sync generation
2026-06-02
- Media: clear tus storage entries after successful upload to prevent localStorage quota exhaustion (bug fix)
v0.1.91 - 026-05-19
- OpenCache: add shared time-axis utilities for multi-day range formatting
2026-05-11
- Pinned and recent navigation items synced to KVS
2026-05-07
- OpenCache: Add Dynamic Request Handling
- Docs: First implementation on /docs/
- Improved navigation layout and restructuring
- Dubbing: Add graphics detection and translation with UI editorStill no
2026-04-30
- OpenCache: Hide
Add Cache Status Header in cache configuration. Header Pf-Cache-Status is added by default to all requests
- OpenCache: Ability to remove headers using Global Response Headers
v0.1.79 - 2026-04-27
- ASR: Add speaker management with segment migration support
- OpenCache: Improve insights UI/UX with revised color scheme and synced cursor
2026-04-22
- OpenCache: Optimize insights Loki query to control costs
2026-04-21
- OpenCache: Removed auto refresh option and add manual refresh button
v0.1.77 - 2026-04-19
- OpenCache: Improve TimeRangeSelector to reflect preset selection
- OpenCache: Enhance insights content and component integration
2026-04-17
- Log reason when slow request warning is displayed
- ASR and Dubbing: Player segment seeking bound to header only
- ASR and Dubbing: Filter media search results to last 48 hours and increase limit to 30 items
- ASR and Dubbing: Expand create ASR dialog dimensions and add video upload functionality
- ASR and Dubbing: Switched translation model to
google/gemini-3.1-flash-lite-preview
- Tasks Orchestrator: Increase default concurrency and batch parallel child task spawning
- Video Player: Moved processing status handling to server side for use direct player polling
- Dubbing: Add lipsync segments type
- Dubbing: Add speech stem audio with underlay volume control for dubbed segments
- OpenCache: Skip certificate issuance for custom SSL mode resources
2026-04-16
- Remove unnecessary provider wrappers from error and not-found pages
- OpenCache: Fix Grafana regex escaping for Loki label matchers
- OpenCache: Add parse streams option for prefill creation
- OpenCache: Add permissions to access pre-fill
v0.1.75 - 2026-04-15
- OpenCache: Add prefill creation endpoint with URL validation and scheduling support
- OpenCache: Add CORS enabled toggle with conditional rendering of CORS configuration
- OpenCache: Enable auto-refresh on time range selector for insights
- OpenCache: Suppress loading skeleton flicker during metrics auto-refresh
- Docs: Document DateTimePicker components and add sidebar separator support
- Dev: Pipe all dev scripts to log files via tee
v0.1.73 - 2026-04-14
- CI: Add Semaphore beta deployment trigger for x30, x40, x70 environments
- OpenCache Prefill: Add Dynamic schedule option with off-peak tooltip
- OpenCache Prefill: Inline datetime picker next to Scheduled button
2026-04-13
- OpenCache: Add insights for traffic bandwidth and observability with metrics query endpoint
- OpenCache Insights: Rearrange layout and minor fixes
- UI fixes
2026-04-12
- OpenCache: Add incomplete chain warning and limit textarea heights
- OpenCache: Fix custom certificate selection mapping
v0.1.59 - 2026-04-12
- Fix browser logging configuration
- OpenCache: Fix custom certificate selection mapping
v0.1.57 - 2026-04-10
- Remove priority flame icon feature from sidebar sections
- Login: Improve email validation
2026-04-09
- Access Management: Layout formatting of edit-person-dialog component
- Access Management: Fix for people search (add null coalescing in filteredData to handle undefined properties)
- OpenCache: Simplify status handling and disable domain validation of resources
- OpenCache: Improve TLS certificate validation and ACME http-01 challenge handling
v0.1.55 - 2026-04-07
- Access Management: First release
- PF Console: Rework navigation to use policies
v0.1.53 - 2026-04-07
- OpenCache: Add support for TLS 1.0/1.1 protocols
v0.1.51 - 2026-04-06
- Dubbing: Sync muted state and add buffering indicator to video player
- OpenCache: Improvement and fixes to Open Cache SSL Certificates Handling
- OpenCache: Add edge resource save endpoint with wildcard detection and DNS-01 challenge support
- OpenCache: Add support for HTTP-01 ACME challenge type
v0.1.49 — 2026-04-03
- Minor tweaks and improvements
- Media: Video player (v2) improvement
- Media: Video player (v2) seekbar thumbnail overlay support
v0.1.47 — 2026-04-02
- ASR: Performance tweaking
- DSB: Migrate to new endpoint
- DSB: Messages now uses NATS cluster to align with the remaining platform
2026-04-01
- Refactor audio and video components to use shared volume state
- ASR: Add translation functionality
- ASR: Add the ability to archive from list drop down menu
- ASR: Add the ability change speaker label
- ASR: Add the ability to change segment speaker
- ASR: Fix Video seek on segment click
- ASR: Add advanced export option
- ASR: Detect if the source text has changed and prompt to retranslate
- ASR: Redesign create modal
- Dubbing: Redesign create modal
- Dubbing: Add audio source selection with sync controls
- Fix: Announcements showing repetitevely
v0.1.45 — 2026-03-31
- ASR (Automatic Speech Recognition) — New section under Inference for transcribing audio/video media without translation. Create ASR projects, link or upload media, transcribe via ElevenLabs Scribe v2 with speaker diarization, then edit and export segments (CSV, SRT, WebVTT, PDF).
- ASR list page with search, status filtering, and project creation with optional media linking.
- ASR detail page with split-panel editor (segments + video player), segment splitting/merging/inserting, dirty tracking, and revision history.
- API endpoint
POST /asr/transcribe for media transcription.
v0.1.41 — 2026-03-30
- AI-Powered Video Segmentation — Automatically break long-form videos into meaningful segments using machine learning analysis. Supports content-aware splitting based on scene changes, topic shifts, and natural break points.
- Segment generation available from the video detail page for videos with completed transcriptions.
- Video detail page layout refinements.
— 2026-03-29
- First stable release of PF Console and start of Changelog