Workflow and Troubleshooting
ProjectAtlas is designed to run locally and produce a deterministic map.
Recommended workflow
projectatlas init --seed-purpose(first-time setup).- Add Purpose headers to new source files.
- Add or update
.purposesummaries for new folders. - Run
projectatlas map. - Run
projectatlas lint --strict-folders --report-untracked. - Open a PR that references the GitHub issue (CI requires
#NNNin title or body). - Commit map updates and any Purpose changes.
- Install git hooks with
python scripts/install_hooks.pyto enforce issue references in commit messages. - The pre-push hook runs
python scripts/check_all.pyto validate map/lint/tests/build.
One-command local verification
Run the full local check suite with:
python scripts/check_all.py
Issue hygiene
- Every issue should carry a
type:*label plus apriority:*andstatus:*label. - Use
status:backlogfor unscheduled work. - Any issue referenced by a PR must be assigned to the target release milestone (CI enforces this).
- Keep public issues/PRs/release notes free of private or internal-only details (release notes are generated from PR text).
Review expectations
- At least one approval is required before merging.
- Automated reviews (Codex/Copilot) should be checked via
gh pr view <PR> --commentsorgh pr view <PR> --json reviews.
Documentation site
04-Docspublishes to thegh-pagesbranch usingmkdocs gh-deploy.- GitHub Pages should be configured to serve from
gh-pages.
Branching
devfor active development.mainfor stable releases only.- Merge
dev->mainvia pull request after CI is green. - Ensure
devincludes the latestmainchanges before releasing. - Use
python scripts/prepare_release.py --issue <NNN> --bump patchto create a release branch and PR. - If
devis behindmain, the script will stop unless you pass--allow-base-divergence. - Add
--post-releaseto open a dev PR that bumps to the next.devversion. - Pushes to
maincreate a GitHub release when the version is not a.devbuild. - The auto-release workflow generates GitHub release notes from merged PRs.
CI behavior
projectatlas mapskips in CI unless you pass--force.projectatlas lintvalidates that the map is current.- PRs must reference a GitHub issue (
scripts/check_pr_issue_reference.py). - CI can be run manually via
workflow_dispatchwhen checks do not auto-trigger.
Environment toggles:
PROJECTATLAS_SKIP_UPDATE=1skips map generation locally.PROJECTATLAS_ALLOW_UNTRACKED=1allows local builds while still reporting untracked files.
Troubleshooting
Map is stale
If lint reports stale hashes or an overview mismatch, re-run:
projectatlas map
The overview: line in the atlas now reports tracked_source_files,
tracked_nonsource_files, and tracked_files_total so you can see the split at a glance.
Missing Purpose headers
Add a Purpose: header using the comment style configured for that file extension
(Javadoc block, block comment, or line comment). For Python, use a module docstring.
If the file uses a different style, update purpose.styles_by_extension in the config.
Missing .purpose files
Create a .purpose file in the folder and add a one-line summary. You can seed them with:
projectatlas seed-purpose
Untracked files
Use --report-untracked to list non-source files. Either:
- add to the non-source file list (
.projectatlas/projectatlas-nonsource-files.toon) (agent-maintained input for non-source summaries) - add to allowlists/exclusions
- move into an approved asset root
Schema reference
The TOON schema is documented in docs/format.md.