Repository navigation
contributing: one step per PR, a required gate, SDK release train - #230
Merged
Merged
Conversation
How a change gets to main, written down where every session and contributor reads it. The rules lived in one person's local agent memory, where a cloud session (or a second person) never saw them, and CLAUDE.md had drifted (it still called the SDK "0.2.0, unreleased"). CONTRIBUTING.md, imported by CLAUDE.md: one plan step per PR (plans are issues, ~800 lines of non-test diff, `<area>/<slug>` branches never reused, the PR title is the squash commit); claiming work with a draft PR before building it; jj in a workspace of one's own; verifying and saying how; and the SDK on a release train. A feature PR records `recorded_sdk_shape_fingerprint` and leaves `sdk_version` alone; only an `sdk: release 0.2.N` PR bumps it. Two branches no longer race for the same number, and a morning's SDK changes cost one repin round instead of several. The doc comments in `sdk/src/version.zig`, `sdk/sdk_version.zig`, `sdk/src/dylib.zig` and docs/PLUGINS.md that tied a bump to every fingerprint change now say the same. CI: `ci-ok`, one job that passes when every other job passed or was skipped, is the check main's ruleset requires (recorded in `.github/rulesets/main.json`). The workflow-level `paths-ignore` goes, since it would leave a Markdown-only PR's required check waiting for good; a `changes` job decides instead whether the builds run. CI also runs for `merge_group`, so a merge queue needs no workflow change. RELEASING.md bumps VERSION through a PR, SDK release first if the fingerprint moved. A PR template asks for the SDK impact and per-platform verification. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3 of 4 tasks
The step told agents to abandon `::<area>/<slug> ~ ::main@origin` after fetching, but by then the bookmark is gone: GitHub deletes a merged branch, and `jj git fetch` abandons the changes only it held (seen on #229's merge). What the step needs is the order: forget the PR's workspace first, since a change still checked out somewhere is kept, then fetch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2 tasks done
foxnne
added a commit
that referenced
this pull request
Oct 8, 2026
…#231) ## What changes `CONTRIBUTING.md`'s workspace rule now says where a workspace goes: `../fizzy-<task>`, beside the main checkout, and never under `/tmp` or a session scratchpad. A session's scratchpad is under `/private/tmp` on macOS, and the OS clears files there that go untouched for a few days. On 2026-10-08 that took `build.zig` and most of `src/` out of a workspace mid-task, and jj's next snapshot recorded the 159 deletions into the working-copy change. Committed changes survived in the main store. The rule had been written to one agent's local memory. This PR moves it to `CONTRIBUTING.md`, where #230 says such rules belong. ## SDK impact - [x] None ## Verified - [x] Markdown only. This is the first live run of `ci.yml`'s docs-only path: expect `Changes` → `code=false`, the builds skipped, and `ci-ok` passing. ## Follow-ups None. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
3 of 4 tasks
foxnne
added a commit
that referenced
this pull request
Oct 8, 2026
Follow-up from #230. ## What changes `zig build test-integration` now runs in CI, and `ci-ok` waits on it. The suite is 146 integration tests that drive real widgets, layouts and drags on dvui's testing backend, plus the SDK, sizing and plugin-loader suites: 292 tests in all. No CI job ran it before, so a layout or drag regression reached `main` unless someone remembered to run it locally. On 10-03, two of its tests had been failing unnoticed. - **A Linux job of its own**, `Integration tests (Linux)`, beside the test matrix. It adds a compile to each run, but not to how long a run takes, and a failure shows under its own check name. It is Linux only because the code under test is the same on every OS, and on Windows the suite needs MSVC (`build/app.zig`). It runs whenever the builds run: on PRs, the merge queue, and pushes to `main`. - **The job's comment explains a misleading log line.** The log prints `failed command: …fizzy-integration-tests` on a pass whenever a test logs a warning, and the demo-replay test always does. The exit code is the verdict. - **Docs.** `CONTRIBUTING.md` and `CLAUDE.md` no longer say CI skips this suite. **Cost:** one more Linux job per run, and one more Actions cache entry (setup-zig keys caches by job). The repo's cache budget is already at about 9.6 of its 10 GB, so GitHub evicts the least recently used entries a little sooner. See the follow-ups for the larger cache problem I found while checking this. ## SDK impact - [x] None ## Verified - [x] **macOS, locally, on `main` (`4dc4d51a`):** `Build Summary: 28/28 steps succeeded; 292/292 tests passed` in 1:13, exit 0. The known replay warning printed its `failed command:` line. - [ ] **Linux:** this PR's own `Integration tests (Linux)` run is the first. It is the same headless code, but this is the first time the suite has run on a Linux runner. - [x] The workflow parses; `ci-ok` needs `[changes, test, integration, windows-fizzy-backend]`. ## Follow-ups - **Cancelled runs leave an empty cache, so the next run builds from scratch.** setup-zig still saves its cache when a run is cancelled (a newer push cancels the older run), and that cache is nearly empty. The next run restores the newest key, which is the empty one. Run 37785306976 on `main` restored a 188-byte cache and built from scratch, and `gh cache list` shows several 0 MB Linux caches. Saving only from runs that weren't cancelled would make most runs warm. Not changed here. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Builds on #229, now merged.
sdk-tag.ymlno longer repacks a released SDK tarball, which the release train below depends on. Its first live run, on #229's own merge, published nothing, as intended.What changes
This writes down how a change gets to
main, in the repo, where every session and contributor reads it. Until now these rules lived in one person's local agent memory, where a cloud session (or a second person) never saw them.CLAUDE.mdhad also drifted: it still called the SDK "0.2.0, unreleased".CONTRIBUTING.md, imported byCLAUDE.md(@CONTRIBUTING.md):<area>/<slug>and never reused.area: what changes, at most 72 characters.gh pr listfor overlap, then open a draft PR on the first push. Drafts don't take the web test copy. The open PR list is the who's-on-what board for laptop sessions, cloud sessions and people alike.jj newbefore the work, not after.--stdin/--body-file.main.jj git fetch, which drops the merged changes (seen on ci: sdk-tag never replaces a released SDK tarball #229).test-integration).recorded_sdk_shape_fingerprint, leavessdk_versionalone, and is labelledsdk.sdk: release 0.2.NPR bumps the version. Two branches never race for the same number, and a morning's SDK changes cost one repin round instead of several (0.2.3 → 0.2.17 was 15 releases in 12 days).main.Kept consistent with it: the doc comments in
sdk/src/version.zig,sdk/sdk_version.zigandsdk/src/dylib.zig,docs/PLUGINS.md§ Compatibility, andRELEASING.md(VERSION is bumped through a PR, with the SDK released first if the fingerprint moved). InCLAUDE.md, the Build block now liststest-integrationand notes that CI doesn't run it. TheLIB_CHECKPOINT.mdlink now says its ground rules are superseded where they differ.CI (
ci.yml):ci-okis one job that passes when every other job passed or was skipped, and fails on any failure or cancellation. It is the single check the ruleset requires.paths-ignoreis gone. It would never start CI for a Markdown-only PR, leaving that PR's required check waiting forever. Achangesjob decides instead whether the builds run.merge_group:is added, so turning on a merge queue later needs no workflow change..github/rulesets/main.jsonis the reviewable record ofmain's ruleset: squash-only PRs,ci-okrequired, no force-push or deletion. Org admins may merge a PR past a failing check (bypass_mode: pull_request) but can't push tomaindirectly..github/pull_request_template.mdhas sections for what changes, SDK impact, per-platform verification, and follow-ups.After merging: repo settings (yours to apply)
Behaviour changes to expect:
mainare refused, including the oldRELEASING.mdflow, which this PR changes.Changesandci-okrun (a few seconds each) on every PR.SDK impact
sdk/; no fingerprint or version change. With ci: sdk-tag never replaces a released SDK tarball #229 merged, thesdk-tag.ymlrun this merge triggers publishes nothing.#228 bumps
sdk_versionin a feature PR, the old way. Merging it as it stands is fine: it would be the last release done like that.Verified
changesfilter's script, extracted from the workflow and run against a scratch repo:LICENSE, andapp/layout/*.mdchanges →code=false.zig,.yml+.md, anddocs/demos/*.zonchanges →code=trueworkflow_dispatch→code=trueci-okscript:success/skippedpass; anyfailureorcancelledfails.zig ast-checkpasses on the three edited Zig files.merge_grouppath is untested until a queue is turned on.ci-okcontext and theOrganizationAdminbypass (actor id 1) are as GitHub documents them.Follow-ups
zig build test-integrationin CI (Linux) and add it toci-ok. It is the suite most likely to catch a layout or drag regression, and nothing runs it today.sdk-v*release (a dispatch that opens a repin PR in each plugin repo).🤖 Generated with Claude Code