Files
ww/CLAUDE.md
Hojun-Cho d119b058a0 CLAUDE.md: rule 14 — test-unit (inner-loop) vs test (bootstrap gate)
Adds rule 14 documenting the test target split. test-unit (~3.8s)
is the inner-loop fast path; full make test (~8:30) is the
bootstrap-correctness gate. Never push without test green.

The skip set (950, 990-997) lives in test/run; new wwstage-driver
tests added in that range automatically participate. Phase split
background cited: ww_ww writes intermediates adjacent to traversed
sources (task #15), so concurrent wwstage-driver tests would race.
2026-05-21 18:10:18 +09:00

3.5 KiB
Raw Blame History

  1. This is a project for ww programming language
  2. ww is a programming language aiming for Hare + CSP, no GC
  3. cmd/ is the C bootstrap toolchain (wcc frontend lib, w6c/w6a/w6l per-arch, ww driver); selfhost/ is the ww reimplementation
  4. All C code must strictly align with plan 9 coding style
  5. lib/ is the standard library; follow Hare APIs (signatures, layout, error idioms) — consult ref/hare/ before designing new modules. Package declaration form is Go-style explicit package foo; and imports use import foo; (executables declare package main;) per language design (rob-pike + plan-9 sensibility); lib/ API surface still mirrors Hare.
  6. ref/hare and ref/plan9front are read-only references — consult before inventing data shapes or syntax
  7. No workarounds. If a bug forces a workaround, STOP and report with a precise repro. Document any retained divergence at the site with a pointer to the filed task. Never silent.
  8. Comments are WHY-only. Never narrate WHAT the code does — names carry the WHAT. Comment only non-obvious WHY: a constraint, a divergence from a reference, a citation to a filed task.
  9. Hare-fidelity over convenience. No ad-hoc extensions, renames, or convenience wrappers in lib/. Cite ref/hare// for every signature ported. Carve-out: the Hare _unsafe suffix convention is dropped wholesale (ww is C/Plan-9-lineage, an unmanaged systems language — no GC, no "safe" baseline to be unsafe relative to). bytes→str is a pure reinterpret (strings.frombytes, renamed from Hare's fromutf8_unsafe); validation is opt-in via utf8.validate(b)? at the IO source, never wrapped per-construction. Rationale: ref/hare/strings/utf8.ha:10,22 — the suffix flags Hare's managed-bytes-safety axis, which ww doesn't have. The honest name (frombytes) reserves fromutf8 for a future true validating helper.
  10. Symmetric stages. cstage and wwstage MUST emit byte-identical asm for the same input. When inference power differs, align the richer side DOWN to the leaner side, not the other way.
  11. Split commits when they bundle unrelated concerns. Bisect-cleanliness is the default. Multi-fix commits need a body paragraph explaining why they couldn't split.
  12. Simple data, simple algorithms. Sea-of-stars style. Mirror Hare's structural choices over clever alternatives.
  13. No hardcoded size literals in size-computation contexts. Always route through the type table (tinfo.size / Type.size / ty_*->size / size(T) / primtypesize / tyslicesize). Per Drew's framing of Hare's discipline. make sizelint enforces and runs as a dep of make test. Exemptions documented inline with // sizelint-ok: <reason> (ww) or /* sizelint-ok: <reason> */ (C). Optional local enforcement: ln -s ../../tools/sizelint .git/hooks/pre-commit.
  14. Test targets. Inner-loop dev runs make test-unit (~3.8s, skips wwstage-driver tests: 950, 990997). Pre-commit / pre-push runs full make test (~8:30, all 132 incl. byte-id gates). The test target is the bootstrap-correctness gate — never push without it green. test-unit is a fast confidence check on unit-level code (stages, stdlib, smoke); a green test-unit doesn't prove bootstrap, only that the unit set is intact. Don't add new wwstage-driver tests outside the 950/990997 range (the test/run skip set is keyed by NNN prefix). Phase split background: ww_ww writes intermediates next to every traversed source (filed bug), so concurrent wwstage-driver tests would race on selfhost/cmd/<tool>/main.{s,combined.ww,o} fixtures.