How `smoke.ps1` Executes and Validates Smoke Tests in the reverse-skill Repository
The smoke.ps1 script orchestrates core functionality tests by invoking verification, routing, and case-management sub-scripts, then reports success via exit codes and log markers that test-p0-friction.ps1 validates.
The smoke.ps1 script serves as the primary smoke test entry point for the zhaoxuya520/reverse-skill project. It coordinates multiple PowerShell modules to verify that routing coherence, case initialization, evidence handling, and master-route matrices function correctly on a clean environment. Understanding this execution flow helps developers debug failures and extend the test suite.
How smoke.ps1 Is Executed
The smoke test is not run directly in CI pipelines. Instead, the higher-level harness test-p0-friction.ps1 invokes it with controlled parameters and captures all output for validation.
Invocation from test-p0-friction.ps1
Located at skills/scripts/test-p0-friction.ps1, lines 29–33 construct the call:
$smoke = Join-Path $scriptDir 'smoke.ps1'
& powershell -NoProfile -ExecutionPolicy Bypass -File $smoke `
-LogDir (Join-Path $ScratchDir 'smoke-logs') -PackageRoot $PackageRoot 2>&1 |
Tee-Object -FilePath $smokeLog | Out-Null
$smokeExit = $LASTEXITCODE
This pattern:
- Uses a fresh PowerShell process (
-NoProfile -ExecutionPolicy Bypass) to avoid environmental contamination. - Redirects all output (including errors via
2>&1) throughTee-Objectso logs appear both on console and in$smokeLog. - Captures the exit code immediately in
$smokeExitfor validation.
Manual Execution
Developers can run the smoke test locally:
powershell -NoProfile -ExecutionPolicy Bypass -File skills/scripts/smoke.ps1 `
-LogDir C:\temp\smoke-logs -PackageRoot .
Internal Execution Flow of smoke.ps1
The script at skills/scripts/smoke.ps1 sequences through discrete verification steps. Based on the source structure, the core entry points include:
| Step | Script | Purpose |
|---|---|---|
| 1 | verify-routing-coherence.ps1 |
Validates routing configuration consistency; must exit 0 |
| 2 | master-route.ps1 |
Executes sample master-route matrix to confirm rule parsing |
| 3 | case-init.ps1 |
Generates fresh case scaffold (work/<case>/scope.md) |
| 4 | append-evidence.ps1 |
Tests evidence appending and duplicate-ID rejection |
| 5 | case-guard.ps1, test-routing.ps1, extract-summaries.ps1 |
Guard enforcement, routing suite, and summary extraction |
The script loads these via Join-Path $scriptDir '<script-name>' and executes them with the & call operator. Each sub-script receives the -LogDir and -PackageRoot parameters to maintain consistent output locations.
Routing Coherence Verification
Lines 50–58 of smoke.ps1 demonstrate the pattern used throughout:
$verify = Join-Path $scriptDir 'verify-routing-coherence.ps1'
& $verify -LogDir $LogDir -PackageRoot $PackageRoot
$verifyExit = $LASTEXITCODE
if ($verifyExit -eq 0) { Ok "verify-routing-coherence exit $verifyExit" }
else { Bad "verify-routing-coherence exit $verifyExit" }
The Ok and Bad helper functions provide color-coded console output while the exit code propagates for final assessment.
Evidence Handling Validation
At line 141, smoke.ps1 invokes append-evidence.ps1 and specifically validates duplicate-ID rejection (line 177):
Ok 'duplicate Evidence ID rejected without mutation'
This ensures the evidence system correctly guards against data corruption.
Log Aggregation
After all entry points complete, lines 378–383 copy the primary smoke.log and SUMMARY.txt into the test harness scratch directory:
Copy-Item (Join-Path $LogDir 'smoke.log') $ScratchDir -Force
Copy-Item (Join-Path $LogDir 'SUMMARY.txt') $ScratchDir -Force
How Validation Occurs
Validation operates at two levels: exit code verification and log content inspection.
Exit Code Validation
test-p0-friction.ps1 maps $smokeExit to a simple status:
if ($smokeExit -eq 0) { 'Ok' } else { 'Bad' }
A non-zero exit from any sub-script causes immediate failure classification.
Log Content Validation
Lines 36–38 of test-p0-friction.ps1 perform pattern matching against the aggregated log to confirm specific operations executed successfully:
| Pattern Group | Regex Pattern | Meaning |
|---|---|---|
| Coherence check | verify-routing-coherence|VERIFY_EXIT=0|ALL PASS |
Routing coherence verification passed |
| Core execution | route apk|parse master-route|parse case-init |
Core parsing and routing steps completed |
Both patterns must be present for the test to report Ok; otherwise it reports Bad.
Example Output Structure
A successful smoke run produces log entries like:
=== reverse-skill smoke | LogDir=C:\temp\smoke-logs | Host=pwsh ===
[OK] verify-routing-coherence exit 0
[OK] master-route completed
[OK] case-init generated scope
[OK] duplicate Evidence ID rejected without mutation
...
The test-p0-friction.ps1 harness parses this output to extract the structured status markers.
Summary
smoke.ps1is invoked bytest-p0-friction.ps1using an isolated PowerShell process with-NoProfile -ExecutionPolicy Bypass.- Six core scripts are sequenced:
verify-routing-coherence.ps1,master-route.ps1,case-init.ps1,append-evidence.ps1, plus supporting guard and routing tests. - Exit code validation ensures each sub-script returns
0on success. - Log pattern validation in
test-p0-friction.ps1confirms specific success markers appear in the aggregated output. - Log artifacts (
smoke.log,SUMMARY.txt) are preserved in the scratch directory for CI debugging.
Frequently Asked Questions
What triggers a smoke test failure?
A failure occurs when smoke.ps1 returns a non-zero exit code, or when the log output lacks the required pass-signal patterns (verify-routing-coherence|VERIFY_EXIT=0|ALL PASS and routing/parsing markers). Either condition causes test-p0-friction.ps1 to report Bad.
Can I run smoke.ps1 without the full test harness?
Yes. Run it manually with the -LogDir and -PackageRoot parameters. Ensure you have write access to the log directory and that all dependent scripts exist in the same directory as smoke.ps1.
Why does test-p0-friction.ps1 use pattern matching instead of just checking exit codes?
Exit codes confirm that scripts finished, but pattern matching verifies that they performed the expected work. This catches cases where a script exits cleanly but skips critical verification steps due to misconfiguration or silent errors.
Where are the smoke test logs stored?
By default, test-p0-friction.ps1 places logs in a smoke-logs subdirectory under its scratch directory. The final smoke.log and SUMMARY.txt are copied to the scratch root for CI artifact collection.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →