Parent
Epic: #200 — unic-spec-review plugin: adversarial review of web specifications.
What to build
The first end-to-end tracer bullet for /review-spec. Given a single Confluence page URL, the command classifies the link, fetches that one page over the Atlassian REST API, runs exactly one dimension agent (Gaps/Completeness), prints the resulting Findings conversationally, and writes a durable timestamped markdown report to .spec-review/ (gitignored). The run is strictly read-only.
This slice establishes the plugin's skeleton: argument parsing, link classification, Confluence page read, the report renderer, and vendored credentials — the rails every later slice builds on. It is deliberately one source, one page, one agent: no traversal, no comments, no Figma/live, no posting.
Because this is the first .mjs to land, this slice also restores the plugin's test harness: re-add the test and typecheck scripts and tsconfig.json to package.json, and create the scripts/ and tests/ directories (the scaffold is command-only until now).
Vendor (copy, do not cross-import) atlassian-fetch.mjs and credentials.mjs from unic-pr-review, per ADR-0001 self-containment. For this slice only the Confluence page-read path of atlassian-fetch is needed.
Acceptance criteria
Blocked by
None - can start immediately.
Parent
Epic: #200 — unic-spec-review plugin: adversarial review of web specifications.
What to build
The first end-to-end tracer bullet for
/review-spec. Given a single Confluence page URL, the command classifies the link, fetches that one page over the Atlassian REST API, runs exactly one dimension agent (Gaps/Completeness), prints the resulting Findings conversationally, and writes a durable timestamped markdown report to.spec-review/(gitignored). The run is strictly read-only.This slice establishes the plugin's skeleton: argument parsing, link classification, Confluence page read, the report renderer, and vendored credentials — the rails every later slice builds on. It is deliberately one source, one page, one agent: no traversal, no comments, no Figma/live, no posting.
Because this is the first
.mjsto land, this slice also restores the plugin's test harness: re-add thetestandtypecheckscripts andtsconfig.jsontopackage.json, and create thescripts/andtests/directories (the scaffold is command-only until now).Vendor (copy, do not cross-import)
atlassian-fetch.mjsandcredentials.mjsfromunic-pr-review, per ADR-0001 self-containment. For this slice only the Confluence page-read path ofatlassian-fetchis needed.Acceptance criteria
/review-spec <one Confluence page URL>fetches that page and runs the Gaps/Completeness dimension agent against its content.link-classifierroutes a Confluence URL to the confluence kind and extracts the page id; non-Confluence/unknown URLs are handled gracefully.argsparses/review-specarguments (a pasted URL block today;--postis recognised but inert in this slice).report-rendererwrites a timestamped markdown report under.spec-review/.--posthandling yet).atlassian-fetch.mjsandcredentials.mjsare vendored by copying fromunic-pr-review; nothing is cross-imported from another plugin.package.jsonregainstestandtypecheckscripts andtsconfig.json;scripts/andtests/exist.node:testunit tests cover every pure module in this slice (link-classifier,args,report-renderer, vendoredcredentials, and theatlassian-fetchpage-read path) using injectedfetch/homedir/env; no live services touched. The Gaps agent prompt and the thin command orchestrator are not unit-tested.CHANGELOG.mdbullets under[Unreleased]and bumps the patch version viapnpm --filter unic-spec-review bump patch;verify:changelogpasses. No em dash in authored text (except the mandated CHANGELOG version header).Blocked by
None - can start immediately.