docs(adr): triage, rewrite, and renumber ADRs for clean slate
Complete ADR refactoring for issue #15: ## Changes 1. **Triage archival** — deleted chunk-era ADRs (0001–0003, 0006–0011, 0013); kept active decisions (0004, 0005, 0012, 0014+) 2. **ADR-0004 rewrite** — now reflects plugin-based skill distribution (`plugins/<name>/skills/` + `claude plugin install`) instead of monolithic `.agents/skills/` deployment 3. **Renumber to 0001–0009** — sequential clean slate after archival; all cross-references updated 4. **Content audit** — verified all 9 remaining ADRs for alignment with plugin model, removed stale chunk/deployment language Kept ADRs: 0001–0009 - 0001: Skills distributed via plugins - 0002: Two-tier CLAUDE.md (always-on + on-demand) - 0003: AGENTS.md as provider-agnostic entry point - 0004: INFO finding level in skill-audit - 0005: agent-author dual provider scaffold - 0006: Plugin version parity (version in both manifests) - 0007: Gitea as exclusive issue tracker - 0008: agent-audit single-file invocation - 0009: agent-audit field inventory reference All decisions are active and aligned with current repository state (marketplace/plugin model). Closes #15 (ADR section of acceptance criteria) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
41
docs/adr/0005-agent-author-dual-provider-scaffold.md
Normal file
41
docs/adr/0005-agent-author-dual-provider-scaffold.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# agent-author generates both provider files from a single root input
|
||||
|
||||
`agent-author` is the skill that creates Claude Code and GitHub Copilot CLI agent
|
||||
definition files. Both providers are always targeted: Claude Code produces a `.md`
|
||||
file; Copilot CLI produces a `.agent.md` file. The scaffold script `new-agent.sh`
|
||||
accepts a single root directory and derives both destination paths by convention
|
||||
rather than requiring the caller to supply two explicit paths. Scope is detected
|
||||
from the root: a directory containing `plugin.json` is plugin scope (both files
|
||||
land in `<root>/agents/`); a directory with `.git` but no `plugin.json` is project
|
||||
scope (`.claude/agents/<name>.md` + `.github/agents/<name>.agent.md`); `~` is user
|
||||
scope (`~/.claude/agents/<name>.md` + `~/.copilot/agents/<name>.agent.md`).
|
||||
|
||||
## Considered options
|
||||
|
||||
**Two explicit destination paths (rejected)** — `new-agent.sh <name> <claude-dest>
|
||||
<copilot-dest>` accepts a separate path per provider. Rejected because it breaks
|
||||
the minimal-input principle that guides the entire skill: the caller must now know
|
||||
and supply two provider-specific paths, which is exactly the convention knowledge
|
||||
the script is meant to encapsulate. Every invocation becomes more error-prone and
|
||||
harder to drive from a skill body without user interaction.
|
||||
|
||||
**Plugin-only dual generation (rejected)** — generate both files only at plugin
|
||||
scope; at project/user scope generate a single file with the provider inferred from
|
||||
the destination path. Rejected because it is an artificial asymmetry: the reason to
|
||||
author for both providers does not disappear outside a plugin context. It would
|
||||
force users to run the skill twice per agent at project/user scope or build a
|
||||
separate single-provider skill, adding complexity with no benefit.
|
||||
|
||||
## Consequences
|
||||
|
||||
- `.github/agents/` is the locked-in Copilot CLI convention at project scope.
|
||||
Non-standard paths (e.g. `.copilot/agents/`) are not supported without an
|
||||
explicit override flag — deferred to a follow-on issue.
|
||||
- The script interface `new-agent.sh <name> <root>` is a stable public contract.
|
||||
Changing to a two-destination form is a breaking change to any caller.
|
||||
- At plugin scope, both files share a single `agents/sources.md` for provenance.
|
||||
At project/user scope, no sources file is generated — ad-hoc authoring outside a
|
||||
research-driven workflow has no provenance chain to record.
|
||||
- The file-by-file no-op in the script (skip existing files rather than
|
||||
overwriting) means partial state — one provider file exists, the other does not —
|
||||
is handled by routing in the skill body, not in the script.
|
||||
Reference in New Issue
Block a user