Repository navigation
Description
Question
Delete lib/ and test/. Take the plugin to zero code and zero runtime dependencies.
This gates the Consumer ten days. /build touches none of lib/, but /specs, /tickets and
/triage do — and #390 installed all seven commands into DXP-DesignSystem through the marketplace,
where every one of them halts at Step 1. #379 waits behind this. (The body used to say the opposite;
the reversal and its evidence are in the comments dated 2026-08-19.)
What goes, and what each deletion costs:
| Module | Lines | What replaces it |
|---|---|---|
slopcheck.mjs, stub-detector.mjs |
119 | nothing — already dead. unic-dlc-build.yaml inlines its own slopcheck |
config-schema.mjs + labels-config.mjs |
387 | the Box reads .archon/unic-dlc.config.yaml directly; defaults ship as comments in it |
issues-schema.mjs |
149 | the agent writes and orders issues.json; five tickets need no topological sort |
prd-writer.mjs |
88 | the agent writes PRD.md |
methods-resolver + -manifest + -bundle |
623 | one tier: the literal .archon/methods/<name>/SKILL.md path every Archon Box already uses. The manifest also held data no path replaces — providedTo, the upstream pins, subFiles, the METHODS_BUNDLE provenance — which moves to prose: the README § Dependencies table becomes the list itself, and vendor/mattpocock-skills/README.md keeps the pin |
archon-check.mjs |
115 | archon --version, read by the agent |
artefact-install.mjs |
468 | prose in the rewritten /setup (#371) |
schema-traps.mjs |
107 | /archon-upgrade is outside the 1.0 box set |
Also gone: the yaml dependency, the test script's hand-list of 19 files,
test/test-enumeration.test.mjs that guards that hand-list, and typecheck with no .mjs left to
check. The plugin reaches zero dependencies, which is the bar the root AGENTS.md sets with
auto-format.
Keep nothing without a written reason. If a module earns its place, say so on this ticket and keep it.
Acceptance criteria
-
lib/andtest/are gone, or every surviving file carries a written reason on this ticket. -
package.jsonhas noyamldependency, notestscript listing files by hand, and no
typecheckscript with nothing to check. - No
commands/*.mdfile imports a plugin module, and every one of them reads config and Methods
by path. - The plugin's own CI still passes, or the checks that no longer apply are removed with a reason.
- The four Boxes still run. Amended 2026-08-20 (maintainer's call, in-session): prose inside
a node may be edited where it names a deleted symbol — the sevenresolveMethodreferences in
the Box prompt bodies go — but a node's machinery may not (depends_on,when,approval
gates,always_run,context,loop,allowed_tools, staging rules). The diff proves the
machinery half; the Consumer run that closes this ticket proves the running half. The
lib/*.mjsmention atunic-dlc-explore.yaml:142is advice about the Consumer's own code and
stays. - Every command runs past Step 1 in a Consumer where the plugin is installed through the
marketplace, with nonode_modulesand no hand-set environment variable. This is the
condition Install the DLC's command Boxes in DXP-DesignSystem #390 could not meet and the one that proves the deletion did its job. The criterion
above it — "nocommands/*.mdfile imports a plugin module" — is necessary and not
sufficient: it passes while Step 1 still reads an env var that is never set.
Activity
orioltf commentedon Aug 14, 2026
How to start this session
Produces:
lib/andtest/gone, the plugin at zero code and zero runtime dependencies./wayfinder 373 #381. It claims this ticket./implement— and ignore its second line, which tells you to use/tdd. Decisions 3 and11 delete the tests; there is no red-green loop here.
lib/, and each of the four still runs.pnpm ci:checkbefore pushing.pnpm formatdoes not fix import order.Traps
package.jsonloses three things: theyamldependency, thetestscript that lists 19 files byhand, and
typecheckwith no.mjsleft to check.LICENSEfile — the maintainer owns those by hand.orioltf commentedon Aug 19, 2026
This now unblocks a live Consumer, measured on 0.22.0
#390 installed the command Boxes in
DXP-DesignSystemthrough the marketplace entry. All seven commandsload. None runs past Step 1, for two reasons this ticket deletes:
$CLAUDE_PLUGIN_ROOTis not set inside the Bash tool.commands/specs.md,tickets.md,triage.md,improve-architecture.mdandcleanup.mdread it fromprocess.envin Step 1 and stopwith "Run this as a
/unic-archon-dlc:slash command" — advice the operator has already followed.ADR-0023 §5
already records the variable as unreliable and exempts only the Archon nodes.
yamlis a runtime dependency and an installed plugin ships nonode_modules.lib/config-schema.mjs:4,lib/methods-bundle.mjs:5andlib/schema-traps.mjs:3import it bare. Itresolves through this monorepo's workspace and nowhere else, so setting the variable by hand only moves
the failure to
Cannot find package 'yaml'.Both are the same fix: a command that reads
.archon/unic-dlc.config.yamlin prose needs neither thevariable nor the package. So this is no longer housekeeping —
/specs→/tickets→/buildcannot runat the Consumer until it lands, and #379 waits behind it.
Two things to carry into the rewrite:
resolveMethod. The Archon Boxes already read.archon/methods/<name>/SKILL.mdby literal path (ADR-0023 §5). The commands should read the same way,which retires the three-tier resolution along with the module.
/triageto resolve a state role throughdocs/agents/triage-labels.md. I resolvedready-for-human→ Tagneeds-humanby hand and wrote it towork item 42948; the command could not. Re-run
/triageinDXP-DesignSystemonce Step 1 works.orioltf commentedon Aug 19, 2026
This ticket now blocks the ten-day goal. Its stated premise is false.
The body opens:
/buildstill touches none oflib/. But/specs,/ticketsand/triagedo, and #390 installedthem into
DXP-DesignSystemtoday. All seven commands load and none runs past Step 1. So thedependency reversed: this is no longer cleanup the sprint does not need, it is what the sprint is waiting
for. #379 sits behind it.
Measured on 0.22.0, installed through the marketplace into that Consumer (#390), then verified statically
here:
1.
$CLAUDE_PLUGIN_ROOTis not set inside the Bash tool. Step 1 reads it fromprocess.env, halts,and prints "Run this as a
/unic-archon-dlc:slash command" — advice the operator has already followed.All seven commands reference the variable; five also reference a
lib/*.mjspath through it.The plugin's own ADR-0023 §5 already records it:
The ADR exempted the Archon nodes on exactly that ground and left the commands depending on it.
2.
lib/imports a bare external package, and an installed plugin ships nonode_modules. Setting thevariable by hand moves the failure to
Cannot find package 'yaml'. Three modules import it, not one:package.jsondeclares it as"yaml": "catalog:"— the pnpm workspace protocol. Outside thismonorepo that is unresolvable whether or not
node_modulesis present, so shipping the directory wouldnot fix it either.
Why this ticket rather than a patch
The two defects have one fix and it is this ticket's deletion. Take the plugin to zero code and there is no
lib/to import, noyamlto resolve, and no$CLAUDE_PLUGIN_ROOTto be unset — the Box reads.archon/unic-dlc.config.yamlwith its own tools, which is what the four Archon Boxes already do and whythey were unaffected. Patching around it means keeping the module and inventing a second resolution path
for a directory that is being deleted.
#390 deliberately made no plugin edit for that reason.
What changes here
p1→p0. It gates Land a rendering component on develop, so the client sees the walk's output #379, which is decision 17's ten-day goal.with the first edit.
installed through the marketplace, with no
node_modulesand no hand-set environment variable. Thatis the condition Install the DLC's command Boxes in DXP-DesignSystem #390 could not meet, and the one that proves the deletion did its job. The existing
criterion "No
commands/*.mdfile imports a plugin module" is necessary and not sufficient — it can besatisfied while Step 1 still reads an env var that is never set.
Recorded from #390's session; verified here against
624de9e.orioltf commentedon Aug 19, 2026
How to start this session
Produces: a plugin with no
lib/and notest/, and seven commands that run past Step 1 in a realConsumer. Invoke
/writing-for-agents— every file this leaves behind is a command prompt, and Step 1of each is what you are rewriting.
Do not grill the deletion; decision 11 settled it. Do grill the one thing this ticket does not
decide, named below.
Read in this order
acceptance criterion.
repositories move together" in its body.
§5, which already records
$CLAUDE_PLUGIN_ROOTas unreliable and exempted only the Archon nodes.commands/tickets.mdandcommands/setup.md, and you cannot finish thisticket without touching both.
Why this is p0 now
#390 installed the command Boxes into
DXP-DesignSystemthrough the marketplace. All seven load. Noneruns past Step 1. Two defects, one fix, and the fix is this deletion:
$CLAUDE_PLUGIN_ROOTis unset inside the Bash tool. Every command reads it fromprocess.envandhalts, printing advice the operator has already followed.
lib/modules import bareyaml, declared"yaml": "catalog:"— the pnpm workspaceprotocol. Outside this monorepo that is unresolvable whether or not
node_modulesis present, soshipping the directory would not help either.
So #379 and decision 17's ten-day goal sit behind you. The body's opening line — "Blocked until the Consumer
ten days are done … cleanup the client sprint does not need" — is false and should go with your first
edit.
The decision this ticket does not make
"Delete
lib/" is stated. What replaces Step 1 is not, and that is the ticket. Today each commandruns a
node --input-type=moduleheredoc that resolves$CLAUDE_PLUGIN_ROOT, imports a module, andreturns JSON the prose then parses. Which module each one reaches:
setup.mdarchon-check·config-schema·methods-manifestarchon-upgrade.mdarchon-check·schema-trapscleanup.mdconfig-schemaspecs.mdprd-writertickets.mdissues-schematriage.mdconfig-schema, via a path built at runtimeDecide the replacement shape once and apply it identically everywhere — divergence here is what the
one-dependency-list doctrine in
AGENTS.mdexists to stop. The obvious candidate is what the four ArchonBoxes already do, and why they were unaffected: a prompt node reads
.archon/unic-dlc.config.yamlwith itsown tools and validates in prose. Confirm that reading before you write seven of them.
Two things to settle while you are there. What does "the config is incomplete" mean with no
validateConfig— which keys does a command still refuse to run without, now thatMANDATORY_PATHSisproject.branchingalone? And what replaces the tier linemethods-resolverprinted, once resolution isthe single literal
.archon/methods/<name>/SKILL.mdpath every Archon Box already uses?Traps
setup.mdis the heaviest user (three modules, five env-var reads) and Rewrite commands/setup.md from scratch as prose #383 rewrites it fromscratch.
tickets.mdusesissues-schemaand Rewrite commands/tickets.md from scratch against the to-tickets Method #382 rewrites it. You cannot leave either importinga deleted module, and you must not do those rewrites here. Make the minimum Step 1 change in both, and
say on Rewrite commands/tickets.md from scratch against the to-tickets Method #382 and Rewrite commands/setup.md from scratch as prose #383 what you did, so each rewrite starts from a working file rather than a broken one.
lib/. Do not touch them. This ticket's own criterion is thatthey still run, and it is satisfied by changing nothing.
vendor/mattpocock-skills/is the Method Bundle, not code. It stays.package.json: thetestscript names 19 files by hand andtest/test-enumeration.test.mjsexiststo guard that hand-list — with
test/gone, both go, andtypecheckhas no.mjsleft to check. Keepverify:changelog: CI runs it on every PR and it fails a missing changelog entry.The bar that proves it
Not
pnpm test— that passes today while every command is broken. Install the plugin into a Consumerthrough the marketplace — no
node_modules, no hand-set environment variable — and run each command farenough to see Step 1 succeed.
docs/agents/unic-archon-dlc.mdinDXP-DesignSystemrecords the route, andthat Consumer is already set up for it.
Watch that the existing criterion "No
commands/*.mdfile imports a plugin module" is necessary andnot sufficient: it can pass while Step 1 still reads an env var that is never set.
When you land it
Minor bump with a
### Breakingchangelog entry — ADR-0022'samendment says that is what a breaking change is on a
0.xline, andmajoris reserved for1.0.0itself. Then say on #379 that it is unblocked, and on #373 whether the Consumer needed anything. A ticket
that closes with only the plugin side done is half closed.
Report back
Send
wayfinder-orchestratorfour things when you learn something that would have changed this opener:what you expected, what happened, the command or file that proved it, and whether it changes only this
ticket or every session in this repo. Send it when you learn it, not only at the end.
docs(unic-archon-dlc): repoint every surface that still named deleted…
docs(unic-archon-dlc): use the plugin's own ADR amendment convention,…
fix(unic-archon-dlc): act on the two-axis review findings that surviv…
orioltf commentedon Aug 20, 2026
Body amended 2026-08-20: the Box-edit criterion
The maintainer decided the seven dead
resolveMethodreferences in the Box prompt bodies are fixed in this ticket, not deferred. The AC "they never importedlib/, and this proves it" would have gone vacuous in the other direction the moment a Box was edited, so it now distinguishes prose (editable where it names a deleted symbol) from machinery (untouched, proven by the diff), and the running-half proof folds into the Consumer-run gate this ticket already closes on. Amended per rootAGENTS.md: ticket amended, not merged around.fix(unic-archon-dlc): the Box prompts stop forbidding a symbol that n…
orioltf commentedon Aug 20, 2026
Closed early — here is the criterion it closed without
This auto-closed at 13:20:29Z when #398 merged, which was several hours before the criterion that mattered most could be met. Recording the evidence so the ticket does not read as complete-by-merge.
The plugin half — #398, merged
lib/andtest/deleted, 6413 lines. All seven Step 1 blocks rewritten as prose. No command reads$CLAUDE_PLUGIN_ROOT, imports a plugin module, or runs a Node heredoc.package.jsonat zero runtime dependencies;verify:changelogkept because CI runs it on every PR. Released asunic-archon-dlc@0.23.0, commit196806795c69b9a0cff663c81a78f0c399a6b64d.The four Boxes: three comments and seven node prompts changed, prose only. Every node's
depends_on,when,approvalgate,always_run,context,loopandallowed_toolshashed identical to0.22.0, all four files still parsing with the same node counts. The amended criterion's machinery half, proven by diff.The Consumer half —
DXP-DesignSystem!5782, merged as2002246The criterion: every command runs past Step 1 in a Consumer where the plugin is installed through the marketplace, with no
node_modulesand no hand-set environment variable. Two probes, both read-only, on work item 42952:/unic-archon-dlc:cleanup— Step 1 read.archon/unic-dlc.config.yamlwith theReadtool, took five keys, then read the tracker contract. Its own report: "No shell, no Node, no$CLAUDE_PLUGIN_ROOT." That is precisely the operation 0.22.0 could not perform./unic-archon-dlc:archon-upgrade— Step 1 ranarchon --version, read0.7.0, compared it against the0.7.0floor stated in the command's own prose, and took the documented equals-floor branch.Two of the seven were probed, not seven, and
DXP-DesignSystem/docs/agents/unic-archon-dlc.mdsays so rather than implying coverage nobody has. The two were chosen because between them they exercise both halves of the old failure — a command that reads config, and one that reads none — and neither writes. The other five share the Step 1 shape by construction, which is an argument and not a measurement.#390's AC-3 completes with it:
/triagewas not among the probed commands, so that one is still unproven and the Consumer doc carries the by-hand fallback for it.What this ticket produced beyond its own scope
AGENTS.md, with both hard cases given losing verdicts rather than hedged.unic-dlc-qa.yaml's rewritten comment points atREADME.md § Dependencies, which resolves correctly here and nowhere in a Consumer, where a Box actually runs. The text it replaced namedlib/methods-manifest.mjs, a path no Consumer has, so it was unambiguous. Found byunic-dlc-pr-reviewagainst !5782./setuphas to come back if anything is to keep a Consumer current, and Rewrite commands/setup.md from scratch as prose #383 is blocked on the outcome.The one thing that is thinner than before, on purpose
test/schema-traps.test.mjsre-asserted ADR-0011's four schema traps in CI on every pull request. Nothing does that now./archon-upgradeStep 5 is the only place they are re-asserted, by reading, in a command a human must remember to run. Nobody chose that replacement — it fell out of the deletion, and it is on #373's open list rather than buried here.docs(unic-archon-dlc): two CONTEXT.md lines that outlived lib/
docs(unic-archon-dlc): the root pnpm test trap joins run 3's stated c…