test-setup-ee4baf — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited test-setup-ee4baf (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill scaffolds the automated testing infrastructure for the project. It detects the configured engine, generates the appropriate test runner configuration, creates the standard directory layout, and wires up CI/CD so tests run on every push.
Run this once during the Technical Setup phase, before any implementation begins. A test framework installed at sprint start costs 30 minutes. A test framework installed at sprint four costs 3 sprints.
Output: tests/ directory structure + .github/workflows/tests.yml
.claude/docs/technical-preferences.md and extract the Engine: value.[TO BE CONFIGURED]), stop:"Engine not configured. Run /setup-engine first, then re-run /test-setup."
tests/ — does the directory exist?tests/unit/ and tests/integration/ — do subdirectories exist?.github/workflows/ — does a CI workflow file exist?tests/gdunit4_runner.gd (Godot) or tests/EditMode/ (Unity) orSource/Tests/ (Unreal) for engine-specific artifacts.
force argument was not passed:"Test infrastructure appears to be in place. Re-run with /test-setup force to regenerate. Proceeding will not overwrite existing test files."
If the force argument is passed, skip the "already exists" early-exit and proceed — but still do not overwrite files that already exist at a given path. Only create files that are missing.
Based on the engine detected and the existing state, present a plan:
## Test Setup Plan — [Engine]
I will create the following (skipping any that already exist):
tests/
unit/ — Isolated unit tests for formulas, state, and logic
integration/ — Cross-system tests and save/load round-trips
smoke/ — Critical path test list (15-minute manual gate)
evidence/ — Screenshot and manual test sign-off records
README.md — Test framework documentation
[Engine-specific files — see per-engine details below]
.github/workflows/tests.yml — CI: run tests on every push to main
Estimated time: ~5 minutes to create all files.Ask: "May I create these files? I will not overwrite any test files that already exist at these paths."
Do not proceed without approval.
After approval, create the following files:
tests/README.md# Test Infrastructure
**Engine**: [engine name + version]
**Test Framework**: [GdUnit4 | Unity Test Framework | UE Automation]
**CI**: `.github/workflows/tests.yml`
**Setup date**: [date]
## Directory Layout
tests/ unit/ # Isolated unit tests (formulas, state machines, logic) integration/ # Cross-system and save/load tests smoke/ # Critical path test list for /smoke-check gate evidence/ # Screenshot logs and manual test sign-off records
## Running Tests
[Engine-specific command — see below]
## Test Naming
- **Files**: `[system]_[feature]_test.[ext]`
- **Functions**: `test_[scenario]_[expected]`
- **Example**: `combat_damage_test.gd` → `test_base_attack_returns_expected_damage()`
## Story Type → Test Evidence
| Story Type | Required Evidence | Location |
|---|---|---|
| Logic | Automated unit test — must pass | `tests/unit/[system]/` |
| Integration | Integration test OR playtest doc | `tests/integration/[system]/` |
| Visual/Feel | Screenshot + lead sign-off | `tests/evidence/` |
| UI | Manual walkthrough OR interaction test | `tests/evidence/` |
| Config/Data | Smoke check pass | `production/qa/smoke-*.md` |
## CI
Tests run automatically on every push to `main` and on every pull request.
A failed test suite blocks merging.
### Engine-specific files
#### Godot 4 (`Engine: Godot`)
Create `tests/gdunit4_runner.gd`:
extends SceneTree
func _init() -> void: var runner := load("res://addons/gdunit4/GdUnitRunner.gd") if runner == null: push_error("GdUnit4 not found. Install via AssetLib or addons/.") quit(1) return var instance = runner.new() instance.run_tests() quit(0)
Create `tests/unit/.gdignore_placeholder` with content:
`# Unit tests go here — one subdirectory per system (e.g., tests/unit/combat/)`
Create `tests/integration/.gdignore_placeholder` with content:
`# Integration tests go here — one subdirectory per system`
Note in the README: **Installing GdUnit4**
#### Unity (`Engine: Unity`)
Create `tests/EditMode/` placeholder file `tests/EditMode/README.md`:Unit tests that run without entering Play Mode. Use for pure logic: formulas, state machines, data validation. Assembly definition required: tests/EditMode/EditModeTests.asmdef
Create `tests/PlayMode/README.md`:Integration tests that run in a real game scene. Use for cross-system interactions, physics, and coroutines. Assembly definition required: tests/PlayMode/PlayModeTests.asmdef
Note in the README: **Enabling Unity Test Framework**Window → General → Test Runner (Unity Test Framework is included by default in Unity 2019+)
#### Unreal Engine (`Engine: Unreal` or `Engine: UE5`)
Create `Source/Tests/README.md`:Tests use the UE Automation Testing Framework. Run via: Session Frontend → Automation → select "MyGame." tests Or headlessly: UnrealEditor -nullrhi -ExecCmds="Automation RunTests MyGame.; Quit"
Test class naming: F[SystemName]Test Test category naming: "MyGame.[System].[Feature]"
---
## Phase 4: Create CI/CD Workflow
### Godot 4
Create `.github/workflows/tests.yml`:
name: Automated Tests
on: push: branches: [main] pull_request: branches: [main]
jobs: test: name: Run GdUnit4 Tests runs-on: ubuntu-latest
steps:
uses: actions/checkout@v4 with: lfs: true
uses: MikeSchulze/gdUnit4-action@v1 with: godot-version: '[VERSION FROM docs/engine-reference/godot/VERSION.md]' paths: | tests/unit tests/integration report-name: test-results
if: always() uses: actions/upload-artifact@v4 with: name: test-results path: reports/
### Unity
Create `.github/workflows/tests.yml`:
name: Automated Tests
on: push: branches: [main] pull_request: branches: [main]
jobs: test: name: Run Unity Tests runs-on: ubuntu-latest
steps:
uses: actions/checkout@v4 with: lfs: true
uses: game-ci/unity-test-runner@v4 env: UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} with: testMode: editmode artifactsPath: test-results/editmode
uses: game-ci/unity-test-runner@v4 env: UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} with: testMode: playmode artifactsPath: test-results/playmode
if: always() uses: actions/upload-artifact@v4 with: name: test-results path: test-results/
Note: Unity CI requires a `UNITY_LICENSE` secret. Add to GitHub repository
secrets before the first CI run.
### Unreal Engine
Create `.github/workflows/tests.yml`:
name: Automated Tests
on: push: branches: [main] pull_request: branches: [main]
jobs: test: name: Run UE Automation Tests runs-on: self-hosted # UE requires a local runner with the editor installed
steps:
uses: actions/checkout@v4 with: lfs: true
run: | "$UE_EDITOR_PATH" "${{ github.workspace }}/[ProjectName].uproject" \ -nullrhi -nosound \ -ExecCmds="Automation RunTests MyGame.; Quit" \ -log -unattended shell: bash
if: always() uses: actions/upload-artifact@v4 with: name: test-logs path: Saved/Logs/
Note: UE CI requires a self-hosted runner with Unreal Editor installed.
Set the `UE_EDITOR_PATH` environment variable on the runner.
---
## Phase 5: Create Smoke Test Seed
Create `tests/smoke/critical-paths.md`:
Purpose: Run these 10-15 checks in under 15 minutes before any QA hand-off. Run via: /smoke-check (which reads this file) Update: Add new entries when new core systems are implemented.
<!-- Add the primary mechanic for each sprint here as it is implemented --> <!-- Example: "Player can move, jump, and the camera follows correctly" -->
---
## Phase 6: Post-Setup Summary
After writing all files, report:
Test infrastructure created for [engine].
Files created:
[engine-specific files]
Next steps:
/qa-plan sprint before your first sprint to classify stories and settest evidence requirements
/smoke-check before every QA hand-offGate note: /gate-check Technical Setup → Pre-Production now requires:
Run /test-setup and write one example test before advancing.
Verdict: COMPLETE — test framework scaffolded and CI/CD wired up.
---
## Collaborative Protocol
- **Never overwrite existing test files** — only create files that are missing.
If a test runner file exists, leave it as-is.
- **Always ask before creating files** — Phase 2 requires explicit approval.
- **Engine detection is non-negotiable** — if the engine is not configured,
stop and redirect to `/setup-engine`. Do not guess.
- **`force` flag skips the "already exists" early-exit but never overwrites.**
It means "create any missing files even if the directory already exists."
- For Unity CI, note that the `UNITY_LICENSE` secret must be configured
manually. Do not attempt to automate license management.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.