Milestones

tailscale2otel

Progress across published tasks.

user-friendliness

13 of 13 completed

Wave 1: bugs and guardrail foundations

12 of 12 completed

Wave 5: HA coordination and validation follow-ups

7 of 7 completed

v5 big bang major

1 of 1 completed

Wave 2: Loki state-snapshot family

8 of 8 completed

Wave 3: API surface expansion

9 of 9 completed

Wave 4: collector and ingestion resilience

11 of 11 completed

Wave 5: operator surface and cost controls

11 of 11 completed

Wave 6: config ergonomics and performance

6 of 6 completed

Wave 7: deploy and docs polish

5 of 5 completed

Decision-gated

2 of 2 completed

Wave 4: live validation and review follow-ups

9 of 9 completed

Unassigned

119 of 147 completed

TSO-0001Upgrade Go toolchain to 1.27UnspecifiedTSO-0002Remediate Codex Security scan b3c6de8ehighTSO-0002.01Harden ingress and local HTTP boundarieshighTSO-0002.02Bound retained state and protect local persistencehighTSO-0002.03Harden outbound credentials transports and TLShighTSO-0002.04Close Helm credential and workload identity gapshighTSO-0003Cut CI job fan-out per PR to drain the Actions queueUnspecifiedTSO-0004prometheus.max_requests_in_flight: 0 now crash-loops every config copied from the old exampleUnspecifiedTSO-0005Persistent flow store refuses every pre-hardening database with no way to migrate itUnspecifiedTSO-0006Migrate to OpenTelemetry v1.46.0 / log v0.22.0 after the log attribute API removalUnspecifiedTSO-0020Rotate credentials exposed in an agent transcripthighneeds-triagesecurityTSO-0021Update check fails permanently: the 64 KiB body cap truncates the GitHub latest-release responsehighTSO-0022Fix live Grafana dashboard accuracy and signal coverage gapshighneeds-triageTSO-0023Separate durable evidence state from poll cursorshighconfigurationobservabilityTSO-0024Support per-tag metrics port overrides in node-metrics discoverymediumneeds-triageTSO-0025Migrate the repo task surface to just and retire Makefiles and ad-hoc scriptsmediumwave:2-fleetTSO-0026Add config.schema.json to the advertised regenerate-everything pathlowneeds-triageTSO-0027Make each generated artifact its own just recipe and retire the script's target dispatchlowneeds-triageTSO-0088Clarify App.Close flow-store ownership outside Run shutdownlowneeds-triageTSO-0110Shard and compress Kubernetes checkpoint storage to remove the 1 MiB ceilinghighTSO-0111Reject a Kubernetes checkpoint configuration that cannot fit its ConfigMaphighTSO-0112Eliminate the load-dependent CI test flakes that make the gate unreliablehighTSO-0113Default the coordination namespace to the release namespace, not defaultmediumTSO-0114Reconcile rollback-era legacy checkpoint writes on re-upgrademediumTSO-0115Prove coordinated Kubernetes mode on the lab, then revertmediumTSO-0116Adjudicate the clientlib-drift alert that fires while both matrix legs passlowTSO-0117Convert the inventoried timeout-only deadlock guards to deterministic barriersmediumTSO-0118Reconcile a legacy checkpoint object whose migration marker an older release removedhighTSO-0119Standby replicas record coordination telemetry that the Prometheus pull path never serveshighneeds-triageTSO-0120Ship alert rules for the Lease coordination feature, which has nonemediumneeds-triageTSO-0121Guard the unsuffixed OpenTelemetry instrumentation scope against a future majormediumneeds-triageTSO-0122Keep alert policy counts and recommended-profile prose truthfullowneeds-triageTSO-0123Allow deployment verification to select a gcx context explicitlyUnspecifiedneeds-triageTSO-0124Alert when an enabled receiver is fail-closed by missing credentialsmediumneeds-triageTSO-0125Alert on Prometheus gather errors that silently omit seriesmediumneeds-triageTSO-0126Alert on sustained processor queue dropsmediumneeds-triageTSO-0127Alert on consecutive profiling upload failureslowneeds-triageTSO-0128Alert on Kubernetes audit schema driftmediumneeds-triageTSO-0129Reject coordination timings that client-go cannot runhighneeds-triageTSO-0130Self-fence promptly when a live coordination Lease is deleted or replacedhighneeds-triageTSO-0131Emit a coordination handover counter so leadership flapping can be alerted truthfullymediumneeds-triageTSO-0132Prove the coordinated Kubernetes surface live: standby scrapes, demotion, Lease loss, clock skewhighneeds-triageTSO-0133Review the coordination alert firing history and decide paging, due 2026-09-11lowTSO-0134PAM config changes never reach the audit-changes metricmediumTSO-0135Assert the pinned golangci-lint and govulncheck versions at run time, the way the helm generators domediumTSO-0136Attribute PAM telemetry to an operator-named tailnet via pam.tailnetmediumTSO-0137Opt-in per-session PAM log record, off by default and pii_filter-gatedlowTSO-0138Discovery sweep: inventory uncollected API surfaces and dead shipped signals to refill the boardmediumTSO-0139Expose safe log-stream destination configuration alongside delivery healthmediumTSO-0140Give the lab deployment a rollout trigger so it tracks releases instead of a stale main digestmediumTSO-0141Bring the lab configuration up to the shipped feature set and adjudicate the zero-sample signal familiesmediumTSO-0142Emit the modeled capability scope preflight metric at runtimemediumTSO-0143Give coordinated replicas per-replica persistent state so the lab can run two replicasmediumTSO-0144Route receiver and admin traffic by a leader pod label so standbys can be ReadyhighTSO-0145Audit v5 documentation against shipped features and remove AI prosehighTSO-0146Promotion-time ingress WAL replay blacks out the leaderhighTSO-0147Resolve recurring readiness failures and ingress WAL drain backloghighTSO-0148Decouple ingress WAL completion from metric collection to preserve configured DPMhighTSO-0149Build local WAL throughput and configuration comparison harnessmediumTSO-0150Diversify Grafana dashboard visualisationshighTSO-0151CI hygiene: reusable Go build cache key and main-only smoke-build cachehighTSO-0152Prune change-detector unit testsUnspecifiedtestingTSO-0153Sanitize exporter first-failure diagnostics before logging backend responsesmediumTSO-0154Raise the Go floor to 1.27.2 so the vulnerability gate passes on a patched toolchainhighTSO-0155Restore Go 1.27.2 gate compatibility and clear reachable x/net vulnerabilitieshighTSO-0156Correct sharded CodeRabbit recipe examples to positional just argumentslowTSO-0157Report CodeRabbit finding counts in the sharded review summary instead of CLEANmediumtoolingcoderabbitTSO-0158Wire delivery-health diagnostics so export outage and recovery lines actually logmediumtelemetryobservabilityTSO-0159Fix nondeterministic TestIngressWALScheduledCadence_CommitRequiresMetricsAndLogs failure in CIhighwalciTSO-0160Sharded CodeRabbit runner: a shard is clean only when counted findings match the complete event's totalmediumTSO-0161Classify a malformed HTTP status line as class other, never by its free-text wordmediumTSO-0162Ingress delivery reports retrying when an export attempt hangs past the reader timeoutmediumTSO-0163Drop an ingress snapshot after N consecutive permanent 4xx rejections and count the losshighTSO-0164OTLP ACK probe recipe: record what a gateway returns on a successful HTTP exporthighTSO-0165Run the OTLP ACK probe against the Grafana Cloud gateway and decide whether the ACK guard is safehighTSO-0166Discovery sweep 2: inventory uncollected API surfaces and dead shipped signals to refill the boardmediumTSO-0167Make Headscale limiter timeout proof deterministic instead of a 5ms network racehighTSO-0168Curate sampled Tailscale Service throughput from node metricsmediumneeds-triageTSO-0169Diagnose and clear the composed gate tsapi process termination after PASShighTSO-0170Scope the node-metrics dashboard tab by tailnet and providerhighTSO-0171Fix the README overview log-event count and gate itmediumTSO-0172Comprehensive audit of both Grafana dashboards against the live stackhighTSO-0173Re-vendor the 2026-10 API spec and classify its new enum valueshighTSO-0174Move to the tailscale.com/client/tailscale/v2 Go client and repoint the client-lib lanehighTSO-0175Emit the tailnet route-selection mode and stop regional_routing misreporting the newer modesmediumTSO-0176Per-device posture status gauges from postureStatushighTSO-0177Make the documented API spec refresh failure-atomiclowneeds-triageTSO-0178Anchor fleet summary zeros to observed source presencehighneeds-triageTSO-0179Separate absent exporter telemetry from zero health counters in summary tileshighneeds-triageTSO-0180Make absent runtime summary data visually distinct from healthy process telemetrymediumneeds-triageTSO-0181Merge redundant current-utilization and overflowing-family dashboard inventorymediumneeds-triageTSO-0182Count distinct metric families rather than reporter series in the family-count tilemediumneeds-triageTSO-0183Remove fixed historical cap and live-population claims from cardinality panel descriptionsmediumneeds-triageTSO-0184Emit tailnet ownership on runtime traces before offering tailnet-scoped trace panelsmediumneeds-triageTSO-0185Bind the anti-forensics log-read investigation to recorder identity, not a fixed namespacemediumneeds-triageTSO-0186Add retained browser evidence for every dashboard tab and selector statemediumneeds-triageTSO-0187Make automatic rule publication explicit in dashboard-only loop authoritymediumneeds-triageTSO-0188Document and prove optional single-tailnet profile selector behaviormediumneeds-triageTSO-0189Keep device OS pie-chart labels readable at panel snapshot dimensionslowneeds-triageTSO-0190Restore exporter availability when deployed image rejects the configured ingress WAL keyhighneeds-triageTSO-0191Land the dashboard selector-scope guard from the retained audit candidatehighTSO-0192Diagnose exporter OOM restarts after availability restorationmediumneeds-triageTSO-0193Make route-selection dashboard mode display distinguish prior observations from current statelowneeds-triageTSO-0194Repair dashboard-generator reference path in deploy instructionslowneeds-triageTSO-0195Harden fleet-summary listing prerequisite regression guardlowneeds-triageTSO-0196Distinguish absent cardinality telemetry from unlimited capacity and zero overflowmediumneeds-triageTSO-0197Bound expanded startup replay memory without stranding accepted ingress workhighneeds-triageTSO-0197.01Freeze the bounded replay-memory design and implementation proof packethighTSO-0197.02Preserve required delta first-cover effects across failed scheduled collectionhighneeds-triageTSO-0198Keep connectivity ratio populations consistent under OS filteringmediumTSO-0199Finish dependency sweep and stable release after external review checks recoverhighTSO-0200Stop restart and failover replay from sending log records Loki rejects as too oldhighTSO-0201Clamp log catch-up windows to a shared log-acceptance horizonhighguardeddata-lossTSO-0202Baseline PAM sessions older than the log horizon on cold startmediumTSO-0203Alert when ingress WAL entries are retired as expiredmediumalertsTSO-0204Alert on sustained per-entity subrequest coverage below 1mediumalertsTSO-0205Alert on a stale persistent flow-store checkpointlowalertsTSO-0206Export the Go memory limit and alert when heap nears itmediumalertsdashboardsTSO-0207Replace archived gopkg.in/yaml.v3 with go.yaml.in/yaml/v3lowTSO-0208Unit-test internal/httpretry and merge the duplicate Retry-After parserlowtestTSO-0209Guard tests against runtime.Caller repo-root discoverylowtestTSO-0210Define a freshness contract for bounded scans of large flat object archiveslowobjectstoredesignfollow-upTSO-0211Keep dense entity and category labels readable in dashboard panelshighdashboardsfollow-upTSO-0212Keep table measurements visible ahead of metadatahighdashboardsfollow-upTSO-0213Distinguish absent telemetry from healthy states in generated panelshighdashboardsfollow-upTSO-0214Keep the organization-tailnet card legible when data is absentlowdashboardsfollow-upTSO-0215Keep metadata free of numeric and duration formattingmediumdashboardsfollow-upTSO-0216Restore meaningful category names in distribution chartshighdashboardsfollow-upTSO-0217Use a comparable scale and explicit measures for observed flow bytesmediumdashboardsfollow-upTSO-0218Join related measurements into coherent per-entity table rowsmediumdashboardsfollow-upTSO-0219Align health and inventory colors with documented semanticsmediumdashboardsfollow-upTSO-0220Keep default annotations and time axes from obscuring tracesmediumdashboardsfollow-upTSO-0221Make topology panels interpretable in populated and empty statesmediumdashboardsfollow-upTSO-0222Restore Active series by metric family rendering on Grafana 13highdashboardsfollow-upTSO-0223Use the correct ratio scale for delivery failure chartsmediumdashboardsfollow-upTSO-0224Make ingestion and export cost comparisons dimensionally consistentmediumdashboardsfollow-upTSO-0225Render device-country markers for a populated valid-code framemediumdashboardsfollow-upTSO-0226Keep rolling audit-log counts distinct from per-second ratesmediumfollow-updashboardsTSO-0227Name used scrape budget consistently with the displayed fractionlowfollow-updashboardsTSO-0228Expose truthful receiver batch trace observations on the durable WAL pathmediumfollow-updashboardsTSO-0229Name active-series cap utilization as a ratio rather than a countlowfollow-updashboardsTSO-0230Keep whole-panel absence explanations out of nullable table cellshighfollow-updashboardsTSO-0231Show top node-pair talkers as an identifiable rankingmediumfollow-updashboardsTSO-0232Keep default log rows scannable while retaining metadata detailslowfollow-updashboardsTSO-0233Render duration rates as dimensionless quantitiesmediumTSO-0234Label histogram heatmap intensity as observation frequencymediumTSO-0235Render actionable trace results when the dashboard search returns datamedium