chore: agentic workflow router, skills, issue forms, labels and permission allowlists - #85
Merged
Merged
Conversation
…ssion allowlists AGENTS.md as the canonical router with CLAUDE.md importing it; eight skills in .claude/skills (architecture, implement-issue, review-pr, triage-issue, file-issue, e2e-device, cut-release, work-issue); bug and feature issue forms; PR template; namespaced labels with a sync script; Claude Code and OpenCode permission allowlists. Drops the dangling showcase script, fixes the changelog's docs/CI.md reference and marks docs/tasks as a historical record.
… review-memory skill, friction gate in work-issue Agents read only their skill's section of LESSONS.md. The work-issue orchestrator appends a note to INBOX.md when a run hit friction. The review-memory skill promotes repeated notes, prunes stale entries and merges its own PR when it touches nothing outside .agents/memory; the permission files allow exactly that merge and nothing else.
…for bugs only, worktree bootstrap, docs as a criterion, flake policy file-issue asks one question at a time until why, outcome, constraints and criteria are answered, then sizes the feature to status:ready or status:needs-design. design-feature checks the premise, shapes the change, cuts ordered slices and files them after a human approves. triage-issue handles bugs only. implement-issue takes criteria from the issue, adds a docs criterion for user-visible changes, covers Swift, Kotlin and conformance tiers, and starts from scripts/worktree.sh (deps linked offline in about seven seconds). Flakes are reported and filed, never skipped.
…ules with clonefile, rename the docs skill to writing-user-docs
…e and WorktreeRemove hooks worktree.sh reads the worktree name from the hook's stdin JSON and prints only the path; worktree-remove.sh removes a worktree under .worktrees and keeps its branch.
V3RON
marked this pull request as ready for review
September 22, 2026 17:17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
First of three PRs for the agentic setup. This one is text only: the router, the skills, the GitHub scaffolding and permission allowlists. No code or CI behaviour changes. PR 2 adds ESLint boundary enforcement for
appductandshared; PR 3 adds the checked-in device smoke suite.AGENTS.mdis the canonical router (repo map, commands, eight rules, writing style, skill table).CLAUDE.mdimports it. OpenCode readsAGENTS.mdand.claude/skills/natively, so both tools share one set of files..claude/skills/:design-feature(premise check, shape, ordered slices, child issues after human approval),writing-user-docs(house style plus a table of which surfaces each kind of change updates),review-memory(below),architecture(modules, calls vs events, ports and adapters, simplification checklist),implement-issue(criteria from the issue, red tests committed first onissue-<N>-<slug>, draft PR as ledger, checkpoint commits),review-pr(adversarial, concrete failure scenario required, verify pass, posts viagh),triage-issue(bugs only: ranked hypotheses, top three verified statically, module-level fix),file-issue(interviews one question at a time until why, outcome, constraints and criteria are pinned down, then sizes tostatus:readyorstatus:needs-design),e2e-device(simulator run driven through the CLI, Metro trap documented),cut-release(release PR, GitHub release only on an explicit yes),work-issue(orchestrator delegating to subagents and reasoning over fixed-format reports).type:,status:,platform:,area:) documented in.github/labels.ymland already applied to the repository from this branch (GitHub's default labels are gone; the six closed issues that carried them were relabelled)..claude/settings.json) and OpenCode (opencode.json): pnpm, git, read and writeghcommands the workflow needs, simulator tooling. Force push, hard reset, merge, release and publish are denied..agents/scripts/worktree.sh <branch>creates a worktree and clones everynode_modulestree into it with APFSclonefile(copy-on-write, one call per tree), then relinks offline; about ten seconds for this workspace, nothing downloaded.worktree-remove.shis its counterpart and keeps the branch. Both are registered as Claude CodeWorktreeCreateandWorktreeRemovehooks in.claude/settings.json, soclaude --worktreeand subagents with worktree isolation get a buildable tree without an install step. Flaky tests are reported and filed, never skipped or loosened..agents/memory/:INBOX.mdis append-only and never read before a task;LESSONS.mdis curated, capped at ten entries per skill section and forty total, and each skill reads only its own section plus General. Thework-issueorchestrator appends an inbox note only when a run hit friction (second review round, E2E failure, blocked phase, spec disagreement). Thereview-memoryskill runs monthly or when the inbox has notes: promotes what repeats, prunes what is stale, files a chore issue when a lesson should become a lint rule or test, and merges its own PR when it touches nothing outside.agents/memory/. Both permission files allow exactly that merge (memory/*branches) and no other.showcasescript that pointed at a file that does not exist, fixed the changelog header's reference to the removeddocs/CI.md, markeddocs/tasksas a historical record, ignored.claude/settings.local.json.Acceptance criteria
Three skills were run in a dry run against real targets and fixed from what the runs surfaced (about twenty wording gaps, all folded in):
triage-issueon issue Let apps declare read-only resources, not just tools (MCPresources/read) #7 found the issue's premise is stale (app tools are no longer MCP tools) and proposed a projection-only design with seven testable criteria, blocked on one product question. The first draft's comment ran long, so the skill now caps comments at 300 words and gives features their own layout.review-pron merged PR fix: report an ungrouped tool'sgroupasnullon every tools.list entry #84, which had no human review, produced three verified should-fix findings aboutgroup: nullhandling diverging between the MCP list and describe paths and a public type widened to admitnullthat registration rejects. Those are queued as a follow-up, not part of this PR.file-issueon the danglingshowcasescript produced a form-shaped report; the skill and the bug form now mirror each other field for field.triage-issueproduces a usable comment for issue #7review-prfindings on merged PR #84 hold up against the human reviewfile-issueproduces a form-shaped bug report with a duplicate checkgh label listmatcheslabels.ymlpnpm check:linksE2E evidence
not applicable (docs and configuration only)
Checklist
CHANGELOG.mdhas a line underUnreleased, or the change is not user-visibleindex.ts; no new directnode:*I/O outside an adapterarchitectureskill applied, exceptions explained abovedocs/ARCHITECTURE.mdupdated if a surface it describes changedOut of scope
e2e-deviceskill will call (PR 3).Status
Implement: done Review: pending E2E: n/a Ready: yes