Skip to content

ci(15-3): wire existing Deno _shared tests into GitHub Actions CI#113

Merged
Simplemart17 merged 4 commits into
mainfrom
feature/15-3-edge-function-deno-tests
May 17, 2026
Merged

ci(15-3): wire existing Deno _shared tests into GitHub Actions CI#113
Simplemart17 merged 4 commits into
mainfrom
feature/15-3-edge-function-deno-tests

Conversation

@Simplemart17

Copy link
Copy Markdown
Owner

Summary

  • NEW Setup Deno step (denoland/setup-deno@v2, pinned v1.x) + Deno tests (Edge Function _shared utilities) step in .github/workflows/ci.yml — wires Story 11-3 fetch-with-timeout_test.ts + Story 12-11 parse-upstream-error_test.ts into CI (pre-15-3 manual-run only).
  • NEW src/lib/__tests__/ci-deno-step-source-drift.test.ts (5 cases) pins via Story 12-2 P12 + 12-10 R1-H2 patterns: setup action ref, step name, run command, --allow-net=127.0.0.1 permission, NEGATIVE --allow-all, NEGATIVE silent-disable, ordering after Tests step.
  • Carries Epic 12 AI feat(reading): update text styles for readability and consistency #7 + Epic 13 AI feat(story-1-4): mock tests & vocabulary SRS verification #8 (Deno portion only — pgTAP CI wiring DEFERRED to 15-3-followup-pgtap-ci-wiring).
  • 0 source-module modifications beyond ci.yml + new drift test.

Story

  • Story ID: 15.3
  • Story Key: 15-3-edge-function-deno-tests
  • Story File: _bmad-output/implementation-artifacts/15-3-edge-function-deno-tests.md

Test plan

  • CI workflow runs the Deno test step on this PR.
  • Both Deno test files (fetch-with-timeout + parse-upstream-error) pass under deno test --allow-net=127.0.0.1.
  • Drift detector (5 Jest cases) passes.

🤖 Generated with Claude Code

3-agent adversarial review (Blind Hunter + Edge Case Hunter +
Acceptance Auditor) surfaced 7 actionable findings:

HIGH:
- BH-2/EH-1: name test files explicitly in run command (vacuous-pass
  defense — `deno test <empty-dir>` would have silently exited 0 OR
  exited non-zero with a confusing "No test modules found" — either way
  a future rename/move slips past the gate)
- BH-3/EH-2: parse-upstream-error_test.ts docstring claimed
  `--allow-all` while CI uses `--allow-net=127.0.0.1` — fixed
  docstring to match CI invocation
- EH-4: Case 5 ordering regex `/- name:\\s*Tests\\b/` matched BOTH
  `Tests` and PR #116's `Tests with coverage threshold` because
  \\b word boundary triggers between "Tests" and space. Anchored to
  line-end via `/^\\s{6}- name:\\s*Tests\\s*$/m`.

MED:
- BH-5: Case 4 silent-disable defense only covered the Deno test step;
  extended to also pin the Setup Deno step (tightly-coupled — silent
  disable on EITHER fails the gate). Pin both via explicit loop.
- BH-6: added `timeout-minutes: 3` so a hung worker can't burn the
  GitHub Actions 6-hour default.
- BH-7: rewrote misleading v1/v2 comment — `denoland/setup-deno@v2`
  is the action installer version; `deno-version: v1.x` pins the
  runtime version. Two independent axes.
- EH-10: added `--no-check` to skip redundant TS typecheck (npm
  type-check step already covers the source-of-truth files; saves
  ~5s/run + decouples from Deno's TS engine drift).

Story file housekeeping (per AA): Status review → done; populated
File List section.

Deferred (filed as follow-ups):
- 15-3-followup-action-sha-pinning (BH-1/EH-3 — warrants global PR
  for all 3 actions: checkout, setup-node, setup-deno)
- 15-3-followup-deno-cache (BH-4/EH-6 — perf + outage resilience)
- 15-3-followup-real-body-read-timeout-test (EH-8 — needs TCP server)

PR #116 `ci.yml` merge conflict acknowledged: operator resolves at
merge time (recommend: merge this PR before #116; Case 5 regex
defends against the order being flipped).

All 4 quality gates green: type-check 0 / lint 0 / prettier clean /
jest 2164 tests pass (no net case change — patches tightened existing
cases in place).
@Simplemart17 Simplemart17 merged commit 6a070a4 into main May 17, 2026
1 check failed
Simplemart17 added a commit that referenced this pull request May 17, 2026
…ters

Symmetry with 15-4/15-5/15-6 entries (added in the retro commit).
Pre-edit the 15-2 + 15-3 lines were plain 'backlog' with no PR
pointer; reviewers of PR #117 had no in-file signal that those
stories were in flight via PRs #112 and #113.

Each line now reads: 'backlog # PR #NNN open — status flips to
"done" when PR merges' matching the established pattern.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant