Feat/doc parity plugin - #193
Conversation
Evals against this repo were looked into, but it lacks the interconnected structure needed to exercise the skill well. The only viable alternative to an external reference is to commit a codebase here explicitly for the purpose of evaluation, which is overkill for now and well duplicated by specifying a commit hash to reference.
currency -> parity is more common language
Claude Configuration Validation — PR #193New plugin Result: PASS with findings. No secrets, no malformed component definitions, and the hooks behave as documented when exercised end-to-end. One finding will fail CI as-is; four more are correctness/accuracy issues worth fixing before merge.
Checks run: plugin-validator agent (structure, manifest, hooks, marketplace/version consistency), skill-reviewer agent (SKILL.md frontmatter, description, progressive disclosure), Major (errors — should be fixed before merge)M1. cspell fails on the eval baseline —
|
🤖 Bitwarden Claude Code ReviewOverall Assessment: APPROVE Re-reviewed Code Review Details
One earlier thread on |
| description: Use this skill whenever the user mentions doc drift, documentation verification, README or docs/ updates that follow a code change, or a doc-parity Stop hook block — even if the request does not name a skill or documentation explicitly. Also use as the documentation pass of a pull request review. Verifies or updates documentation at every documented ancestor scope of a code change; in review context, also discovers out-of-repo documentation the change invalidates. Triggered by phrasings such as "verify doc parity", "are my docs up to date", "did I miss any doc updates", "what documentation should this change touch", "do I need to update any docs for my current changes", or "check if the docs still match the code". | ||
| agent: general-purpose | ||
| context: fork | ||
| allowed-tools: WebFetch(domain:contributing.bitwarden.com), WebFetch(domain:contributing-docs.bitwarden.com) |
There was a problem hiding this comment.
❓ QUESTION: allowed-tools lists only WebFetch — does the forked skill still get the tools its workflow needs?
Details
The workflow requires git diff HEAD / git ls-files (Step 1), directory walking and doc reads (Step 2), and doc edits (Step 3), but allowed-tools names only two WebFetch domains. Every other skill in this repo enumerates everything it uses, e.g.:
plugins/bitwarden-code-review/skills/performing-multi-agent-code-review/SKILL.md:Bash(git diff:*), Read, Write, Grep, Glob, ...plugins/claude-config-validator/skills/reviewing-claude-config/SKILL.md:Read, Grep, Glob
If allowed-tools restricts the tool set for the forked general-purpose agent, the skill cannot assemble the change or apply the Update outcome — and a skill-creator benchmark harness would not necessarily surface that. Was this exercised in a real session (hook block → skill run → doc edit), or is allowed-tools purely additive permission granting here?
b613324 to
feb01ac
Compare
| # Documented ancestor scopes of a file, strictly below the repo root. | ||
| # Match README case-insensitively; CLAUDE.md and docs/ are the other markers, | ||
| # aligning with SKILL.md's scope definition. | ||
| documented_ancestors() { | ||
| local dir | ||
| dir=$(dirname "$1") | ||
| while [[ "$dir" != "." && "$dir" != "/" ]]; do | ||
| if compgen -G "$REPO_ROOT/$dir/[Rr][Ee][Aa][Dd][Mm][Ee].md" >/dev/null 2>&1 \ | ||
| || [[ -f "$REPO_ROOT/$dir/CLAUDE.md" || -d "$REPO_ROOT/$dir/docs" ]]; then |
There was a problem hiding this comment.
♻️ DEBT: The tripwire now arms on CLAUDE.md, but the skill it hands off to does not treat that as a documented scope.
Details and fix
The comment on line 113-114 says CLAUDE.md aligns "with SKILL.md's scope definition", but SKILL.md:31 defines a documented scope as a directory containing "a README.md, a docs/ directory, or diagram sources" — CLAUDE.md appears nowhere in SKILL.md (or in the plugin README.md).
Consequence for a directory that carries a CLAUDE.md but no README.md/docs/ (common for component-level agent guidance in monorepos): the hook blocks and names that directory under "Documented scopes involved", then Step 2 of the skill does not enumerate it, so Step 4's per-scope report cannot attest to the scope the block called out. The developer gets a gate with nothing to answer.
The reverse gap exists too: SKILL.md counts bare diagram sources as a documented scope, while documented_ancestors only recognizes README/CLAUDE.md/docs/.
Pick one definition and use it in both places — either add CLAUDE.md to SKILL.md:31, or drop it from line 120. Either way, the file-header trigger rule on lines 7-8 ("contains a README.md or a docs/ directory") is now stale and should match.
|
|
||
| The same skill logic run as a PR reviewer through the consuming repository's ai-review workflow, covering human-authored changes that no in-session layer sees. This layer also owns out-of-repo discovery. Search terms are derived from the diff and used to search contributing-docs for references that need to be addressed. The callout triggers the standard's external-docs flow: a work item before merge and a stale marker on the page. | ||
|
|
||
| This layer is inert until the review pipeline invokes `verifying-doc-parity`. When installed alongside `bitwarden-code-review` (from 1.14.0), the reviewer agent's Cross-Plugin Enrichment picks the skill up automatically. If the consuming repository uses a different review workflow, wire the skill into that workflow's documentation pass. |
There was a problem hiding this comment.
♻️ DEBT: This documents automatic reviewer pickup against a bitwarden-code-review version that does not exist yet.
Details and fix
bitwarden-code-review is at 1.13.1 in .claude-plugin/marketplace.json (this PR does not change it), and nothing in plugins/bitwarden-code-review/ references verifying-doc-parity — its Cross-Plugin Enrichment section enumerates specific skills by name, so there is no generic pickup path.
The PR description confirms the wiring is a planned follow-up, but the sentence reads as present tense for anyone installing today: "(from 1.14.0), the reviewer agent's Cross-Plugin Enrichment picks the skill up automatically." A reader installing both plugins now would assume Layer 4 is live and get no review coverage.
Either land the enrichment entry (plus version bump) in this PR, or mark the integration as planned, e.g. "Automatic pickup by the bitwarden-code-review reviewer agent is planned; until then, wire the skill into your review workflow's documentation pass."
📔 Objective
Introduces the bitwarden-doc-parity plugin: a SessionStart instruction fragment, a Stop-hook tripwire for stale in-repo docs, the verifying-doc-parity skill for per-scope update-or-attest verification, and a review-context face for out-of-repo discovery. Design notes in plugins/bitwarden-doc-parity/README.md.
Evals provided with 10 cases, 3 iterations per case per configuration ~99% ± 5% with skill vs 81% ± 26% without. These pin bitwarden/server to d6c84a7562; see evals/README.md for rationale.
We will need a campaign to install this plugin on development machines as well as a follow up to enable this plugin as a feature of our review agent.