feat(unic-archon-dlc): complete plugin — all 16 slices (v0.1.0)#36
feat(unic-archon-dlc): complete plugin — all 16 slices (v0.1.0)#36orioltf wants to merge 22 commits into
Conversation
- Plugin manifest at apps/claude-code/unic-archon-dlc/.claude-plugin/ - Placeholder .archon/workflows/ and .archon/commands/ dirs - lib/config-loader.mjs: loadConfig() returns typed object or structured error - lib/setup-explorer.mjs: exploreProject() reads project state, absent = absent not throw - hooks/install.mjs: idempotent install with archon binary check, mandatory question tier, outputs .archon/unic-dlc.config.json + docs/agents/issue-tracker.md - 4 node:test cases passing; biome + typecheck clean Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…iter (slice 02) - lib/labels-config.mjs: getDefaultLabels() returns three-tier canonical→tracker mappings - lib/agent-docs-writer.mjs: writeAgentDocs() + updateAgentSkillsBlock() (marker-delimited idempotent CLAUDE.md update) - hooks/install.mjs: expanded to all config tiers (mandatory, skippable e2e, defaults, labels, repo_layout) and writes all 5 docs/agents/*.md files - 9 node:test cases passing; biome + typecheck clean Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…rator (slice 03) - lib/tracker-adapter.mjs: translateLabel(), buildCreateCommand(), buildUpdateCommand() for all 4 backends (github/ado/jira/local-markdown) - lib/handoff-generator.mjs: buildHandoff() 4-section output, updateRoadmap() marker-delimited idempotent ROADMAP.md - .archon/workflows/triage.yaml: read-state + produce-handoff prompt nodes - .archon/commands/unic-dlc-triage.md: command file with unic-dlc- prefix - 19 node:test cases passing; biome + typecheck clean Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…e (slice 04) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…rd, prd-gate + prd-writer (slice 06) Adds the first half of the plan workflow DAG: load-context loads CONTEXT.md, CONTEXT-MAP.md, ADRs, and findings.md; specs runs an adversarial interview (interview/assumptions mode) writing ADRs live; to-prd synthesises the transcript into a 7-section PRD.md; prd-gate opens a PR and returns control to specs on rejection. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…h gate (slice 05) Adds lib/spike-verdicts.mjs (appendSpikeVerdicts + parseSpikeVerdicts), extends explore.yaml with prototype/code-preserve-gate/create-spike-ticket nodes, and covers all paths with 7 passing node:test tests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…slice 07) Adds lib/issues-schema.mjs with validateIssue, sortByDependency (Kahn's algorithm, throws on cycles), and buildIssuesJson. Extends plan.yaml with to-issues (PRD decomposition + tracker publish + issues.json) and nyquist-map (test_command / test_command_planned annotation) nodes. 13 passing node:test tests; Biome + typecheck clean. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…g-builder (slice 08) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…e (slice 09) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…te (slice 10) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add /unic-dlc-review command and review.yaml workflow. Single-node DAG covers four aspects (code quality, test coverage, silent failures, type design), posts a sentinel-marked comment via tracker-adapter, and updates in-place on re-run. No runtime dependency on pr-review-toolkit. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…e (slice 12) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…n, run-triage (slice 13) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ode in qa (slices 15+16) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…t, CHANGELOG 0.1.0 (slice 14) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…b modules - Extract IssueType and IssuePriority string literal unions in issues-schema.mjs; dag-builder now re-uses the canonical Issue typedef via import instead of duplicating it - Add TrackerBackend, PrStrategy, BranchingStrategy string literal unions; propagate through tracker-adapter, config-loader, agent-docs-writer, and install.mjs - Add WorkflowPhase literal union in handoff-generator; narrow phase fields on HandoffSnapshot and updateRoadmap param - Add isConfigError() type guard to config-loader for safe union discrimination - Expand three single-line @typedef entries in slopcheck.mjs to proper block-form typedefs (required for tsc resolution of PackageVerdict) - Fix bare catch blocks in setup-explorer.mjs to re-throw non-ENOENT errors rather than silently swallowing them - Add explicit precondition guard in spike-verdicts.appendSpikeVerdicts (throws when findings.md absent) - Update test fixtures in dag-builder and handoff-generator to carry explicit @type annotations so tsc validates the narrower field types All 86 tests pass; pnpm typecheck clean. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…iome/Prettier - lib/agent-docs-writer.mjs: use relative() instead of string replace for CONTEXT-MAP.md path — fixes Windows path separator bug - lib/config-loader.mjs: rename coverage_thresholds → coverage_threshold in KNOWN_FIELDS and add @Property to DlcConfig typedef; plural form was being passed through silently while workflows read the singular key - test/slopcheck.test.mjs: @ts-ignore → @ts-expect-error (Biome CI gate) - README.md + 4 command files: Prettier formatting (CI gate) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PR Review: feat(unic-archon-dlc) v0.1.0Five specialized agents reviewed this PR. 86/86 tests pass throughout. Most findings have been auto-fixed in two commits already on this branch; the ones requiring a design decision or manual action are flagged below. Auto-fixed (already committed)
🔴 CRITICAL — Requires decision before merge1. Slash commands not discoverable by Claude Code All 7 slash commands are under Two options:
2. README documents
🟠 HIGH — Manual fixes needed in docs3. The diagram ends at 4. Only shows 5. README README shows 6. README config reference has three inaccuracies
7. Inline prompt tells the LLM to call 🟡 MEDIUM — Informational, no blockTest coverage gaps (all tests pass, these are missing edge case coverage):
Other medium findings:
Dead code (low priority):
✅ Confirmed working
|
🔍 Comprehensive PR ReviewPR: #36 — feat(unic-archon-dlc): complete plugin — all 16 slices (v0.1.0) Summary
Verdict:
🔴 HIGH Issues (Must Fix Before Merge)H1:
|
| # | Issue | Location | Agent | Suggestion |
|---|---|---|---|---|
| L1 | Unescaped " in CLI command strings |
lib/tracker-adapter.mjs:39-43 |
code-review | Add escapeShellArg(s) helper; apply to title |
| L2 | main().catch() may print undefined |
hooks/install.mjs:171-174 |
error-handling | err instanceof Error ? err.message : String(err) |
| L3 | readOptional() treats EACCES as absent |
lib/setup-explorer.mjs:30-33 |
error-handling | Only suppress ENOENT; rethrow EACCES, EMFILE |
| L4 | agent-docs-writer github-flow/multi-context untested |
lib/agent-docs-writer.mjs:167-221 |
test-coverage | Add test with branching: 'github-flow' + repo_layout: 'multi-context' |
| L5 | config-loader file-not-found path untested |
lib/config-loader.mjs:54-57 |
test-coverage | Pass non-existent path; assert error: true, missing: [] |
| L6 | labels-config ado/jira backends untested |
lib/labels-config.mjs |
test-coverage | Assert all canonical keys present for ado and jira |
| L7 | deducePrStrategy missing @returns + rationale |
hooks/install.mjs:37-40 |
comment-quality | Add @returns {'squash' | 'merge'} + one-line rationale |
| L8 | readOptional missing description |
lib/setup-explorer.mjs:27-33 |
comment-quality | Add: "absent or unreadable → both return present: false" |
✅ What's Good
- Zero runtime dependencies — all 13 lib modules use only
node:APIs. Theauto-formatbar is met. - 86 real-fs tests across 14 files — no mocks, DAMP style, idempotency verified across all file-update utilities.
- Typed error returns —
config-loader.mjsDlcConfig | ConfigErrorunion avoids exceptions for recoverable errors. - Algorithmic annotations — DFS three-colour and Kahn's BFS documented inline with named algorithm references.
- Idempotent file operations —
initFindingsDir,updateRoadmap,updateAgentSkillsBlockall tested with multiple-run assertions. - Workflow YAML quality — 7 well-structured DAGs with explicit
depends_onedges andfresh_context: trueon interactive gates. - Excellent plugin README — Mermaid flowchart, node reference table, config reference, docs-layout table, dependency map.
- CLAUDE.md compliance — 11/11 rules verified.
⚠️ CI Note
The CI failure is not caused by this PR:
@ts-ignoreatapps/claude-code/pr-review/tests/notices.test.mjs:134— pre-existing. Fix: change to@ts-expect-errorin a separate PR ondevelop.- Prettier warnings on
.claude/worktrees/**/*.md— local worktree artifacts, not in this diff. Fix: add.claude/worktrees/to.prettierignore.
📋 Suggested Follow-up Issues
| Title | Priority |
|---|---|
slopcheck: add checkError flag to PackageVerdict for registry failures |
P2 |
tracker-adapter: escape double-quotes in tracker CLI title arguments |
P3 |
setup-explorer: narrow readOptional catch to ENOENT only |
P3 |
agent-docs-writer: add tests for github-flow + multi-context branches |
P3 |
Next Steps
- Fix H1–H7 (required before merge)
- Decide on M1–M7 (fix now, create issue, or skip)
- Merge when ready — the code quality is solid
Reviewed by Archon comprehensive-pr-review workflow
Full artifacts: /Users/oriol.torrent/.archon/workspaces/unic/unic-agents-plugins/artifacts/runs/4c1b7ca61e20c9b7072f8637556e430f/review/
… review Fixes applied: - H3: add 4 missing buildUpdateCommand tests (ado, jira, local-markdown, default) - H4: fix inaccurate JSDoc on updateAgentSkillsBlock — creates CLAUDE.md, does not no-op - H5: add unic-archon-dlc to root README.md plugins table and install commands - H6: add unic-archon-dlc entry and Archon relationship to CONTEXT-MAP.md - H7: create apps/claude-code/unic-archon-dlc/CONTEXT.md with domain vocabulary - M1: replace dead ternary mainBranch with plain const + explanatory comment - M7: add unic-archon-dlc to AGENTS.md workspace layout tree Also fixed: - Remove stale @ts-expect-error in slopcheck.test.mjs (null now accepted by JSDoc type) Notes: - H1 (spike-verdicts ENOENT guard) already fixed in prior commit - H2 (duplicate Issue typedef) already fixed in prior commit Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
⚡ Auto-Fix ReportStatus: COMPLETE ✅ Fixes Applied
What Was Fixed
Tests Added
Bonus Fix
🟠 MEDIUM Issues — Your DecisionThese were left for you to decide: fix now, create issue, or skip.
📋 Suggested Follow-up Issues
Validation✅ Typecheck ( Auto-fixed by Archon comprehensive-pr-review workflow |
…36 - M2: validateIssue now rejects empty strings for mandatory fields (empty id would produce invalid YAML node identifiers like 'code-red-') - M3: exploreProject is no longer async (all I/O is synchronous); remove await at the call site in install.mjs and setup-explorer test - M4: checkArchon branches on ENOENT to distinguish 'binary not found' from other exec failures (corrupt binary, permission error, etc.) - M6: export detectTracker, deducePrStrategy, detectRepoLayout from install.mjs; guard main() with import.meta.url so the file is importable without side-effects; add test/install-helpers.test.mjs (13 cases covering all tracker/strategy/layout branches) M5 tracked as issue: #37 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…est.mjs Fixes pre-existing Biome lint error that was blocking CI on feature/unic-archon-dlc. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Summary
unic-archon-dlcClaude Code plugin (v0.1.0)triage,explore,plan,build,qa,cleanup/unic-dlc-reviewcommand (no dependency on pr-review-toolkit)node:testtests covering all 13 lib modulesWhat was built (slice-by-slice)
Test plan
pnpm test— 86/86 passpnpm typecheck— cleanpnpm verify:changelog— okfresh_context: trueunic-dlc-prefix[ASSUMED]when no registry available🤖 Generated with Claude Code