Skip to content

ci(fork): run the test suite on runners this fork actually has - #17

Merged
matheustimbo merged 1 commit into
fork-mainfrom
ci/fork-owned-ci
Sep 12, 2026
Merged

ci(fork): run the test suite on runners this fork actually has#17
matheustimbo merged 1 commit into
fork-mainfrom
ci/fork-owned-ci

Conversation

@matheustimbo

Copy link
Copy Markdown
Owner

The problem

The upstream CI workflow runs all seven of its jobs on Blacksmith runners. This fork has no access to them, so every job queues until something cancels it.

In the last sixty runs of that workflow on this repository, zero completed. Fifty were cancelled and ten are still queued, one of them from main for over two hours. mobile-fingerprint-check.yml has the same problem on a smaller scale, at two queued and two cancelled.

Two consequences. Every fork release so far, 0.1.48 included, shipped with no automated testing behind it. And gh pr checks on any pull request shows a permanent wall of pending, which is where a real failure would hide.

This was found while resolving #15. Nothing was in in_progress after 72 minutes, which is not what slow CI looks like.

The fix

A fork-owned workflow on ubuntu-24.04, which is free for a public repository. It covers typecheck, vp fmt --check, vp lint, the server suite sharded three ways exactly as upstream shards it, and the remaining packages.

Left out on purpose: the desktop build, knip:check, and the mobile static analysis. They cost more than they catch here, and this workflow is meant to be the gate that runs, not a mirror of upstream's.

Why a new file instead of editing ci.yml

Two reasons, and the second is decisive.

Editing ci.yml makes it fork-only code inside a file upstream actively maintains, so it conflicts on every sync that touches it. That is the exact cost that made #15 a nine-conflict merge.

And a plain runs-on swap would not work anyway. The upstream jobs run sudo sed -i ... /etc/apt/blacksmith-ubuntu-mirrors.txt, a path that only exists on a Blacksmith runner. This workflow uses plain apt-get instead.

Follow-up

Once this is green, ci.yml and mobile-fingerprint-check.yml should be disabled in repository settings, the same way Release, Mobile EAS Production and Deploy T3 Connect relay already are per docs/operations/fork-releases.md. Disabling is a settings change, so it adds no file to conflict on. I have not done it yet, because the replacement should be proven working first.

Verification

The suite this workflow runs was executed locally against the #15 merge before it landed: 2656 tests passing across 174 files. Two failures in packages/ssh/src/runnerProcess.test.ts are pre-existing and environment-dependent, proven by running them on the pre-merge base in a throwaway worktree, where they fail identically. They are live tests that shell out to real npm and npx, and packages/ssh had zero diff in that merge. Expect this workflow to report them until they are fixed or quarantined separately.

Model and harness: Claude Opus 5 via Claude Code, in T3 Code.

The upstream `CI` workflow runs all seven of its jobs on Blacksmith runners,
which this fork cannot reach. Its jobs queue until something cancels them. In
the last sixty runs of that workflow here, zero completed: fifty cancelled and
ten still queued, one of them for over two hours. Every fork release so far has
shipped with no automated testing behind it, and `gh pr checks` on any pull
request reports a permanent wall of pending that hides a real failure.

This adds the fork's own gate on standard GitHub-hosted runners, which are free
for a public repository. It covers typecheck, format, lint, the sharded server
suite and the remaining packages. It leaves out the desktop build, knip and the
mobile static analysis, which cost more than they catch here.

A separate file rather than a patch to `ci.yml`, for two reasons. Editing that
file would conflict on every upstream sync that touches it, which is the exact
cost this fork keeps paying elsewhere. And a plain `runs-on` swap would not
even work, because the upstream job rewrites `/etc/apt/blacksmith-ubuntu-mirrors.txt`,
a path that does not exist on a GitHub-hosted runner.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L labels Sep 11, 2026
@matheustimbo
matheustimbo merged commit 7f0b8fe into fork-main Sep 12, 2026
10 of 20 checks passed
@matheustimbo
matheustimbo deleted the ci/fork-owned-ci branch September 12, 2026 04:01
matheustimbo added a commit that referenced this pull request Sep 12, 2026
`feat(fork): add independent update channel` dropped the `command -v t3`
short-circuit from the remote runner script, because this fork ships its own
server package and exec'ing whatever `t3` sits on the remote PATH would launch
someone else's build. `tunnel.test.ts` pins that removal, but the process-level
`existing-cli` case in `runnerProcess.test.ts` still asserted the upstream
behavior. It went unnoticed until PR #17 gave the fork a CI gate that actually
runs the suite, and it has been the only real failure in `Fork CI` since.

Rather than delete the case, this turns it into a guard for the fork's own
invariant. `bin/t3` is now a decoy that prints a different argv instead of a
symlink to the installed CLI, so the assertions distinguish which binary ran,
and the installer call is expected rather than forbidden. Re-adding the
short-circuit to `tunnel.ts` fails the case with `expected [ 'path-cli' ] to
deeply equal [ 'serve', 'a path with spaces' ]`.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant