Wayfinder triage
A repeatable health-and-action pass over the itsthelore/wayfinder-router repo.
Works the same from the CLI, web, or mobile because it relies only on the GitHub
MCP tools (mcp__github__*) — there is no gh CLI in web/mobile sessions.
Default posture: report first, act conservatively. Fix what is clearly small and
unambiguous; ask before anything architectural; never merge unless the user has
authorized it.
1. Survey
- Open PRs —
mcp__github__list_pull_requests (state open). For each, gather:
- CI:
pull_request_read method get_check_runs (note any non-success conclusion).
- Reviews:
pull_request_read method get_review_comments (unresolved threads).
- Mergeability:
pull_request_read method get (mergeable_state).
- Open issues —
mcp__github__list_issues (state OPEN); classify each as a
feature request, bug, or question.
2. Report
Give a concise status — one line per PR (CI ✅/❌, review state, mergeable?) and per
issue (type + the ask). Lead with anything red or blocked.
3. Act (per item)
- Tractable, small CI failure → reproduce locally, fix, push to the PR's branch.
- Ambiguous, architectural, or large → ask the user first (use AskUserQuestion).
- Duplicate / no action needed → skip silently.
- Green + mergeable PR → report it as ready. Merge only if the user has said so.
- To keep watching a PR (CI + reviews) instead of one-shot triage, use the PR
activity subscription rather than polling.
Project conventions (honor these when fixing or contributing)
- Branch, never push to
main. Open a PR from a feature branch.
- Run the full CI gate locally before pushing (mirrors
.github/workflows/ci.yml):
ruff check .
mypy wayfinder_router (install extras first so mypy sees optional deps:
pip install -e ".[dev,gateway,ui]")
pytest -q
- confirm
rac is not importable — the standalone invariant (WF-ADR-0001).
- Deterministic core invariant (WF-ADR-0001): scoring/routing makes no model
call, needs no key, and touches no network. Model calls live only in the
invocation / gateway layer (WF-ADR-0004). Never move logic that breaks this.
- CHANGELOG (Keep a Changelog): every user-visible change gets a bullet under
## Unreleased in CHANGELOG.md, in user-impact voice, citing the relevant
WF-ADR-#### / WF-DESIGN-####. Create the ## Unreleased section if absent.
- Commits: conventional style (
feat(...), fix(...), docs(...)).
- Merging: squash with a clean, hand-written commit title + message. For stacked
PRs, after the base merges, rebase the child onto the squashed base so its diff
stays minimal.
- Versioning is CalVer
YYYY.M.MICRO, single-sourced at __version__ in
wayfinder_router/__init__.py (read dynamically by pyproject.toml). Cut a release
by promoting ## Unreleased to a dated ## vYYYY.M.MICRO — DATE entry (with a short
intro) and bumping __version__ to match. Tagging/publishing is a human step.
Notes
- Providers: Wayfinder forwards to any OpenAI-compatible
/chat/completions endpoint
with a Bearer key — there is no per-provider code, so "does it support X?" is almost
always "yes, point an arm's base_url at it." Auth schemes other than Bearer (e.g.
Azure's api-key header) would need a code change.
- Keys are read from the environment at request time and never written to disk; an
optional
api_key_cmd can fill one from a secret store in memory.
1---2name: wayfinder-triage3description: Triage the Wayfinder repo in one pass — survey open PRs (CI status, review comments, mergeability) and open issues / feature requests, report what needs action, then drive small, clear fixes following the project's conventions. Use when asked to "do Wayfinder triage", "triage the repo", check repo health, or review what's open across PRs and issues.4---56# Wayfinder triage78A repeatable health-and-action pass over the `itsthelore/wayfinder-router` repo.9Works the same from the CLI, web, or mobile because it relies only on the GitHub10MCP tools (`mcp__github__*`) — there is no `gh` CLI in web/mobile sessions.1112Default posture: **report first, act conservatively.** Fix what is clearly small and13unambiguous; ask before anything architectural; never merge unless the user has14authorized it.1516## 1. Survey1718- **Open PRs** — `mcp__github__list_pull_requests` (state `open`). For each, gather:19 - CI: `pull_request_read` method `get_check_runs` (note any non-success conclusion).20 - Reviews: `pull_request_read` method `get_review_comments` (unresolved threads).21 - Mergeability: `pull_request_read` method `get` (`mergeable_state`).22- **Open issues** — `mcp__github__list_issues` (state `OPEN`); classify each as a23 feature request, bug, or question.2425## 2. Report2627Give a concise status — one line per PR (CI ✅/❌, review state, mergeable?) and per28issue (type + the ask). Lead with anything red or blocked.2930## 3. Act (per item)3132- **Tractable, small CI failure** → reproduce locally, fix, push to the PR's branch.33- **Ambiguous, architectural, or large** → ask the user first (use AskUserQuestion).34- **Duplicate / no action needed** → skip silently.35- **Green + mergeable PR** → report it as ready. Merge only if the user has said so.36- To keep watching a PR (CI + reviews) instead of one-shot triage, use the PR37 activity subscription rather than polling.3839## Project conventions (honor these when fixing or contributing)4041- **Branch, never push to `main`.** Open a PR from a feature branch.42- **Run the full CI gate locally before pushing** (mirrors `.github/workflows/ci.yml`):43 - `ruff check .`44 - `mypy wayfinder_router` (install extras first so mypy sees optional deps:45 `pip install -e ".[dev,gateway,ui]"`)46 - `pytest -q`47 - confirm `rac` is **not** importable — the standalone invariant (WF-ADR-0001).48- **Deterministic core invariant (WF-ADR-0001):** scoring/routing makes no model49 call, needs no key, and touches no network. Model calls live only in the50 invocation / gateway layer (WF-ADR-0004). Never move logic that breaks this.51- **CHANGELOG (Keep a Changelog):** every user-visible change gets a bullet under52 `## Unreleased` in `CHANGELOG.md`, in user-impact voice, citing the relevant53 `WF-ADR-####` / `WF-DESIGN-####`. Create the `## Unreleased` section if absent.54- **Commits:** conventional style (`feat(...)`, `fix(...)`, `docs(...)`).55- **Merging:** squash with a clean, hand-written commit title + message. For stacked56 PRs, after the base merges, rebase the child onto the squashed base so its diff57 stays minimal.58- **Versioning is CalVer `YYYY.M.MICRO`,** single-sourced at `__version__` in59 `wayfinder_router/__init__.py` (read dynamically by `pyproject.toml`). Cut a release60 by promoting `## Unreleased` to a dated `## vYYYY.M.MICRO — DATE` entry (with a short61 intro) and bumping `__version__` to match. Tagging/publishing is a human step.6263## Notes6465- Providers: Wayfinder forwards to any OpenAI-compatible `/chat/completions` endpoint66 with a Bearer key — there is no per-provider code, so "does it support X?" is almost67 always "yes, point an arm's `base_url` at it." Auth schemes other than Bearer (e.g.68 Azure's `api-key` header) would need a code change.69- Keys are read from the environment at request time and never written to disk; an70 optional `api_key_cmd` can fill one from a secret store in memory.