Repository navigation
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Conclusion
Inconclusive. On kaggle_60 from this campus on 2026-11-08 the UDP path was not shaped: all 5 punched paths (4 TCP, 1 UDP at 199 ms) passed the check in every connect, and the rule with ratio 0.05 dropped nothing. Arm B therefore behaved like arm A, and the A/B cannot say whether dropping a shaped path helps. The rule is tested on loopback only. It needs a run on a day when the UDP path is at 2% to 10% of the best path, which PR #93 saw at about 0.11 MiB/s.
Premises checked in the code
ManagerConfig::floordefaults toNone, andmanager_configinletify-core/letify-link/src/sidecar.rsonly readsstart_timeout_ms. So the "Below the floor" rule of docs/SPEC.md (Paths and the path manager, item 6) is off for every letify session. True.Policedonly underfloor_bps / 20.POLICEinletify/transport/linkchannel.pyhasfloor_bps= 1 MiB/s, so the limit is 52 KiB/s. A path at about 115 KiB/s passes asUsable, and aUsablepath joins the session. True by the arithmetic ofpolicing::check. The 115 KiB/s figure is from the PR A UDP path presenting as HTTP/3 escapes UDP shaping on a campus network #93 observation and was not remeasured here.Change
policing::shaped_out(rates, ratio)returns which paths of one set are underratiotimes the best path in up or in down. The path with the highest share of the best in its weaker direction is never dropped, so a punch cannot lose its only usable path.punchsidecar op takespolice.shaped_ratio(optional, absent means off). The initiator collects the measured rates of all usable paths, applies the rule, closes the shaped ones and reports them inpolicedand aspath_policedevents withreasonshaped(the existing drops now carryreasonpoliced).shaped_ratio0.05 (POLICEinletify/transport/linkchannel.py). To toggle per connect for the A/B, setlinkchannel.POLICEwithout the key (arm A) or with it (arm B).police,path_policed).Deviation from the request
The rule uses the one burst measurement of the policing check (500 ms up and 500 ms down over bounded frames), not the manager's confirmation rule of 3 measurements 10 s apart. The check runs before the session exists, on a stream that is not reusable after the check, so a second measurement would need a second check per path. If the live A/B shows a good path dropped by one noisy burst, the next step is a repeated check, as its own branch.
Tests (red first)
tests/nat.rs: three loopback paths limited to 2 MiB/s, 2 MiB/s and 40 KiB/s (about 2%) with the real check; only the slow one is shaped out. A path at 50% is kept. A path shaped in one direction only is dropped. The best path is kept at any ratio, a lone path and an all-zero set are kept.tests/sidecar.rs: withshaped_ratio2.0 a 3 path punch keeps exactly 1 path, reports 2 asshaped, and the kept path carries a stream. Withoutshaped_ratioall 3 are kept.tests/test_link_channel.py: letify asks for 0.05.shaped_outabsent). Green:cargo test -p letify-linkall pass,cargo fmt --all --checkandcargo clippy -p letify-link --all-targetsclean,ruff check letify testsclean, 69 Python link tests pass.Live A/B
One kaggle_60 CPU session, one letify-link session per connect over its bridge, arms interleaved A B A B A B with 25 s between connects. Arm A:
POLICEwithoutshaped_ratio. Arm B:shaped_ratio0.05. Local sidecar built from this branch, remote sidecar the released 3.0.2. Each connect measured 100 MiB up and 100 MiB down on a bulk stream while a ping (the probePop, one every 50 ms) ran on an interactive stream of the same session.4 of the 6 connects were refused by the account's link floor (10 MiB/s) because the session probe up rate was 2.1, 2.9, 9.5 and 10.0 MiB/s, so they have no measurements. The 2 that connected:
The difference between the arms (up 19.79 against 13.04 MiB/s, latency under upload 646 against 873 ms) is between two sessions that kept the same 5 paths and so is run to run noise, not an effect of the rule. One connect per arm is too few for any claim. The sidecar reported no
path_policedevent in any connect.The session closed through
provider.stop:letify sessionsshowskaggle_60 no active sessionsafterwards andstopprinted no notebook deletion warning.Next
Rerun when the UDP path is shaped (check
letify sessionsis empty first, and look at the UDP path's rate in a plain connect). Until then the rule is code-complete but unproven as an improvement.