Repository navigation
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
Security findingsAdvisory findings (1)ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e28f4b1211
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
4dd4d2e to
33640bd
Compare
There was a problem hiding this comment.
🛡️ Codex Security Review · Automatically triggered
Here are some automated security review suggestions for this pull request.
Reviewed commit: 33640bda9e
ℹ️ About Codex security reviews in GitHub
This is an experimental Codex feature. Security reviews are triggered when:
- You comment "@codex security review"
- A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review
Once complete, Codex will leave suggestions, or a comment if no findings are found.
| select { | ||
| case setupSlots <- struct{}{}: | ||
| default: | ||
| _ = connection.Close() | ||
| continue |
There was a problem hiding this comment.
🛡️ Codex Security Review · Automatically triggered
Security: Prevent unauthenticated clients from exhausting relay setup slots
On deployments where publishers need TLS/TCP (for example, because UDP/QUIC is blocked), do not let unauthenticated clients fill this global semaphore. The relay takes one of only 128 setup slots before TLS or publisher authentication and holds it for up to 10 seconds; an Internet client can keep 128 handshakes or probes incomplete, after which this branch closes every legitimate publisher connection. Reference deployments expose relay TCP/443 publicly, so repeating this against each relay prevents new or replacement publisher sessions and route recovery. Apply per-source limits/fair admission or reserve capacity for authenticated setup instead of globally failing closed.
Useful? React with 👍 / 👎.
|
The approved scope is now the coordinated v1 relay-first/P2P rewrite, hosted usage removal, simplified shared telemetry, and 20-minute guest budget. This remains the final integration and main merge gate; current green checks do not qualify the unfinished rewrite. Review fixes are preserved through 33640bd. The first new layers are #471 (same-session packet switching proof) and #472 (shared UDP socket, relay STUN, ICE, carrier replacement). Both have passed focused local race checks, routine Go tests, lint, and generation/format checks; #471 also has fresh green remote checks. Authorization/capacity, role migration, usage/telemetry/guest changes, companion website PRs, restacking, and exact-final-tip qualification remain in progress. |
33640bd to
b5d3861
Compare
b5d3861 to
a72c800
Compare
|
The guest-authority layer is now #474, and this final gate has been restacked above it. The current tip is a72c800. The approved rewrite has two paths: prepared publisher-initiated public connections directly to ingress, and native connector/publisher sessions through two relay services with end-to-end QUIC, concurrent P2P setup, and warm relay fallback. Public traffic must have no relay/STUN/ICE dependency. This PR remains unfinished. Hosted usage removal, shared v1 telemetry, five-minute fixed authority/capacity, public reverse-ingress integration, native relay signaling/integration, and the corresponding website changes are still required. Foundation and guest checks do not qualify the final implementation; merge only after the exact final tip passes its own checks. |
a72c800 to
837b4f0
Compare
837b4f0 to
3845fe0
Compare
|
Restacked above guest authority #474 and native usage retirement #476. The current final-gate tip is 3845fe0; matching website layers are tnldotdev/tnl.dev#190 and #191, with #191 pinned to native 294167a. Local usage-retirement proofs include routine Go/lint/generation, ingress races, PostgreSQL guest/source/storage/lock boundaries, steady/recovery/shutdown database smoke, and the real two-minute cadence/relay-recovery check. Website proofs include bounded 365-day receipt-time deletion, fresh-baseline checks, browser behavior, and actual Vercel/collector observability. The rewrite remains unfinished: shared v1 telemetry, fixed offline authority/capacity, publisher-to-ingress public integration, native relay/P2P integration, and corrected placement still need implementation. The Linux cross-team publisher-groups fixture also reports a connector cleanup deadline failure, tracked for investigation. None of these partial checks qualifies this final merge gate. |
|
pushed signed root and disposable-harness modules now select x/net v0.62.0 and its required golang.org/x minimums. on the dependency-updated tree: routine Go/public API consumer, peer-transport race tier, feedback sanitizer races, harness races, Go lint, formatting and diff checks passed. the first routine run lost the deadline classification in the existing 100ms SDK HTTPS timeout fixture; five focused race repetitions and a complete routine rerun passed without changing that fixture or product errors. local runtime shard 2/4 did not pass: the nested-member-hostname visitor received EOF after readiness (the earlier standalone-startup issue did not recur). its isolated real integration rerun passed; retain this as unresolved qualification evidence, not a green shard receipt. the carrier reconnection still requires a checked handoff to a live retained owner, preserving packet replay history and application admission. merely accepting a fresh claim for a retired delivery generation remains deliberately rejected. source rebinding, assignment replacement, ICE signaling/direct upgrade, and the public-ingress cutover are still unfinished. production native admission remains off. no merge, deployment, live infrastructure change, or deployed benchmark was run. |
|
follow-up local qualification at current-tip CI still has a Go race job failure and other jobs in progress; that log is being inspected. no green-CI or complete-cutover claim. |
|
pushed signed fixture-only fix the certificate-admission fixture copied a locally translated policy view, replaced its observation time for a newly signed certificate, but retained the previous a deterministic one-second-later observation fails before the fix with the same this is not a green-CI claim; the newly pushed tip must qualify. native production admission remains off, and reconnection/ICE/public-ingress work remains unfinished. no merge, deployment, or live infrastructure operation. |
|
next carrier-recovery boundary (design, not implemented):
a recovery handoff should retain the logical pair/application binding and introduce a separately checked carrier binding for each exact leg:
this separates logical application lifetime from carrier registration lifetime without treating packet keys, ICE observations, or a fresh relay claim as application permission. the first implementation slice should prove exact-process/same-source carrier replacement through real control and both outer transports before expanding to assignment replacement and source rebinding. existing retired-generation rejection tests stay intact. no production native gate is enabled by this design note. |
|
real-control/PostgreSQL/two-relay race qualification at |
|
pushed signed the control callback is a fixture; outer transports and relay packet registration/cleanup are real. existing retired-generation rejection tests remain unchanged. eight focused race repetitions, the full peer-transport race tier, the full Go race suite, Go lint, formatting, and diff checks passed. an initial test draft incorrectly expected a framed TCP carrier to survive an injected replay; that malformed-stream fence is preserved, and the isolation check uses fresh packet sequences. reconnect design refinement: distinct carrier IDs are necessary but not sufficient. a late successful QUIC/TCP loser must not publish a newer binding than the selected winner. carrier preparation therefore needs an explicit winner activation/fenced handoff before publisher confirmation, separate from candidate authentication and from live claim renewal. this is not implemented or production-enabled yet. |
|
pushed signed at publisher deterministic public-URL/service tests pass, including cancellation, fixed wait budget, and late responses. browser/share preparation is also exercised through the full unsharded integration invocation did not pass: API/state/generated database/certificate/DNS packages passed, but daemon exhausted its 20-minute aggregate budget as the next test began (0s into long-lived HTTP fixture setup). do not count that as a stream deadlock or a full integration pass. use existing runtime shards and separate real-clock targets; focused long-lived HTTP qualification is running now. CI at the new tip is not claimed green. no merge, deployment, live infrastructure change, or deployed benchmark; native production gates remain off. |
|
pushed signed dry-run plans cover default, explicit default-regex, and native focused selectors. a real focused publisher-policy conflict execution, harness races, formatting, and diff checks passed. the newly composed complete default invocation is running now; this is not yet a full integration receipt. follow-up at |
|
CI clarification: the dependency reconciliation is being validated in the separate |
|
signed follow-up work is in stacked draft #481 (
Runtime workloads CI and the complete local integration invocation remain pending. #481 passed routine JS/Go, full Go races, browser toolbar, harness races, lint, formatting, package and generation checks; its native packet/renewal integration is still running. production native admission stays disabled. no merge, deployment, DNS update, or deployed benchmark. |
|
CI Runtime workloads and the aggregate Load tests now passed at the composed local command failed for a different reason: API passed, state shards 1–4 passed (102.116s, 91.230s, 104.948s, 95.953s), then runtime shard 1 completed in 409.017s with |
|
pushed signed four additional focused race integration repetitions passed (23.91s, 23.54s, 23.59s, 23.90s), with valid diagnostic queries. routine Go/public API, Go lint, formatting, diff checks, and the disposable Linux DNS target passed. the earlier aggregate-run EOF and CI DNS readiness failure remain unresolved evidence, not erased by these passes. all four runtime shards plus the two real-clock lease/workload targets are now running sequentially on this unchanged tree. the qualification driver preserves a failure result while continuing to the later independent groups, so a shard failure will not silently leave the remaining coverage unattempted. the public default Task retains its normal fail-fast behavior. current-tip CI is not claimed green; production native gates remain off. |
|
current |
|
website reconciliation follow-up: stacked draft tnldotdev/tnl.dev#195 above #194/#193 now publishes native-assembled OpenAPI graphs, aligns publisher browser feedback and telemetry URLs, and synchronizes shared models/vocabulary with an interim pin to native #481 |
|
the sequential race runtime qualification completed successfully on unchanged signed this completes the previously unattempted local runtime coverage, not a successful single invocation of the entire composed default at this tip. API and all four state groups passed earlier at current |
|
signed/pushed startup-selection slice: #483 at
this is not reconnect handoff: active outer-session closure still retires that registration. ICE/direct upgrade, public-ingress cutover, source-proxy qualification, guest serving-tail/metrics, remaining website service-access reconciliation, and final source pins remain open. production native admission remains disabled. no merge, deployment, live infrastructure change, release, or deployed benchmark was run. #482's binary CI group passed, but its workload proof failed the QUIC revoked-HTTP assertion ( |
|
combined source reconciliation is signed/pushed in #485 at on that combined source:
#484's isolated Linux QUIC workload reproduction also passed in 223.298s. neither it nor the combined proof explains #482's original revoked-HTTP response, the earlier manual-Compose startup failure, or the original control-outage EOF. their evidence and open qualification status remain intact. latest CI snapshot: #483 has 48 passing checks, one expected skip, and Runtime workloads still running; #485 has 43 passing checks, one expected skip, and runtime shards/workload/load still running. this is not final-matrix completion. remaining product work includes reconnect handoff (active outer closure still retires its registration), assignment/source/network-change recovery, ICE/direct upgrade, public-ingress cutover, proxy-source qualification, guest serving-tail/metrics, and remaining website service-access/source-pin reconciliation. production native admission remains disabled. nothing merged or deployed; no live infrastructure, release, or deployed benchmark operation occurred. |
What
Integrate the control, relay, publisher, and connector owners for native peer connections above the packet-carrier and telemetry foundations. A prepared native pair carries one end-to-end QUIC connection over interchangeable relay carriers, so losing a carrier need not reopen the application or its target socket. Regional placement remains measured against the live server.
Native serving is still opt-in. Production
tnl connectand public ingress have not been cut over, and this PR is not ready to merge or deploy.Why
Control must authorize the exact service run, enrolled visitor, and two relay processes before packet delivery starts. A relay must attest to the source on its accepted socket; neither a cluster bearer nor a connector-supplied IP proves that source. The publisher must independently authorize every application opening, even when packet delivery is authenticated.
Changing UDP or TCP delivery should preserve the existing application connection, not silently repeat its admission or dial another target. Background preparation keeps control requests and pair setup off application arrival. A relay claim alone does not prove that the publisher has installed its separately authorized packet registrations and listener.
Concurrent browser and share preparation must also converge on current policy without replaying credential redemption or extending the last confirmed serving deadline.
Changes