Skip to main content
← Back to list
01Issue
FeatureShippedUAT
Assigneesstack72

Relationships

#1059 UAT Phase 8a: CI guard + adversarial tier-6 catch-all

Opened by stack72 · 7/10/2026· Shipped 7/10/2026

Summary

Phase 8a is the first phase of the UAT coverage plan and must land before any other phase. It fixes three CI gaps that currently leave tests invisible or unprotected.

Problem

  1. ~22 adversarial test files run in no CI job. The adversarial.yml workflow runs a tier matrix [1..5] targeting only 5 pinned tier files. Every other adversarial file in tests/cli/adversarial/ runs nowhere in CI — a stale test was proven to sit green asserting a retired contract.
  2. deno task test (framework unit tests under src/) is not run by any CI job. Helper library regressions are invisible.
  3. No timeout-minutes on uat-cli or adversarial CI jobs. A hung test can burn CI minutes indefinitely.

Deliverables

1. Tier-6 adversarial catch-all

Add a uat:adversarial:tier6 task to deno.json that runs ALL adversarial files EXCEPT the five tier-pinned ones (use --ignore= to exclude them). Add tier 6 to adversarial.yml's matrix so every adversarial test file is reachable by CI.

The five existing tier files to exclude from tier-6 (they already run under tiers 1-5):

  • Tier 1: security
  • Tier 2: state_corruption
  • Tier 3: concurrency
  • Tier 4: resource
  • Tier 5: process_lifecycle

2. Shard-coverage guard test

Write a unit test under src/ (runs via deno task test) that:

  • Parses deno.json tasks + uat.yml + adversarial.yml
  • Asserts every tests/cli/**/*_test.ts file is reachable by at least one task/shard
  • Asserts no file is covered by more than one uat:cli shard (no double-counting)
  • Fails when a new test file is added but not wired into any CI task — this is the drift ratchet

This test ensures that the "new test directory is dead code until wired into a task + shard" failure mode never happens again.

3. CI quality job additions

  • Add deno task test to the CI quality/check job so framework unit tests run on every PR
  • Add timeout-minutes to uat-cli and adversarial CI jobs (suggest 30 min for uat-cli, 20 min for adversarial — calibrate based on current run times)

Implementation Notes

  • Branch from main, one PR for all three deliverables
  • This phase has no test-writing dependencies — it is purely CI infrastructure
  • After landing, update the status table in COVERAGE-PLAN.md at the main checkout root (the file is untracked)

Ground Rules

  • Read CLAUDE.md in the repo root first — its rules apply everywhere
  • Use the github-pr skill for commits and PR creation
  • Start with Task 0 — ground truth: check the current state of deno.json, .github/workflows/uat.yml, and .github/workflows/adversarial.yml to understand the current shard/task/matrix layout before making changes

How to Run & Verify

# 1. Format, lint, type-check
deno task fmt
deno task lint
deno task check

# 2. Run framework unit tests (this should now include the new guard test)
deno task test

# 3. Run the new tier-6 adversarial task to confirm it picks up the right files
SWAMP_SOURCE_DIR=~/code/swamp-club/swamp deno task uat:adversarial:tier6

# 4. Run the full adversarial suite to confirm nothing broke
SWAMP_SOURCE_DIR=~/code/swamp-club/swamp deno task uat:adversarial

# 5. Run the main CLI tests to confirm shard wiring is intact
SWAMP_SOURCE_DIR=~/code/swamp-club/swamp deno task uat:cli

All commands should be run with SWAMP_NO_TELEMETRY=1 set in your environment.

Definition of Done

  • uat:adversarial:tier6 task exists in deno.json and runs all non-tier-pinned adversarial files
  • Tier 6 added to adversarial.yml matrix
  • Shard-coverage guard test exists under src/ and passes
  • Guard test fails when a fake untracked _test.ts file is conceptually uncovered
  • deno task test added to CI quality job
  • timeout-minutes set on uat-cli and adversarial CI jobs
  • deno task fmt && deno task lint && deno task check && deno task test all green
  • PR opened via github-pr skill
02Bog Flow
OPENTRIAGEDIN PROGRESSSHIPPED+ 1 MOREASSIGNED+ 2 MOREREVIEW+ 4 MOREPR_MERGED+ 1 MORENOTIFICATION_SKIPPED

Shipped

7/10/2026, 1:54:10 AM

Click a lifecycle step above to view its details.

03Sludge Pulse
stack72 assigned stack727/10/2026, 12:47:26 AM

Sign in to post a ripple.