Contributing
Muyan Pilot is developed the same way it runs: tasks are GitHub Issues, deliveries are PRs, and the repository contract (AGENTS.md) applies to
human contributors too.
Issue granularity
One Issue is one runtime outcome (when X, should Y, actually Z): one observable behavior, a handful of related files, tests included. The title should work as a test name. Open an Issue once the root cause or the desired behavior is pinned — not as a vague wish.- Dependencies between Issues use GitHub’s native
blockedByrelation (gh issue edit N --add-blocked-by M); do not writeDepends on #Nin the body — the Runner does not parse body dependencies. - Multi-task work is organized as an Epic (see Workflow): the Epic coordinates, the sub-Issues deliver.
Creating an Issue
Dispatch a task for the Pilot by creating an Issue and labeling itai-ready (the CLI does both in one step):
AGENTS.md, README and code before changing anything.
Reporting a bug
Open an Issue with thebug label and include:
- the command that failed and its return code / stdout / stderr;
- the journal scene (
journalctl --user -u muyan-pilot.servicearound the failure, or therun_failedline with its run id); - the Issue/PR state (labels) and the run id from the progress comment;
- the environment: OS, Python version, Pi version, model endpoint type.
ai-ready Issues are picked up before new features, and
p0-labeled urgent Issues are picked up first of all (see the workflow
page), so a broken delivery loop — or a production outage — gets fixed
first.
Contributing code
-
Read
AGENTS.md— it is the development contract (TDD, 100% line and branch coverage, fail fast, no database/queue/daemon/fallback, no business task timeout). - Work on a feature branch; never push the protected branch directly.
- Write the failing test first, then the smallest implementation, then refactor. External interfaces (CLI flags, HTTP paths, config fields) are asserted against the official docs or one real call — never against a guessed shape.
-
Run the full contract locally:
-
Open one PR per Issue. The PR description must contain
Fixes #<issue-number>(it may be on the first line) so GitHub closes the Issue natively on merge. - CI must be green (same contract as local). The independent review and merge are performed by the Runner for Pilot-dispatched work; for human PRs, review and merge follow the repository’s normal GitHub flow.