Skip to content

chore: agentic workflow router, skills, issue forms, labels and permission allowlists - #85

Merged
V3RON merged 7 commits into
mainfrom
claude/agentic-setup-best-practices-b878a1
Sep 22, 2026
Merged

V3RON merged 7 commits into
mainfrom
claude/agentic-setup-best-practices-b878a1

Conversation

@V3RON

@V3RON V3RON commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

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 appduct and shared; PR 3 adds the checked-in device smoke suite.

  • AGENTS.md is the canonical router (repo map, commands, eight rules, writing style, skill table). CLAUDE.md imports it. OpenCode reads AGENTS.md and .claude/skills/ natively, so both tools share one set of files.
  • Eleven skills in .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 on issue-<N>-<slug>, draft PR as ledger, checkpoint commits), review-pr (adversarial, concrete failure scenario required, verify pass, posts via gh), 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 to status:ready or status: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).
  • Issue forms for bugs and features, a PR template with the criteria table and E2E evidence section, and namespaced labels (type:, status:, platform:, area:) documented in .github/labels.yml and already applied to the repository from this branch (GitHub's default labels are gone; the six closed issues that carried them were relabelled).
  • Permission allowlists for Claude Code (.claude/settings.json) and OpenCode (opencode.json): pnpm, git, read and write gh commands 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 every node_modules tree into it with APFS clonefile (copy-on-write, one call per tree), then relinks offline; about ten seconds for this workspace, nothing downloaded. worktree-remove.sh is its counterpart and keeps the branch. Both are registered as Claude Code WorktreeCreate and WorktreeRemove hooks in .claude/settings.json, so claude --worktree and subagents with worktree isolation get a buildable tree without an install step. Flaky tests are reported and filed, never skipped or loosened.
  • Agent memory under .agents/memory/: INBOX.md is append-only and never read before a task; LESSONS.md is curated, capped at ten entries per skill section and forty total, and each skill reads only its own section plus General. The work-issue orchestrator appends an inbox note only when a run hit friction (second review round, E2E failure, blocked phase, spec disagreement). The review-memory skill 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.
  • Cleanups: dropped the showcase script that pointed at a file that does not exist, fixed the changelog header's reference to the removed docs/CI.md, marked docs/tasks as 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-issue on issue Let apps declare read-only resources, not just tools (MCP resources/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-pr on merged PR fix: report an ungrouped tool's group as null on every tools.list entry #84, which had no human review, produced three verified should-fix findings about group: null handling diverging between the MCP list and describe paths and a public type widened to admit null that registration rejects. Those are queued as a follow-up, not part of this PR.
  • file-issue on the dangling showcase script produced a form-shaped report; the skill and the bug form now mirror each other field for field.
# Criterion Check Tier
1 triage-issue produces a usable comment for issue #7 dry run, output reviewed manual
2 review-pr findings on merged PR #84 hold up against the human review dry run, compared manual
3 file-issue produces a form-shaped bug report with a duplicate check dry run manual
4 Labels applied to the repository gh label list matches labels.yml manual
5 No broken Markdown links pnpm check:links CI

E2E evidence

not applicable (docs and configuration only)

Checklist

  • CHANGELOG.md has a line under Unreleased, or the change is not user-visible
  • No new import past a module's index.ts; no new direct node:* I/O outside an adapter
  • Simplification checklist from the architecture skill applied, exceptions explained above
  • docs/ARCHITECTURE.md updated if a surface it describes changed

Out of scope

  • ESLint boundary and port enforcement with a burn-down allowlist (PR 2).
  • Checked-in device smoke script the e2e-device skill will call (PR 3).
  • The 20 source files that import Node I/O directly convert to ports as they are touched.

Status

Implement: done Review: pending E2E: n/a Ready: yes

…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
V3RON marked this pull request as ready for review September 22, 2026 17:17
@V3RON
V3RON merged commit 1e034e9 into main Sep 22, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant