Skip to content

Add bitwarden-test-toolkit plugin with assessing-test-coverage skill#169

Open
nthompson-bitwarden wants to merge 9 commits into
mainfrom
test-engineer-plugin-current-coverage
Open

Add bitwarden-test-toolkit plugin with assessing-test-coverage skill#169
nthompson-bitwarden wants to merge 9 commits into
mainfrom
test-engineer-plugin-current-coverage

Conversation

@nthompson-bitwarden

Copy link
Copy Markdown

🎟️ Tracking

https://bitwarden.atlassian.net/browse/QA-1983

📔 Objective

Add the bitwarden-test-toolkit plugin to the marketplace, providing an assessing-test-coverage skill that analyzes a repository's existing test stack and reports coverage gaps — with supporting references and evals, plus the required marketplace registration and dictionary/README updates.

@nthompson-bitwarden
nthompson-bitwarden requested a review from a team as a code owner July 22, 2026 16:05
@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown

Plugin Validation Summary — bitwarden-test-toolkit

Result: ✅ PASS — all three validation passes (plugin structure, skill review, security) completed with zero errors. Only two minor documentation warnings were found; neither blocks acceptance.

Validated the following changed files:

  • plugins/bitwarden-test-toolkit/.claude-plugin/plugin.json
  • plugins/bitwarden-test-toolkit/CHANGELOG.md
  • plugins/bitwarden-test-toolkit/README.md
  • plugins/bitwarden-test-toolkit/skills/assessing-test-coverage/SKILL.md
  • plugins/bitwarden-test-toolkit/skills/assessing-test-coverage/evals/{README.md, baseline.json, run_real_eval.py, trigger-eval.json}

1. Plugin Validation (plugin-validator) — ✅ PASS

Check Result
plugin.json manifest (name, version, required fields, semver) ✅ Valid JSON; kebab-case name; 1.0.0 valid semver; well-formed author/homepage/repository/keywords
Version consistency (plugin.json ↔ marketplace.json ↔ CHANGELOG.md) 1.0.0 agrees across all three
name/description consistency (plugin.json ↔ marketplace.json) ✅ Identical
marketplace.json source path resolves ./plugins/bitwarden-test-toolkit
Directory structure / auto-discovery ✅ Standard layout; skill under skills/<name>/SKILL.md
Skill frontmatter (name, description, argument-hint, allowed-tools) ✅ Valid; name matches directory
File organization (README present, no stray files) ✅ Comprehensive README; eval assets cleanly namespaced under evals/
CHANGELOG format (Keep a Changelog) ✅ Single Added section for initial release
Cross-plugin dependency (bitwarden-atlassian-tools) ✅ Exists in marketplace
Hardcoded credentials ✅ None

No commands, agents, hooks, or MCP servers are present (none required for this plugin).


2. Skill Review (skill-reviewer) — ✅ PASS

Skill: skills/assessing-test-coverage/SKILL.md

Check Result
YAML frontmatter (required name, description) ✅ Valid; delimited correctly
Description quality ✅ Excellent — third-person "Use when…", concrete quoted trigger phrases, explicit negative-scope clause ("Do NOT use it to…") disambiguating from sibling test skills
Writing style ✅ Consistently imperative/infinitive
Word count ⚠️ ~446 words (below 1,000–3,000 target) — appropriate, not a defect: focused procedural workflow; do not pad
Progressive disclosure ✅ Lean SKILL.md with short inline output template; no references//examples//scripts/ needed at this size
Referenced files exist ✅ All eval files referenced in evals/README.md exist; ${CLAUDE_PLUGIN_DATA} is an established repo convention resolved at runtime
Anti-patterns ✅ None (no vague triggers, no bloat)
Prompt-injection guardrail ✅ Treats Jira/Confluence/PR/CSV content as untrusted (CWE-1427)
Eval harness (evals/) ✅ Positive — documented custom trigger-rate runner with 10/10 should-trigger + 10/10 should-not-trigger baseline; validates the description's negative scope

3. Security Validation — ✅ PASS

Check Result
Committed secrets (API keys, tokens, passwords) ✅ None — only match is the benign constant TARGET_SKILL_TOKEN = "assessing-test-coverage" in run_real_eval.py:22
Hardcoded credentials in code ✅ None
allowed-tools scoping ✅ Tightly scoped least-privilege globs (e.g. Bash(gh pr view:*), Bash(git -C * rev-parse:*)) rather than blanket Bash
run_real_eval.py subprocess safety ✅ Uses subprocess.Popen with an argument list (no shell=True), strips CLAUDECODE from env, and early-bails on real-work tools to prevent resource exhaustion — no injection or unsafe shell usage
Untrusted-input handling ✅ SKILL.md explicitly instructs treating external content as data, not instructions

Warnings (should fix — non-blocking)

  • [minor / warning] plugins/bitwarden-test-toolkit/README.md:18 (also :87, :96) — README lists the report sections as "Overview, Summary, Evidence, Coverage, and Gaps", but the authoritative output template in SKILL.md:37-65 defines only ## Overview, ## Evidence & sources, ## Coverage, and ## Gaps (no Summary). Fix: drop "Summary" from the README, or add a ## Summary block to the SKILL.md template so the two agree.
  • [minor / warning] plugins/bitwarden-test-toolkit/skills/assessing-test-coverage/evals/README.md:20-27 — the documented run command uses relative paths (--eval-set trigger-eval.json) that only work from within evals/. Fix (optional): note the required working directory, or use path-agnostic invocation. Doc-only; the script is a helper, not a plugin component.

Optional suggestion

  • SKILL.md:27 — consider a one-line gloss for ${CLAUDE_PLUGIN_DATA} (e.g. "the plugin's per-user data directory") for standalone readability. Not required; it is an established repo convention.

Overall Assessment

Ready to merge. Manifest correctness, cross-file version consistency (1.0.0), skill frontmatter/quality, progressive disclosure, and security all pass with zero errors. The two findings are minor documentation inconsistencies that should be tidied but do not block acceptance.

Note: the repo validation scripts (validate-plugin-structure.sh, validate-marketplace.sh) could not be executed in this environment (command approval unavailable); their checks were performed manually and via the plugin-validator agent, all passing.

@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown

🤖 Bitwarden Claude Code Review

Overall Assessment: APPROVE

Reviewed the new bitwarden-test-toolkit plugin (marketplace + README registration, .cspell.json, plugin manifest, CHANGELOG, the assessing-test-coverage SKILL.md, and its eval harness). The skill frontmatter is valid, allowed-tools follows least privilege with scoped Bash/gh patterns, and the untrusted-input guardrail (CWE-1427) is a good touch. Versioning is consistent at 1.0.0 across marketplace.json, plugin.json, the README table, and CHANGELOG. One documentation-consistency issue noted below.

Code Review Details
  • ♻️ : Permalink guidance in README ("commit-SHA permalinks, not branch links" / diagram "head SHA") contradicts the operative SKILL.md rule to cite on the current default branch, not a PR-head SHA
    • plugins/bitwarden-test-toolkit/README.md:16

Comment thread .gitignore Outdated
nthompson-bitwarden and others added 7 commits July 22, 2026 12:11
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Inline the previous references/ content into a lean, self-contained
SKILL.md step list and delete the reference files. Tighten the skill
description with explicit scope exclusions to sharpen triggering, add a
prompt-injection guard for untrusted input (CWE-1427), and allow
git clone so uncloned repos can be inspected before being marked
unverified.

Rework the trigger eval with a portable runner that watches for the
real installed skill, refresh the README, and re-record the baseline.
Latest run: 10/10 should-trigger, 10/10 should-not-trigger.
@nthompson-bitwarden nthompson-bitwarden added the ai-review Request a Claude code review label Jul 24, 2026
Comment thread plugins/bitwarden-test-toolkit/README.md Outdated
- **Evidence-grounded inventory**: Reports only coverage it can observe and cite — a behavior with no observed test is recorded as a gap, never assumed covered.
- **PRs-first discovery**: Takes tests in linked/merged PR diffs as the primary, permalink-ready evidence, then a targeted lookup scoped to the change surface — never a repo-wide sweep.
- **Layer bucketing**: Sorts each observed test into unit / integration / E2E per repo, using each repo's own conventions.
- **Stable permalink citations**: Cites 1–3 representative tests per behavior as commit-SHA GitHub permalinks (not branch links), plus an approximate count.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ DEBT: Permalink guidance here contradicts the operative SKILL.md.

Details

This README states citations should be "commit-SHA GitHub permalinks (not branch links)" (also line 36, and the workflow diagram at line 65 says "permalink-ready via head SHA"). But SKILL.md:32 (the file that actually drives behavior) says the opposite:

Cite tests on the repo's current default branch, not at a PR-head SHA — merged code may have been reverted; a PR-head permalink still resolves but can point at tests no longer on the branch.

So the README tells a reader to prefer commit-SHA / head-SHA links, while the skill instruction warns against exactly that (PR-head SHA) and prefers default-branch links. A maintainer reading the README will document/expect the wrong behavior.

Suggest aligning the README wording (and the diagram's "permalink-ready via head SHA" node) with the SKILL.md rule: cite on the current default branch, not a PR-head SHA.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-review Request a Claude code review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant