This directory defines the architectural contracts for Pyra.
Pyra is being built as a long-term Python package manager, project manager, and eventual runtime foundation. The goal is not just to support today's CLI commands. The goal is to establish a clean, durable model that later commands and a future runtime can build on without rewriting core behavior.
Contributors and coding agents should read this directory before changing behavioral or architectural code.
Start here for general orientation:
docs/README.mddocs/pyproject-contract.mddocs/environment-model.mddocs/sync-model.md
Then read the more specific docs that apply to the task:
docs/group-semantics.mddocs/lock-format-notes.mddocs/lock-command-model.mddocs/doctor-model.mddocs/outdated-model.mddocs/update-model.mddocs/self-update-model.mddocs/resolution-scope.mddocs/installer-boundary.mddocs/add-remove-model.mddocs/run-model.mddocs/error-model.mddocs/command-contracts.mddocs/testing-strategy.mddocs/product-direction.mddocs/execution-roadmap.mddocs/llm-delivery-standard.md
docs/pyproject-contract.mdWhat Pyra reads and owns inpyproject.toml.docs/group-semantics.mdHow base dependencies, groups, and extras behave.
docs/environment-model.mdWhat a centralized environment is and how Pyra manages it.docs/sync-model.mdThe end-to-end dependency pipeline forpyra sync.docs/lock-format-notes.mdWhat Pyra means bypylock.tomltoday.docs/lock-command-model.mdWhatpyra lockguarantees and how lock freshness messaging works.docs/doctor-model.mdWhatpyra doctorchecks, how findings are reported, and why it stays read-only.docs/outdated-model.mdWhatpyra outdatedcompares, how it reports package-level updates, and why it stays read-only.docs/update-model.mdWhatpyra updaterefreshes in lock state, how dry-run behaves, and why it does not mutate declared dependency intent.docs/self-update-model.mdWhatpyra self updateowns, how it maps onto GitHub Releases, and why it remains separate from project dependency update semantics.docs/package-cache-model.mdHow Pyra reuses verified package artifacts without changing lock authority.docs/resolution-scope.mdWhat the resolver currently supports and what it intentionally does not.docs/installer-boundary.mdWhat the installer owns versus what the resolver and lock own.
docs/add-remove-model.mdHow future dependency mutation commands should fit the sync pipeline.docs/run-model.mdHow future execution should build on the synchronized environment model.
docs/product-direction.mdThe high-level picture of what Pyra is now, what it must become next, and how longer-term runtime features should build on the package-manager foundation.docs/execution-roadmap.mdThe implementation roadmap, milestone order, and stable task IDs for execution planning.docs/llm-delivery-standard.mdThe standard workflow for LLM-driven planning, task execution, and release-readiness gating.docs/backlog/README.mdWhere initiative-specific idea briefs, roadmaps, and status tracking live.
docs/error-model.mdHow Pyra should communicate failures.docs/command-contracts.mdShared human/JSON command envelopes and exit-code category mapping.docs/testing-strategy.mdHow Pyra should test package management behavior safely and deterministically.docs/templates/Reusable templates and prompt packs for idea intake, roadmap generation, task-by-task execution, and launch readiness checks.
When behavior changes:
- update the relevant doc in the same change
- keep docs explicit about what is guaranteed versus temporary
- prefer short contract docs over broad aspirational prose
- document both current behavior and intended direction when the distinction matters
If code and docs disagree, fix the mismatch intentionally. Do not leave drift in place.