# .claude/project.yaml — read by the maintenance skills (release, plan-audit,
# issue-triage, bottleneck-map). It maps the universal skill contracts onto this
# repo's helper scripts so the skill text stays project-agnostic and the wiring
# lives here.
#
# fak is a Go module rooted at the repo root. It is NOT a Python package, so its
# version source-of-truth is a bare `VERSION` file at the repo root (the vX.Y.Z
# git tags are the shipped history). The helper scripts below are pure-stdlib and
# live under `tools/`, so plain `python` resolves them with no venv.

name: fak

# Pure-stdlib helpers — no venv required.
python: python

helpers:
  # /release Step 1 — emits the git+version JSON the release skill consumes.
  release_context: tools/release_context.py
  # /release decision gate — hold vs release, with the blocker taxonomy.
  release_decide: tools/release_decide.py
  # /release Steps 3-5 — dry-run-first mechanical bump/notes/commit helper.
  release_cut: tools/release_cut.py
  # /release Step 4 — bumps every file under `version_files`.
  release_bump: tools/release_bump.py
  # /release committed-ref dry-run witness.
  release_dry_run: tools/release_dry_run.py
  # /release Step 6 — verified tag-after-green helper.
  release_tag: tools/release_tag.py
  # /release Step 7 — creates the GitHub release page from the committed note.
  release_publish: tools/release_publish.py
  # /release operator status — read-only release readiness + stable lag fold.
  release_status: tools/release_status.py
  # /release --from-manifest — validate producer manifest + derive explicit pathspec.
  release_manifest: tools/release_manifest.py
  # /release Step 0.5 + guard — the single-writer release lock. acquire serializes
  # concurrent /release runs so they don't race VERSION/tag; guard catches a
  # `git add -A` sweep before commit.
  release_lock: tools/release_lock.py
  # /plan-audit — reconciles the plan surface(s) into one completion view.
  plan_audit: tools/plan_audit.py
  # /issue-triage — read-only fetch/classify/rank + proposed-actions for the
  # open GitHub issue backlog. Applying actions is the skill's gated step.
  issue_triage: tools/issue_triage.py
  # The named-issue-view selection surface — the default "what should I work on"
  # entry. Resolves a view from .github/issue-views.json into a `gh issue list`
  # query (the API-readable mirror of the GitHub saved views, which aren't
  # reachable through gh/REST/GraphQL). Read-only. `show --json` emits the
  # canonical `gh issue list --json` array for payload-consumers (e.g. `fak
  # blockers feed --issues -`); for issue_triage / issue_lane_router (which
  # fetch their own backlog) a view is the conceptual slice, not a stdin pipe.
  issue_views: tools/issue_views.py
  # /bottleneck-map — read-mostly system + backlog limiter map. It consumes the
  # fleet registry/dashboard lens plus issue_triage to decide which durable loop
  # should run next; it must not mutate GitHub state.
  fleet_bottleneck: tools/fleet_bottleneck.py
  # /quality-score — the code-quality scorecard: ten deterministic, evidence-
  # grounded KPIs folded into a composite score + a code-debt integer. Read-only
  # (shells go build/vet/gofmt + dos review); the RSI pass drives code-debt down.
  code_quality_scorecard: tools/code_quality_scorecard.py
  # /appeal-score — the doc-appeal scorecard: five deterministic prose axes
  # (clarity, priority, voice, scannability, organization) folded into an appeal
  # score + an appeal-debt integer, with LLM-tell detectors on the voice axis
  # (em-dash flood, contrast-frame stacking, scaffolding phrases). Read-only; the
  # voice pass drives appeal-debt down on reader-facing prose docs.
  doc_appeal_scorecard: tools/doc_appeal_scorecard.py

# Where vX.Y.Z.md release notes are written.
release_notes_dir: docs/releases

# Version surfaces the bumper (tools/release_bump.py) keeps stamped on a release.
# VERSION is the load-bearing marker (whole-file replace). INSTALL.md carries
# copy-paste install pins (FAK_VERSION=, VERSION=, --build-arg APP_VERSION=, the
# PowerShell $Version, the illustrative "e.g. X"); the bumper pin-bumps those on
# install-context lines so a fresh-install user never reads a stale pin. The list
# is documentation — the targets are encoded in release_bump.py (VERSION + the
# INSTALL_DOC_PINS set); docs_scorecard.py's freshness KPI gates the same surface.
version_files:
  - VERSION
  - INSTALL.md

# Plan documents the audit globs. None at the public root today, so /plan-audit
# no-ops cleanly; add PLAN-*.md / BUILD-*.md and it picks them up.
plan_docs_glob: "{PLAN,BUILD}-*.md"

# Where /plan-audit + /issue-triage + /bottleneck-map write dated operator snapshots
# (created if missing; gitignored runtime — see .gitignore docs/_audits/).
audits_dir: docs/_audits
