Tests: Wave 6 — modules + dispatch harness (coverage 59.2% → 70.0%)#67
Merged
Conversation
… 70.0%) Five parallel agents on the module + controller layer, collected + verified on one DB: ~167 tests, combined suite 1617 green. The unlock: a controller dispatch harness (ControllerTestCase, landed #66) that runs a controller action with view-rendering off — so core/controllers (0% before) and every module controller are now coverable. Results: core-controllers 0→87% (Api 80, Auth 79, Error 95, Index 87, Page 98, Admin 91), cms 33→94, code 41→90, agent module 6→66-78, system 37→59, + module controllers (profile 68, access 84, blog/media/analytics/identity/ signup/search/schedule 90-100%). REAL BUG FIXED (a test found it): Backup_IndexController::_json(int,string,array):string was an incompatible override of Tiger_Controller_Action::_json($data,$status) — a PHP 8.5 fatal at class load, so EVERY /backup request 500'd (the backup admin UI was broken). Renamed the helper to _jsonBody(); replaced the characterization test with real dispatch coverage. Harness hardening (3 agents independently hit it): folded redirector->setExit(false) into ControllerTestCase setUp (the redirector exits after headers → would kill the PHPUnit process on a controller redirect). CI floor MIN_COVERAGE 55 → 66. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
WebTigers
added a commit
that referenced
this pull request
Jul 24, 2026
…tie) (#68) messages_append_and_transcript_reads_oldest_first appended two messages in the same millisecond, so neither created_at (second precision) nor the time-ordered v7 message_id could order them deterministically — transcript()'s message_id-DESC tiebreak fell to the v7 random bits, and the order flipped ~intermittently (green in #65, red in #67's CI run). Real conversation turns are seconds apart; force a created_at gap so the oldest-first assertion is deterministic. Verified stable across repeated runs. No source change — the model's ordering is correct for real use. 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.
Five parallel agents on the module + controller layer, using the new dispatch harness. ~167 tests, combined suite 1617 green. Overall line coverage 59.2% → 70.0%.
The unlock: a controller dispatch harness
ControllerTestCase(landed in #66) instantiates a controller and dispatches one action with view-rendering off — the action body runs (branch logic,_jsonbody, redirect /_forwarddecision) without the theme/view-script stack. This madecore/controllers(0% before) and every module controller coverable for the first time.Coverage by bucket (before → after)
All six core controllers: Api 80, Auth 79, Error 95, Index 87, Page 98, Admin 91.
Real bug fixed (a test found it)
Backup_IndexController::_json(int $result, string $messageKey, array $data = []): stringwas an incompatible override ofTiger_Controller_Action::_json($data, $status = 200)— under PHP 8.5 that's a fatal at class declaration, so every/backuprequest 500'd (the backup admin UI was entirely broken). Renamed the helper to_jsonBody(); the characterization test that pinned the fatal is replaced with real dispatch coverage of index/download/restore.Harness hardening
Three agents independently hit it, so it's folded into the base:
ControllerTestCasenow setsredirector->setExit(false)(the redirectorexits after sending headers by default, which would kill the PHPUnit process the moment a controller action redirects).Honestly-bounded ceilings (covered at guard level, not chased)
Updates::_applyOnewould run a realcomposer update/ swap the livevendor/on a dev box;is_uploaded_file()uploads; live-model agent turns; render-only.phtmlleaves. CI floorMIN_COVERAGE55 → 66.Next
At 70%, the remaining lever to 80% is the library kernel (66%, 3,123 uncovered) — Wave 7 targets its reachable remainder.
🤖 Generated with Claude Code