~ knotless Search/
↑↓ move↵ open⇧↵ all results

chadtmiller.com/knotless

git that lives in your Atmosphere account

knotless.dev
1 collaborator

knotless 0.13.0 Latest 2 packages, 1 image

1
10

Test accounts made side by side no longer take the same handle

Merged
Merged chadtmiller.com asked to merge into main from chadtmiller.com/knotless:tests/unique-handles

What changes

Test accounts made side by side no longer take the same handle. The shared harness's handle tag is now made once per test binary, from its process ID and the time it first made an account, six hex digits each, then the count.

Changeset: none

Why

The tag shifted the process ID into the top 32 bits and then cut the tag to 32 bits, so the ID never reached the handle. Two test binaries making their nth account in the same microsecond asked for the same handle: the PDS failed one with a 500 from createAccount (UserAlreadyExistsError thrown at registerActor), and the test with the shared harness makes an account (common/mod.rs:162). That line is behind several of CI's FLAKY: reruns: moderating, a_newer_version_is_told_of_and_an_older_one_refused, switching_between_accounts_on_the_pages and secrets_reach_only_their_runner.

How it was checked

Six copies of private_repositories_indexed_here at once against the spaces alpha, five rounds, on the same PDS: before, 2 of 30 failed making an account; after, 30 of 30 passed. The rest is left to CI.

Shortcomings

A binary that reuses an earlier one's process ID at the same time of day, to the 16.7 seconds the tag's time wraps at, could still clash with an account that run made on a PDS kept between runs.

🤖 Generated with Claude Code

Approved

This replaces the handle tag, which dropped the process ID, with a per-binary TAG built from the PID and the microseconds at first use, six hex digits each. created() and the pages login test both use it. I found nothing wrong. The two PIDs running side by side differ in the low 24 bits, so their tags differ even if the time bits match. The handle stays within the 18-character first-label limit: k + 12 + the count leaves room for 5 digits. pages.rs uses an n prefix where created() uses k, so the two can't collide. The one remaining PID-and-time reuse is already stated under Shortcomings. I did not run the tests; your 30-of-30 result is the evidence for the fix.

Merged as 7ad3f42