Run Portwood's test suites — the one-command QA harness, the anonymous-Apex e2e scripts, Apex unit tests, prettier, and Code Analyzer.

Apache-2.0Auto-check passedTesting & QA

Install Run Tests

skills CLI
$ npx skills add Portwood-Global-Solutions/Portwood --skill run-tests -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Portwood-Global-Solutions/Portwood run-tests --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Portwood-Global-Solutions/Portwood.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/run-tests .claude/skills/run-tests && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
run-tests
GitHub stars
126
Token cost
~1.6k tokens
SKILL.md length
534 words
Files
1
Skills in repo
7
Repo updated
First seen
Licence
Apache-2.0

At a glance

Run Portwood's test suites — the one-command QA harness, the anonymous-Apex e2e scripts, Apex unit tests, prettier, and Code Analyzer.

  • Works in 5 steps: npm run qa -- --offline — fastest… → The canvas-*.mjs checks if you touched… → Scoped Apex tests for classes you changed → …
  • Tasks that involve Linting and formatting
  • SKILL.md covers The one command, The pure-Node checks, The anonymous-Apex e2e suite and Apex unit tests, plus 3 more sections
  • Calls sf, npm and node

What it does

Run Tests is an agent skill from Portwood-Global-Solutions/Portwood. Run Portwood's test suites — the one-command QA harness, the anonymous-Apex e2e scripts, Apex unit tests, prettier, and Code Analyzer. Use before opening a PR, when verifying a fix, or when a test fails and you need to know whether it's your change or the harness.

Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering Linting and formatting, End-to-end testing and Unit testing. It works with Prettier and Salesforce. The repository describes itself as: Free, native document generation for Salesforce. PDF, DOCX, XLSX, PPTX — merge tags, images, barcodes, QR codes, bulk generation, Flow actions. 100% Apex + LWC, zero external… The licence is Apache-2.0.

When your agent uses it

  • Tasks that involve Linting and formatting
  • Tasks that involve End-to-end testing
  • Tasks that involve Unit testing

Example prompts

  • “/run-tests”

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. npm run qa -- --offline — fastest signal, no org needed
  2. The canvas-*.mjs checks if you touched canvasModel.js
  3. Scoped Apex tests for classes you changed
  4. npm run format:check
  5. npm run qa in full if you have an org configured

What it can do on your machine

Read from SKILL.md and the folder at commit 70ede0c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • sf
    • npm
    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Run Tests loads about 1.6k tokens when it runs. Until then it costs about 69 tokens; SKILL.md has 534 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~69
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Portwood-Global-Solutions/Portwood at commit 70ede0c, republished under its Apache-2.0 licence (© Portwood-Global-Solutions). 534 words, ~1,561 tokens.

Download SKILL.mdSave it as .claude/skills/run-tests/SKILL.md (or your agent's skills folder).
name
run-tests
description
Run Portwood's test suites — the one-command QA harness, the anonymous-Apex e2e scripts, Apex unit tests, prettier, and Code Analyzer. Use before opening a PR, when verifying a fix, or when a test fails and you need to know whether it's your change or the harness.

Running Portwood's tests

The one command

bash
npm run qa

Runs every suite against the docgen-verify org and writes one report. Exit code is 0 only when every evaluated check passed, so it drops straight into CI.

bash
npm run qa -- --org myorg           # a different org
npm run qa -- --offline             # only suites needing no org — CI-safe, fast
npm run qa -- --fast                # skip the slow suites
npm run qa -- --suite merge-tags,metadata-audit
npm run qa -- --headed              # watch the browser suites run
npm run qa -- --list                # what suites exist

Output lands in scripts/qa/report/:

  • qa-report.md — headline numbers, coverage by area, and an ordered what to fix list
  • qa-report.json — the same data, for tracking over time

Start with npm run qa -- --offline. It needs no org at all, so it's the fastest way to know whether you broke something, and it's what a contributor without a configured org can still run.

Suites

apex-e2e, apex-unit, flow-actions, merge-tags, metadata-audit, output-formats, pdf-content, record-pages, template-integrity, ui-admin, ui-designer, ui-runner.

A suite that cannot run returns "skipped" rather than throwing — the report says so out loud instead of quietly reporting 100%. A skipped suite is not a passing suite; check the report rather than just the exit code when you care about coverage.

Adding a suite

Drop a file in scripts/qa/suites/ exporting run({ org, headed, base }) that returns suiteResult(...) from lib/report.mjs, then register it in SUITES in scripts/qa/run-all.mjs. Suites must never throw.

The pure-Node checks

scripts/qa/canvas-*.mjs and friends run serializer and layout logic with no browser and no org — that's why the serializer is written to survive typeof document === 'undefined'. They're the fastest feedback loop in the repo:

bash
node scripts/qa/canvas-serializer-check.mjs
node scripts/qa/canvas-anchor-check.mjs
node scripts/qa/canvas-export-roundtrip-check.mjs
node scripts/qa/canvas-import-fidelity.mjs
node scripts/qa/canvas-inline-sanitize-check.mjs

If you change canvasModel.js, run these before anything else.

The anonymous-Apex e2e suite

Each script prints PASS: N FAIL: 0 ALL TESTS PASSED.

bash
sf apex run --target-org docgen-verify -f scripts/e2e-01-permissions.apex
sf apex run --target-org docgen-verify -f scripts/e2e-02-template-crud.apex
sf apex run --target-org docgen-verify -f scripts/e2e-03-generate-pdf.apex
sf apex run --target-org docgen-verify -f scripts/e2e-03b-page-setup.apex
sf apex run --target-org docgen-verify -f scripts/e2e-04-generate-docx.apex
sf apex run --target-org docgen-verify -f scripts/e2e-05-generate-bulk.apex
sf apex run --target-org docgen-verify -f scripts/e2e-06-signatures.apex
sf apex run --target-org docgen-verify -f scripts/e2e-06b-signature-lifecycle.apex
sf apex run --target-org docgen-verify -f scripts/e2e-07-syntax1.apex
sf apex run --target-org docgen-verify -f scripts/e2e-07-syntax2.apex
sf apex run --target-org docgen-verify -f scripts/e2e-07-syntax3.apex
sf apex run --target-org docgen-verify -f scripts/e2e-07-syntax4.apex
sf apex run --target-org docgen-verify -f scripts/e2e-07-syntax5.apex
sf apex run --target-org docgen-verify -f scripts/e2e-08-cleanup.apex

Sequence matters: 01 standalone, 02 creates test data, 03–06b depend on 02, 07-syntax* standalone, 08 cleans up.

Reading a failure correctly

A governor-limit throw prints NO summary line at all. Watch for a script that emits no PASS: N, not just a non-zero FAIL. That's why 03b is split out of 03 — each full generateDocument costs ~10 SOQL, and the combined run blew the 100-SOQL synchronous limit.

Show full SKILL.md (230 more words)Show less
Constraints when adding assertions
  • Each script must stay under 18,000 characters (the Anonymous Apex ceiling is 20,000). syntax1–syntax4 are already within a few hundred characters of it — put new parser assertions in syntax5 or a new syntax6.
  • Anonymous Apex cannot catch a thrown AuraHandledException (uncatchable LimitException). Negative-path assertions on @AuraEnabled guard methods belong in unit tests, not e2e.
  • @TestVisible private members are unreachable from anonymous Apex. Prettier passing does not mean the script compiles — actually run it.

When you fix a parser-level bug, add a regression assertion exercising the pattern via processXmlForTest.

Apex unit tests

Scoped, for a fix:

bash
sf apex run test --target-org docgen-verify --tests DocGenServiceTest --wait 15

Never run a bare sf apex run test — it triggers an org-wide run that locks ContentFolder. Always pass --tests or --class-names.

Full local run (what release validation uses):

bash
sf apex run test --target-org docgen-verify --test-level RunLocalTests --wait 15 --code-coverage

Expected: Outcome: Passed, Pass Rate: 100%, org-wide coverage ≥ 75%.

Prettier — a CI merge gate

npm run format:check blocks merge. Run before pushing:

bash
npm run format        # auto-fix
npm run format:check  # verify clean

Covers force-app/**/*.{cls,trigger,page,component,cmp,html,js,xml}, scripts/**/*.apex, and root *.{json,md,yml,yaml}. Apex scripts get reflowed — don't fight the wrap.

Code Analyzer

bash
sf code-analyzer run --workspace "force-app/" --rule-selector "Security" --rule-selector "AppExchange" --view table

Expected: 0 High severity violation(s) found. ~30 Moderate false positives are acceptable and documented in code-analyzer.yml.

What to run before opening a PR

  1. npm run qa -- --offline — fastest signal, no org needed
  2. The canvas-*.mjs checks if you touched canvasModel.js
  3. Scoped Apex tests for classes you changed
  4. npm run format:check
  5. npm run qa in full if you have an org configured

© Portwood-Global-Solutions, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/run-tests of Portwood-Global-Solutions/Portwood.

Open the folder on GitHubat commit 70ede0c

Compare with similar skills

Run Tests next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Run Tests compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Run Tests this skillPortwood-Global-Solutions/Portwood126—~1.6kAutomated safety check: PassApache-2.0
Pierre Testing and Verification Guidepierrecomputer/pierre6.3k—~608Automated safety check: PassApache-2.0
Ha Frontend Testinghome-assistant/frontend5.7k—~1.7kAutomated safety check: PassApache-2.0
Run Testsartcc/freelingo165—~976Automated safety check: PassAGPL-3.0
Zizkadb TestZIZKA-AI-SL/ZizkaDB129—~358Automated safety check: PassCustom licence
Typescript TestingComposioHQ/composio30k—~222Automated safety check: PassMIT

Similar skills

  • Chooses the right verification step after a code change in Pierre's monorepo: format and lint, a typecheck, Bun unit tests, snapshots, or Playwright E2E.

    6.3k GitHub stars~608 tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Ha Frontend Testing

    home-assistant/frontend

    Home Assistant frontend testing and validation workflow. An agent skill from home-assistant/frontend.

    5.7k GitHub stars~1.7k tokensUpdated today
    Testing & QAAuto-check passed
  • Run Tests

    artcc/freelingo

    A skill your agent uses when the user asks to run tests, ejecutar tests, lanzar tests, pytest, vitest, check types, typecheck, lint, or verify the codebase.

    165 GitHub stars~976 tokensUpdated today
    Testing & QAAuto-check passed
  • Zizkadb Test

    ZIZKA-AI-SL/ZizkaDB

    Run the full ZizkaDB test suite across all layers — lint, Python unit tests, SDK tests, MCP tests, TypeScript tests, and dashboard build verification.

    129 GitHub stars~358 tokensUpdated today
    Testing & QAAuto-check passed
  • Typescript Testing

    ComposioHQ/composio

    Select and run TypeScript SDK verification for packages, examples, type checks, linting, builds, Vitest suites, Effect v4 CLI tests, and runtime E2E tests.

    30k GitHub stars~222 tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Odc Debugging

    DouglasNeuroInformatics/OpenDataCapture

    What actually breaks in Open Data Capture — a failing build, lint, unit test or e2e run; a change with no visible effect; a suite that stays green after you broke the code on purpose; an error…

    119 GitHub stars~2.8k tokensUpdated 3 days ago
    Testing & QAAuto-check: notes

More from Portwood-Global-Solutions/Portwood

  • Canvas Designer

    Portwood-Global-Solutions/Portwood

    Work on Portwood's Canvas designer (docGenCanvas LWC and canvasModel.js).

    126 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Dev Setup

    Portwood-Global-Solutions/Portwood

    Get from a fresh clone of Portwood to a working, fully-tested Salesforce org.

    126 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • HTML Template Authoring

    Portwood-Global-Solutions/Portwood

    Author or repair a Portwood HTML template that renders correctly through Blob.toPdf (Flying Saucer).

    126 GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Triage Report

    Portwood-Global-Solutions/Portwood

    Decide whether a Portwood bug report is a real code defect or a template-authoring problem, before any code is written.

    126 GitHub stars~1.5k tokensUpdated yesterday
    Auto-check passed
  • Fix Merge Tag

    Portwood-Global-Solutions/Portwood

    Fix a Portwood merge-tag or parser bug correctly across all of its resolution paths.

    126 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Managed Package Rules

    Portwood-Global-Solutions/Portwood

    Constraints that only bite in a real managed-package install of Portwood — global visibility, Flow Apex-Defined types, namespace-prefixed keys, USERMODE on internal reads, immutable API names.

    126 GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Run Tests

What does Run Tests do?

Run Portwood's test suites — the one-command QA harness, the anonymous-Apex e2e scripts, Apex unit tests, prettier, and Code Analyzer. Run Tests is an agent skill from Portwood-Global-Solutions/Portwood. Run Portwood's test suites — the one-command QA harness, the anonymous-Apex e2e scripts, Apex unit tests, prettier, and Code Analyzer.

When should I use Run Tests?

Run Tests fits situations like: tasks that involve Linting and formatting; tasks that involve End-to-end testing; tasks that involve Unit testing.

How do I install Run Tests in Claude Code?

Run `npx skills add Portwood-Global-Solutions/Portwood --skill run-tests -a claude-code`. Or copy the skill folder (.claude/skills/run-tests in Portwood-Global-Solutions/Portwood) into .claude/skills/run-tests in your project. Claude Code loads it when a task matches its description.

How do I install Run Tests in Codex?

Run `npx skills add Portwood-Global-Solutions/Portwood --skill run-tests -a codex`. Or copy the skill folder (.claude/skills/run-tests in Portwood-Global-Solutions/Portwood) into .agents/skills/run-tests in your project. Codex loads it when a task matches its description.

Can I use Run Tests in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Portwood-Global-Solutions/Portwood --skill run-tests -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/run-tests, .gemini/skills/run-tests, .github/skills/run-tests and .opencode/skills/run-tests in your project.

What does Run Tests need to run?

Going by SKILL.md and its folder, Run Tests needs the command-line tools its instructions call (sf, npm and node).

Does Run Tests access the network?

SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Run Tests safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Run Tests use?

Run Tests is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Run Tests use?

About 1.6k tokens (SKILL.md is roughly 6.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Run Tests?

Skills that share tags, products or a category with Run Tests: Pierre Testing and Verification Guide (pierrecomputer/pierre, 6.3k stars), Ha Frontend Testing (home-assistant/frontend, 5.7k stars), Run Tests (artcc/freelingo, 165 stars) and Zizkadb Test (ZIZKA-AI-SL/ZizkaDB, 129 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Run Tests?

Portwood-Global-Solutions (a GitHub organization) maintains it in Portwood-Global-Solutions/Portwood, which has 126 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 9, 2026.

Source: Portwood-Global-Solutions/Portwood on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.