Conversation
Adds the unic-spec-review plugin: an adversarial reviewer for web specifications across Confluence (pages + comments), Figma (Dev Mode MCP), the live system (Playwright MCP), and the local repo. Findings are Confidence-scored and Six-Hats-tagged; an Approval Loop posts selected Findings back to Confluence. Scaffold only (command-only package.json, command stubs) plus the design artifacts; command/agent logic is pending the PRD. Why now: the design was fully grilled and locked, so the decisions are captured before implementation drifts from them. Includes: - Plugin manifests + root marketplace registry entry - /review-spec, /spec-doctor, /setup-confluence command stubs - PRD (docs/issues/unic-spec-review) published as issue #200 - ADRs 0001-0004: vendoring/self-containment, similarity dedup, Six-Hats lens, inline-anchored comments - CONTEXT.md domain vocabulary; CONTEXT-MAP.md + app:unic-spec-review area label documented Self-containment is a hard requirement: the plugin vendors shared Atlassian code (copy, not cross-import) and ships its own setup command, so it is usable installed alone. See ADR-0001 and root ADR-0025. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The command stubs and the AGENTS.md design heading said "pending PRD", but the PRD (#200) is written. Reword to "pending implementation" and link the PRD, so the stubs reflect that behaviour is defined and only the command body awaits its implementation slice. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
The new plugin was invisible to CI: it was absent from the paths-filter, the changes-detection outputs, the test job's gating condition, the test matrix, and release.yml's tag list. As a result its tests would never run once they exist, verify:changelog would never run on its PRs, and the release workflow would never auto-tag unic-spec-review@<version>. Add unic-spec-review to all five places. While the plugin is command-only the test/typecheck steps no-op via --if-present; verify:changelog runs now. Why: onboarding a new plugin must wire it into CI/release, or coverage and auto-tagging silently skip it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the ` — ` separators in the Shared vocabulary and Plugin contexts lists with colons, per the org typography rule (no em dash). Supersedes the convention-matching em dash added in b831cb8: the list is now both org-compliant and internally consistent. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The diff-based verify:changelog gate requires a CHANGELOG entry matching plugin.json's version (0.1.0) when guarded plugin paths change; the Unreleased-only scaffold failed CI. Add the 0.1.0 section. The version header uses an em-dash date (`## [0.1.0] — 2026-06-05`) because the release tooling mandates it: bump-version generates that exact format and verify-changelog enforces ` — YYYY-MM-DD` on every versioned header. This is the one tooling-required em dash; all prose stays em-dash-free. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Record that CHANGELOG version headers must keep the `## [X.Y.Z] — YYYY-MM-DD` format: pnpm bump generates it and verify:changelog enforces ` — YYYY-MM-DD` on every versioned header. Prevents a well-meaning reformat of the separator from breaking CI and the release flow. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The Workspace layout tree in AGENTS.md listed only five plugins; add unic-spec-review so the layout matches apps/claude-code/. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(unic-spec-review): scaffold plugin with PRD and ADRs
…age, Gaps agent, report) Wire the first end-to-end /review-spec path so a real Confluence review can run and serve as the foundation for later slices. The plugin was scaffold-only with stub commands and no test harness. Changes: - Vendor atlassian-fetch.mjs and credentials.mjs from unic-pr-review (ADR-0001 self-containment); only the missing-creds plugin name is changed - Add pure modules: args (URL + --post parsing), link-classifier (URL routing + page id extraction), report-renderer (timestamped .spec-review/ report) - Add gaps-agent (Gaps/Completeness dimension agent prompt) - Implement /review-spec S1 orchestration and register the agent in plugin.json - Restore the test harness: test/typecheck scripts, tsconfig.json, scripts/ and tests/ dirs; node:test unit tests cover every pure module with injected deps Fixes #202 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…(Windows compat)
path.split('/') is not cross-platform; Windows paths use backslash, so the
full path was returned unchanged, failing the regex assertion on Windows CI.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Docs (H1, L1, L9, L10): - AGENTS.md: update status banner to S1-implemented; add pnpm test/typecheck to Commands - CONTEXT.md: update status banner to S1-implemented - README.md: replace scaffolding note with S1-available message Error handling (M2, M3): - report-renderer.mjs: add shape validation (findings, timestamp) after JSON.parse - report-renderer.mjs: wrap renderReport call in try/catch for FS errors (EPERM/ENOSPC) Shell-quoting (M1): - review-spec.md: use Write tool + argv[2] file-path approach for Step 6 - report-renderer.mjs: accept optional file path as process.argv[2] to avoid single-quote shell issues with apostrophes in page titles Tests (M4, M5, M6, L6, L7): - atlassian-fetch.test.mjs: add 403 auth-error test - atlassian-fetch.test.mjs: add unsupported URL collectIntent test - atlassian-fetch.test.mjs: add malformed creds collectIntent test - report-renderer.test.mjs: add anchor quote-block rendering test - link-classifier.test.mjs: add bare figma.com (no www) test Comments (M7, L4, L8): - atlassian-fetch.mjs: update module docstring from unic-pr-review domain vocabulary to spec-review context - atlassian-fetch.mjs: replace "Intent Checker / ADR-0004" with "Gaps agent / /review-spec command" in 3 inline comments - atlassian-fetch.mjs: add note that Jira exports are untested in this plugin Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… URL parse pattern Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…m PRD The org-level no-em-dash typography rule was removed, so the PRD line citing it as a constraint on generated outputs is now stale. The CHANGELOG em-dash format remains documented in AGENTS.md as a CI requirement, independent of the org rule. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…elds Filter arg parsing and link classification to http(s) only so ftp/file/mailto tokens are dropped, and guard pageTitle/pageUrl in the report-renderer CLI entry so missing values no longer render as literal undefined. Adds node:test coverage for each path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…urface fetch errors Write scratch report JSON into gitignored .spec-review/ instead of the POSIX-only /tmp path (breaks on Windows CI), and surface the structured errors[].kind/message from the fetch script so the real failure cause is shown. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ove em dashes Drop the render-summary.mjs, doctor.mjs, and inaccurate ADR-0001 citations from code comments, reword the CONTEXT.md status line so it no longer promises an unused (S1) per-term marking, and replace em dashes with hyphens in authored comments and messages per the org typography rule. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Close coverage gaps flagged in PR #210 review: env-over-file credential precedence and the 800-char Confluence excerpt cap. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Biome organizeImports ordering for node:test before node:url. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…w-202-skeleton-tracer-bulle feat(unic-spec-review): skeleton tracer bullet (classify URL, fetch page, Gaps agent, report)
…fluence, /spec-doctor) The plugin had no way to set up credentials or verify prerequisites: both command stubs were unimplemented and the script layer was absent. A user who installed only unic-spec-review could not configure Confluence or preflight a review without first installing another plugin. Changes: - Add parseArgs to scripts/lib/args.mjs (CLI parser for the setup wizard) - Vendor scripts/setup-confluence.mjs by copying from unic-pr-review (no cross-import) - Add scripts/spec-doctor.mjs: Confluence credential + connectivity preflight (injectable deps) - Replace commands/setup-confluence.md stub with the full interactive wizard - Replace commands/spec-doctor.md stub with the orchestrator (script + Figma/Playwright MCP checks; absent MCPs are loud explicit failures with remediation) - Add unit tests for the wizard and the Confluence preflight logic; no live services - Add CHANGELOG bullets under [Unreleased] Refs #203 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Add parseArgs test suite (7 cases) to args.test.mjs — covers all four
behavioural branches including boolean flags and throw-on-missing-value
- Add runSpecDoctorCredentials HTTP-error test (401 via pingHttp)
- Remove dead CheckResult.skipped typedef property and formatLine skipped
branch (YAGNI — nothing sets skipped: true in current code)
- Fix setup-confluence.mjs top-level catch to include err?.stack for
better debugging parity with spec-doctor.mjs
- Fix process.env.HOME → require('os').homedir() in setup-confluence.md
inline snippet for Windows-native portability
- Broaden args.mjs module description to cover both exported parsers
Tests: 101 pass / 0 fail (was 93)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Issue #203's acceptance criterion forbids em dashes in authored text (except the mandated CHANGELOG version header). Copilot flagged the user-facing strings; this sweeps the rest too - JSDoc comments, command docs, spec-doctor/setup-confluence output, and test descriptions - so the whole slice complies. Replaced every " — " separator with " - ". The prior CHANGELOG note cited a now-removed org typography rule; reworded to ground the change in this slice's own acceptance criterion. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Drop stale `:setup-jira` reference in writeConfluenceCreds JSDoc; that command exists in unic-pr-review (the vendoring source) but not in this plugin. Behavior unchanged. - Add tests for two untested in-scope pure-logic branches: isEnvConfigured rejecting a present-but-empty env var, and checkConfluence's raw-string fallback when the configured url is unparseable. Why: review surfaced a misleading vendored comment and two uncovered branches in the pure logic the slice's acceptance criteria require tested. No Critical/High findings; remaining suggestions are sub-threshold. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…mendment + PRD elevation) Amend ADR-0008 to permit Y-det hybrid content-gated spawning for the comment, errors, and types semantic gates (while keeping path classification as the fast path). Records the bias-toward-spawn rationale and flags the errors gate as the first Y-llm-promotion candidate. Realigns PRD §Testing to explicitly name the three content-aware gates and elevates the toolkit relationship from "loosely inspired" to a documented behavioural-parity contract for code-analysis aspects, preserving the clean-slate doctrine. Resolves the three-way contradiction between PRD :203, ADR-0008, and the path-only implementation. Closes #212. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…w-203-setup-confluence-spec feat(unic-spec-review): self-contained auth and preflight (/setup-confluence, /spec-doctor)
…st-pass model Remove code-simplifier from the Phase 1 parallel fan-out and run it as a Phase 2 post-pass only when Phase 1 yields no Critical/Important findings and ≥3 non-test source files changed (ADR-0013). Exports shouldRunPhase2() from changed-file-analyser.mjs so the gate is unit-testable; adds 12 new tests covering the three canonical AC scenarios plus edge cases. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ch (PR #5612) Add tests/dedupe-ordering-regression.test.mjs as a parity/quality-regression guard. The fixture encodes the unconditional ref/state reset placed before an early-return guard pattern from AnalyticsTracker.tsx in PR #5612. Assertions verify the pattern ordering and that a reference finding at confidence 70 (Minor band, 60-79 per ADR-0002) validates correctly via parseFinding. unic-pr-review correctly surfaced this at Minor severity; pr-review v1.4.0 missed it (false negative). This fixture prevents that quality win from silently regressing as the plugin evolves. Closes #218 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…227-fix-post-oneliner-and-s fix(unic-pr-review): correct --post one-liner env form, extract tested cleanup helpers, fix state-dir ownership
- Split SKIP_CLEAN_POSTS branch so approved skip/flag overrides bypass the run-level gate (code-review MEDIUM: prose guarantee was violated) - Mark ADR-0005 implemented in docs/adr/README.md (docs-impact MEDIUM) - Fix badge table spacing: `'post'` AND `COMPARISON_INCOMPLETE` (LOW) - Extend 10b fallback to cover exit-0 with absent results key (LOW) - Wrap runDedupCli spawnSync in try/finally + rmSync cleanup (LOW) - Strengthen error-JSON assertion to JSON.parse + typeof check (LOW) - Add symmetric test for --comments-file missing (LOW) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…n CLI error tests The dedup-matcher CLI validates both --findings-file and --comments-file flags before attempting to read any file; a dummy path triggers the Usage error without needing real file content. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… (no silently dropped Findings) A --post run that partially fails left a surviving Approval Loop state directory (ADR-0014), but a re-run routed to re-review (a prior Iteration Marker exists), where an unchanged HEAD yields an empty delta diff, zero Findings, and the Approval Loop is skipped — so every Finding that failed to post was silently dropped. The Step 1.12 warning promised a retry that was never implemented. Implements the locked Write Retry design (ADR-0015): - scripts/lib/write-outcomes.mjs — tested helper with checkWriteRetry (none/retry/stale classification + staleness guard), recordOutcomes (persist per-Finding postedMap + sticky summaryPosted, atomic write, before the success-gated cleanup), and filterUnposted (first-attempt no-op, retry subtracts posted-ok). Exposed via a real-script CLI dispatcher (env-before-node, no inline-eval ESM import of an absolute path) so it works on Windows. - tests/write-outcomes.test.mjs — node:test coverage of all three exports incl. the stale-HEAD discard path and first-attempt no-op. - commands/review-pr.md — Step 1.2a Write Retry check (short-circuits the Fetcher/mode-detection/fan-out and resumes the Approval Loop at the same Iteration), Step 1.11 deltas, Step 1.12 Writer input + Step 1.12a persist, and a rewritten Step 1.12 warning incl. cross-machine and HEAD-moved caveats. - agents/ado-writer.md — first-review input accepts summaryAlreadyPosted; Step 3 skips when true. No other Writer behaviour changes. Fixes #236 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- review-spec.md 10c: rewrite the empty dedup-badge bullet as "(no badge)"
with spaced operators; the old leading empty code span rendered ambiguously
and fought Prettier normalisation.
- dedup-matcher.mjs: comment why the CLI envelope's `truncated === true` is a
deliberate soft default (Step 10a is the authoritative COMPARISON_INCOMPLETE
source), so a future envelope consumer is not misled.
- dedup-matcher.test.mjs: cover the realistic `{ comments }`-without-`truncated`
object shape (gating path), closing the gap between explicit true/false and
the bare-array legacy case.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…w-238-gate-dedup-incomplete feat(unic-spec-review): gate dedup posts when comparison is incomplete
- `filter` subcommand: use atomic tmp+rename write for APPROVED_FILE
(prevents corruption on partial write / disk-full)
- `filter` subcommand: wrap APPROVED_FILE read in try-catch with clean error
- `record` subcommand: wrap recordOutcomes() call in try-catch with clean error
- review-pr.md: `CURRENT_ITERATION = WRITE_RETRY_STATE.iteration ?? 1` fallback
(defensive against older state files missing the iteration field)
- write-outcomes.mjs: fix two JSDoc inaccuracies ("usage message" → "error message",
"without touching" → "without mocking" the module system)
- README.md: update "without any local state" claim to acknowledge Write Retry
state directory (ADR-0015)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
A --post retry where the Review Summary failed in the prior attempt could
silently drop it (all inline Threads already posted → pruned approved set is
empty → Writer's zero-Findings short-circuit skips Step 3) or render it from
the reduced re-post subset (some inline failed → incomplete Summary). Both
violate ADR-0015 AC#1 ("posts the Summary only if it didn't already land").
Why: a single approvedPath fed both the inline Threads (Step 2) and the
Summary (Step 3a), so pruning it for inline dedup corrupted the Summary.
Fix: stop pruning the approved set. The orchestrator now keeps APPROVED_FILE
full and passes the Writer an alreadyPostedFindingIds inline-skip list; the
Writer skips those inline Threads but still renders the Summary from every
approved Finding. Replaces filterUnposted/the `filter` subcommand with
postedFindingIds/`posted-ids`. Amends ADR-0015 decision #4 accordingly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…reactive fallback Pin the posting body representation to Confluence storage format (converting the agent-authored Markdown) and complete the "never dropped" guarantee with a reactive footer fallback when Confluence rejects an inline anchor. Foundation contract for #231 (rendering) and #232 (fallback), specced via grill-with-docs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ent re-review Three review follow-ups on the Write Retry path: - checkWriteRetry now returns `corrupt` (not `none`) when a state directory survived but its state.json is unreadable/invalid. A surviving dir means the prior --post did not complete, so treating it as "no prior attempt" silently re-entered the empty-delta re-review path that drops Findings (#236). The orchestrator prints a Notice and runs a normal review, symmetric with `stale`. - recordOutcomes throws a clear TypeError on a non-array inlineResults so a malformed Writer result reports its real cause, not a generic persistence miss. - Step 1.12 HEAD-moved caveat: a discarded stale state runs a normal review (re-review only if a prior comment already carried the Iteration Marker), not always a re-review. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…236-write-retry-partial-ite fix(unic-pr-review): Write Retry completes a partial --post Iteration (no silently dropped Findings)
…, not wiki Add a vendored, dependency-free md-to-storage converter (bold/italic, inline code, links, bullet/ordered lists, fenced code blocks via ac:structured-macro; unrecognised constructs degrade to HTML-escaped literal text, never malformed XHTML). Build the comment body piecewise: only finding.body goes through the converter; the title line and attribution footer are emitted as storage fragments with escaped interpolated values so recognizeFooter() keeps matching. Switch postConfluenceComment from representation:'wiki' to 'storage'. Adds table-driven node:test coverage (per-construct, HTML-injection safety, degrade, footer round-trip) plus a representation guard in atlassian-fetch.test.mjs. Resolves #231. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bump plugin version to 0.1.10 (guarded-file change required by the issue) and apply Biome organize-imports + formatting to the md-to-storage converter test and confluence-writer, which were committed unformatted and failed the root CI check. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fixed: - Balanced-paren scan for link URLs with nested parentheses (L1) - CRLF normalization at top of mdToStorage for Windows compatibility (M1) - escapeHtml(String(finding.confidence)) for consistency (L4) - finding.body null/undefined guard at CLI boundary (L5) - withFooter JSDoc noting reactive wiki fallback (#232) intent (L3) - findInlineEnd JSDoc: success return + from param description + known limitation note (L2, L7) - ADR README: ADR-0004 status line now names md-to-storage.mjs (L8) - AGENTS.md: write-path status lists Markdown-to-storage conversion (L9) Tests added: - Bold inside bullet list item (H1) - Inline code inside ordered list item (H1) - CRLF line endings (M1) - Empty string inputs for escapeHtml, convertInline, mdToStorage (L6) - Parenthesised URL (link balanced-paren scan) (L1) - Word-internal underscore known limitation (H2) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…w-231-markdown-to-storage-r feat(unic-spec-review): post Finding body as Confluence storage XHTML, not wiki
…ifier + Write Retry The mermaid was stale after the toolkit-parity rollout: - code-simplifier moved out of the Step 7 parallel fan-out into a conditional Phase 2 post-pass gate (ADR-0013) — runs after Phase 1, before the re-review Coordinator, only when 0 Critical/Important findings AND >=3 source files. - type-design-analyzer label now reflects its content gate (type files OR type-level changes, #215). - Added the Write Retry branch (ADR-0015): a --post re-run with surviving local state and matching HEAD resumes saved Approval state and re-posts only the failed Findings/Summary. Prose was already accurate; diagram only. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ts an inline anchor
When our resolver counts a unique anchor match but Confluence's stored-body
model disagrees, Confluence rejects the inline POST with HTTP 400 and the
Finding was posted nowhere — breaking the ADR-0004 "never dropped" guarantee
with a raw API error. The writer now retries rejected inline anchors as a
page-level footer comment, while auth/not-found/network errors still fail loud.
Changes:
- atlassian-fetch: add FetchError kind 'rejected' for HTTP 400 (server reachable,
refused our selection); 401/403→auth-error, 404→not-found, 5xx/network→unreachable
unchanged. Update FetchErrorKind typedef + doc comment.
- confluence-writer: extract injectable postFinding({pageId,finding,creds,fetch})
returning {id,type,reason}; retry footer only on kind:'rejected'; main() is a
thin argv/file/exit wrapper.
- review-spec: third anchoring line for reason 'inline-rejected'.
- tests: HTTP-400→rejected + full classification map in atlassian-fetch.test.mjs;
new confluence-writer.test.mjs (inline-400→footer, inline-401/network→fail loud
no footer call, footer-500→fail loud, resolver-footer→footer only).
Fixes #232
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… ci) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Add FindingInput typedef to postFinding (replaces `any`) - Update PostFindingResult.id doc: note empty-string sentinel - Add happy-path inline-success test (type:inline reason:null) - Note removal of `created` field from CLI stdout in CHANGELOG Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…e repetition Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Improvements distilled from the unic-spec-review rollout: - Monitor keys completion on watched run IDs (was a global active count that lingered between serial slices and stalled on unrelated rollouts); fires [done] only after a run goes active->absent. - Dispatch prompt gains verification discipline: re-run typecheck AND test after every edit (CI runs test then typecheck); fix JSDoc on param rename; don't report done unless gh pr checks is green. - Standing rule: verify CI on GitHub, not the workflow's summary/exit code (both proved unreliable - false green and false failure observed). - New monitor signals (LIMIT, VERIFY-SKIP) and a clean re-run runbook for usage-limit deaths and verify-pr-base cascade-skips. - Note workspace path casing check (UNIC vs unic). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…w-232-reactive-footer-fallb fix(unic-spec-review): reactive footer fallback when Confluence rejects an inline anchor
… unic-pr-review The README still advertised Figma/live-system as deferred and lacked prerequisites/commands/credentials sections. Rewrite it to reflect the completed rollout (eleven-agent fan-out, fail-loud MCP checks, traversal, storage-XHTML posting, reactive footer fallback, dedup incompleteness gate) and mirror the unic-pr-review README structure: Prerequisites, Installation, Quick start, How it works (mermaid of the real review-spec flow), Commands, Credential file, env overrides, Version history. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Generated via /team-onboarding from 30-day usage, then hand-tuned: refreshed work-type/skill stats, checklist updated for the shipped unic-pr-review and unic-spec-review plugins plus optional Figma/Playwright MCPs, and Team Tips + Get Started filled in (Gitflow, verification loop, scripted versioning, spec-first flow, trust-CI-not-self-report). Shareable at the onboard link. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.