Contributing¶
Full contribution guide lives at CONTRIBUTING.md in the repo root. This page summarizes the key rules for first-time contributors.
The three invariants¶
These are locked in reference/contracts (living) and CLAUDE.md. Touching any of them requires explicit ceremony:
--jsonoutput schemas — every command’s JSON output hasschema_version: 1. Adding/removing/renaming a field is a breaking change. Schemas are pydantic models in the command’s subpackage.Cache key algorithm — in
src/jellycell/cache/hashing.py. Changing any input to the hash (source normalization, dep-key sorting, env-hash components) bumpsMINOR_VERSIONinsrc/jellycell/_version.py. This forces every cache to invalidate on upgrade.Agent guide content — what
jellycell promptemits. Agents rely on it for onboarding. Changes go in minor releases with a CHANGELOG note.
Phase budgets¶
v0 spec §8 defines a file count per phase (historical snapshot, still used as scope-creep ceilings). If a phase’s src/jellycell/<phase>/ creeps past its budget, that’s a scope-creep signal — cut back. Don’t raise the ceiling.
Piggyback first¶
Before writing new code for parsing, caching, file-watching, templating, or HTML output, check the piggyback map in reference/architecture. If a well-maintained lib already does it, use it.
PR checklist¶
make lintgreen (ruff, ruff format, mypy).make testgreen.make docs-buildgreen (sphinx-build -Wtreats warnings as errors).Docstrings on all new public functions (D100–D103 enforced).
“Invariant touched?” answered in PR description (yes/no + ceremony followed).
Phase budget still respected.
Claude Code skills¶
Three project-level skills live under .claude/skills/ and encode §10
guardrails (see reference/contracts). Claude Code auto-discovers them from this path when the CLI
starts, but a running session does not pick up new or edited skills until
you restart it (/exit → claude again).
To verify loading:
Open a fresh Claude Code session in the repo.
Type
/and scroll through the skill list — look forspec-invariant,piggyback-first,phase-budget.If missing: check each
SKILL.mdhas bothname:anddescription:in frontmatter (no other fields are required).
Skills are plain markdown — edit freely. Keep the description specific and action-oriented; vague descriptions dilute auto-triggering accuracy.