Task · TSO-0166

Discovery sweep 2: inventory uncollected API surfaces and dead shipped signals to refill the board

Description

The board drained again on 2026-10-09 when loop19 closed nothing-admissible. TSO-0138 (the previous discovery sweep, 2026-09-05) is the template; its notes record what was adopted and rejected. Sources to sweep: the GET operations in spec/tailscale-api.json against internal/tsapi and the collectors; the Border0 endpoints in the PAM API reference against internal/b0api; the audit-event enum against the classifier; the parked verdicts in spec/changelog-reviewed.json; and every shipped metric and log family against samples on the lab Grafana stack over the trailing 30 days, using read-only queries only. The ledger lives in a gitignored path, because the repository is public and stack captures stay out of it. The output is tasks, not code.

Acceptance Criteria

Definition of Done

Implementation Plan

Read-only discovery across vendored GET APIs, PAM reference, audit events, previous dispositions and trailing-30-day shipped signals. Retain ignored ledger; root reviews and files adopted triage tasks.

Implementation Notes

Loop20 discovery: 699 fixed-schema rows; all 35 vendored GETs, all 49 Border0 reference paths, audit vocabularies, prior verdicts and 363 shipped families covered. Fixed 30-day actual sample queries found 273 sampled and 90 absent: 43 expected-quiet, 47 lab-shape gaps, none proven dead. Previous 116 absences: 33 now sampled, 83 remain; six previously sampled now absent and two new families. Independent reviewer verified every query selector/time/range and all source hashes, not just metadata. Adopted TSO-0168 (curate sampled Service throughput), needs-triage only, not admitted for implementation in loop20. New samples and service label-key evidence meet the prior parked boundary. Rejections: OAuth app count and organization count already consumed; log-stream destination already shipped; Border0 server delay is configuration not observed lag; token age has no new actionable semantics; per-object/DNS/socket GET proposals duplicate list data or add N+1 polling; PAM recordings/query data and denial/pruning/rate-limit proposals lack new authorized semantics evidence; historical unavailable Border0 paths remain dated reference verdicts, not fresh availability claims; blanket audit expansion lacks new values; no absent family is proven dead; file-checkpoint gaps do not prove current backend regression; dedup-overlap omission remains source-scoped. No lab identifiers or raw captures tracked. Ledger validator has a minor reusable-selector/time validation limitation, but independent all-family review checked current evidence; do not reuse validator as sole proof.

loop20: 0 implementation attempts; Done after acceptance, landed code and green composed gate. Earlier superseded/cancelled CI runs are not passes.

Final Summary

loop20 landed evidence 4d4b531098807b51a9ac36652c10f43b8f06468e. 699-row ledger covers required surfaces and all363 shipped families over fixed30day actual query window. 273 sampled,90 absent (43 expected-quiet,47 lab-shape,none proved dead), compared with prior116. Independent exhaustive query/source review PASS. Root filed TSO-0168 (curate sampled Service throughput) needs-triage only and recorded rejections. No tracked code; CodeRabbit skipped. Final composed just check on actual shipped SHA129945fb3230f1c5d8a1127ad3e3c7faa2c514f4 passed, unchanged tree. Exact CI e96e74e31e2df4c697435dd4b7a32315e0e02f41 run38003933710 ci-success succeeded; no production diff outside backlog from that tested code. Helm absent-not-required (no landed chart change). Just formatting passed. Generated-input DoD is not applicable or covered by gate; no generator drift or weakened test claimed.

References

View the source file on GitHub