Skip to content

Tests: Wave 4 — module breadth + install cluster (coverage 20.5% → 37.9%)#64

Merged
WebTigers merged 2 commits into
mainfrom
test/wave4-collect
Jul 24, 2026
Merged

Tests: Wave 4 — module breadth + install cluster (coverage 20.5% → 37.9%)#64
WebTigers merged 2 commits into
mainfrom
test/wave4-collect

Conversation

@WebTigers

Copy link
Copy Markdown
Owner

Six parallel agents drove the previously-untested modules + the kernel install/marketplace cluster to coverage. +316 integration tests (265 → 581 green) plus install-cluster unit tests. Overall line coverage 20.5% → 37.9%.

Coverage by bucket (lines)

ally 100% seo 88% blog 83% search 73%
access 69% schedule 62% profile 56% identity 45%
analytics 41% system 37% media 34% backup 31%

Kernel install/marketplace cluster ~2–8×'d: Module_Dependency 97%, License_Authority 94%, Vendor 80%, Update_Checker 79%, Module_Installer 68%, Module_Github 66% — lifting library/Tiger 25% → 32%.

Security gates pinned with real fixtures

A real Ed25519 keypair signs a real tarball; verify-before-extract happy path and flip-a-byte tamper (refused before placement); an unsigned licensed module is refused; an authority outage aborts the install (no fail-open into an unsigned install); Tiger_Vendor's one-shared-version rule reports a conflict rather than double-installing. No product bugs found by any agent.

Real fix at collection — a flaky migrator test, root-caused

Tiger_Db_Migrator::rollback() reverses the newest applied version globally. Migration DDL auto-commits, so a module's timestamp-versioned migration (2026…), committed by the install lifecycle test, escaped the per-test rollback into the shared tiger_migration ledger and sorted above MigratorTest's 9xxx fixtures — so rollback(1) picked it, found no fixture file, and returned []. A latent cross-test flake the bigger suite exposed.

Fix: Tiger_Db_Migrator gains an optional ledger-table argument (default tiger_migration — production behavior unchanged); MigratorTest now runs against an isolated ledger, so its rollback is hermetic regardless of what else is in the real ledger. A genuine testability seam, not a workaround.

Also

  • CI coverage floor MIN_COVERAGE 18 → 35 (the ratchet — coverage can only go up).
  • Documented the recurring untestable ceiling (CLI can't satisfy is_uploaded_file() for upload happy-paths; render-only / exit;-ending controllers need a full MVC boot) — the sub-90 gaps on media/profile/backup are mostly these, not missing logic.

Next (drive to 90%)

Wave 5 = the library/Tiger kernel (9,176 lines @ 32% — the dominant remaining gap: CMS engine, Mail, Log, Location adapters, Admin registries, Form/Validate, the Model/Service branch remainders). That's what moves the overall number into the 80s. Then the agent/cms/code modules + core/controllers.

🤖 Generated with Claude Code

WebTigers and others added 2 commits July 24, 2026 17:39
…e 20.5% → 37.9%)

Six parallel agents (own worktree + DB each), collected onto one DB and verified
together: +316 integration tests (265 → 581 green) + install-cluster unit tests.

Coverage by bucket (lines): ally 100 · seo 88 · blog 83 · search 73 · access 69 ·
schedule 62 · profile 56 · identity 45 · analytics 41 · system 37 · media 34 · backup 31.
Kernel install/marketplace cluster ~2–8×'d — Dependency 97, License_Authority 94,
Vendor 80, Update_Checker 79, Installer 68, Github 66 — lifting library/Tiger 25 → 32%.
The integrity gates are pinned with real fixtures (Ed25519 sign a real tarball; a
flipped byte is refused before extraction; unsigned licensed module refused; authority
outage aborts rather than fail-open). No product bugs found by any agent.

Real fix at collection: Tiger_Db_Migrator gains an optional ledger-table arg (default
tiger_migration — prod unchanged); MigratorTest now uses an ISOLATED ledger. rollback()
reverses the newest applied version GLOBALLY, and a module's timestamp-versioned
migration (committed past the per-test rollback, since DDL auto-commits, by the install
lifecycle test) sorted above the 9xxx fixtures → a cross-test flake. Hermetic ledger
kills it.

CI coverage floor MIN_COVERAGE 18 → 35 (ratchet). Recurring untestable ceiling
(is_uploaded_file uploads, render-only/exit; controllers) documented in COVERAGE-PLAN §9.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
InstallerLifecycleTest built its fixture packages with PharData tar.gz, which
round-trips fine on local PHP 8.5 but failed to extract on the CI runner (PHP 8.3) —
the installer then reported "no valid module.json at its root" for every fixture
(3 errors + 2 failures). Build the fixtures with ZipArchive instead: the installer
detects a zip by its "PK" magic and extracts via the universally-available `zip`
extension (which CI explicitly loads), and the signature gate + single-top-dir unwrap
are archive-format-agnostic. Renamed makeModuleTarGz -> makeModulePackage.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@WebTigers
WebTigers merged commit bd847dc into main Jul 24, 2026
11 checks passed
@WebTigers
WebTigers deleted the test/wave4-collect branch July 24, 2026 21:48
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