chore: de-dogfood unic-archon-dlc and upgrade Matt's skills to upstream main - #298
Conversation
The install in `.agents/skills/` was a pre-v1.1 generation. Upstream renamed and deleted skills at v1.1.0 and again across the 101 commits since, so six installed skills no longer existed upstream while fifteen new ones were missing — including `wayfinder`, `to-spec`, `to-tickets` and `code-review`. `npx skills add` never prunes, so a plain reinstall would have left the dead six in place. Removed them explicitly instead. Removed (dead upstream): `caveman`, `diagnose` (→ `diagnosing-bugs`), `to-prd` (→ `to-spec`), `to-issues` (→ `to-tickets`), `write-a-skill` (→ `writing-for-agents`), `zoom-out` (no successor). Added: `ask-matt`, `code-review`, `diagnosing-bugs`, `git-guardrails-claude-code`, `implement`, `research`, `resolving-merge-conflicts`, `teach`, `to-questionnaire`, `to-spec`, `to-tickets`, `wait-what`, `wayfinder`, `wizard`, `writing-for-agents`. Selection policy, applied mechanically from now on: all of `skills/engineering/` and `skills/productivity/`, `skills/misc/` by explicit justification, never `skills/in-progress/`. The two in-progress skills yesterday's install picked up (`decision-mapping`, `review`) had already been renamed or deleted upstream by the time this ran, which is the argument for the rule. `misc/migrate-to-shoehorn` is dropped deliberately: no `shoehorn` dependency and no `.test.ts` file exists in this repo, so it could never fire. Two behavioural notes for anyone reading a skill and finding it thinner than expected: - `grill-with-docs` is now a 7-line stub composing `grilling` + `domain-modeling`. - Fourteen skills carry `disable-model-invocation: true` — `ask-matt`, `grill-me`, `grill-with-docs`, `handoff`, `implement`, `improve-codebase-architecture`, `setup-matt-pocock-skills`, `teach`, `to-questionnaire`, `to-spec`, `to-tickets`, `triage`, `wait-what`, `wayfinder`. They fire on an explicit slash command only. `skills remove` cleans the `.claude/skills/<name>` symlink and the `skills-lock.json` entry but leaves the `.agents/skills/<name>` source directory orphaned, so each removal needs a `git rm -r` alongside it. Its `-s` flag also rejects a comma-separated list and `-a '*'`, both of which `add` accepts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This monorepo ran two agent-skill setup systems against itself. `unic-archon-dlc`
had its `/setup` run here as dogfooding, generating `docs/agents/*.md` with
DO-NOT-EDIT headers plus a marker-delimited `## Agent skills` block in
`AGENTS.md`. `setup-matt-pocock-skills` writes three of those same paths and the
same section. Two generators, one set of files.
The plugin's own doctrine already ruled that out: `/triage` "forbids reading
Matt's `docs/agents/triage-labels.md` / `issue-tracker.md`", and "consequently
`setup-matt-pocock-skills` is **not** a Plugin dependency". A repo running both
is the drift that doctrine exists to prevent.
The damage was visible. `docs/agents/workflow.md` documented the retired
seven-workflow generation, superseded months ago by the box-set redesign.
`docs/agents/issue-tracker.md` cited the dissolved `lib/tracker-adapter.mjs`.
`.archon/` tracked fourteen dead `unic-dlc-*` artefacts while the workflows
actually in use were never committed. And `/wayfinder`, new at upstream v1.1,
reads a Wayfinding operations section from the tracker doc that the generated
copy does not contain — so the skill could not work here at all.
`unic-archon-dlc` is a product built in this repo, not a driver run against it.
Its configuration surface belongs to Consumer repos; test it against a scratch
clone. Recorded as ADR-0033, with ADR-0032 amended: the four-tier taxonomy
stands, but tiers 1-3 move from plugin-owned to repo-owned, `wayfinder:*` is
admitted as a fifth tool-scoped namespace, and 0032's own "do not re-run
`/setup-matt-pocock-skills`" warning is resolved by never re-running it. 0032's
Context and Decision are untouched.
Deleted: seven `.archon/commands/unic-dlc-*.md`, seven
`.archon/workflows/unic-dlc-*.yaml`, `.archon/unic-dlc.config.{json,yaml}`,
`.archon/ralph/`, `docs/agents/workflow.md` (retired generation),
`docs/agents/branching.md` (Gitflow table duplicated verbatim in `AGENTS.md`),
and the plugin's "Dogfooding note" doctrine. `.archon/config.yaml` survives —
that is Archon's own project config.
Also deleted, and invisible in this diff because they were never tracked:
`.archon/workflows/{copy-fix-github-issue,unic-pr-review,unic-archon-pr-review}.yaml`.
Nothing referenced them by filename; `/archon-rollout` dispatches the native
`archon-fix-github-issue`, so the local copies were dead weight.
`docs/agents/{labels,domain}.md` keep their content with the generator header
stripped. `labels.md` gains the area tier it never documented and is now the only
home for the repo-local `release` type, which lived in the deleted
`.archon/unic-dlc.config.json`.
Two live references to the deleted docs are repointed: `/archon-rollout`'s
Gitflow-topology owner, and `unic-confluence/CONTRIBUTING.md`'s workflow link.
Historical records under `docs/issues/`, `docs/conversations/` and the plugin
CHANGELOG keep the old names — they describe what was true when written.
Refs #297
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`docs/agents/issue-tracker.md` is now hand-authored from upstream's v1.1 `setup-matt-pocock-skills/issue-tracker-github.md` template, replacing the `unic-archon-dlc`-generated stub that ADR-0033 de-generated. Three deltas from a plain copy of the template: - The **Wayfinding operations** section is included in full. `/wayfinder` reads it by name and could not work here without it — `wayfinder:map`, sub-issues via `gh api`, native `blocked_by` edges keyed on the blocker's numeric database id (not `#number`, not `node_id`), frontier query, claim-by-assignee. Both endpoints were verified live against this repo, so the body-convention fallbacks the template offers are dropped as dead options. - **PRs as a request surface is set to `yes`** (template default is off). Upstream `triage` at v1.1 handles external PRs as first-class triage input, and this repo wants them in the queue. - The dissolved `lib/tracker-adapter.mjs` reference is gone, and the label sections point at `labels.md` / `triage-labels.md` rather than restating the vocabulary. Renames in the docs that instruct a reader today: `/to-prd` → `/to-spec`, `/to-issues` → `/to-tickets`, and `/zoom-out` dropped (no successor upstream). `/wayfinder` enters the documented chain as the entry point for work too big for one agent session, with `/grill-with-docs` keeping the single-session case. `ONBOARDING.md`'s usage bars carry their counts onto the renamed skills with a note that the numbers are historical; `/zoom-out`'s bar is deleted rather than reassigned to an invented number. Corrected while in these files: `CONTRIBUTING.md` and both `docs/process/` guides promised `unic-dlc-build` as this repo's future AFK runner. ADR-0033 makes that false — it is a product shipped to Consumer repos. The AFK path here is `/archon-rollout` dispatching the native `archon-fix-github-issue`, which is what has actually been in use. Also fixed the stale `feature/afk/<slug>` AFK branch shape, which `AGENTS.md` already defines as `feature/<scope>/<issue#>-<slug>`. Historical records are left as written: `docs/issues/**`, `docs/research/`, `docs/conversations/`, `.out-of-scope/`, and the retired-skill note in `ai-development.md` §7 that names `unic-dlc-build` as the convergence target of a 2026-05 decision. Closes #297 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A wide re-read of the PR found the rename was lexical where it needed to be
behavioural. Six defects, none caught by CI because they are all doc truth.
**1. `to-spec` and `to-tickets` no longer write files.** With GitHub configured,
`to-spec` publishes the spec as an issue and `to-tickets` publishes one issue per
ticket in dependency order, linked by GitHub's native sub-issue and blocking
relationships. Its local-file mode — reached only when no real tracker is
configured — writes `.scratch/<slug>/issues/`, not `docs/issues/<slug>/`. Four
places claimed the old contract: `docs/process/development-workflow.md` Phases 1,
5 and 6 plus its quick-reference table, `docs/process/ai-development.md` §1 and
§5, `docs/agents/feature-runner.md`, and `CONTRIBUTING.md`. `docs/issues/<slug>/`
is now described for what it is — a repo convention nothing generates, created by
hand when a Feature wants a durable file set.
**2. Both skills apply `ready-for-agent` themselves** on publish, and `to-spec`
says "no need for additional triage". Under this repo's 8-state vocabulary that
label is a triage decision, so the docs now say to treat theirs as a proposal.
Worth a policy call separately — the divergence is real, not a doc bug.
**3. `docs/agents/triage-labels.md` did not map the roles the v1.1 skill names.**
It keyed on prose ("Needs evaluation", "Rejected") while the skill names literal
slugs, so a lookup for `wontfix` found no row and had to infer `rejected`. Worse,
the skill's category role `enhancement` had no mapping at all — and ADR-0032
merged 48 `enhancement` issues into `feature` and deleted that label, so an agent
following the skill could recreate it. Both tiers are now keyed on the skill's own
role names, with the three repo-only states (`needs-specs`, `resolved`, `closed`)
marked as extensions no canonical role names.
**4. `docs/agents/feature-runner.md` was missed entirely** by the earlier sweep and
still promised `unic-dlc-build` as this repo's future AFK runner — the same false
claim already corrected in three sibling files.
**5. `CONTEXT-MAP.md` still called state/type/priority "archon-owned"**, which the
ADR-0032 amendment reverses.
**6. `unic-confluence/CONTRIBUTING.md`'s workflow link was `../../../../`** — four
levels up from `apps/claude-code/unic-confluence/`, which lands above the repo
root. A pre-existing bug preserved verbatim when the link was repointed; now three
levels.
Also removed: a top-level `agent/skills/` tree holding frontmatter-rewritten copies
of all 26 skills, created by `skills add -a '*'` in commit A targeting every
supported agent. Untracked, so absent from this PR's diff, but it would drift from
`.agents/skills/` and any `git add -A` would commit it. `AGENTS.md` now documents
`-a claude-code` as the correct target alongside the two other CLI traps found
here: `-s` needs repeated flags rather than a comma list, and `remove` orphans the
source directory.
Refs #297
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ocabulary Two related corrections, both surfaced by re-reading the pipeline end to end. **The `ready-for-agent` gate moves inside the skills, by decision.** Upstream's `/to-spec` and `/to-tickets` apply the label themselves on publish, and `/to-spec` states "no need for additional triage". The previous commit documented that as a proposal to be re-checked by a `/triage` pass. Staying closer to upstream is the call, and it is coherent: upstream did not delete the human review, it moved it earlier. `/to-tickets` iterates on the breakdown until the user approves it and publishes only then; `/to-spec` checks its proposed test seams with the user first. So the label already carries the human's approval, and the docs now say: approve properly inside the skill, because nothing downstream re-checks. `/triage` keeps its real job — the on-ramp for raw work that arrives unspecified (bug reports, external PRs, ideas) — and stops being a post-publication gate. The 8-state vocabulary is unchanged; `needs-specs` remains the way back for a ticket whose criteria do not hold up after publication. **`CONTEXT.md` was stale on two terms, one level below the six defects in cb03243.** The ubiquitous language still defined a Feature as "a directory under `docs/issues/<slug>/`" and the Feature Runner as "backed by `unic-dlc-build`". Neither survives this PR: no skill creates that directory, and ADR-0033 keeps `unic-dlc-build` out of this repo. A Feature is now defined as a spec Issue with one child Issue per ticket, with the markdown artefact set as an optional hand-made addition; the Feature Runner as whichever of `/tdd`, `/implement` or `/archon-rollout` executes it. Refs #297 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The earlier rename updated the quick-reference row to list `/wayfinder` but left every phase body naming `/grill-with-docs` alone — so the table and the prose disagreed, and a reader following the prose would never reach the skill this upgrade was for. Upstream's position is a split, not a replacement: `/wayfinder` takes work "too big for one agent session", and `grill-with-docs` survives, thinned to a composition of `/grilling` + `/domain-modeling`. Phase 2 now presents that choice directly — the selector is how much there is to decide, not which skill you know — and is retitled "Chart the work", since a wayfinder map spans sessions and "grilling" names only one of its four ticket types. The same table-versus-prose drift covered Phases 3 and 4: both bodies said "ask the agent to research / prototype" while the table already named `/research` and `/prototype`. Both now name the skill and describe what it actually produces — a primary-source-cited Markdown file, and either a playable state-machine HTML file or several switchable UI variations. Each notes the equivalent `wayfinder:research` / `wayfinder:prototype` ticket, so a map ticket and a standalone run are visibly the same job at different scopes. Elsewhere: `ai-development.md` §3 attributed the whole trust chain to a `/grill-with-docs` session and §6 attributed CONTEXT.md updates to it alone — both now name the two paths, with `/domain-modeling` as the standalone fallback. `ONBOARDING.md` moves `/wayfinder` up beside `/grill-with-docs` as its pair rather than leaving it eighth in a usage-ordered list, and records that `/triage` is no longer a gate after `/to-tickets`. Refs #297 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
🔍 Comprehensive PR ReviewPR: #298 · Reviewed by: 5 specialised agents · Date: 2026-08-05 SummaryNo repo-authored executable code changes here: 20 dead
Two defects block, both cheap and both inside the diff:
Everything else is an upstream-owned defect that must not be patched here, an acceptance criterion whose Verdict:
30 distinct findings (32 raw; two pairs deduplicated). Per-agent verdicts: code-review APPROVE, 🟠 High IssuesH1 ·
|
| Option | Approach | Effort | Risk if skipped |
|---|---|---|---|
| A | Uninstall (skills remove + git rm -r) |
LOW | — |
| B | Name the exception in the selection policy, keep it installed | LOW | Prose guard only, against four contrary prompts |
| C | PreToolUse hook blocking the invocation |
MED | — |
The two agents split: code-review preferred A (make it a property of the tree, not a rule about it);
docs-impact preferred B (it is the reference docs/agents/*.md was hand-authored from). Both agree the
selection policy must name the exception either way — that is the one-clause change this PR is missing.
Recommendation: B now, A as a separate decision.
Adjacent: git-guardrails-claude-code is a skills/misc/ entry, and AGENTS.md:179 admits misc/ only
"by explicit justification". None is recorded. Worth one clause in the same edit.
M2–M5 · four error-handling defects in the vendored wizard and HITL scripts (upstream-owned)
All four were reproduced locally. None should be patched here — AGENTS.md:172.
- M2 ·
wizard/template.sh:78-88—open_urlprints "↗ opening <url>", then runs its opener chain
inside a brace group redirected to>/dev/null 2>&1. Theelsebranch callswarn, which writes to
stdout, so the fallback warning goes to/dev/nulltoo; the brace group exits 0 and the trailing
|| warnnever fires. Nothing opens, nothing is said. Root cause iswarnon stdout, not the brace group. - M3 ·
wizard/template.sh:105-147—ask/ask_secretend withread -r input || true. Nothing
distinguishes "the human pressed Enter" from "there is no human". On EOF,write_envwritesKEY=, prints
a green✓ wrote, and exits 0. Forask_secretthere is no echo, so nothing on screen ever hinted the
value was empty. Fix:[[ -t 0 ]]guard pluswrite_envrefusing empty values intoSKIPPED. - M4 ·
wizard/template.sh:151-176—set_secret/set_varrun the write with>/dev/null 2>&1and
funnel every non-zero exit into "gh not ready; set it later". The write can fail withghperfectly ready
— nooriginremote, insufficient scope, wrong repo resolved, rate limit, SSO-gated org. The human
re-authenticates, succeeds, re-runs, gets the same line. Fix: split the two cases, surfacegh's stderr
(safe — the value goes in on stdin, not argv). - M5 ·
diagnosing-bugs/scripts/hitl-loop.template.sh:17-27,40-42— bareread -r -punder
set -euo pipefail. On EOF the script dies before the--- Captured ---block that is its entire output
contract. The documented usage is "the agent runs the script", so without a tty every run dies at the first
prompt and the calling agent sees exit 1 with no parseable output. Fix: tty guard plus anEXITtrap.
Note the inconsistency: wizard/template.sh writes read -r input || true everywhere,
hitl-loop.template.sh writes bare read. Same upstream release, opposite handling, no diagnostic in
either. One upstream report covers M2–M5 plus L5.
M6 · the three-way skills invariant is hand-verified and CI cannot see it
📍 skills-lock.json, .claude/skills/*, .agents/skills/** — no test file · 🔬 test-coverage
Three sets must agree: lockfile keys, source directories, symlinks. The PR body verifies all three by hand
and they pass — but the same PR documents two tool behaviours that break the invariant silently:
npx skills remove orphans .agents/skills/<name>, and npx skills add -a '*' wrote a second
frontmatter-rewritten tree at the repo root (deleted by hand in commit D). Both are one forgotten flag away
from recurring, and both are pure filesystem facts.
Two prerequisites a naive implementation misses: CI's changes filter has no entry for
.agents/skills/**, skills-lock.json or .claude/**, so a test in an existing package would never fire
on the change it guards; and Windows checkouts with core.symlinks=false materialise symlinks as text
files, so assert "entry exists, and if it is a symlink its target resolves", not isSymbolicLink().
Recommend a node:test file — full body in the artifact. Follow-up, not this PR.
M7 · no markdown link check, on a PR whose main risk is broken links
📍 .github/workflows/ci.yml:20 · 🔬 test-coverage
pnpm ci:check runs Biome plus prettier --check on Markdown. Prettier validates formatting, not link
targets. This PR deletes two documents, renames five skills, and repoints references across fifteen docs.
Commit D found a ../../../../ root-escaping link by re-reading, not by tooling.
A scan over 315 Markdown files at the head tree found 49 broken relative links, 0 introduced by this PR
— 48 pre-exist on develop (apps/claude-code/unic-archon-dlc/commands/*.md write repo-root-relative
docs/adr/00NN-*.md links from a commands/ file, so an agent cannot open the ADR it is told to consult),
plus one root escape in .claude/skills/archon/guides/slack.md. The check cannot switch on red, so pair it
with fixing the 48 — all one prefix wrong. Follow-up.
M8 · de-dogfooding removes the plugin's only live /setup exercise
📍 docs/adr/0033-de-dogfood-unic-archon-dlc.md, apps/claude-code/unic-archon-dlc/ · 🔬 test-coverage
The generated .archon/ artefacts and docs/agents/* files were the only observable output of
unic-archon-dlc's /setup. ADR-0033 names the price and points at a scratch clone — but no doc says how to
make that clone or what to run in it, and a note in an ADR is not a step anyone performs. The plugin's 209
tests cover lib/ completely and cannot reach /setup, which is a Markdown prompt.
The failure mode is on record here: /setup never installed the Archon artefacts despite the README
promising it, and a hand-seeded .archon/ hid the gap for two and a half months — found by inspecting this
repo's own generated files, the exact signal this PR removes. Recommend promoting the scratch-clone run into
the plugin's release checklist. Accepting the trade-off is your call; the finding asks only that the
mitigation become a step.
M9 · ai-development.md still defines a Feature Runner as "the skill"
📍 docs/process/ai-development.md:9 · 🔬 comment-quality
This PR rewrote root CONTEXT.md from "The skill that implements…" to "Whatever implements…", precisely so
a human driver counts as a runner. The definition sentence here kept the old wording while citing that same
file, and the paragraph six lines below names a developer as one of the two runners. A developer is not a
skill.
Fix — mirror the glossary verbatim, since paraphrase is what let it drift:
A Feature Runner is whatever implements a Feature's Issues end-to-end in one worktree, branch, and
pull request (see rootCONTEXT.md).
M10 · two Wayfinding operations bullets hand-wave the command their siblings spell out
📍 docs/agents/issue-tracker.md:45, :47 · 🔬 comment-quality
This file is a runtime reference — an agent reads it mid-session. The Blocking bullet is exemplary: full
gh api invocation, the blocked_by endpoint, and the database-id-not-#number trap called out. The two
bullets that need the sub-issues endpoint just name it. gh issue list has no sub-issue filter, so "scoped
to the map's sub-issues" is not executable as written; the link step needs POST …/sub_issues with a numeric
database id — the same trap the neighbouring bullet documents and this one omits.
The asymmetry actively misleads: the exactness of the sibling reads as a promise that anything left vague
did not need spelling out. Spell out both gh api calls and state the database-id rule once for all three.
M11 · the workflow docs call /to-tickets the only gate, but /to-spec also publishes ready-for-agent
📍 docs/process/development-workflow.md:47, docs/process/ai-development.md:81, ONBOARDING.md:66,
docs/agents/triage-labels.md:39 · 🔬 comment-quality
.agents/skills/to-spec/SKILL.md step 3 applies ready-for-agent too, and its only in-session check is
about test seams — not the spec body. So a spec issue lands carrying the label, in the same query
/archon-rollout sweeps, with no ## What to build / ## Acceptance criteria shape and no ## Blocked by
edges. Dispatching one sends an agent at a whole feature described as user stories.
Recommend documenting it in this PR (say what the label actually means there, and that a rollout skips
the spec issue) and filing the /archon-rollout selection change as a follow-up — that is command work
with its own acceptance criteria. The docs currently assert a guarantee that does not hold, which is worse
than silence.
M12 · README.md still lists Ralph as a prerequisite
📍 README.md:35, docs/process/spec-template.md:15 · 🔬 docs-impact
ralph-orchestrator was retired in ADR-0009 and this PR deletes its final artefacts (.archon/ralph/, four
files), so nothing in the tree needs the Claude Code CLI "for Ralph". spec-template.md carries the same
residue — "Ralph uses this to verify the starting state". The template is orphaned (no live doc links it),
which is why earlier sweeps missed it. Whether it survives at all is a separate call.
🟢 Low Issues
View 15 low-priority findings
| # | Issue | Location | Agent | Suggestion |
|---|---|---|---|---|
| L1 | branching.md's merge-strategy fact did not survive the deletion |
AGENTS.md:90 |
code-review | Add: "PRs merge with a merge commit, never a squash — the release flow reads develop → main merges." Criterion 3 is the only justification offered for deleting the file |
| L2 | triage-labels.md was rewritten, though criterion 8 says "unchanged" |
docs/agents/triage-labels.md |
code-review | Amend criterion 8 on #297, not the file — the rewrite realigns role names to .agents/skills/triage/SKILL.md (2 category + 5 state roles, exact match) and preserves the 8-state/rejected outcome the criterion protects |
| L3 | criterion 2's grep still matches a historical PRD | docs/issues/unic-archon-dlc-dogfood-banner/PRD.md |
code-review | Scope criterion 2's grep to docs/agents/ — the hit is a quoted string in a retired spec the scope places out of bounds |
| L4 | ONBOARDING.md still names /to-prd and /to-issues |
ONBOARDING.md:27, :52-53 |
code-review | Amend criterion 9 to "never as an instruction; historical rename notes are fine" — all three are rename notes a new joiner reading old issues needs |
| L5 | _existing's guard is load-bearing on pipefail |
.agents/skills/wizard/template.sh:98-102 |
error-handling | Upstream-owned. Fold into the M2–M5 report as a one-line note; not worth its own issue |
| L6 | a hand-edit to a vendored skill dies silently and CI stays green | AGENTS.md:172, .agents/skills/** |
test-coverage | PR-scoped rule: a diff touching .agents/skills/** must also touch skills-lock.json. Precise, no false positives — skills add always rewrites the hashes. A deny-list grep was tested and rejected: every surviving mention of the old names is a deliberate negation |
| L7 | Phase 3 sends /research output to a plugin directory |
docs/process/development-workflow.md:32 |
comment-quality | Point at docs/research/, which AGENTS.md:32 declares and the skill's "match the existing convention" rule already finds. The "delete when shipped" rule must not read as applying there |
| L8 | the Feature Runner table keeps a stale completion marker | docs/process/ai-development.md:20 |
comment-quality | `resolved` label on the issue, or `Status: resolved` in the ticket file — the Input row already carries both modes |
| L9 | Phase 5 omits Testing Decisions and Further Notes | docs/process/development-workflow.md:47 |
comment-quality | List all seven template sections. Testing Decisions carries the seams into /tdd — the omission understates the seams check in the next clause |
| L10 | labels.md scopes app:<plugin> to apps/claude-code/, but a live label has no app there |
docs/agents/labels.md:31 |
comment-quality | Note app:unic-ticket-specification as the exception. Deleting the label drops it off every issue carrying it — history loss for a docs-only PR |
| L11 | the ownership table's .claude/skills/* row covers three repo-local dirs it does not own |
AGENTS.md:172 |
comment-quality | Split into two rows: npx skills-managed symlinks, and repo-authored directories (archon, new-plugin, verify-spec). The (symlinks) qualifier is doing all the work the glob does not |
| L12 | docs/adr/README.md does not describe the amend-in-place pattern ADR-0032 now uses |
docs/adr/README.md:10,30-33 |
docs-impact | Add the pattern to "Amending records" and the two-clause status-line variant to the Format block. Otherwise amend and supersede diverge without a rule |
| L13 | repo-owned verify-spec still assumes specs land as docs/issues/<slug>/PRD.md |
.claude/skills/verify-spec/SKILL.md:3,22,26-31 |
docs-impact | State the scope limit now (two lines); file a follow-up for the gh issue view fallback. Today it reports "no file matches" on a /to-spec Feature, which reads as a missing spec rather than an unsupported location |
| L14 | AGENTS.md workspace tree lists a docs/plans/ that does not exist |
AGENTS.md:30 |
docs-impact | Delete the row. README.md:56-64 has the same tree without it, so the two disagree |
| L15 | README.md plugin table omits unic-spec-review |
README.md:9-13, :26-30 |
docs-impact | Add the row and install line while you are in the file for H3 and M12; otherwise defer to a docs issue |
L2, L3 and L4 recommend amending issue #297's acceptance criteria, not changing the branch — in each
case the shipped state deliberately improves on the criterion's literal wording.
✅ What's Good
- The upstream sync is verifiable, not asserted. The installed set is exactly upstream's
engineering+
productivitytrees plus the onemiscskill; each of the four removed skills (caveman,to-issues,
write-a-skill,zoom-out) is genuinely absent upstream. Symlinks, source dirs and lockfile entries agree
one-to-one — 26 / 26 / 26. Two agents re-ran this independently. issue-tracker.mdtracks the template it claims to. Section for section against upstream's GitHub
template, both fallbacks dropped with a stated reason, thePRs as a request surfaceflag set toyes,
and theDestinationheadingwayfinder/SKILL.mdexpects but the template omits.- ADR-0032 is amended, not rewritten. Status line plus an appended dated amendment; Context and Decision
byte-identical. It also corrects its own superseded "three-tier" wording and explains why the earlier
reconciliation vanished — turning a bug report into a durable rule. - ADR-0033 records the cost, not just the win. "Losing dogfooding costs coverage … that is a real
regression in confidence" is the line most ADRs omit, and it is what makes the decision auditable later. AGENTS.md§ "Three traps the CLI sets" is high-value operational documentation. Each trap states the
failing invocation, the symptom, and the fix.-s a,b,c"reports 'no matching skills found' and exits 0"
is precisely the silent-failure detail that costs an hour to rediscover.- Every
AUTO-GENERATEDheader is removed, and each surviving file gains the sameRepo-owned. Hand-maintainedline. Five files, five identical lines — the discipline that makes a doc set greppable. - The reference graph is clean. No live doc still points at
docs/agents/workflow.md,
docs/agents/branching.md,.archon/unic-dlc.config.*,/to-prd, or/to-issues. Both new cross-doc
anchors resolve, and a pre-existing broken link was fixed in passing. ONBOARDING.mdannotates its own stale data rather than swapping names and leaving the numbers looking
freshly measured.- No test regression is possible — no executable file changed, and no test reads a path the PR deletes;
both verified, not inferred.unic-archon-dlckeeps its 1:1 module-to-test mapping (9lib/, 9test/). - Removing 20 unexercised
.archon/workflow files is a net reduction in silent-failure surface.
📋 Suggested Follow-up Issues
| Issue title | Type | Priority | Finding |
|---|---|---|---|
Report five error-handling defects to mattpocock/skills, add a jq prerequisite caveat |
bug |
P1 | H2, M2–M5, L5 |
Guard the three-way skills invariant with a node:test and a CI changes filter entry |
tech-debt |
P2 | M6 |
| Add a relative-link check over repo-owned Markdown, fix the 48 pre-existing breaks | tech-debt |
P2 | M7 |
Write the scratch-Consumer-clone procedure into unic-archon-dlc's release checklist |
docs |
P2 | M8 |
Skip spec parents and wayfinder:map in /archon-rollout issue selection |
feature |
P2 | M11 |
Teach /verify-spec to read acceptance criteria off a GitHub issue |
feature |
P3 | L13 |
Decide separately, not as issues: whether to uninstall setup-matt-pocock-skills (M1 Option A), and whether
to create the five wayfinder:* labels at merge time (H1).
Next Steps
- Fix in this PR — H1 and H3. The
REQUEST_CHANGESverdict rests on these two. - Fix in this PR if you agree — M1's selection-policy clause, M9, M10, M11 (document-only half), M12,
and the ten LOW prose edits. All are self-contained edits to files the PR already touches. - Amend issue tech-debt(repo): de-dogfood unic-archon-dlc — one agent-skill driver, not two #297 — criteria 2, 8 and 9 (L2, L3, L4). The shipped state is better than the wording.
- Do not patch here — H2, M2–M5, L5.
.agents/skills/**is upstream-owned;AGENTS.md:172states
edits die silently on the nextnpx skills add. One upstream report covers all six. - File the six follow-up issues above.
CI is 15/15 green and nothing here contradicts that. No finding in this review is reachable by pnpm check:
it runs Biome plus Prettier-on-Markdown only, with no shell linting and no link checking — which is exactly
what M6 and M7 propose to close.
Reviewed by the Archon comprehensive-pr-review workflow
Artifacts: artifacts/runs/5ae414bc6ba4da448c05f12fd50d0c02/review/
Why: the review found two in-diff docs defects that assert things which are false, plus one upstream defect this repo can only warn about. H1 — `Wayfinding operations` prescribed `gh issue create --label wayfinder:map` against five `wayfinder:*` labels that do not exist on the tracker (verified: `gh label list` returns 31 labels, zero `wayfinder:*`). The first documented `/wayfinder` step failed. Records the labels as a one-off prerequisite with the `gh label create` commands, notes the same in `labels.md`, and softens ADR-0033's "`/wayfinder` becomes usable" to name the remaining prerequisite. Creating the labels mutates the live tracker and a revert would not undo it, so that stays out of this PR. H3 — `README.md` was the only file still advertising `docs/agents/branching.md` and `docs/agents/workflow.md`, both deleted here. Points at the `AGENTS.md` index instead of carrying a second enumeration that can drift again. H2 — `.agents/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh` fails open: without `jq` it exits 0, which a `PreToolUse` hook means as allow, so a `git push --force` passes while the transcript looks like a block. The file is upstream-owned and never hand-edited here, so this adds the prerequisite and the negative test to the `AGENTS.md` upgrading section; the code fix goes upstream to `mattpocock/skills`. Verified: pnpm ci:check, pnpm typecheck, pnpm test (1792 pass, 0 fail). Review artifacts: artifacts/runs/5ae414bc6ba4da448c05f12fd50d0c02/review/ Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
⚡ Auto-Fix ReportStatus: COMPLETE for CRITICAL + HIGH Fixes Applied
Five docs changed, +24 −6. No executable code in this PR, so no unit is under test and no test was added — What was fixed
Tests addedNone. The PR changes no executable code, and all three HIGH fixes are prose in Markdown. The two structural guards the review asked for are follow-ups, each because of a prerequisite that makes it ❌ Not Fixed (Manual Action Required)
🟡 MEDIUM Issues (Your Decision — 12)Six are self-contained prose edits you may want in this PR; six are upstream-owned or follow-up work.
LOW (15): unchanged. L2, L3 and L4 recommend amending issue #297's acceptance criteria (8, 2 and 9) 📋 Suggested Follow-up Issues
Validation
Auto-fixed by the Archon comprehensive-pr-review workflow |
Follows the review's own triage: fix in-diff what this PR caused, leave upstream defects upstream, and file the tooling gaps as issues. M1 — the selection policy now names its two exceptions. `setup-matt-pocock-skills` stays installed as the reference `docs/agents/*.md` was authored from, but four installed skills (`triage`, `wayfinder`, `to-spec`, `to-tickets`) tell an agent to invoke it when a tracker or label mapping looks missing. Those files exist and are correct here, so the condition is never met — stated explicitly, because a one-row ownership table against four contrary prompts is how the 8-state reconciliation was lost in the first place. `misc/git-guardrails-claude-code` gets the "explicit justification" the policy demands of any `misc/` entry. M9 — `ai-development.md` still opened with "a Feature Runner is **the skill**" while citing the `CONTEXT.md` this PR rewrote to "whatever implements", and named a human developer as a runner six lines later. Mirrors the glossary verbatim now; paraphrase is what let it drift. M10 — two `Wayfinding operations` bullets named an endpoint their siblings spell out in full. This file is read mid-session, so the asymmetry reads as "the vague ones needed no detail". Both `gh api` calls are now written out, the database-id-not-`#number` rule is stated once for all three, and the frontier query is executable — `gh issue list` has no sub-issue filter, so it reads children from the map and checks each. Both endpoints re-verified live. M11 — `/to-spec` also applies `ready-for-agent`, to an issue whose body is user stories with no `## What to build` and no `## Blocked by`. The docs asserted `/to-tickets` was the only author of that label, which is a guarantee that does not hold. Now recorded in all four places: the label means "spec settled" there, and a dispatcher must check the shape rather than trust the label. The `/archon-rollout` selection filter is follow-up work with its own criteria. M12 — `README.md` listed the Claude Code CLI as a prerequisite "for Ralph"; `ralph-orchestrator` was retired in ADR-0009 and this PR deletes its last artefacts. LOW: the merge-commit fact that died with `branching.md` (L1); `/research` output belongs in `docs/research/`, with the delete-when-shipped rule scoped to notes beside the code (L7); the Feature Runner completion marker covers both modes (L8); Phase 5 lists all seven spec sections, Testing Decisions included, since it carries the seams into `/tdd` (L9); `app:unic-ticket-specification` recorded as the one area label without a directory (L10); the ownership table splits `npx skills`-managed symlinks from the three repo-authored `.claude/skills/` directories (L11); `docs/adr/README.md` documents the amend-in-place pattern ADR-0032 now uses and the rule for choosing it over superseding (L12); `/verify-spec` states its file-only scope limit so a `/to-spec` Feature reports "spec is a GitHub issue" rather than "no match" (L13); the phantom `docs/plans/` row leaves the workspace tree (L14). Not taken. H2 and M2–M5 are upstream-owned — `.agents/skills/**` edits die on the next `npx skills add`, so one report to `mattpocock/skills` covers all five. I reproduced H2 independently and it is worse than filed: besides the missing-`jq` fail-open, `git -C . push origin main` exits 0 because the patterns are unanchored substrings, so the bypass needs no environment quirk at all. The hook is not wired into `.claude/settings.json`, so exposure is nil today. M6, M7 and M8 are tooling and procedure work with their own acceptance criteria. L2, L3 and L4 ask to amend #297's criteria rather than the branch. L15 (a missing `unic-spec-review` row) is a pre-existing README gap unrelated to this PR — deferred to a `docs` issue rather than smuggled in. Refs #297 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`docs/research/running-your-afk-agent.md` pre-existed this branch as an untracked file and has nothing to do with #297. A `git add -A docs` caught it, for the second time in this PR — the first was amended out of bff811d before it was pushed; this one was not caught in time, so it is removed forward rather than by rewriting a pushed commit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Found by using the endpoint this file documents: linking the seven #297 follow-ups exercised `POST …/issues/<parent>/sub_issues` seven times, and its response body is the parent issue. Reading `.number` off it therefore echoes the parent and looks like success whatever happened to the link. The confirmation is a list call. Same class as the M10 finding this section was rewritten for — a step named but not spelled out is a step an agent gets wrong. Refs #297
Created by hand: `wayfinder:map` (#5319E7, so the map stands out in a list) plus `research`, `prototype`, `grilling` and `task` (#BFD4F2). The tracker went 31 → 36 labels. They were held back from #298 because label creation mutates the live tracker and reverting the PR would not undo it. That argument does not survive contact: the labels are additive, no code reads them, and an unmerged PR documenting a flow whose first step fails is the worse state. Creating them early costs nothing. So the H1 finding's remaining half closes too. Three documents asserted the labels were absent — `docs/agents/issue-tracker.md` called it a prerequisite, `docs/agents/labels.md` said "do not exist on the tracker yet", and ADR-0033 qualified its own headline consequence with "once the five labels exist". All three now state what is true, and ADR-0033 records all three moving parts as verified live: sub-issues, native dependencies, and the labels. The `gh label create` commands stay, repurposed: they are what a fork of this flow into another repo runs first. Nothing maintains these labels and `/wayfinder` does not create a missing one, which is worth knowing before the first run elsewhere. Refs #297 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR removes unic-archon-dlc dogfooding artifacts from the monorepo and upgrades the vendored mattpocock/skills set to upstream, then updates repo-owned docs/ADRs to reflect the new single-driver setup and the /to-spec + /to-tickets + /wayfinder workflow.
Changes:
- De-dogfood
unic-archon-dlcby deleting generated.archon/unic-dlc.*config/workflows/commands and removing auto-generateddocs/agents/{workflow,branching}.md. - Add ADR-0033 and amend ADR-0032 to record the new ownership split (repo-owned
docs/agents/*.md, upstream-owned.agents/skills/**) andwayfinder:*labeling. - Upgrade/rename skills (
to-prd→to-spec,to-issues→to-tickets, etc.) and update onboarding/contributing/process docs to match.
Reviewed changes
Copilot reviewed 149 out of 150 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Updates prerequisites and clarifies docs/agents role. |
| ONBOARDING.md | Renames skills and updates the delivery flow description. |
| docs/research/running-your-afk-agent.md | Adds an AFK-agent research note. |
| docs/agents/workflow.md | Deletes DLC-generated workflow doc. |
| docs/agents/triage-labels.md | Rewrites mapping to align with 8-state + rejected label vocabulary. |
| docs/agents/labels.md | Converts from generated 3-tier to repo-owned 4-tier (+ wayfinder namespace). |
| docs/agents/issue-tracker.md | Replaces DLC-generated tracker doc with repo-owned GitHub + wayfinder operations. |
| docs/agents/feature-runner.md | Updates runner guidance to /archon-rollout and manual /tdd//implement. |
| docs/agents/domain.md | Strips generator header; asserts repo ownership. |
| docs/agents/branching.md | Deletes DLC-generated branching doc. |
| docs/adr/README.md | Adds “amend in place” policy for ADR maintenance. |
| docs/adr/0033-de-dogfood-unic-archon-dlc.md | New ADR recording de-dogfooding decision. |
| docs/adr/0032-label-taxonomy.md | Adds amendment section describing ownership shift and wayfinder:* namespace. |
| CONTRIBUTING.md | Updates workflow docs to /wayfinder → /to-spec → /to-tickets → /archon-rollout. |
| CONTEXT.md | Updates “Feature” and “Feature Runner” definitions to GitHub-issue-first model. |
| CONTEXT-MAP.md | Updates label-tier ownership wording post de-dogfooding. |
| apps/claude-code/unic-confluence/CONTRIBUTING.md | Fixes planning link to point at current process doc. |
| apps/claude-code/unic-archon-dlc/AGENTS.md | Removes dogfooding claim; documents monorepo is not a Consumer. |
| AGENTS.md | Removes DLC markers; documents ownership split and upgrade procedures for skills. |
| .claude/skills/verify-spec/SKILL.md | Clarifies that verify-spec reads spec files only (not GitHub issues). |
| .claude/commands/archon-rollout.md | Points branching topology ownership at root AGENTS.md instead of deleted doc. |
| .archon/workflows/unic-dlc-triage.yaml | Deletes DLC workflow. |
| .archon/workflows/unic-dlc-cleanup.yaml | Deletes DLC workflow. |
| .archon/unic-dlc.config.yaml | Deletes DLC config. |
| .archon/unic-dlc.config.json | Deletes DLC config. |
| .archon/ralph/setup-slash-command/prd.md | Deletes archived Ralph PRD artifact. |
| .archon/commands/unic-dlc-triage.md | Deletes DLC command doc. |
| .archon/commands/unic-dlc-review.md | Deletes DLC command doc. |
| .archon/commands/unic-dlc-qa.md | Deletes DLC command doc. |
| .archon/commands/unic-dlc-plan.md | Deletes DLC command doc. |
| .archon/commands/unic-dlc-explore.md | Deletes DLC command doc. |
| .archon/commands/unic-dlc-cleanup.md | Deletes DLC command doc. |
| .archon/commands/unic-dlc-build.md | Deletes DLC command doc. |
| .agents/skills/zoom-out/SKILL.md | Removes deprecated/renamed skill. |
| .agents/skills/writing-for-agents/SKILL-MECHANICS.md | Adds skill-specific mechanics reference. |
| .agents/skills/writing-for-agents/agents/openai.yaml | Adds OpenAI agent metadata for the skill. |
| .agents/skills/write-a-skill/SKILL.md | Removes renamed skill. |
| .agents/skills/wizard/SKILL.md | Adds new “wizard” skill. |
| .agents/skills/wizard/agents/openai.yaml | Adds OpenAI agent metadata for “wizard”. |
| .agents/skills/wayfinder/agents/openai.yaml | Adds OpenAI agent metadata for “wayfinder”. |
| .agents/skills/wait-what/SKILL.md | Adds new “wait-what” skill. |
| .agents/skills/wait-what/agents/openai.yaml | Adds OpenAI agent metadata for “wait-what”. |
| .agents/skills/triage/SKILL.md | Updates triage behavior (incl. PR triage) and invocation policy. |
| .agents/skills/triage/OUT-OF-SCOPE.md | Clarifies when to write out-of-scope records (rejected vs already-implemented). |
| .agents/skills/triage/agents/openai.yaml | Adds OpenAI agent metadata for “triage”. |
| .agents/skills/triage/AGENT-BRIEF.md | Extends brief guidance to PRs and adds PR example. |
| .agents/skills/to-tickets/SKILL.md | Adds new “to-tickets” skill (successor to to-issues). |
| .agents/skills/to-tickets/agents/openai.yaml | Adds OpenAI agent metadata for “to-tickets”. |
| .agents/skills/to-spec/SKILL.md | Renames to “to-spec” and updates framing from PRD→spec. |
| .agents/skills/to-spec/agents/openai.yaml | Adds OpenAI agent metadata for “to-spec”. |
| .agents/skills/to-questionnaire/SKILL.md | Adds new “to-questionnaire” skill. |
| .agents/skills/to-questionnaire/agents/openai.yaml | Adds OpenAI agent metadata for “to-questionnaire”. |
| .agents/skills/to-issues/SKILL.md | Removes deprecated/renamed skill. |
| .agents/skills/teach/SKILL.md | Adds new “teach” skill. |
| .agents/skills/teach/RESOURCES-FORMAT.md | Adds “teach” workspace resource format template. |
| .agents/skills/teach/MISSION-FORMAT.md | Adds “teach” mission format template. |
| .agents/skills/teach/LEARNING-RECORD-FORMAT.md | Adds “teach” learning record format template. |
| .agents/skills/teach/GLOSSARY-FORMAT.md | Adds “teach” glossary format template. |
| .agents/skills/teach/agents/openai.yaml | Adds OpenAI agent metadata for “teach”. |
| .agents/skills/tdd/tests.md | Adds guidance on avoiding tautological tests. |
| .agents/skills/tdd/SKILL.md | Refactors TDD guidance around seams and loop rules. |
| .agents/skills/tdd/refactoring.md | Removes split-out refactoring guidance file. |
| .agents/skills/tdd/interface-design.md | Removes split-out interface design guidance file. |
| .agents/skills/tdd/deep-modules.md | Removes split-out deep modules guidance file. |
| .agents/skills/tdd/agents/openai.yaml | Adds OpenAI agent metadata for “tdd”. |
| .agents/skills/setup-matt-pocock-skills/triage-labels.md | Updates seed mapping doc to the current 5-role upstream vocabulary. |
| .agents/skills/setup-matt-pocock-skills/SKILL.md | Updates setup flow and clarifies when sections should run. |
| .agents/skills/setup-matt-pocock-skills/issue-tracker-local.md | Updates local tracker seed template to spec+tickets language + wayfinder ops. |
| .agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md | Updates GitLab template to spec language + MR triage + wayfinder ops. |
| .agents/skills/setup-matt-pocock-skills/issue-tracker-github.md | Updates GitHub template to spec language + PR triage + wayfinder ops. |
| .agents/skills/setup-matt-pocock-skills/domain.md | Updates domain-doc producer references from grill-with-docs to domain-modeling. |
| .agents/skills/setup-matt-pocock-skills/agents/openai.yaml | Adds OpenAI agent metadata for setup skill. |
| .agents/skills/resolving-merge-conflicts/SKILL.md | Adds new merge-conflict resolution skill. |
| .agents/skills/resolving-merge-conflicts/agents/openai.yaml | Adds OpenAI agent metadata for merge-conflict skill. |
| .agents/skills/research/SKILL.md | Adds new research skill wrapper guidance. |
| .agents/skills/research/agents/openai.yaml | Adds OpenAI agent metadata for research skill. |
| .agents/skills/prototype/UI.md | Updates prototype cleanup guidance to preserve variants on throwaway branch. |
| .agents/skills/prototype/SKILL.md | Updates logic prototype approach (HTML file) and capture policy. |
| .agents/skills/prototype/agents/openai.yaml | Adds OpenAI agent metadata for prototype skill. |
| .agents/skills/improve-codebase-architecture/SKILL.md | Refactors skill to HTML-report-first approach and updates vocabulary sourcing. |
| .agents/skills/improve-codebase-architecture/LANGUAGE.md | Removes old internal vocabulary reference (replaced by codebase-design). |
| .agents/skills/improve-codebase-architecture/INTERFACE-DESIGN.md | Removes old interface-design doc (replaced by codebase-design invocation). |
| .agents/skills/improve-codebase-architecture/HTML-REPORT.md | Adds detailed HTML report scaffold and styling guidance. |
| .agents/skills/improve-codebase-architecture/DEEPENING.md | Removes old dependency/deepening guide doc. |
| .agents/skills/improve-codebase-architecture/agents/openai.yaml | Adds OpenAI agent metadata for architecture skill. |
| .agents/skills/implement/SKILL.md | Adds new “implement” skill. |
| .agents/skills/implement/agents/openai.yaml | Adds OpenAI agent metadata for implement skill. |
| .agents/skills/handoff/SKILL.md | Updates handoff to avoid workspace writes and to redact sensitive info. |
| .agents/skills/handoff/agents/openai.yaml | Adds OpenAI agent metadata for handoff skill. |
| .agents/skills/grilling/SKILL.md | Updates grilling to round-based frontier questions format. |
| .agents/skills/grilling/agents/openai.yaml | Adds OpenAI agent metadata for grilling skill. |
| .agents/skills/grill-with-docs/SKILL.md | Converts grill-with-docs into a router to grilling + domain-modeling. |
| .agents/skills/grill-with-docs/CONTEXT-FORMAT.md | Removes embedded context format doc. |
| .agents/skills/grill-with-docs/agents/openai.yaml | Adds OpenAI agent metadata for grill-with-docs. |
| .agents/skills/grill-with-docs/ADR-FORMAT.md | Removes embedded ADR format doc. |
| .agents/skills/grill-me/SKILL.md | Converts grill-me into a router to grilling. |
| .agents/skills/grill-me/agents/openai.yaml | Adds OpenAI agent metadata for grill-me. |
| .agents/skills/git-guardrails-claude-code/SKILL.md | Adds skill for installing git guardrail hooks. |
| .agents/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh | Adds hook script to block dangerous git commands. |
| .agents/skills/git-guardrails-claude-code/agents/openai.yaml | Adds OpenAI agent metadata for git guardrails skill. |
| .agents/skills/domain-modeling/agents/openai.yaml | Adds OpenAI agent metadata for domain-modeling. |
| .agents/skills/diagnosing-bugs/SKILL.md | Renames/updates diagnosing skill content and tight-loop criterion. |
| .agents/skills/diagnosing-bugs/scripts/hitl-loop.template.sh | Adds HITL loop helper script. |
| .agents/skills/diagnosing-bugs/agents/openai.yaml | Adds OpenAI agent metadata for diagnosing-bugs. |
| .agents/skills/codebase-design/agents/openai.yaml | Adds OpenAI agent metadata for codebase-design. |
| .agents/skills/code-review/SKILL.md | Adds new code-review skill (two-axis review). |
| .agents/skills/code-review/agents/openai.yaml | Adds OpenAI agent metadata for code-review. |
| .agents/skills/caveman/SKILL.md | Removes deleted skill. |
| .agents/skills/ask-matt/PHASE-BOUNDARIES.md | Adds “phase boundaries” guidance doc. |
| .agents/skills/ask-matt/agents/openai.yaml | Adds OpenAI agent metadata for ask-matt. |
Suppressed comments (2)
.agents/skills/triage/SKILL.md:45
- This skill instructs agents to run
/setup-matt-pocock-skillsif the label mapping isn’t provided, but this repo’sAGENTS.mdexplicitly says not to run it (it would revertdocs/agents/triage-labels.md). The skill should instead direct the agent to readdocs/agents/triage-labels.md/docs/agents/labels.mdor ask the maintainer.
.agents/skills/to-spec/SKILL.md:10 - This skill tells the agent to run
/setup-matt-pocock-skillsif tracker/label vocab isn’t provided, butAGENTS.mdsays that skill must not be run in this repo. Prefer pointing at the repo-owned docs (docs/agents/issue-tracker.md,docs/agents/triage-labels.md,docs/agents/domain.md).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Third time `git add -A docs` caught `docs/research/running-your-afk-agent.md`, an untracked file that pre-existed this branch and has nothing to do with #297. Removed in 1e4e6f0, re-added by ba1c537, removed here — and added to `.git/info/exclude` (local, not committed: the file is the user's, and a repo-wide `.gitignore` entry would be a decision about it that is not mine to make). Copilot's review flagged its content while it was in the diff: it references `ralph/prompt.md`, `ralph/once.sh" and an `issues/` directory that do not exist here, and appears to reproduce an external article verbatim. Both are reasons it should not enter the repo in a docs PR — neither is mine to fix in someone else's untracked note. Refs #297
C2 — the `Read an issue` convention told an agent to filter `gh issue view <number> --comments` with `jq`. That command prints tab-delimited text, never JSON, so the filter cannot work. Verified on #294: 2691 bytes of `author:` / `association:` lines, and `jq` rejects it. My earlier check passed only because I tested against #297, which has no comments — zero bytes, which `jq` accepts silently. The line came verbatim from upstream's v1.1 GitHub template, but this file is repo-owned now, so the defect is ours. Replaced with the `--json` + `--jq` form, run to confirm it returns what the sentence promises. C3 — the labels section asserted the five `wayfinder:*` labels exist, as a fact. A versioned document cannot enforce tracker state: a deleted label or a fresh fork disagrees with it silently, and the reader has no reason to check. Reframed as a prerequisite to verify — `gh label list --search wayfinder`, then create whatever is missing — which also covers the fork case the previous wording handled. ADR-0033 follows. Not changed, with reasons: - **C1** (quotes in the hook's settings JSON) is wrong on the mechanism. A Claude Code hook `command` is a shell command, so `"$CLAUDE_PROJECT_DIR"/…` is shell quoting that protects a space in the path — not a literal path containing quote characters. The file is upstream-owned regardless. - **C4** (`to-tickets` tells the agent to run `setup-matt-pocock-skills`, which `AGENTS.md` forbids) is real and already addressed: it is the archon review's M1, and `AGENTS.md` § Upgrading now names the exception and says to read `docs/agents/` instead. The fix cannot go where Copilot points — that file is overwritten by the next `npx skills add`. - **C5** is H2, tracked in #299, plus two bypasses that review missed: `git checkout -- .` and `git restore -- .` both exit 0. Reproduced and added to #299, with the observation that anchoring patterns will not fix `git -C` and adding `-- .` will not fix the next flag — the list matches substrings of a command string instead of parsing the invocation. - **C6** flagged a research note that was in the diff when Copilot read it and is not now. Its content problems are real; the file is untracked and not mine to rewrite. Refs #297 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Closes #297
Why
.agents/skills/held a pre-v1.1 generation ofmattpocock/skills. Upstream renamed anddeleted skills at v1.1.0 and again across the 101 commits since, so six installed skills no longer
existed upstream and fifteen were missing — including
/wayfinder,/to-spec,/to-ticketsand/code-review.npx skills addnever prunes, so a plain reinstall would have left the dead sixbehind.
The upgrade could not land honestly on its own.
/wayfinderreads a Wayfinding operationssection from
docs/agents/issue-tracker.md, and that file was generated byunic-archon-dlc— aplugin whose own doctrine forbids
/triagefrom reading Matt's tracker docs and declaressetup-matt-pocock-skillsa non-dependency. This repo was running both systems at once, with twogenerators writing one set of files.
What changed
Three commits, in dependency order.
A —
chore: upgrade Matt Pocock's skills to upstream main26 skills: all of
skills/engineering/(18) andskills/productivity/(7), plusmisc/git-guardrails-claude-code. Neverskills/in-progress/— the two in-progress skills theprevious install picked up (
decision-mapping,review) had already been renamed or deletedupstream, which is the argument for the rule.
migrate-to-shoehornis dropped deliberately: noshoehorndependency and no.test.tsfile exists here, so it could never fire.to-prdto-specto-issuesto-ticketswrite-a-skillwriting-for-agentsdiagnosediagnosing-bugscaveman,zoom-outB —
chore: de-dogfood unic-archon-dlcunic-archon-dlcis a product built in this repo, not a driver run against it. Deleted fourteen.archon/unic-dlc-*artefacts, bothunic-dlc.config.*files,.archon/ralph/,docs/agents/workflow.md(documented the retired seven-workflow generation) anddocs/agents/branching.md(Gitflow table duplicated verbatim inAGENTS.md), plus the plugin's"Dogfooding note" doctrine.
docs/agents/{labels,domain}.mdsurvive as hand-owned files.Recorded as ADR-0033, with ADR-0032 amended rather than superseded: its four-tier taxonomy
stands, but tiers 1-3 move to repo ownership,
wayfinder:*is admitted as a fifth tool-scopednamespace, and 0032's own "do not re-run
/setup-matt-pocock-skills" warning is resolved by neverre-running it. 0032's Context and Decision are untouched, so the label-migration record it explains
stays intact.
C —
docs: enable /wayfinder and rename to-prd/to-issuesdocs/agents/issue-tracker.mdhand-authored from upstream's v1.1 GitHub template, with the fullWayfinding operations section, PRs-as-a-request-surface set to
yes, and the dissolvedlib/tracker-adapter.mjsreference dropped. Renames acrossCONTRIBUTING.md,ONBOARDING.mdandboth
docs/process/guides.Notes for review
skills removeis 2-for-3. It cleans the.claude/skills/<name>symlink and theskills-lock.jsonentry, but leaves the.agents/skills/<name>source directory orphaned. Eachremoval needs a
git rm -ralongside it. Its-sflag also rejects a comma list and-a '*',both of which
addaccepts. That procedure is now written intoAGENTS.md..archon/workflow copies were deleted and do not appear in this diff:copy-fix-github-issue.yaml,unic-pr-review.yaml,unic-archon-pr-review.yaml. Nothingreferenced them by filename;
/archon-rolloutdispatches the nativearchon-fix-github-issue.CONTRIBUTING.mdand both process guides promisedunic-dlc-buildasthis repo's future AFK runner. ADR-0033 makes that false; the AFK path here is
/archon-rollout,which is what has actually been in use.
docs/issues/**,docs/research/,docs/conversations/,.out-of-scope/. They describe what was true when written./setuponevery change any more. ADR-0033 names this as the price and points at a scratch clone instead.
Verification
pnpm ci:checkpnpm testpnpm typecheckpnpm --filter unic-archon-dlc testjq '.skills|keys|length' skills-lock.json26, all paths underengineering/productivity/misc.claude/skillssymlinksgrep -rln "AUTO-GENERATED by unic-archon-dlc" docs/Still to do, after merge
Create the five
wayfinder:*labels withgh label create—wayfinder:map,wayfinder:research,wayfinder:prototype,wayfinder:grilling,wayfinder:task. Held backdeliberately: label creation mutates the live repo and reverting this PR would not undo it.
Then the real end-to-end test: run
/wayfinderon a throwaway idea and confirm the map issue, achild sub-issue, and a native
blocked_byedge all land.🤖 Generated with Claude Code
D —
docs: correct output claims the rename glossed over(added after review)A wide re-read found the rename was lexical where it needed to be behavioural. Six defects, none
catchable by CI:
to-spec/to-ticketsno longer write files. They publish GitHub issues with nativesub-issue and blocking links; local-file mode writes
.scratch/, notdocs/issues/<slug>/. Fourdocs claimed the old contract.
ready-for-agentthemselves, which under our 8-state vocabulary is a triagedecision. Docs now say treat it as a proposal — worth a policy call separately.
triage-labels.mddidn't map the roles the v1.1 skill names. Keyed on prose, sowontfixhad no row; and category role
enhancementhad no mapping, risking recreation of the labelADR-0032 deleted.
docs/agents/feature-runner.mdwas missed by the earlier sweep — same falseunic-dlc-buildpromise.
CONTEXT-MAP.mdstill called the label tiers "archon-owned".../../../../link inunic-confluence/CONTRIBUTING.mdpointing above the repo root — apre-existing bug preserved when repointing.
Plus: removed a top-level
agent/skills/tree of frontmatter-rewritten duplicates thatskills add -a '*'created in commit A.AGENTS.mdnow documents-a claude-codeas the correcttarget and the two other CLI traps.