Repository navigation
[architecture] Extract testing: PHPUnit execution, extensions, coverage and PR feedback #380
Description
Proposal / validation gate: this issue records an extraction design for maintainer validation. Repository/package names are candidates. Approve the boundary and migration plan before implementation; this task does not authorize creating repositories, implementing the extraction, releases or consumer rollout.
Problem and proposal
Propose php-fast-forward/testing / fast-forward/testing for test execution and results, separate from formatting/docs rendering. Existing TestsCommand, src/PhpUnit/*, phpunit.xml and tests workflow currently depend on the entire DevTools runtime.
Scope and contracts
Own PHPUnit argument/bootstrap resolution, DevToolsExtension, BypassFinals and notification subscribers, event tracer, ergebnis agent reporter integration, coverage threshold/summary and JUnit/HTML artifacts. Preserve caller test code and custom configuration. Notifications and final bypass remain explicit profiles, not forced in all consumers.
Own test-specific Actions/workflows, test matrix adapters, test-summary/coverage PR feedback and phpunit-tests portable skill. Generic review-request comments and project/label policy belong to repository-governance. Documentation #367 assembles supplied coverage artifacts; it does not run PHPUnit. DevTools orchestrates combined reports.
Concrete tasks / acceptance
- Define result schema: exact source SHA, suite/runtime, outcome versus valid skip/no-tests, thresholds, JUnit/coverage locations, stable exit codes and stderr diagnostics. Never represent missing coverage as success/zero by accident.
- Inventory consumers importing FastForward\DevTools\PhpUnit classes/configs and direct PHPUnit/Prophecy APIs. Decide public testing-extension API versus execution-only runtime; retain unscoped API dependencies where required. Do not promise a scoped PHAR/CPX removes class collisions.
- Reuse completed Integrate ergebnis/phpunit-agent-reporter into agent-aware PHPUnit runs #327/[tests] Structure agent-driven PHPUnit JSON results #329 reporter behavior; compare real agent and non-agent output. Preserve coverage metadata rules and bootstrap resolution in local/global/isolated installations.
- Reconcile Add --parallel support to tests command for safe, zero-workaround parallel PHPUnit execution #8 parallel testing, Add Infection command integration to evaluate mutation testing coverage #262 mutation tests and Resolve PHP test matrix from Composer constraints and setup-php stable availability #246 matrix discovery as separate unfinished capabilities, not prerequisites or automatically completed items.
- Build/test on untrusted PR code with read-only permissions; trusted feedback publisher consumes validated bounded artifacts tied to repository/PR/head SHA, never executes artifact contents. One sticky comment per test context; no unrelated review duplication.
- Validate passing/failing/skipped/empty/guide-only suites, threshold failures, unavailable coverage drivers, malformed/stale artifacts, incompatible public APIs and fork PRs.
- Pilot small library then a custom-extension/coverage consumer; preserve required-check identities or document coordinated protection change before adoption.
Alternatives
A phpunit-extension package alone omits runner/report contracts; a separate report-generation repository duplicates test result interpretation. Start one testing domain, split an extension package only if a real compatibility/release boundary requires it.
Delivery and migration gates
- One domain owner for library/CLI, relevant reusable workflow/Action, portable skill, tests and versioned docs; adapters call the same implementation. Do not create a surface solely for symmetry.
- No production dependency back to DevTools; no generic Actions repository as mandatory runtime. CPX/external execution does not isolate PHPUnit/config classes loaded in the same PHP process.
- Preserve project overrides, exit codes, JSON contracts, working directory/cache/color options, and PHP consumer compatibility. Distinguish tool runtime from application minimum.
- Validate Composer archives, runtime resources and skill provenance outside the source checkout; no host-cache absolute paths in consumer files.
- Release availability, exact workflow/runtime/skill compatibility, then pilot consumer PRs and rollback are separate gates. Never point consumers at a not-yet-published version. No release/merge/deploy/repository creation is performed by this planning issue.
- Root architecture tracking: [architecture] Plan domain-owned tooling extraction and DevTools orchestration #240; release-safe refs Define release-safe refs for consumer workflow wrappers and checked-out actions #238; open distribution redesign PR feat!: distribute DevTools through CPX and portable skills #376 must be revalidated before implementation. Evidence baseline: DevTools main 35d27ee (2026-10-21), not an assertion that PR feat!: distribute DevTools through CPX and portable skills #376 is merged.
Architectural / Isolation Criteria
- MUST: Core logic MUST live in dedicated services; commands/controllers only orchestrate.
- MUST: Separate input resolution, domain transformations and rendering; keep CLI/framework I/O out of reusable behavior.
- MUST: Support reuse/extensibility without major refactoring and deterministic, testable exits/output.
- MUST: Separate gathering/transformation from writes/publishing; repeated execution MUST be idempotent or explicitly bounded.
- MUST: Update README, command/config docs, skill references and synchronized consumer examples with the actual new ownership.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsBacklog
Activity
coisa commentedon Oct 25, 2026
Testing extraction: initial custody, assessment and next gate — 2026-10-25
The forwarded maintainer direction starts the implementation lane for this existing issue, while retaining separate repository-creation, release and consumer-adoption gates. This executor retains DevTools #376 and the Testing lane; Code Standards and consumer/framework executors keep their existing scopes. No additional implementer or card is introduced.
Verified evidence
4f3cf00517fb64adbaa26689b64431d27b40266d, base84e154046e07cafa6ac09a9e12434b1ff5dcb5e0.php-fast-forward/testingAPI lookup returned 404. This means the proposed destination is not accessible through this connection, not proof that no differently named/private destination exists.Bounded implementation plan
TestsCommand,src/PhpUnit/{Bootstrap,Coverage,Runner,Event}, their tests,phpunit.xml, testing-owned workflow/feedback sections andresources/skills/fast-forward-phpunit-tests. Keep aggregate reports and site publication with their current owners.Scenarios and observed results
Untrusted PR execution stays read-only. Any trusted feedback publisher must validate bounded artifacts against repository/PR/head SHA and never execute their contents. Serialized PHP coverage remains a trusted local API concern, not a trusted feedback artifact format.
Exact pending actions
No code changes, new repository/PR, merge, release or consumer rollout were performed in this assessment. Issue type, labels, assignee, milestone and project fields are unchanged; existing links provide coordination without another card.
coisa commentedon Oct 25, 2026
Local Testing preparation: imports/API inventory and executable bootstrap fixture — 2026-10-25
Continuing the authorized local lane without waiting for a remote repository. This is a tested local preparation patch, not an extracted package or publication approval.
Source: DevTools #376 at
4f3cf00517fb64adbaa26689b64431d27b40266d. Work is isolated; existing staged profiles/optional-skills and Code Standards/consumer checkouts were preserved.Inventory and concrete constraints
The implementation boundary contains TestsCommand (645 lines) and eight PhpUnit files (775 lines), plus XML, DI, reporter/process environment, workflow and artifact contracts. They are not safe mechanical deletions.
coverage.phpand expects its own CodeCoverage class: cross-major serialized objects are a concrete compatibility boundary. Keep this trusted-local API separate from normalized process results and trusted feedback artifacts.src/testsfound no directFastForward\\DevTools\\PhpUnitimports. This bounded local observation is not remote or active-worktree inventory. The consumer owner's fresher matrix remains authoritative for that lane.Actual local patch and results
Added only
tests/PhpUnit/Bootstrap/BootstrapShimExecutionTest.php; final file SHA-256:07dcd8f58ed6563cc869cbb78766876eaaea1ae3cf6b57a662fe7bc3e0555d1e.Used PHP 8.5.12, PHPUnit 12.5.40, php-code-coverage 12.5.8 and Symfony Console/Process 7.4.21 from an existing donor runtime, with test bootstrap remapping source/tests to the isolated worktree. No new package was installed. An initial Composer setup could not write a generated lock under filesystem restrictions, so the bounded tests reused the existing donor; there is no fresh-install claim. An existing selected test needed a writable worktree fixture directory; the same scope passed with permitted filesystem execution. No hook, policy or credentials changed.
Not executed: full DevTools quality/report/coverage gate; PHP 8.3/8.4 matrix; cross-PHPUnit-major coverage compatibility; extracted Composer archive/install; fork feedback publisher; Code Standards adoption; consumer lifecycle or namespace isolation. Focused tests do not establish those claims.
Supplier role/sync reconciliation
Read the framework lifecycle audit. At the current supplier candidate, changelog-maintainer already declares
fast-forward-changelog, and SyncCommand has no skills/agents synchronization reference. The installed legacy supplier is different. This does not prove upgrade/removal safety there; the existing consumer owner keeps the lifecycle patch and verification. No consumer edit or duplicate implementation was made.Next precise actions
Continue separating bootstrap/runtime inputs and result interpretation from Console I/O, following the real Changelog invocable POPO pattern without copying its PHP 8.5/Symfony 8.1 floor blindly. Keep public extensions and local configs compatible; bypass/notifications remain opt-in in the extracted contract. #8/#262/#246 remain separate.
Canonical Testing destination is still needed for a standalone PR, not for local inventory/fixtures. A valid exact-SHA review/publication flow is needed before publishing this patch; the suspended pipeline was not restarted or bypassed. No commit, push, PR, repository creation, merge, release or consumer rollout occurred. Existing issue metadata is unchanged.
coisa commentedon Oct 25, 2026
Local implementation cut: bootstrap runtime input and result interpretation — 2026-10-25
Implemented the next bounded local cut from the previous fixture/inventory assessment, without creating a standalone repository or resuming publication.
Baseline commit:
4f3cf00517fb64adbaa26689b64431d27b40266d(#376). This is an uncommitted local patch, not a new commit SHA or published package.Behavior and API
src/PhpUnit/Result/ProcessResultInterpreter.php: final readonly invocable POPO, accepting captured string + integer exit status and returning the existing payload. It has no Console/process/filesystem dependency. The parser was moved from TestsCommand without changing legacy semantics.runtimeAutoloadinput. Existing two-argument callers keep the same DevTools runtime resolution and consumer-first content. An explicit caller-owned runtime can now be passed without changing the consumer configuration or public namespace.Final local identity
Manifest SHA-256 across the seven files:
c128b72864f1dee2ce71ef8e748957cb88155e8aced369cea2c8058fb0ada5d7.Algorithm: sort repository-relative paths; concatenate each
path + NUL + lowercase file SHA-256 + LF; SHA-256 the concatenation. This identifies local file contents, not a Git commit/tree.df94ef64cb1839d5937d69ee2983ab2394e5ca6da92b2671566097a8287cca2d1d5e386a58f9a84d84e7f8f6d7fb231e4b9d1c4c78b7955f3aa46a23054ea2e2de067737bf5cfb3c31275488299fc4a1b8f346939751a32f0333c4abab85ec5014ca8247be4a881e1f45b098af34a25c3e7c49e26bb7ca01a55f24196dc05da710888ae82e103b23f7fc2c10f86f0ef807cb6a68ed58d893483237cf13e2d12212882d6d358c49b41171b738113cc69b2834b921db3d71fc4235041f03a3e517665d648213bd0a232363f6d907135e5c9b54293bb93a24c04a5e32995e2630a9Actual validation, sequential and focused
Not executed: full DevTools gate/coverage reports, full PHP 8.3/8.4 runtime matrix, cross-major PHPUnit coverage compatibility, extracted archive/install, fork publisher, consumer lifecycle/adoption, Code Standards integration. No release-style result schema/source-SHA fields or namespace isolation are claimed.
Remaining precise work and boundaries
Continue resolving the existing public extension/bootstrap and coverage-object compatibility constraints before a standalone extraction. Canonical remote destination remains necessary for its PR, while this local implementation does not depend on creating one. Code Standards release/skill integration stays coordinated with its exclusive owner; consumer/framework checkouts were untouched.
The publication gate remains suspended. No code commit/push/PR, repository creation, merge/release, hook alteration, policy/credential change or pipeline retry occurred. Existing profiles/skills staged work and issue metadata remain unchanged. #8/#262/#246 are still separate capabilities.
coisa commentedon Oct 26, 2026
Local continuation: coverage input seam, real archive and compatibility evidence — 2026-10-26
Reconciled before editing: #376 remains open/unmerged at
4f3cf00517fb64adbaa26689b64431d27b40266d, base84e154046e07cafa6ac09a9e12434b1ff5dcb5e0. The prior seven-file local manifest still matched exactly. No newer Testing implementation/comment was found in this issue. Existing staged profiles/skills and other executors' work were preserved.New local cut
src/PhpUnit/Coverage/MinimumCoverageResolver.php, a final readonly invocable POPO. It preserves trimming, null/blank absence, inclusive numeric 0–100 validation and the exact previous exception messages.tests/Distribution/TestingPayloadTest.php. The latter creates a real Composer archive with plugins/scripts/network disabled, extracts it outside the source checkout, and uses public dependency PSR-4/classmaps with all FastForward namespaces excluded. Its strict payload loader and reflection assertions prove the loaded DevTools classes came from the archive.Results on the final local files
78 tests / 223 assertions passed, zero warnings/errors/failures, PHP 8.5.12 / PHPUnit 12.5.40 / PCOV 1.0.12. Checks ran sequentially.
The harness initially exposed two fixture issues: macOS temporary-path aliases and omitted Safe exception classmaps. Both were corrected while preserving strict payload-origin checks. Combined coverage then exposed inherited BypassFinals stream-wrapper state during archive extraction; the archive test now runs in a separate process with global-state preservation disabled. No bypass feature, hook or warning policy was disabled. The coverage filter was corrected to include source classes referenced by existing coverage metadata. The final run above is clean.
Exact local identity
These are file-content identities, not a new Git commit or GitHub head.
Ten-file manifest SHA-256:
cc345eb1fea2cbf13e527d82081b1cd695a7f1330157c79e0169bedf3512eac7.Algorithm remains SHA-256 of sorted
repository-relative path + NUL + lowercase file SHA-256 + LFentries.b8385f788a939f7af9169d6568426447e22e503f21c654429f0b9912aec9ea3807e170ee3fc9f8e59fe9460b9a019a21a9188565908320dd75d1134ce481e1f259bf63bd48275c91dd56fa8757c725b4550d9527d63a0e6f11d31ad0a3e9248da339971c62ab60ee493d662b496754ce53480a36e15740a87da62484579cd144fd9b98beb0e264d229ae62e7937b48261cb88490abfa779e0ae13c7e2096012d866f532ad2a7d51094b58def389ae10f45a2fd3282aff07ade583776bd7b25ccThe other four files retain their previously recorded identities. Portable diff SHA-256:
ed93529aa9061c6d11b40eb388854bf212d10990fa167096143b00163dfa4b6b.Reconciled dependencies and remaining work
Code Standards v0.2.0 is now published and independently listed by Packagist at
d7ee6d191c293a1769931ae5535228a4539808fb. Its PHP 8.3 floor does not block this project. Availability is no longer a blocker; preset, tracked-file scope and CLI compatibility still need a tested adapter. Its exclusive owner/checkout was untouched.Not executed / not claimed: full DevTools quality/report suite, independent Composer dependency solve/install, PHP 8.3/8.4 behavioral matrix, cross-major PHPUnit coverage-object compatibility, complete extracted PHPUnit runtime, fork feedback publisher or consumer adoption. PHP 8.3 was not available in the inspected local runtime paths; two PHP 8.4 probe calls aborted before dispatch and were not routed elsewhere. No host runtime was repaired or installed.
The candidate Testing destination still returns 404 through the current connection; identify an existing canonical destination or obtain explicit creation authority before a standalone PR. This does not block further local work. #8/#262/#246 remain separate. Publication remains suspended: no code commit/push/PR, CI dispatch, merge/release, repository creation, hook alteration, credential/policy change or consumer edit occurred. The two principal-checkout Dependabot modifications remain preserved with custody unknown.
coisa commentedon Oct 26, 2026
Container #49 reconciliation: local hardening prepared, integrated checks queued — 2026-10-26
Read Container #49 and reused the existing interpreter rather than introducing another implementation. This is a new local cut on baseline
4f3cf00517fb64adbaa26689b64431d27b40266d.Validation boundary: the previous 78 tests / 223 assertions apply only to manifest
cc345eb1…. They do not validate the changes below. Current integrated PHPUnit/ECS/lifecycle checks are queued under the explicit Mac load hold; no full gate or concurrent heavy job was started.Destination deduplication
php-fast-forward/testinglookup returned 404.Prepared local changes
4 × output-lengthbyte-inspection budget and stops after two reporters; exhaustion returns failure/full output.JUnit evidence: established versus pending
A small real-PHPUnit fixture with a successful fake notifier passed before the notification change: one JSON document, one valid JUnit document and one notifier marker (1 test / 12 assertions). That positive path did not reproduce Container's saved malformed JUnit.
The fixture now also contains a throwing-notifier case with failOnWarning=true, asserting a single reporter/XML document and a nonzero failed result. It uses a fake notifier only—no operating-system notifications. This new exception scenario has not been executed. The unsafe child-continuation path is established by source inspection; reproducing/fixing the exact saved Container incident is not claimed yet.
Checks actually completed for this cut
Current file-content manifest SHA-256:
3370f817175e0d7e4b3fc70b1eb369ee180f948a1371f3c61874e648baeaac7c.Same algorithm as earlier: SHA-256 of sorted
repository-relative path + NUL + lowercase file SHA-256 + LFentries. This is not a new Git commit/head.65f55c78969ea6719f695466a9726c1900d34b0d01154bf861937ddd4a164169853d5e28a43756e9a5cc7ae502960a23d7211c56bfd84207bb2d4e2fb135048344b55eb8072ac84102b2d1da2b9e67b9def06b92eaf701c88f15bc1634089ad2d5ac79a32a0c9e0be064a35025359c43f9afb115a99af3addf0be65a58881597Cumulative local patch SHA-256:
f5889bb086fe81c19a171fba61c7ca0545501799bba42ff06f2c7f87190d1382.The prior validated patch remains preserved separately.
Next concrete delivery and exact dependencies
Once a coordinated test slot is available, run the focused command/interpreter regressions and both real-PHPUnit notifier scenarios sequentially, confirm single valid JUnit and failure exits, then scoped ECS and package/coverage checks. The last observed local load was still high; no jobs from this executor remain active.
Standalone Testing still needs a confirmed canonical destination; that only gates the standalone repository/PR, not these local changes. Full extraction, public extension/coverage-major compatibility, skills ownership transfer, matrix, feedback trust and Code Standards bootstrap parity remain incomplete. #8/#262/#246 stay separate.
No consumer/vendor patch, repository creation, dependency installation, credential/policy change, code commit/push/PR, CI dispatch, merge or release occurred. The publisher remains suspended; Code Standards, consumers and the two principal Dependabot modifications were untouched.
coisa commentedon Oct 26, 2026
Reserved focused slot: successful notifier qualified; remaining scenarios held — 2026-10-26
Continued the existing hardening cut using its source, fixture and donor runtime. No full suite, coverage, matrix, compilation or installation was started.
Actually executed
The first attempt stopped in the fixture with undefined
Safe\random_bytes(), before production was exercised. Corrected that import to nativerandom_bytes(); no production edit was needed.Retried only the successful fake-notifier dataset on the current synchronous subscriber: 1 test / 12 assertions passed, PHP 8.5.12 / PHPUnit 12.5.40, test-body duration 0.194 seconds. It confirmed one JSON report, one XML declaration/valid JUnit document, one testcase and one notification marker. No real OS notification was sent.
The invocation used a 35-second global timeout, the fixture's 15-second child timeout, a separate owned temporary directory and cleanup. No timeout fired and no user/uncertain process was terminated.
Load and exact queue
Initial observed load was 6.81/16.12/36.52, then 15.17/16.36/35.29 at the short retry. The next observation rose to 20.89/17.54/35.28. No further scenario was started; this executor has no active jobs.
The next coordinated slot must run one dataset at a time, rechecking compatible load before each:
PhpUnitNotificationLifecycleTest.php --filter='notification throws': require a failed/nonzero inner result under failOnWarning, one JSON report, valid single JUnit and one notifier call.TestsCommandTest.php --filter='explicit failure from warning': reject queue exit zero with an explicit failed reporter.TestsCommandTest.php --filter='successful and failed reporters': reject mixed consecutive reporters.TestsCommandTest.php --filter='two successful reporters remain ambiguous': reject duplicate success reporters.All four remain unexecuted. Exact bounded commands/helper were preserved locally. No automatic loop or concurrent job was scheduled.
Current identity and review
Twelve-file content manifest:
3675d84ebe7c33109dff3bf7903fa41ee58c0182df5cb654e398642e7475a478.The only source-tree delta from the previous manifest is the fixture import correction. Its new SHA-256 is:
ef38af96994fe3d6176c563b0f5fea914edb27b97c2571e20b1b95ba38400d95.Independent static review confirmed this manifest with no new actionable finding. A cumulative local patch was preserved; its reverse-apply check passed without changing the worktree.
The earlier 34 direct cases do not certify command/lifecycle integration. The earlier 78 tests/223 assertions apply only to
cc345eb1…. This positive notifier result does not qualify the exception path or reproduce the exact saved Container #49 incident. ECS and broader requalification remain pending.No Container runtime/vendor, other owner's checkout, hook, policy, permissions or credentials were changed. No code commit/push/PR, remote CI dispatch, merge or release occurred; the publisher remains suspended.
coisa commentedon Oct 26, 2026
Focused hardening qualification completed — 2026-10-26
Completed the next authorized gates after the reserved notification/command slot. No full suite, coverage measurement, PHP matrix, compilation, installation/download or code publication was started.
Exact scenario coverage
PHP 8.5.12 / PHPUnit 12.5.40; no outer test warning/error/failure. The five notifier/command tests already approved were not repeated. The final 35 interpreter/archive cases ran after the style corrections described below. This table is scenario coverage, not a numerical code-coverage measurement.
Fake notifiers sent no real OS notification. Timeouts remained 35 seconds globally and 15 seconds for the notification child; owned temporary directories were cleaned. No timeout fired, no unrelated process was interrupted, and no job remains active.
Scoped ECS and final identity
ECS checked only the eleven changed PHP files, using existing repository rules, PHP engine and an external temporary configuration with parallelism disabled. No automatic fix flag was used.
The first check found zero errors and style differences in three files. Only those differences were applied manually: three substr qualifications and test chain/array layout. Only those three files were then rechecked: zero errors / zero differences. Eight unchanged clean files were not needlessly rerun. Independent review confirmed these edits preserve behavior and assertions.
Final twelve-file content manifest:
fd5a1d166fe5e761326363e06cbb469da62be34af0b9f38bbb18d58f8fc19cad.Same manifest algorithm as previous notes. Independent read-only review reconfirmed this exact identity with no actionable finding. This is a local file manifest, not a new commit/GitHub head. The cumulative patch is preserved locally and its reverse-apply check passed; patch SHA-256:
491744ed9a6cabb16b759a16004684d35867bda8c7e6a6847e5a49b0d783e154.Load was checked before each gate (4.43 before ECS; 3.67 before its recheck; 3.65 before interpreter tests; 3.56 before archive test). All execution remained serialized. ECS had a 45-second global timeout.
What still prevents qualifying Container #49
cc345eb1…and are not added to this selection.Next safe work is local compatibility/full-gate preparation under a separately coordinated slot, followed by actual consumer qualification only through its owner and an available reviewed runtime. Canonical Testing destination, complete extraction/skill ownership and feedback trust remain unfinished; #8/#262/#246 stay separate.
No code commit, push, new PR/repository, remote CI dispatch, merge/release, hook relaxation, credential/permission change or consumer edit occurred. Code Standards/other owners and the principal Dependabot changes were preserved. NoM publication remains suspended.
coisa commentedon Oct 27, 2026
Independent Testing candidate — local checkpoint (2026-10-26)
The independent local candidate now exists with its own
fast-forward/testingmanifest,FastForward\TestingAPIs, invocable Symfony CLI, bootstrap/coverage/result/JUnit helpers, native trace-only extension, explicit optional integrations, opt-in legacy bridge, MIT license, icon, andfast-forward-phpunit-testsskill payload. README and API/migration inventory are authored. No canonical repository or release has been created.Static review found that the first runner cut ignored the consumer XML bootstrap. This is corrected: explicit CLI bootstrap wins, otherwise XML-relative bootstrap, then project autoload. The offline harness now covers XML bootstrap and explicit override, and is prepared for 23 serialized path/archive installation and runtime checks using existing local dependencies only.
Completed checks so far: PHP lint on 18 PHP/entrypoint files (no errors), Composer manifest validation (valid). These are structural checks, not successful package execution. The 40 earlier corrective DevTools tests are separate evidence and do not qualify this candidate.
The offline installation/runtime slot has not started: its load guard returned
not-startedat load 11.03 (limit 10), after an earlier peak of 34.09. Next step is one bounded offline slot when capacity permits, then a frozen candidate manifest and result. Officialskills-refis unavailable locally; no download or installer fallback was attempted.No code commit/push, remote CI, repository creation, merge/release, consumer/vendor edit, LLM Skills installation, credential/policy change or NoM workaround occurred.
coisa commentedon Oct 27, 2026
Independent Testing candidate — offline qualification completed (2026-10-26)
Following the local checkpoint, the independent candidate completed 23 grouped checks in one serialized offline slot. This is actual
fast-forward/testing/FastForward\Testingcandidate evidence, separate from the earlier 40 corrective DevTools tests.Implemented cut: own manifest/CLI/invocable runner, explicit bootstrap and runtime autoload, result/coverage APIs, JUnit validator, strict bundled XML, native trace-only extension with explicit optional capabilities, opt-in legacy bridge, MIT license/icon and
fast-forward-phpunit-testsskill. README and FQCN/constructor/migration inventory are included. No canonical repository or release has been created.Completed: mirrored-path installation and real Composer ZIP installation, each using its own generated autoloader with no DevTools dependency/loader. In both modes: passing and intentionally failing assertions, XML bootstrap execution, explicit bootstrap override, real nonempty coverage below the requested 100% minimum, absent-tests failure, unavailable notification/bypass rejection, installed API locations, valid JUnit and four rejection cases (truncated, two documents, DOCTYPE, wrong root), and unchanged consumer Composer/XML/bootstrap/source files. Development directories were excluded from the installed archive. All 23 completed; zero failures. Temporary fixtures were removed and no timeout fired.
Runtime: PHP 8.5.12, PHPUnit 12.5.40, PHP Code Coverage 12.5.8, Symfony 7.4.21, PCOV 1.0.12. Existing local dependencies only; Packagist/network/plugins/scripts disabled, platform/security policy preserved, no remote fallback.
0.0.0is synthetic fixture metadata. Load was 8.53 before the runtime slot; timeouts were 120 seconds outer / 110 internal / 45 Composer / 15 CLI. Structural checks: 18 PHP/entrypoint lints and strict Composer manifest validation passed.Independent static review found and closed two P2 issues: ignored XML bootstrap and a guide link escaping the installed skill payload. No remaining actionable finding was reported; this is static review, not a full gate or review approval.
Runtime-qualified 33-file manifest:
0021144436c8f1c4d8073f259bbd61daf9aa18320c8d2ab3b71287bab294b792. Only README/inventory status text changed afterward. Final 33-file manifest:f7d150d5fd3db7fba3d628e25cd65379e3a44034dad770508c16eecdf540dcc0. A durable final ZIP was built offline; all 30 production entries match final source byte-for-byte, with zero missing/unexpected/mismatched files, including license/icon/complete skill references. ZIP SHA-256:b1c31f3ca846450e338f362d8e4a190f31b1035375f7848afa9cde986029f57c. The final ZIP was not reinstalled after the documentation-only delta.Still open: canonical destination/release baseline; CPX and real consumer qualification; full candidate suite/style/static analysis and supported-version matrix; legacy bridge and successful optional-integration cases; bundled fallback, empty/skipped suites, timeout/artifact-failure branches. Official
skills-refis absent locally; no download was attempted. LLM Skills lifecycle/host activation remain unverified. Parallel/mutation/profile/report-publisher work remains separate. Shipped skill does not mean installed or activated skill.The original corrective DevTools manifest remains
fd5a1d166fe5e761326363e06cbb469da62be34af0b9f38bbb18d58f8fc19cad. No code commit/push, new repository/PR, remote CI, merge/release, consumer/vendor change, LLM Skills installation, credential/policy change or NoM workaround occurred.coisa commentedon Oct 27, 2026
Same independent Testing candidate — development matrix and skill lifecycle (2026-10-26)
Continued the existing local candidate after the 23-check qualification. No repository or release was created and those 23 installed checks were not needlessly repeated.
composer checkin a newly installed offline development graphcomposer checkin its own fixtureThese are the same 73 distinct cases in selected matrix cells, not summed unique-test counts. 35.80% remains a substantial coverage gap, especially runner/native-extension/subscriber behavior; no threshold was added/lowered or source excluded to obtain a pass.
The composed gate validates Composer/platform, runs the own suite with Clover, checks style through the official Code Standards preset, runs PHPStan level 6 and checks the local fragment. The graph has no DevTools. Code Standards is development-only
0.2.0/d7ee6d191c293a1769931ae5535228a4539808fb(ECS 13.3.11). An already installed matching runtime was found and read without supplier edits; owned fixture copies preserved its bytes and genuine source reference. Changelog stays external at0.4.0/db4a939e7d0d372cdc8f06788a9326f70282d35c, on PHP 8.5, without raising Testing's production PHP constraint. PHP 8.4's install-only helper explicitly did not repeat the PHP 8.5 composed check.Preserved diagnostics and real fixes:
composer checkfailed PHPStan with 13 errors, because optional DG/Joli API types were absent from that graph. They now belong torequire-devfor development analysis/testing; consumer requirements/suggestions remain unchanged. The corrected full graph passed. No baseline, ignored class/error, fake stub or source exclusion was introduced.RuntimeExceptionPHPDoc reference was qualified. Sixteen files needed whitespace/braces/trailing-comma formatting; native patch and subsequent exact gates are preserved.Real skills lifecycle: existing official
llm/skills 1.15.0/3ee0a545bf3ab77591fd9c35f0317191d78203c5passed seven grouped offline stages: install, official init/add/update, complete six-file byte comparison, auto-sync preserving a manual sentinel, nondestructive source removal and donor removal.skills.jsoncame from the official commands. This proves synchronization, not host activation/model behavior. No global skill/catalog or host-link changes occurred.Final source manifest: 50 files,
c0aa18766813e429e22f3c4408bb953bfa833832a097453cfb9f7c42665faba0(generated roots excluded). Independent read-only review recomputed and matched every file, with no actionable finding. Updated ZIP: 30 production files, SHA-25625fc42a8c0d9daf241bd4616c00ecfa5ac348a8602869e39e661b29a72626595; all entries match source, including the six unchanged skill files. Earlier manifests/ZIPs/results remain preserved. Normalized significant tokens of 17 production PHP/entrypoint files match the prior qualified ZIP apart from comments/whitespace/trailing commas. The DevTools corrective manifest remainsfd5a1d166fe5e761326363e06cbb469da62be34af0b9f38bbb18d58f8fc19cad.Finite gaps: no PHP 8.3 binary was found in inspected Homebrew/Cellar/PATH/Herd/phpenv/asdf/mise locations; the declared floor is not runtime-qualified. Other allowed dependency versions/lower bounds and broader behavior branches remain unexecuted. Official
skills-refis absent and its stale editable cache points to removed source; no download was attempted. Full Xdebug composed gate, native activation/model exercise, CPX, trusted feedback/fork workflows and real consumer pilots remain separate. Read-only GitHub search/public API still do not establish a canonical Testing repository (API 404); #380 retains candidate names. This issue is not complete/release-ready.All heavy checks were serialized behind load preflights; owned temporary fixtures were cleaned and no timeout fired. Existing local payloads only, Packagist/network disabled, platform/security policy preserved. No code commit/push/new PR, repository creation, remote CI dispatch, merge/release, consumer/vendor/provider edits, host PHP configuration, GitHub Environment/credential/policy change or NoM workaround occurred. This is not a fresh advisory audit.
coisa commentedon Oct 27, 2026
Behavioral/input-preservation cut — final regression held for capacity (2026-10-26)
Continued the same local independent candidate. 61 new distinct targeted cases passed / 491 assertions: runner 41/330; native extension and notification lifecycle 16/133; generator input collisions 4/28, on PHP 8.5.12 / PHPUnit 12.5.40. No canonical repository/release was created.
Concrete fixes, with controlled temporary sentinels:
allow-no-tests; retain the supported guide-only case without default vendor bootstrap. Empty suites cannot satisfy coverage, including minimum zero.TestingExtensionwithout changing tracing-only defaults. Actual BypassFinals stayed child-only; fake transports proved true/false/exception delivery attempts, same PID, one JSON and valid single JUnit. No real OS notification was sent.New generator fourth argument is optional; existing three explicit path arguments remain compatible. The tests use real PHPUnit for normal outcomes/config/coverage/timeout, and visibly named process stubs only for faulty artifact producers. No real consumer/provider/vendor files were targeted.
Affected gates passed: PHPStan 2.3.1 level 6 (zero errors), Code Standards 0.2.0/ECS 13.3.11 (clean after native whitespace-only patches), Changelog 0.4.0 (three valid fragments). Independent read-only review closed the findings and recomputed the 72-file manifest exactly:
7c498b951d6f438864306f8014cc5c182b2ee34a3297e341b134fb73e0c6ac62.Qualification boundary: an intermediate complete run passed 120 tests / 439 assertions, 289/361 lines (80.06%), but it preceded the final input-collision guard. It does not qualify this final manifest. The expected final 134-case / 617-assertion regression has not started after that delta, and no current final coverage is claimed. Child extension lifecycle execution is not merged into parent coverage.
Concrete capacity blocker: final-suite preflight exited 75 at load 15.7153 (limit 10), with later observations 57.15, 35.91, 60.09 and a retry at 20.9111. PHPUnit did not start. Heavy checks remain held under coordinator direction; no guard was weakened or unrelated process interrupted. Only the intentional timeout fixture stopped its own child. Next available serial slot runs the frozen final suite/coverage, affected PHP 8.4 checks and new archive byte comparison; no new maintainer decision is required for those queued local checks.
Earlier manifests/ZIPs/results are preserved; earlier ZIPs are pre-fix snapshots, not current qualified artifacts. The old 23 installed checks, previous composed gates and unchanged six-file skill lifecycle were not repeated. Alternative dependency graphs remain not executed rather than declared impossible. PHP 8.3, skills-ref, CPX/publication, host activation, trusted feedback/fork workflows and real consumer pilots stay unqualified.
No code commit/push/new PR/repository, merge/release, remote CI dispatch, consumer/provider/vendor or global host/skill/catalog change, credentials/Environment/security policy change, download or NoM workaround occurred. #380 remains incomplete.
coisa commentedon Oct 27, 2026
Final PHP 8.5 regression completed; PHP 8.4/archive still capacity-held (2026-10-26)
The behavioral/input-preservation checkpoint now has a completed final regression on the exact frozen 72-file source
7c498b951d6f438864306f8014cc5c182b2ee34a3297e341b134fb73e0c6ac62:The slot started only after the existing preflight passed at load 9.7944. The next PHP 8.4 command did not start: preflight exit 75 at loads 35.4683, 26.3091 and 41.1602 (unchanged limit 10). Those resource observations are not test failures. No unrelated process was interrupted; the deliberate timeout fixture stopped only its own child.
Current affected PHPStan/style/lint/three-fragment checks and the independent exact-manifest review are green. The 61 new distinct cases / 491 assertions remain accounted separately; no repeated old 23-check/skill-lifecycle counts are added. Both previous composed Composer gates still apply to their earlier source and are not claimed as current composed runs.
Queued local work, requiring capacity rather than another maintainer decision: run the frozen source's PHP 8.4 regression, build its current archive and byte-check the payload. Earlier ZIPs remain preserved pre-fix evidence; no new current archive is claimed during the hold. Alternative dependency graphs were not attempted this cut. PHP 8.3, official skills-ref, CPX/publication, native host activation, trusted feedback/fork workflows and real consumers remain unqualified.
No source changed after the freeze. No code commit/push/new repository/PR, merge/release, remote CI dispatch, consumer/provider/vendor/global host or skill/catalog change, credential/security/Environment change, download or NoM workaround occurred.
coisa commentedon Oct 27, 2026
Frozen Testing cut: PHP 8.4/archive reconciled; current ZIP installed and qualified offline (2026-10-27)
This supersedes the pending PHP 8.4/archive state in the previous receipt.
Previously completed, not repeated here: the same frozen 72-file source manifest
7c498b951d6f438864306f8014cc5c182b2ee34a3297e341b134fb73e0c6ac62passed PHP 8.4.27 with 134 tests / 617 assertions / 307 of 379 lines (81.00%), matching the preserved PHP 8.5.12 result. The final PHP 8.4 run took 6.727 seconds after load preflight 8.5244. Independent exact-manifest review found no remaining actionable finding for that cut.New installed-artifact qualification: the current 30-file ZIP, SHA-256
5738dc4535a61a6e92a91b2d6515ab563c82a1b22124c53f19bde675db9295de, was installed through Composer in a new isolated offline fixture using a local ZIP dist repository and already available dependency payloads. Every installed package file matched the ZIP byte-for-byte before and after qualification. No production source was copied from the candidate checkout. The frozen source manifest and ZIP stayed unchanged.Passed on PHP 8.5.12:
d7ee6d1source), with 15 files checked and zero errors/diffs. External analysis runtimes and optional type sources were selected explicitly; none was a hidden runtime fallback.Installed runtime: PHPUnit 12.5.40, Code Coverage 12.5.8, Symfony 7.4.21, Safe 3.4.0, Agent Reporter 1.3.0. Optional DG/Joli and DevTools were absent from the installed production graph. Composer's fixture-only
0.1.0-devidentifier is not a release/version assignment.Gate boundary: this was a composed external qualification of code actually installed from the ZIP, including an external Composer check driver. The distributed ZIP deliberately omits development tests/configs/tools/fragments; its source-development
composer checkis consequently not runnable as a packaged self-check and is not claimed green. No source-coverage matrix, old 23-check receipt or old skill-lifecycle count was repeated or added to this result. No current full development-source Composer gate is claimed.Capacity checks held execution until load was below 10; every launched stage passed its own preflight, ran serially and had a bounded timeout. Initial qualification-harness issues (Composer version label, binary-safe inventory, CLI invocation/canonical path comparison) were corrected only in the external harness; prior failed attempts remain in the local receipt. No package source change or ZIP regeneration was needed.
This closes the current local ZIP-installation qualification gap, not all of #380. PHP 8.3, official skills-ref, alternative dependency graphs, CPX/canonical repository/publication, host activation, trusted feedback/fork flows and real consumer adoption remain unqualified. No code commit/push/new repository/PR, merge/release, remote CI, consumer/provider/vendor mutation, host/global skills/catalog change, credential/auth/policy/Environment change, denied-download workaround or NoM change occurred. The denied #436 complement was not repeated.
coisa commentedon Oct 27, 2026
Local alternative graphs, CPX adapter, test-feedback draft and host discovery (2026-10-27)
Follow-up to the installed-ZIP receipt, within #380/#240/#238 only. Frozen ZIP SHA-256
5738dc4535a61a6e92a91b2d6515ab563c82a1b22124c53f19bde675db9295deand 72-file source manifest7c498b951d6f438864306f8014cc5c182b2ee34a3297e341b134fb73e0c6ac62remained unchanged. The 134-test/617-assertion source matrices and previously approved gates were not repeated.Actually installed alternative graphs, offline, on PHP 8.5.12:
Both installations used the exact frozen ZIP, mirrored existing dependency payloads, passed platform checks and retained 30 byte-identical package files, with no DevTools dependency. Composer solved these actual pinned graphs. The second graph intentionally combines older PHPUnit/Coverage assets with compatible Symfony/reporter assets; it is not a claim of exhaustive lowest-dependency support. Composer Semver additionally confirmed that available Console 7.3.10, PHPUnit/Coverage 13, Symfony Filesystem/Process 8, DG 1.9, Joli 3.3 and Reporter 0.3 fall outside the corresponding candidate constraints; they were not forced into runtime fixtures.
Positive and negative contexts are separate. In each profile, the positive native result was
passed / exit 0 / reporter success, one test / one assertion, with zero warnings, PHPUnit warnings, failures and errors. Its tiny application fixture covered 1/1 line; this is not the package's 81% source coverage. Separately, the deliberately colliding consumer namespace producedfailed / exit 1 / reporter failure / one PHPUnit warning: the replacement TestingExtension did not implement PHPUnit's Extension interface. That diagnostic belongs only to the expected negative. The positive feedback plan comes from the clean positive result. The outer harness is green because it asserts both outcomes, not because it hides the negative.Other new fixture checks exercised native skipped, no-tests/unsatisfied coverage and reporter-null preflight results, plus a generated-bootstrap/input collision that preserves input bytes.
Actual CPX 2.1.0: its documented local-package adapter executed the ZIP-installed runtime through an explicit fixture manifest/bin adapter. Cwd, JSON envelope and installed runtime origin were preserved; a local package without dependencies failed. This did not resolve or download an unpublished Testing package and does not establish canonical registry/Packagist/CPX adoption. Cold published resolution remains a destination/version decision.
Local unshipped feedback draft: a dedicated invocable POPO now transforms bounded test-result JSON into a sticky test-context comment plan. It is outside the frozen package/ZIP. It validates schema, repository/PR/head/run/context/workflow identity, exact SHAs, digest, size/depth bounds and native result consistency. A fake authenticated transport and in-memory publisher exercise stale SHA, unverified transport, digest/identity mismatch, malformed/oversized input, contradictory failure/error counts, all-skipped consistency, counts-unavailable failures and idempotent per-context publication keys. An absolute malicious-PHP sentinel remains absent; artifact contents/paths are never executed or rendered. These are local contract proofs, not real GitHub authentication or publication.
Actual isolated host discovery/configuration: Codex 0.164.0 app-server found the complete six-file skill payload copied from the installed ZIP, reported repository scope/enabled status, disabled then re-enabled it through
skills/config/write, and rejected a malformed skill. Onlyinitialize,skills/listandskills/config/writewere used in an owned HOME/CODEX_HOME. No authentication file, thread/model session or model skill invocation was created. The owned server stopped. This qualifies discovery/config enablement, not model execution or global installation.Independent read-only review found no remaining actionable finding at the recorded exact draft/harness hashes. It caught and we corrected reporter-null/no-tests handling, contradictory success/error data, skipped consistency and the malicious-sentinel proof. A separate initial one-line application fixture yielded zero executable coverage; correcting only that owned fixture to multiline produced 1/1, without changing package source.
Finite remaining gates:
All launched stages passed load preflight, ran serially and had bounded timeouts. No real notifications, consumer/provider/vendor mutation, global host/catalog/skill/link change, credentials/security/NoM/hook change, remote CI, code commit/push, repository/PR creation, merge or release occurred. Only owned fixtures were installed/configured; only owned processes were stopped. No generic feedback framework or #436 complement was added. Issue #380 remains open.
coisa commentedon Oct 27, 2026
Opt-in feedback integrated into a new local Testing cut (2026-10-27)
Follow-up to the local qualification receipt. The reviewed feedback draft is now integrated into a new unpublished local candidate, while the original 72-file manifest
7c498b951d6f438864306f8014cc5c182b2ee34a3297e341b134fb73e0c6ac62, ZIP5738dc4535a61a6e92a91b2d6515ab563c82a1b22124c53f19bde675db9295deand historical receipts remain intact.New cut: 77 files, manifest SHA-256
b44585daa6d3c59c873c7298b78c32b9b0ad19d3a3af4b996c3db91bea186ebd. Added only the dedicated TestFeedback invocable, two test files, contract documentation and one minor fragment; updated README/inventory/development documentation. Composer dependencies, bin/CLI, native result schema, TestRunner, extension defaults and skill payload are unchanged.The planner is explicitly opt-in PHP API only. It accepts bounded wrapper JSON, trusted expected identity and independently authenticated transport metadata; it returns a deterministic sticky-comment plan. It never publishes, performs network requests, reads artifact paths or executes PHP coverage. No automatic registration/activation was added.
The integrated contract binds repository, PR, head, run, workflow SHA and context at both transport and artifact layers, plus exact digest and authenticated creation time. The caller supplies an explicit integer trusted clock and positive age window; future, stale, mismatched or ill-typed timestamps fail, including exact boundary tests. The wrapper is separate from the unchanged native schema. Coverage/result consistency, reporter-null failures, all-skipped/no-tests behavior and inert PHP/path data are tested. A future live publisher must still recheck current PR head immediately before a write.
Executed current-cut gates:
composer check: 272 tests / 795 assertions, 395/467 lines (84.58%); planner 88/88 lines. This includes manifest/platform, full test coverage, full lint/style, PHPStan and four validated fragments. No threshold/filter weakening.55916394b1b5f9a1e212efde1d10721ff84758c068b904d7a4554588fa482cf4: archived from the frozen newsource, installed offline into a new owned fixture, byte-equal before/after. The explicit installed API probe proved lazy loading, correct autoload origin, no DevTools dependency and an opt-in plan using simulated transport. The ZIP adds the API/doc while retaining archive exclusions for development files.Independent read-only exact-delta review found no remaining actionable finding and separately recomputed the 77-file manifest, ZIP/install/source equality and source equality with the full composed fixture. Test review confirmed the final Git-fixture isolation and simulated-auth documentation. Reviewers executed no checks.
One important review correction is preserved by a real native regression: PHPUnit can emit two failure events for one test when both body and tearDown fail. The planner preserves that actual failed envelope instead of imposing an invalid per-test event cap. The positive/negative namespace-warning reconciliation from the preceding receipt remains historical and separate; no prior green gate was silently reused for this new cut.
All checks were serial, bounded and capacity-gated. High-load preflights held the PHP 8.4/package steps until safe. CPX/skill/alternative-graph gates were not repeated because these surfaces did not change. The native regression uses only an owned Git fixture with explicit SHA-1 and cleared inherited Git routing/config overrides; no repository code commit was made.
Still finite and separate: PHP 8.3 and official skills-ref resources; canonical destination/release/ref/adoption decisions; real fork producer/authenticated transport/live publisher/final-head transaction and real consumer/model-session qualification. Authentication/publication are still simulated, not claimed implemented. No canonical repository/release, code commit/push/PR, remote CI, merge/release, consumer/vendor/host/global/credential/security/NoM/hook change, real notification or denied-download/#436 retry occurred. #380 remains open.
coisa commentedon Oct 27, 2026
Backlog candidates — Testing extraction
Record ergebnis/phpunit-slow-test-detector as a candidate to evaluate for the Testing extraction tracked in this issue. This is a planning entry only: the package is not approved as a dependency, installed, or implemented by this update.
A future evaluation should cover:
No dependency investigation, downloads, implementation, consumer adoption, or changes to existing gates/publication policy are part of this backlog registration.
Additional candidate — test data providers
Record ergebnis/data-provider as another candidate to evaluate, alongside the slow test detector above. Future evaluation should assess its usefulness for test data, PHP/PHPUnit compatibility, and the boundary between a development/test tooling dependency and any API intentionally offered to consumers. Avoid introducing an unnecessary runtime dependency.
This addition is also planning only: no dependency approval, installation, implementation, investigation, or downloads.