Skill Name
dev_tools/issue_resolver
What should this skill do?
What needs to be fixed?
dev_tools/issue_resolver v0.2 (shipped in 0.3.3, #143) provides a universal GitHub issue workflow: sequential stages, conditional checks inferred from README / CI / tree, and commit gates. That works on any repo, but it cannot know project-specific nuance unless the agent discovers it slowly or the operator injects extra_instructions every time.
Goal for v0.3: let any repository opt in by dropping a root-level profile file — ISSUE_RESOLVER.md — so the skill immediately understands local conventions, caveats, required checks, and ripple-effect hints. Universal stages stay; the profile extends them.
Why this matters (any repo using issue_resolver)
| Without profile |
With ISSUE_RESOLVER.md at repo root |
| Agent infers rules from README, CONTRIBUTING, CI |
Maintainer declares rules once, in agent-oriented form |
| Skillware-specific or team-specific gates live in prompts |
Same skill works seamlessly on Skillware, a Python lib, a monorepo, or a docs-only repo |
| Easy to miss changelog, fork workflow, test scope |
Explicit required checks per stage (verify, commit, PR) |
| Ripple effects guessed from tree |
Profile can name nested paths, doc ripples, catalog updates |
Drop-in story: clone any repo → open an issue URL → agent calls prepare → skill discovers ISSUE_RESOLVER.md → stage checklists merge universal + repo rules → resolution follows this project's expectations without hardcoding paths in the skill.
Builds on v0.2 (workflow.py, stage_checklist, validate_commit_message). Does not replace CONTRIBUTING.md; complements it for agents.
Proposed standard: ISSUE_RESOLVER.md
Location (discover in order):
- Repository root:
ISSUE_RESOLVER.md
- Optional fallback:
.github/ISSUE_RESOLVER.md
Purpose: short, checklist-oriented markdown the skill parses (or returns as structured payload) during discover_repository.
Suggested sections (minimal v0.3):
- About — one paragraph: stack, contribution model (fork vs direct), release cadence
- Required checks — hard gates (e.g. must update CHANGELOG under
[Unreleased], must run subset of tests)
- Conditionals — extra
If X then Y rules beyond universal workflow
- Paths — where source, tests, docs, examples, CI config live (including nested layouts)
- Ripple effects — when file X changes, also check Y (e.g. skill change → catalog + examples index)
- Commit & PR — branch naming, remote, message format, template path
- Out of scope — what agents must not do in this repo
- Caveats — security, co-author policy, version bumps, private deps
Example (Skillware-shaped, illustrative):
# Issue resolver profile — Skillware
## About
Python skill registry. Contributors use fork + PR. User-facing changes go in CHANGELOG `[Unreleased]`.
## Required checks
- Docs-only or skill PRs: update `CHANGELOG.md` under `[Unreleased]`
- New/changed skill: update `docs/skills/<name>.md`, `docs/skills/README.md`, and `examples/README.md` if adding a runnable script
- Run relevant tests: `py -3.13 -m pytest skills/<category>/<skill>/test_skill.py -q`
## Conditionals
- If the change touches `manifest.yaml`, ensure `issuer` is real and `card.json` matches
- If adding an example under `examples/`, register it in `examples/README.md` and `docs/usage/agent_loops.md`
- If bumping package version, update `pyproject.toml` and CHANGELOG release section together
## Paths
- Skills: `skills/<category>/<skill_name>/`
- Skill docs: `docs/skills/`
- Runnable examples: `examples/`
- CI: `.github/workflows/`
## Ripple effects
| Touch | Also review |
|-------|-------------|
| `skills/*/` | `docs/skills/*.md`, `tests/test_skill_issuer.py` if issuer rules apply |
| `examples/*.py` | `examples/README.md`, skill catalog Usage Examples |
| `skillware/core/loader.py` | all provider adapter docs under `docs/usage/` |
## Commit & PR
- Branch: `feat/issue-<N>-short-desc`
- Push to `fork`, PR against `ARPAHLS/main`
- No AI `Co-authored-by` unless maintainer allows
## Out of scope
- Force-push to shared default branches
- Skip hooks or commit secrets
## Caveats
- Skill logic stays deterministic; profile guides the **agent**, not `execute()` network/git
Other repos would replace paths and checks with their own (Node monorepo, Terraform, docs site, etc.).
Skill changes (v0.3)
Version: dev_tools/issue_resolver → 0.3.0
| Area |
Change |
discover_repository |
Fetch profile URL(s); include in prepare payload or new repository.profile_url |
| New action (optional) |
load_repository_profile — returns parsed/normalized profile + merge hints for stages |
stage_checklist |
When profile present, append repo required checks and conditionals to stage payload (never remove universal gates) |
workflow_overview |
Replace future_profiles_note with active profile support |
instructions.md |
Document profile discovery and merge rules |
skill.py |
Deterministic fetch is still agent-side OR optional read-only raw URL in payload (align with v0.2: skill does not call GitHub unless we explicitly decide one raw URL list in prepare) |
Merge rule: universal workflow wins on safety/constitution; profile adds constraints only.
Backward compatible: no file → identical to v0.2 behavior.
Documentation & tutorials (deliverables)
docs/standards/ISSUE_RESOLVER.md (or docs/contributing/issue_resolver_profile.md) — normative spec + examples for Python, docs-only, monorepo layouts
docs/skills/issue_resolver.md — v0.3 actions, profile merge behavior
- Tutorial: “Add
ISSUE_RESOLVER.md to your repo in 10 minutes”
- Dogfood: add root
ISSUE_RESOLVER.md to this repository as reference implementation
- Examples: optional note in
gemini_issue_resolver.py / docs when sample repo has a profile
Topics to cover in docs:
- Nested paths and monorepos (
packages/foo/, apps/web/)
- File-type ripples (
.md, yaml, py, CI workflows)
- When to use profile vs CONTRIBUTING vs
extra_instructions
- Private repos +
GITHUB_TOKEN
Acceptance criteria
Out of scope (v0.3)
- JSON Schema / YAML profile format (markdown-first only)
- Skill calling GitHub API inside
execute() (keep agent-driven fetch unless explicitly revised)
- Auto-generating profiles from CONTRIBUTING.md
- Replacing universal stages with profile-only workflow
Suggested PR scope
skills/dev_tools/issue_resolver/ — workflow.py, skill.py, manifest.yaml, instructions.md, tests
ISSUE_RESOLVER.md (repo root, dogfood)
docs/standards/ or docs/contributing/ — profile standard + tutorial
docs/skills/issue_resolver.md, CHANGELOG.md
Related
Affected Page
skills/dev_tools/issue_resolver/, new ISSUE_RESOLVER.md standard docs, skill catalog
Ideal Inputs & Outputs
Input (prepare — unchanged):
{"action": "prepare", "issue_url": "https://github.com/owner/repo/issues/42"}
Output (prepare — v0.3 adds profile URLs):
{"status": "ready", "action": "prepare", "repository": {"profile_urls": ["https://raw.githubusercontent.com/owner/repo/HEAD/ISSUE_RESOLVER.md", "https://raw.githubusercontent.com/owner/repo/HEAD/.github/ISSUE_RESOLVER.md"], "profile_found": true}, "issue": {"url": "...", "api_url": "..."}}
Input (stage_checklist with profile context available):
{"action": "stage_checklist", "stage": "verify", "repository_profile": {"required_checks": ["Update CHANGELOG under [Unreleased] if user-visible"], "conditionals": ["If examples/ changed, update examples/README.md"]}}
Output (stage_checklist — merged universal + repo):
{"status": "ready", "action": "stage_checklist", "stage": "verify", "steps": ["..."], "conditionals": ["...universal...", "...from ISSUE_RESOLVER.md..."], "profile_applied": true}
Input (no profile in repo):
{"action": "stage_checklist", "stage": "plan"}
Output (no profile — identical to v0.2):
{"status": "ready", "action": "stage_checklist", "stage": "plan", "profile_applied": false}
Targeted Models (if applicable)
Model Agnostic (All)
Skill Name
dev_tools/issue_resolver
What should this skill do?
What needs to be fixed?
dev_tools/issue_resolverv0.2 (shipped in 0.3.3, #143) provides a universal GitHub issue workflow: sequential stages, conditional checks inferred from README / CI / tree, and commit gates. That works on any repo, but it cannot know project-specific nuance unless the agent discovers it slowly or the operator injectsextra_instructionsevery time.Goal for v0.3: let any repository opt in by dropping a root-level profile file —
ISSUE_RESOLVER.md— so the skill immediately understands local conventions, caveats, required checks, and ripple-effect hints. Universal stages stay; the profile extends them.Why this matters (any repo using issue_resolver)
ISSUE_RESOLVER.mdat repo rootDrop-in story: clone any repo → open an issue URL → agent calls
prepare→ skill discoversISSUE_RESOLVER.md→ stage checklists merge universal + repo rules → resolution follows this project's expectations without hardcoding paths in the skill.Builds on v0.2 (
workflow.py,stage_checklist,validate_commit_message). Does not replace CONTRIBUTING.md; complements it for agents.Proposed standard:
ISSUE_RESOLVER.mdLocation (discover in order):
ISSUE_RESOLVER.md.github/ISSUE_RESOLVER.mdPurpose: short, checklist-oriented markdown the skill parses (or returns as structured payload) during discover_repository.
Suggested sections (minimal v0.3):
[Unreleased], must run subset of tests)If X then Yrules beyond universal workflowExample (Skillware-shaped, illustrative):
Other repos would replace paths and checks with their own (Node monorepo, Terraform, docs site, etc.).
Skill changes (v0.3)
Version:
dev_tools/issue_resolver→0.3.0discover_repositorypreparepayload or newrepository.profile_urlload_repository_profile— returns parsed/normalized profile + merge hints for stagesstage_checklistworkflow_overviewfuture_profiles_notewith active profile supportinstructions.mdskill.pyprepare)Merge rule: universal workflow wins on safety/constitution; profile adds constraints only.
Backward compatible: no file → identical to v0.2 behavior.
Documentation & tutorials (deliverables)
docs/standards/ISSUE_RESOLVER.md(ordocs/contributing/issue_resolver_profile.md) — normative spec + examples for Python, docs-only, monorepo layoutsdocs/skills/issue_resolver.md— v0.3 actions, profile merge behaviorISSUE_RESOLVER.mdto your repo in 10 minutes”ISSUE_RESOLVER.mdto this repository as reference implementationgemini_issue_resolver.py/ docs when sample repo has a profileTopics to cover in docs:
packages/foo/,apps/web/).md,yaml,py, CI workflows)extra_instructionsGITHUB_TOKENAcceptance criteria
stage_checklistmerges repo profile checks/conditionals when profile content is availableISSUE_RESOLVER.mddocs/skills/issue_resolver.mdand CHANGELOG updatedtest_skill.pycovers profile merge logic (fixtures, no live GitHub required)Out of scope (v0.3)
execute()(keep agent-driven fetch unless explicitly revised)Suggested PR scope
skills/dev_tools/issue_resolver/—workflow.py,skill.py,manifest.yaml,instructions.md, testsISSUE_RESOLVER.md(repo root, dogfood)docs/standards/ordocs/contributing/— profile standard + tutorialdocs/skills/issue_resolver.md,CHANGELOG.mdRelated
Affected Page
skills/dev_tools/issue_resolver/, newISSUE_RESOLVER.mdstandard docs, skill catalogIdeal Inputs & Outputs
Input (prepare — unchanged):
{"action": "prepare", "issue_url": "https://github.com/owner/repo/issues/42"}
Output (prepare — v0.3 adds profile URLs):
{"status": "ready", "action": "prepare", "repository": {"profile_urls": ["https://raw.githubusercontent.com/owner/repo/HEAD/ISSUE_RESOLVER.md", "https://raw.githubusercontent.com/owner/repo/HEAD/.github/ISSUE_RESOLVER.md"], "profile_found": true}, "issue": {"url": "...", "api_url": "..."}}
Input (stage_checklist with profile context available):
{"action": "stage_checklist", "stage": "verify", "repository_profile": {"required_checks": ["Update CHANGELOG under [Unreleased] if user-visible"], "conditionals": ["If examples/ changed, update examples/README.md"]}}
Output (stage_checklist — merged universal + repo):
{"status": "ready", "action": "stage_checklist", "stage": "verify", "steps": ["..."], "conditionals": ["...universal...", "...from ISSUE_RESOLVER.md..."], "profile_applied": true}
Input (no profile in repo):
{"action": "stage_checklist", "stage": "plan"}
Output (no profile — identical to v0.2):
{"status": "ready", "action": "stage_checklist", "stage": "plan", "profile_applied": false}
Targeted Models (if applicable)
Model Agnostic (All)