Skip to content

Commit 9fcb38c

Browse files
physicsrobclaude
andcommitted
Docs: record the CI/release contract; fix stale README claims
CLAUDE.md gains a "CI and releasing" section (required checks, the per-push-CI-stays-fast rule, the guarded test-ci entry point, branch rules and the bypass notice, the release procedure pointer). README's development section still said black; it now says ruff and describes CI. The quickstart claimed a 22-layer decoder at hidden size 256 — stale since binary_increment's default width moved to 512; witnessed today: 20 layers at hidden 512, compile 1.5s. Test Suite Status: Unknown Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 5147fe1 commit 9fcb38c

2 files changed

Lines changed: 33 additions & 2 deletions

File tree

CLAUDE.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,32 @@ tolerance-boundary flake (see *FP nondeterminism at tolerance boundaries*
181181
under *Debugging compiled graphs*). Investigate the ops on the failing
182182
codepath, not the test.
183183

184+
# CI and releasing
185+
186+
GitHub Actions (`.github/workflows/`) runs two required checks on every
187+
push and PR: `lint` (make lint) and `smoke` (`scripts/ci_smoke.py`
188+
compile binary_increment on CPU, generate through a transformers
189+
pipeline, assert the output). **Per-push CI stays fast; never add the
190+
full suite or any slow job to it** (decided 2026-07-23 — the full suite
191+
takes ~an hour on a 2-core runner). The full CPU suite runs weekly via
192+
`full-tests.yml` and on demand via workflow_dispatch; its entry point,
193+
`make test-ci`, is guarded to refuse local runs — use `make test`
194+
(Modal) or `make test-local FILE=...` instead.
195+
196+
Branch rules on `main`: force-pushes and deletion are blocked for
197+
everyone; the two checks are required with a repo-admin bypass, so a
198+
direct push prints `remote: Bypassed rule violations` — that notice is
199+
the ruleset working, not an error.
200+
201+
Releases: `docs/releasing.md` is the procedure. The version in
202+
`pyproject.toml` is the single source of truth; bumping it requires
203+
`make modal-lock` (the standalone lock records torchwright's version)
204+
plus `uv lock` at the umbrella. Pushing a `v*` tag publishes to PyPI
205+
via Trusted Publishing; the workflow refuses a tag that doesn't match
206+
the pyproject version. Keep `RELEASE_NOTES.md`'s `# Unreleased`
207+
section current as user-facing changes land — release time only
208+
retitles it.
209+
184210
# Numerical noise
185211

186212
Every approximate op in `torchwright/ops/` is measured against its exact-math

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ print(generate("1011\n", return_full_text=False)[0]["generated_text"])
3535
# 1100
3636
```
3737

38-
The compiler scheduled this graph into a 22-layer decoder at hidden size 256 (the
38+
The compiler scheduled this graph into a 20-layer decoder at hidden size 512 (the
3939
`d=D_MODEL` argument). Every weight was computed from the source graph; nothing
4040
was trained. Compiling this example took under ten seconds on a laptop CPU.
4141

@@ -168,12 +168,17 @@ Examples that define `create_network_parts()` compile to a bundle with
168168
## Development
169169

170170
`torchwright/` holds the package (`graph`, `ops`, `compiler`, `debug`);
171-
`examples/`, `tests/`, and `docs/` are what they say. `make lint` (black + mypy)
171+
`examples/`, `tests/`, and `docs/` are what they say. `make lint` (ruff + mypy)
172172
and `make test-local FILE=tests/...` (single-file pytest) run anywhere. The full
173173
suite, `make test`, shards across GPU containers on Modal and needs a Modal
174174
account. `make measure-noise` regenerates the committed per-op noise data; two
175175
tests pin it to the code.
176176

177+
CI runs on every push and pull request: `make lint`, plus a smoke that compiles
178+
an example on CPU and checks its generated output. The full suite additionally
179+
runs on CPU weekly. Releases are tagged (`v*`) and published to PyPI from CI;
180+
`docs/releasing.md` has the procedure.
181+
177182
## License
178183

179184
Apache-2.0.

0 commit comments

Comments
 (0)