python -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'
bash scripts/setup_local_guardrails.sh- Unit tests: models, correlation, collector transformations
- Contract tests: schema snapshots under
schemas/ - Smoke tests: CLI command execution using fixtures
- Integration tests: real Azure lab tenant (manual/opt-in)
Run default suite:
ruff check .
pytest -m "not integration"Run integration suite:
export AZUREFOX_RUN_INTEGRATION=1
export AZURE_SUBSCRIPTION_ID=<subscription-id>
pytest -m integration- Before changing output wording, proof language, help text, or artifact behavior that could apply
across the HarrierOps family, read:
- the shared family style guide
- the shared family style guide applicability register
- Keep command boundaries stable.
- Use normalized models under
src/azurefox/models/. - Keep JSON output deterministic and schema-compatible.
- Keep family-wide truthfulness rules, claim-strength rules, and partial-read rules aligned with the shared family documents instead of re-inventing them in repo-local prose.
- Update schemas with
python scripts/generate_schemas.py. - If AzureFox needs a documented wording or contract exception, update the applicability register in the same change instead of leaving the exception implied only by local docs, help text, or tests.
- Keep live operator guidance in
azurefox help,azurefox help <command>,README.md, and curateddocs/content. - Keep non-operator documentation out of the repo unless the file is directly needed for build, validation, release, install, or packaging flow.
- Treat maintainer-only planning, drift-control, and family-governance notes as external reference material rather than repo content.
- If a temporary note or governance reminder lands locally during implementation, remove it before merge unless it is truly required for the repo to build, validate, release, install, or package.
- If planning material becomes durable user-facing documentation, promote it into maintained operator documentation instead of leaving internal notes in the repo.
- Create a short-lived branch per change (
feat/...,fix/...,docs/...). - Open a PR into
maineven when working solo. - Keep PRs small and single-purpose.
- Merge only after CI is green.
- If command output contracts change, update schema snapshots and golden fixtures in the same PR.
- Local pre-push hook blocks
codexbranch names, blocks direct pushes tomain, and runs lint/tests. - CI blocks Codex-branded PR titles.
- Temporary bypass for emergency push:
AZUREFOX_ALLOW_MAIN_PUSH=1 git push. - Before merge, remove any non-operator doc that is not required for build, validation, release, install, or packaging.