en un clic
project-conventions
Core conventions and patterns for this codebase
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Menu
Core conventions and patterns for this codebase
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Basé sur la classification professionnelle SOC
{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.