with one click
project-conventions
Core conventions and patterns for this codebase
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Core conventions and patterns for this codebase
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
{what this skill teaches agents}
Write project documentation in a direct, human voice. Strip AI tells, ban em-dashes, and keep emojis to a small functional set. Applies to all docs of record (README, docs/, .github/agents/, .squad/templates/, .squad/decisions.md, .squad/skills/*/SKILL.md, agent histories, copilot-instructions.md). Does not apply to historical artifacts under .squad/orchestration-log/ and .squad/log/.
Architecture contract for any feature that takes action OUTSIDE the tool's process boundary based on findings. The audit half stays read-only against the audited Microsoft tenant. Any agentic add-on writes only against the operator's own ticketing platform or IaC repo, never against the audited cloud. Applies to issue #16 (remediation-PR drafter), #11 (catalogue drift watcher when it files issues), #9 (playbook reporter when consumed by an agent), and any future agent-driven CLI subcommand.
Core conventions and patterns for this codebase
| name | project-conventions |
| description | Core conventions and patterns for this codebase |
| domain | project-conventions |
| confidence | high |
| source | codebase |
FinOps Assessment is a read-only auditing tool for the Microsoft ecosystem (M365, Entra, Defender, Purview, Power Platform, Azure, GitHub, Azure DevOps). It ingests licensing, identity, usage, and cost signals to emit right-sizing and savings recommendations , never mutations. Every rule output must be advisory, citing the exact evidence (evidence hash + path) that produced it.
*.ReadWrite.*, or admin scopes. All collectors (Microsoft Graph, ARM, GitHub, Azure DevOps) use read-only scopes only.--no-pii-redaction.data/catalog/. Rules reference catalogue entries by id, never hard-coded SKU strings.data/catalog/<surface>/*.yaml with required fields id, display_name, family, cloud. Use source_url (public, non-copyrighted page only) to cite origin.includes: (child SKU IDs) and successor_of: (upgrade-path predecessors).{ubuntu-latest, windows-latest, macos-latest} × {3.11, 3.12} matrix.os.sep/\\, or shell-only invocations. Use pathlib.Path, subprocess with list-form args, and importlib.resources for bundled data.docs/plan.md is updated to justify it.py311. Rules: E, F, W, I, B, UP, SIM, RUF (ignore E501).--strict over src/. New code must pass.extra="forbid". Add new fields to src/finops_assess/models.py before adding them to YAML.tests/test_loaders.py must remain green.I rule).pathlib.Path over os.path.importlib.resources.files() for packaged data over __file__-relative paths.print() in library code: use click.echo in CLI, logging elsewhere.data/
catalog/{m365,azure,github,ado}/*.yaml # SKU definitions
personas.yaml # persona definitions
rules/{m365,azure,github,ado}.yaml # rule YAML
src/finops_assess/
cli.py # Click CLI entry point
models.py # pydantic models (extra="forbid")
catalog.py # catalog loader + validator
rules.py # rules loader + validator + engine
collectors/ # Graph, ARM, GitHub, ADO, CSV adapters
reporters/ # JSON, HTML, PDF, CSV reporters
tests/
test_loaders.py # golden-file tests for loaders + rules
SURFACE.SHORT_NAME (screaming-snake-case, e.g., M365.UNUSED_LICENSE_30D).docs/plan.md §6 , keep plan and YAML in sync.All four gates must pass before opening a PR:
finops-assess validate # catalog + personas + rules schema
ruff check . && ruff format --check .
mypy src
pytest
CI runs the same gates on Python 3.11 and 3.12. Don't merge red.
Every finding links back to raw rows / API responses via a hash + path inside the evidence bundle, so an admin can defend the call. Offline-first by default: CSV/JSON ingest path is the entry point; live collectors (Graph, ARM, Cost Management, GitHub, ADO) are thin adapters producing the same normalized schema.