Skip to content

ci(fork): every release typechecks first, Claude fixes what breaks - #15

Merged
collissimo merged 2 commits into
collin/mainfrom
collin/resolve-typecheck
Oct 29, 2026
Merged

collissimo merged 2 commits into
collin/mainfrom
collin/resolve-typecheck

Conversation

@collissimo

@collissimo collissimo commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

22 of the last 23 fork releases failed on type errors: 21 on fork code that reached collin/main unchecked (upstream's CI needs Blacksmith runners, so PR checks never ran in the fork), one on a merge git completed without a conflict (upstream's new code called a helper whose import the fork had replaced).

Every build (prepare in fork-release.yml, via fork/resolve-merge.sh, renamed from resolve-conflicts.sh):

  • merges upstream with --no-commit; Claude resolves conflicts as before
  • pnpm-lock.yaml is upstream's, regenerated by vp install, never hand-merged
  • typechecks server, desktop and web; on errors Claude gets up to two rounds, limited to the files tsc names, and is told to keep the fork's deliberate replacements
  • fixes go into the build only; results are cached per fork/upstream pair; the separate typecheck job is gone since prepare checks the exact commit the builds use
  • install runs with VP_GIT_HOOKS=0, so the bot commit does not run the repo's lint hooks

Pull requests and pushes to collin/main: new fork-check.yml, frozen install + the same typecheck on ubuntu-latest.

Lint stays out of both gates on purpose.

Tested locally with the real Claude CLI:

  • conflict pair fork 6b08ed9 / upstream 6d450a4 (stub replays a conflict-only resolution): Claude fixed both files, using the fork's resolveServerConfigVersionMismatch; merge committed with both parents
  • collin/main with an injected type error, nothing to merge: Claude restored the import, build commit on top

🤖 Generated with Claude Code

A file git merges without a conflict can still break: upstream's new code
called resolveVersionMismatch, whose import the fork had replaced, and the
typecheck job stopped the release. resolve-conflicts.sh now installs and
typechecks the resolved merge (same apps as that job) and gives Claude up to two
rounds to fix the files the errors name. The lockfile is upstream's, regenerated
by the install, instead of hand-merged. vp is set up before the merge, while
package.json is still clean.

Co-Authored-By: Claude Opus 5.5 <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 Oct 29, 2026
22 of the last 23 fork releases failed on type errors: 21 on fork code that
reached collin/main unchecked (upstream's CI needs Blacksmith runners, so PR
checks never ran here), one on a merge git completed without a conflict.

prepare now runs fork/resolve-merge.sh on every build, not only on conflicts:
it resolves conflicts, installs, typechecks server, desktop and web, and gives
Claude up to two rounds to fix the files the errors name, in the build only.
That replaces the separate typecheck job, since prepare checks the exact commit
the builds check out. Results are cached per fork/upstream pair.

fork-check.yml typechecks pull requests into collin/main and pushes to it on
GitHub's runners, so broken code is visible before it lands.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@collissimo collissimo changed the title ci(fork-release): Claude fixes type errors its conflict resolution leaves ci(fork): every release typechecks first, Claude fixes what breaks Oct 29, 2026
@collissimo
collissimo merged commit a6f473d into collin/main Oct 29, 2026
10 checks passed
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