chadtmiller.com/knotless
git that lives in your Atmosphere account
1
10
The e2e check uses a private repository, over the spaces alpha
Merged Approved
This adds private-repository browser flows (private.spec.mjs) that run over the spaces alpha. It moves the shared helpers into pages.mjs, picks the spec in the playwright config by KNOTLESS_DEV_ENV, and adds the alpha build to the e2e workflow, just e2e-private, and the docs. I found nothing that must change.
- Pin and recipe:
ATPROTO_COMMITmatchestest.yml. Thespacesvariable the new Justfile recipe uses already exists. Thestatus=$?handling keeps a failure from the first run when the second passes. - Docs: the new section in
docs/development.mdand the AGENTS.md update cover the change. - Public-flow flake: by your own account the public flows failed two of three runs here: once on a getRepo 404 straight after createRepo, once on a 60s timeout under load. The e2e check now runs them before the private ones, so that flake can fail the check on an unrelated pull. It's worth finding the 404 soon, or giving that step a retry.
- Reader-removal flow: it relies on a 60s allowance for a roughly 25s cache expiry. That margin is fine, but any change to the expiry will surface as a failure in that flow.
All checks have passed
8 passed, 2 skipped
Merged as 5660a67
What changes
The e2e check now uses a private repository on the pages, over the spaces alpha. A private repository differs all the way down. Its records live in its space, not in anyone's public repo, and its pages read them from this server's own index of that space, not the appview's. Until now, no browser flow touched one.
The new flows (
harness/e2e/private.spec.mjs) run as alice, then as bob, a reader she adds. Between them they:Each write is checked five ways:
The setup pushes a private
vaultof alice's from the command line, with a branch to pull.How it runs: the playwright config picks the spec by the PDS.
KNOTLESS_DEV_ENVset means the private flows over the alpha; unset means the public ones over the stock PDS.just e2e-privateruns them here. The e2e workflow builds the alpha as test.yml does, pinned to the same commit, and keeps it in its cache. It runs the public flows, then the private ones. Each run keeps its own failure pictures, undertarget/e2e/resultsandtarget/e2e/private.The flows' shared helpers moved into
harness/e2e/pages.mjs.anewtakes a timeout for a change seen later than the index's.Why
The Rust tests cover the private path against the alpha at the XRPC level: reading, reactions, settings, issues, forks and deleting data. Nothing checked that a comment, label, close, merge or reader change on a private repository shows on its page, read from the space's index, and stays hidden from everyone else.
How it was checked
Here, against a build of the pinned alpha:
The first run on CI builds the alpha, so it takes several minutes longer. Later runs reuse main's cache.
Shortcomings
After a reader is removed, they keep reading the repository for about 25s, until the server asks the space again. That flow allows 60s.
One public run here failed at "creating a repository": the page's getRepo answered 404 right after createRepo answered 200. A later read found it. It happened once in about ten runs, and no cause was found. A second public run failed at "choosing notifications and a theme" on a 60s timeout, while the machine was under heavy load.
🤖 Generated with Claude Code