Contributing
The most valuable compiler fixes are general semantic fixes, not per-file exceptions.
Good contribution pattern
1. Reproduce a failing unit.
2. Identify the shared error family.
3. Prove the missing semantic information.
4. Implement a general resolver/lowering rule.
5. Keep ambiguous cases fail-closed.
6. Run the full unit corpus.
7. Compare ready/failed/timeout/object counts.
Examples of good fixes
- preserving parameter binding types in exported Semantic source;
- reconstructing a selector path from verified source/type information;
- implementing switch/type-switch semantics in the native lowerer;
- adding project-wide type layouts with ambiguity checks;
- teaching the linker a real cross-unit semantic relocation.
Avoid
- returning zero/default values just to get past a test;
- treating unsupported nodes as no-ops;
- selecting a struct field offset only because its name exists somewhere;
- embedding a prebuilt compiler as the claimed selfhost result;
- changing the stable worker orchestration unnecessarily while debugging backend semantics.
Regression discipline
A useful patch should be checked in two ways:
- targeted regression — the failing unit gets past the old error;
- full corpus regression — previously successful object units stay successful.
The object count alone is not sufficient: a patch that produces more files by miscompiling semantics is a regression, not progress.