Tests: Wave 4 — module breadth + install cluster (coverage 20.5% → 37.9%)#64
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)
Kernel install/marketplace cluster ~2–8×'d:
Module_Dependency97%,License_Authority94%,Vendor80%,Update_Checker79%,Module_Installer68%,Module_Github66% — 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 sharedtiger_migrationledger and sorted above MigratorTest's9xxxfixtures — sorollback(1)picked it, found no fixture file, and returned[]. A latent cross-test flake the bigger suite exposed.Fix:
Tiger_Db_Migratorgains an optional ledger-table argument (defaulttiger_migration— production behavior unchanged);MigratorTestnow 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
MIN_COVERAGE18 → 35 (the ratchet — coverage can only go up).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/codemodules +core/controllers.🤖 Generated with Claude Code