[US-321] feat: wire setup-pm to Azure DevOps end to end - #481
Conversation
…adapter-enrollment conformance test - setup-pm `## Notes` no longer contradicts its own Step 2 table: the supported-tools line names every adapter shipped (GitHub Projects, Filesystem, Azure DevOps, Linear) - `$tool` accepts the canonical tool tokens BY REFERENCE — the alias table in way-of-working-pm-resolution.md gains `linear` + `filesystem` rows and is named the single source, so no token list is duplicated into the skill - Step 3's Azure walkthrough routes through the adapter's Detection and HALT Behavior (`az` -> extension -> session) BEFORE any configuration write; the skill still never installs or authenticates on its own - Step 4 writes what the adapter reads back (team + area path, the `--area` every create passes), a `## State Mapping` built from real work item states — never a board column — and REPORTS an unresolvable field instead of silently omitting it - Azure adapter `### Adoption Configuration` and its website twin both declare Team + Area path - New guard `packages/knowledge-hub/src/conformance/setup-pm.test.ts`: data-driven over the adapters discovered on disk in BOTH corpora, display name read from each adapter's pinned H1, no adapter count asserted — a 5th adapter reddens the gate until enrolled. Every assertion injection-tested; the sweep caught two vacuous ones (AC-4/AC-6 matched prose elsewhere in Step 4) and they are now scoped per act-step. - Mirrors re-synced with the real `pair update` transform in this commit Refs: #321
Verdict
PR: [#481] · Reviewer: independent review agent · Date: 2026-09-09 · Story: [US-321] · Type: feature Classification matrix — per dimension
Tier = max(assessed). Review value is a floor (D17): confirmed at Declared review set (risk:green): general pass — AssessmentsSecurity — Input validation / Output handling / Authentication / Authorization / Introduced vulnerabilitiesVerdict: not assessed — CostVerdict: Architecture (Coupling)Verdict: not assessed — Bug fix — Red test before fixVerdict: not applicable — not a bug fix. The PR is a feature/docs wiring story; the RED-first conformance guard is nonetheless present and was verified to redden (see Positive feedback). DetailsFindings by severityCritical (must fix before merge) None. Major (must fix before merge)
Minor (must fix before merge — same bar as Major, just lower impact) None. Questions (informational, never blocking)
Positive feedback
Functionality & requirements (AC coverage)
|
…typed refusals are answers, handoffs in the main checkout Canary run 1 (story #321, PR #481, runId canary-479): fases 0/A/B/C and the planner worked; the RED author refused group r1-g1 as `split-required` — a guard-strength finding (positional-blind assertion) with production already correct has no RED against unfixed production — and the engine re-dispatched the identical prompt once before ending the card as failed-red-contract (8 agents). - Third group mode `test`: allowedPaths [], RED proven against an injected regression, no GREEN, P3 verifies the sealed head; red-snapshot.mjs treats any production change under a test scope as `test-mode-production-change` (script test added; both copies synced). - A typed refusal (`stale`, `split-required`; planner `stale`) is routed by status and never retried with the same prompt; the result carries `redRefusal` and `splitReason`. - Handoff directory rule: `.pair/working/runs/<run>/<story>/` in the MAIN checkout the coordinator was started in, never a story/review worktree (the review's detached worktree took its handoff with it) — stated in every skill's $run row and in the dispatch text. ADR-024 amended (§8–10); batch-engine.mdx and the remediation-plan description updated. Tests: 382 workflow (+2 coordinator, +1 script), 4905 knowledge-hub, 177 website. Refs: #479 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
PR Information
PR Title: [US-321] feat: wire setup-pm to Azure DevOps end to end
Story/Epic: #321 — standalone follow-up of #235 / PR #317
Type: Feature
Priority: Medium
Labels: documentation, user story, risk:green
Summary
What Changed
/pair-capability-setup-pmnow presents, accepts and fully configures Azure DevOps: Notes names all 4 shipped adapters,$toolresolves by-reference against the canonical token table, Step 3 routes through the adapter's Detection/HALT before any write, Step 4 writes team + area path and derives## State Mappingfrom real work item states, and the Azure adapter snippet + website doc both declare Team + Area path (byte-identical). Guarded by a new data-driven conformance test (packages/knowledge-hub/src/conformance/setup-pm.test.ts) so a future 5th adapter cannot land unenrolled.Why This Change
#235 shipped the Azure DevOps KB guidelines but never wired them into
/pair-capability-setup-pm's config flow — the adapter existed but the skill couldn't drive it end to end.Story Context
User Story: Wire setup-pm to Azure DevOps (KB guidelines shipped in #235, config flow not wired)
Acceptance Criteria: AC-1 through AC-8, all covered — RED-first (34 cases, 12 failing before content edits), then GREEN per AC, see task list below.
Changes Made
Implementation Details
packages/knowledge-hub/src/conformance/setup-pm.test.ts)$toolpoints at canonical token table; edge cases add invalid-token fall-through + inherited-process caveat## State Mappingfrom real states, reports unresolvable fields instead of omitting### Adoption Configuration+apps/website/content/docs/pm-tools/azure-devops.mdx§ Configuration declare Team + Area path, byte-identicallinear+filesystemrowspair updatetransformFiles Changed
.claude/skills/pair-capability-setup-pm/SKILL.md,.pair/knowledge/guidelines/collaboration/project-management-tool/azure-devops-implementation.md,.pair/knowledge/guidelines/technical-standards/ai-development/skill-conventions/way-of-working-pm-resolution.md,apps/website/content/docs/pm-tools/azure-devops.mdx, mirrored dataset copies underpackages/knowledge-hub/dataset/packages/knowledge-hub/src/conformance/setup-pm.test.tsTesting
Test Results
Testing Strategy
Reviewer Notes (deviations from story wording)
pnpm skills:conformanceruns"; the guard actually lives in the vitest conformance corpus (packages/knowledge-hub/src/conformance/, run bypnpm test), matching where the existing ADL (2026-07-18-conformance-test-per-file-not-per-story.md) and the siblingpm-tool-adapter-contract.test.tsput artifact guards. Bothpnpm testandpnpm skills:conformancerun insidepnpm quality-gate, so the enforcement AC-7 asks for holds.# <Name> - Complete Implementation Guide); no adapter count is asserted — a 5th adapter reddens the guard by design, not by an updated count.pair updateside effects reverted. The transform also rewrote skill references in four unrelated.pair/adoption/**files (pre-existing drift, e.g./loop→/pair-loop); reverted to keep this diff scoped. Real, separate drift — worth its own issue.Dependencies & Related Work
Related PRs