~ 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

The iOS check holds writes to lexicons, and words to each pull state

Merged
Merged chadtmiller.com asked to merge into main from chadtmiller.com/knotless:feature/ios-ejected

What changes

An ejected pull says why in plain words. It read its batch failed its checks at 6f89484c63a3, on main at 226488be4afa: test (failure). It now says "Taken out of the merge queue", then "Its batch failed its checks: test (failure)". The page's own removal of an older runner's command is kept.

The ios check covers more. The app's writes and what it says of a pull move out of the views, into ios/Knotless/API/Writes.swift and Standing.swift, which build on Linux. The check now holds each write to its method's lexicon, and each state of getMergeStatus to its words and whether the queue is offered, with no line that reads like the command line. It needs Node and the harness's packages for the lexicons.

The login test holds the server to the app's build. It reads the team, bundle and associated domains from ios/project.yml and the entitlements file, and compares them with what /.well-known/apple-app-site-association answers. webcredentials going missing from either side now fails test.

Why

Three bugs reached a phone that these would have caught: webcredentials missing from the association, the command line's words in the merge section, and the queue offered to a pull it would refuse. The new write check also caught a required body left out while this was written.

This doesn't run the app against a server. That would need Rust, a PDS and Swift in one image, for writes the pages' flows already run through to the PDS (harness/e2e/flows.spec.mjs), and the login test already uses the app's session as a cookie. So a write's name and fields are checked here and what it does is checked there.

How it was checked

ios/check-models.sh passes on a Mac, and fails on a misspelt method name. The ejected and failed states were looked at with just ios-look. The app builds. Linux and the Rust test are this pull's first run of each.

Shortcomings

Queries aren't held to their lexicons, only writes. Taps and layout still have no check, as Xcode needs macOS: just ios-look is the way to see them.

🤖 Generated with Claude Code

Approved

This pull moves the iOS app's writes and merge-state wording into Writes.swift and Standing.swift, which build on Linux. check-models.sh now holds each write to its lexicon and each merge state to its words. The ejected reason is rewritten in plain words. The login test now reads the team, bundle id and associated domains from ios/project.yml and the entitlements file.

I read the whole diff and found nothing that must change. Standing.ejected strips the older runner's command and the commits in the right order. Its output on the sample reason matches the expectation in main.swift, and Standing.of and canQueue keep the old MergeSection logic. Client.call is now private, so every write goes through Write.

I couldn't run any of it. At this head, ios is still queued, test is queued, and check and e2e are running; docs passed and the rest were skipped. That includes ios and the Rust assertion, which the body says are first runs.

One small thing: ios.yml now depends on the uses: steps, but its paths list doesn't include .knotless/uses.lock. docs.yml and web.yml list it. A change to a step's pin wouldn't run this check on a pull.

Approved

The one new commit, cd0429d, answers the ios failure at the earlier head. That run failed at node / needs because the Swift image has no curl. The commit adds a tools step that installs curl, ca-certificates and xz-utils with apt-get before the Node step. That is a sound fix. It assumes the image runs as root, which swift:6.2 does by default.

I couldn't confirm it works. At this head, ios, test, check and e2e are all still queued. The earlier ios run never got past the Node step, so the models step has not run on Linux yet. Watch that first run.

My earlier note is still open, and it is small: ios.yml's paths list doesn't include .knotless/uses.lock, though the workflow now depends on uses: steps. docs.yml and web.yml list it. A change to a step's pin would not run this check on a pull.

Merged as 2e0f826