Skip to content

[architecture] Extract testing: PHPUnit execution, extensions, coverage and PR feedback #380

Open

Description

@coisa

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

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

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.

Activity

  1. coisa commented on Oct 25, 2026

    @coisa
    ContributorAuthor

    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

    • PR #376 remains open/unmerged at 4f3cf00517fb64adbaa26689b64431d27b40266d, base 84e154046e07cafa6ac09a9e12434b1ff5dcb5e0.
    • This issue is open and had no assignee/comments when read. Executor custody comes from the coordination direction; no GitHub assignment was inferred.
    • Read [architecture] Plan domain-owned tooling extraction and DevTools orchestration #240 and Define release-safe refs for consumer workflow wrappers and checked-out actions #238. DevTools retains composition; domain packages own behavior and compatible runtime/workflow/skill refs. Installation does not authorize publication.
    • Organization search found no Testing repository; direct php-fast-forward/testing API lookup returned 404. This means the proposed destination is not accessible through this connection, not proof that no differently named/private destination exists.
    • Inspected the real Changelog CheckCommand: readonly invocable POPO, Symfony command/input attributes, injected service interfaces, SymfonyStyle and explicit exits. Its manifest currently requires PHP ^8.5 and Symfony Console ^8.1; those requirements must not silently become the public Testing consumer floor.

    Bounded implementation plan

    1. Preserve existing staged optional-skills/profile work. Use an isolated Testing worktree from the verified current DevTools head; do not edit another executor's checkout.
    2. Inventory TestsCommand, src/PhpUnit/{Bootstrap,Coverage,Runner,Event}, their tests, phpunit.xml, testing-owned workflow/feedback sections and resources/skills/fast-forward-phpunit-tests. Keep aggregate reports and site publication with their current owners.
    3. Extract plain injected services for resolution, execution and result interpretation behind a thin invocable Symfony Console adapter. Preserve public PHPUnit/Prophecy/extension APIs, project config/bootstrap, cwd/cache/color, artifacts and exit behavior. CPX does not isolate classes sharing a PHP process.
    4. Define source-SHA/runtime/suite identity, pass/failure/valid-skip/no-tests, thresholds and artifact paths. Missing coverage cannot silently mean zero or success. Notifications and final bypass remain explicit opt-ins.
    5. Keep Add --parallel support to tests command for safe, zero-workaround parallel PHPUnit execution #8, Add Infection command integration to evaluate mutation testing coverage #262 and Resolve PHP test matrix from Composer constraints and setup-php stable availability #246 as separate capabilities. Bootstrap against verified compatible Code Standards and Changelog versions; initial Testing version line is 0.x. No production dependency back to DevTools.
    6. Integrate released usable Code Standards and its canonical skill into existing feat!: distribute DevTools through CPX and portable skills #376 only after version/archive/CLI/provenance verification, sequentially with its owner. No duplicate extraction PR.

    Scenarios and observed results

    Scenario Status
    Current issue/PR state, contracts and reference implementation Read and verified as above
    Passing/failing/skipped/empty/guide-only suites Planned; not executed for an extracted Testing package
    Coverage threshold failure / unavailable driver Planned; not executed
    Custom extensions / incompatible APIs / consumer overrides Planned; not executed
    Local/global/CPX bootstrap, cwd/cache/color and artifact equivalence Planned; not executed
    Fork PR execution and malformed/stale result artifacts Planned; not executed
    Composer archive/resources/skill provenance, no-op and no-write preview Planned; not executed

    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

    • Destination resolution: identify the existing canonical Testing repository/path. If none exists, obtain explicit repository-creation authorization. This is a material prerequisite for the standalone extraction PR, not a reason to block local inventory/compatibility preparation.
    • Internal dependency evidence: verify usable released Code Standards version and payload with its owner. This is dependency coordination, not a new human architecture approval.
    • Publication gate: the suspended queue remains suspended. Local preparation/tests are allowed; no publication retry, alternate route, hook bypass or policy/credential change. PR publication requires the valid flow and exact-SHA review; report the tested patch and precise pending action if unavailable.

    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.

  2. coisa commented on Oct 25, 2026

    @coisa
    ContributorAuthor

    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.

    • Local PHPUnit is preferred independently of the tooling runtime. CoverageSummaryLoader executes coverage.php and 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.
    • Bootstrap runtime path, notification icon and XML extension FQCN still identify DevTools. Moving namespaces needs a bridge or deliberate configuration migration. Another autoloader cannot replace a class already loaded.
    • DevToolsExtension accepts generic Tracer but its default notification subscriber requires EventTracer. Custom tracer alone can therefore fail at construction; this existing source-level limitation is recorded, not fixed incidentally.
    • Coverage arguments only use PSR-4 while source capability discovery understands other mappings. Preserve/characterize files/classmap/PSR-0 and test-only skip policy explicitly.
    • Zero executable lines currently yields 100%; a missing coverage report is a failure. These are distinct contracts, not interchangeable defaults.
    • Read-only scan of 699 PHP files under local primary consumer src/tests found no direct FastForward\\DevTools\\PhpUnit imports. 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.

    Scenario Observed result
    Execute real generated shim with runtime Composer loader already registered Passed
    Consumer prepend loader wins a previously unresolved overlapping class; separate runtime class remains available Passed
    Missing consumer bootstrap exits nonzero before continuation Passed
    Consumer bootstrap and manifest contents unchanged Passed
    New regression scope 2 tests / 13 assertions passed
    Selected existing PhpUnit/TestsCommand scope 45 tests / 156 assertions passed
    New file PHP lint / scoped ECS Clean; ECS 0 errors, 0 diffs

    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.

  3. coisa commented on Oct 25, 2026

    @coisa
    ContributorAuthor

    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

    • Added 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.
    • TestsCommand retains process execution, BufferedOutput consumption, coverage validation and presentation. A last optional constructor collaborator defaults to the interpreter, preserving existing nine-argument callers and command names/options.
    • BootstrapShimGenerator::generate() accepts optional third runtimeAutoload input. 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.
    • No new interface family, generic runtime, dependency, PHP/Symfony floor, namespace relocation or capability/profile policy was introduced. Existing bypass/notification behavior was not changed in this compatibility cut; explicit opt-in profiles remain an extraction requirement.

    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.

    File SHA-256
    src/Console/Command/TestsCommand.php df94ef64cb1839d5937d69ee2983ab2394e5ca6da92b2671566097a8287cca2d
    src/PhpUnit/Bootstrap/BootstrapShimGenerator.php 1d5e386a58f9a84d84e7f8f6d7fb231e4b9d1c4c78b7955f3aa46a23054ea2e2
    src/PhpUnit/Result/ProcessResultInterpreter.php de067737bf5cfb3c31275488299fc4a1b8f346939751a32f0333c4abab85ec50
    tests/Console/Command/TestsCommandTest.php 14ca8247be4a881e1f45b098af34a25c3e7c49e26bb7ca01a55f24196dc05da7
    tests/PhpUnit/Bootstrap/BootstrapShimExecutionTest.php 10888ae82e103b23f7fc2c10f86f0ef807cb6a68ed58d893483237cf13e2d122
    tests/PhpUnit/Result/ProcessResultInterpreterTest.php 12882d6d358c49b41171b738113cc69b2834b921db3d71fc4235041f03a3e517
    docs/usage/testing-and-coverage.rst 665d648213bd0a232363f6d907135e5c9b54293bb93a24c04a5e32995e2630a9

    Actual validation, sequential and focused

    • Final selected PhpUnit + TestsCommand tests: 62 tests / 181 assertions passed, PHP 8.5.12 / PHPUnit 12.5.40, no coverage collection, no result cache, no configuration extensions. Existing donor dependencies were reused read-only with source/test mapping to the isolated worktree.
    • Interpreter cases: empty/whitespace; reporter summary; nonzero exit overriding reporter success and zero overriding reporter failure; supplemental text; malformed JSON/trailing output; legacy scalar JSON discard; raw_output precedence and existing first-key-result prelude constraint.
    • Bootstrap subprocess cases: default consumer precedence/runtime fallback; missing consumer bootstrap failure; explicit runtime path containing spaces/apostrophe; consumer→runtime order; escaped chosen path and unchanged consumer/bootstrap/runtime files.
    • Scoped ECS: 0 errors / 0 diffs across six PHP files. PHP lint and whitespace checks passed; RST underline check passed. Additional PHP 8.4 syntax-only check passed for the new interpreter, not a PHP 8.4 behavioral suite.
    • Independent read-only review found no actionable issue and confirmed the exact seven-file manifest above. This is local code review, not GitHub approval or publication authorization.

    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.

  4. coisa commented on Oct 26, 2026

    @coisa
    ContributorAuthor

    Local continuation: coverage input seam, real archive and compatibility evidence — 2026-10-26

    Reconciled before editing: #376 remains open/unmerged at 4f3cf00517fb64adbaa26689b64431d27b40266d, base 84e154046e07cafa6ac09a9e12434b1ff5dcb5e0. 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

    • Added 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.
    • TestsCommand still resolves CLI input before the environment, reads the environment only when needed, and treats false as no threshold. Another optional final collaborator preserves previous constructor callers. Process execution, exit handling, coverage-object API, existing namespace and notification/bypass behavior are unchanged.
    • Added 15 focused resolver cases and 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.
    • The archive probe executes the interpreter, resolver and explicit-runtime bootstrap; checks consumer→runtime order and unchanged fixture files; verifies source/XML/icon inclusion and docs/tests/.agents exclusion. It loads the legacy DevToolsExtension FQCN and checks the current PHPUnit Extension interface without instantiating it.
    • Updated the existing testing API documentation. No separate Testing repository/package or new production dependency was created.

    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.

    Check Result and limit
    Selected PhpUnit + TestsCommand + real archive fixture Passed; existing donor dependencies, isolated current source
    MinimumCoverageResolver coverage 9/9 executable statements, 100%
    ProcessResultInterpreter coverage 26/27, 96.30%; legacy semantics retained
    TestsCommand coverage in this selection 212/224, 94.64%; not full repository coverage
    Scoped ECS, nine PHP files 0 errors / 0 diffs
    Independent read-only review No actionable findings; exact ten-file manifest confirmed
    Portable local diff Saved locally; reverse-apply check passed without changing the worktree

    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 + LF entries.

    New or further changed file in this cut SHA-256
    src/PhpUnit/Coverage/MinimumCoverageResolver.php b8385f788a939f7af9169d6568426447e22e503f21c654429f0b9912aec9ea38
    src/Console/Command/TestsCommand.php 07e170ee3fc9f8e59fe9460b9a019a21a9188565908320dd75d1134ce481e1f2
    tests/PhpUnit/Coverage/MinimumCoverageResolverTest.php 59bf63bd48275c91dd56fa8757c725b4550d9527d63a0e6f11d31ad0a3e9248d
    tests/Distribution/TestingPayloadTest.php a339971c62ab60ee493d662b496754ce53480a36e15740a87da62484579cd144
    tests/Console/Command/TestsCommandTest.php fd9b98beb0e264d229ae62e7937b48261cb88490abfa779e0ae13c7e2096012d
    docs/usage/testing-and-coverage.rst 866f532ad2a7d51094b58def389ae10f45a2fd3282aff07ade583776bd7b25cc

    The 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.

  5. coisa commented on Oct 26, 2026

    @coisa
    ContributorAuthor

    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

    • Accessible organization repository search returned no Testing repository; direct php-fast-forward/testing lookup returned 404.
    • Public metadata for fast-forward/testing returned HTTP 404.
    • These observations neither prove universal absence/ownership nor authorize creating a repository/package. No destination, repository, dependency or release was created.

    Prepared local changes

    1. Reported failure cannot become success solely because exit code is zero. ProcessResultInterpreter retains explicit reporter failure; a nonzero exit always remains failure. TestsCommand now propagates a structured failure through its command exit/logging path even when the process queue returned zero.
    2. Multiple complete reporters fail closed, including two success documents, mixed success/failure documents and a final success after a failed document whose result key appears later. Full captured output remains available. Valid nested objects and diagnostic JSON prefixes are not counted as additional reporters.
    3. Malformed prefixes are recovered independently, including incomplete braces/quotes. Static review found and corrected two remaining false-success paths, then identified quadratic retry work. Recovery now has one shared 4 × output-length byte-inspection budget and stops after two reporters; exhaustion returns failure/full output.
    4. Notification delivery is synchronous in the existing subscriber. The old fork path could call notifier->send() and miss child exit if the transport threw; PHPUnit's subscriber dispatcher catches that throwable and can continue the child runner. The local patch removes that fork/exit path and leaves transport exceptions visible to normal PHPUnit warning/exit policy. It does not catch-and-ignore errors, disable notifications, relax hooks or change default profiles.

    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

    • 34 interpreter data cases passed in direct lightweight execution, without starting the PHPUnit runner. Cases cover both reported false successes, malformed-prefix edge cases, nested/diagnostic JSON controls and bounded recovery.
    • PHP syntax checks passed for the changed interpreter/command/subscriber and new lifecycle fixture; whitespace check passed.
    • Independent static review has no remaining actionable finding and confirmed the exact 12-file manifest.
    • A cumulative portable local diff was saved and its reverse-apply check passed without changing the worktree.

    Current file-content manifest SHA-256:
    3370f817175e0d7e4b3fc70b1eb369ee180f948a1371f3c61874e648baeaac7c.

    Same algorithm as earlier: SHA-256 of sorted repository-relative path + NUL + lowercase file SHA-256 + LF entries. This is not a new Git commit/head.

    Material changed source / new fixture SHA-256
    src/PhpUnit/Result/ProcessResultInterpreter.php 65f55c78969ea6719f695466a9726c1900d34b0d01154bf861937ddd4a164169
    src/Console/Command/TestsCommand.php 853d5e28a43756e9a5cc7ae502960a23d7211c56bfd84207bb2d4e2fb1350483
    src/PhpUnit/Event/TestSuite/JoliNotifExecutionFinishedSubscriber.php 44b55eb8072ac84102b2d1da2b9e67b9def06b92eaf701c88f15bc1634089ad2
    tests/Distribution/PhpUnitNotificationLifecycleTest.php d5ac79a32a0c9e0be064a35025359c43f9afb115a99af3addf0be65a58881597

    Cumulative 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.

  6. coisa commented on Oct 26, 2026

    @coisa
    ContributorAuthor

    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 native random_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:

    1. PhpUnitNotificationLifecycleTest.php --filter='notification throws': require a failed/nonzero inner result under failOnWarning, one JSON report, valid single JUnit and one notifier call.
    2. TestsCommandTest.php --filter='explicit failure from warning': reject queue exit zero with an explicit failed reporter.
    3. TestsCommandTest.php --filter='successful and failed reporters': reject mixed consecutive reporters.
    4. 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.

  7. coisa commented on Oct 26, 2026

    @coisa
    ContributorAuthor

    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

    Selected invocation Tests Assertions Result
    Successful fake notifier 1 12 One JSON report, valid single JUnit, one testcase and notifier marker
    Throwing fake notifier 1 12 Inner PHPUnit failure/nonzero exit, one JSON report, valid single JUnit and one marker
    Command rejects zero-exit false success 3 18 Explicit failed reporter, mixed reporters and duplicate success reporters all fail the command
    Interpreter data cases 34 46 Failure precedence, malformed prefixes, key order, nested/diagnostic JSON controls and bounded recovery
    Real Composer archive / extracted payload 1 22 Strict packaged-source loading, legacy extension interface, bootstrap order, unchanged fixture files and export inclusion/exclusions
    Distinct selected total 40 110 All passed across five sequential invocations

    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

    1. The consumer still has its existing installed runtime/vendor. This uncommitted DevTools correction is not a released runtime available for adoption. The publication gate remains suspended; no vendor patch or runtime substitution was made.
    2. The controlled fixtures qualify the current subscriber/interpreter on the runtime above. The exact saved malformed JUnit and real Container report workflow have not been regenerated/replayed under this correction.
    3. Container separately reported Composer lock/plugin-sync/worktree and skill-filesystem failures. These are independent gate failures; the Testing correction does not resolve them.
    4. Full DevTools/consumer validation and supported runtime/public extension/coverage-major compatibility remain pending. The earlier 78 tests/223 assertions belong only to 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.

  8. coisa commented on Oct 27, 2026

    @coisa
    ContributorAuthor

    Independent Testing candidate — local checkpoint (2026-10-26)

    The independent local candidate now exists with its own fast-forward/testing manifest, FastForward\Testing APIs, invocable Symfony CLI, bootstrap/coverage/result/JUnit helpers, native trace-only extension, explicit optional integrations, opt-in legacy bridge, MIT license, icon, and fast-forward-phpunit-tests skill 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-started at 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. Official skills-ref is 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.

  9. coisa commented on Oct 27, 2026

    @coisa
    ContributorAuthor

    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\Testing candidate 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-tests skill. 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.0 is 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-ref is 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.

  10. coisa commented on Oct 27, 2026

    @coisa
    ContributorAuthor

    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.

    Selected cell Actual gate Result
    PHP 8.5.12 / PHPUnit 12.5.40 / PCOV 1.0.12 Real composed composer check in a newly installed offline development graph Passed: same 73 tests / 126 assertions; 126/352 lines (35.80%)
    PHP 8.4.27 / PHPUnit 12.5.40 / PCOV 1.0.12 Real composed composer check in its own fixture Passed: same 73 tests / 126 assertions; 126/352 lines (35.80%)
    PHP 8.5.12 / Xdebug 3.5.3 Complete own PHPUnit suite only, not another composed gate Passed: same 73 tests / 126 assertions; 126/352 lines (35.80%)

    These 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 at 0.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:

    • Initial Clover was 0/352 because PCOV was scoped to the calling checkout. Process-local candidate scope corrected measurement; PCOV and Xdebug now agree. The zero report remains preserved.
    • The first full development install succeeded but its real composer check failed PHPStan with 13 errors, because optional DG/Joli API types were absent from that graph. They now belong to require-dev for 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.
    • One RuntimeException PHPDoc 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 / 3ee0a545bf3ab77591fd9c35f0317191d78203c5 passed 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.json came 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-256 25fc42a8c0d9daf241bd4616c00ecfa5ac348a8602869e39e661b29a72626595; 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 remains fd5a1d166fe5e761326363e06cbb469da62be34af0b9f38bbb18d58f8fc19cad.

    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-ref is 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.

  11. coisa commented on Oct 27, 2026

    @coisa
    ContributorAuthor

    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:

    • Reject directory JUnit/PHP-coverage destinations before recursive cleanup.
    • Refuse cache-shim collisions with consumer/runtime/configuration/executable/test inputs before writing. Reports preserve selected inputs and the shim; Clover and HTML output collisions also fail before child execution. Paths remain configurable; no arbitrary external-path or parent-symlink ban.
    • Validate explicit configuration/bootstrap/capability choices even for guide-only allow-no-tests; retain the supported guide-only case without default vendor bootstrap. Empty suites cannot satisfy coverage, including minimum zero.
    • Preserve captured stdout/stderr on timeout/process exceptions.
    • Allow optional notifier injection in native TestingExtension without 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.

  12. coisa commented on Oct 27, 2026

    @coisa
    ContributorAuthor

    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:

    • PHP 8.5.12 / PHPUnit 12.5.40 / PCOV 1.0.12: 134 tests, 617 assertions, passed.
    • 307/379 source lines: 81.00%; methods 19/30. No threshold or source-filter weakening. Child optional-extension lifecycles are behavioral proof and are not merged into this parent coverage.
    • The final source includes the shim/input collision fix; this result supersedes the pending PHP 8.5 status. The earlier 120/439/80.06% report remains preserved as its separate pre-final-guard snapshot.

    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.

  13. coisa commented on Oct 27, 2026

    @coisa
    ContributorAuthor

    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 7c498b951d6f438864306f8014cc5c182b2ee34a3297e341b134fb73e0c6ac62 passed 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:

    • Strict Composer validation of both the installed package manifest and the external qualification manifest; installed platform requirements.
    • Composer autoload target containment, no vendor symlinks, no DevTools dependency, and reflection proving all 15 package classes resolve to the installed ZIP payload. No host/donor absolute paths were embedded in that payload.
    • Installed Composer proxy binary, bundled PHPUnit configuration/extensions, JSON reporter and real JUnit output. The positive fixture passed (one test/two assertions); an intentional assertion failure remained a failure. These are installation smoke fixtures, not another run of the 134-test source suite.
    • Negative checks for missing explicit runtime/bootstrap, missing optional integrations, report/input collision without input modification, absent tests with a coverage request, and a quarantined binary that correctly fails without an autoloader rather than searching donor source.
    • Installed PHP lint, external PHPStan 2.3.1, and external ECS 13.3.11 using Code Standards 0.2.0 (reviewed d7ee6d1 source), with 15 files checked and zero errors/diffs. External analysis runtimes and optional type sources were selected explicitly; none was a hidden runtime fallback.
    • Packaged PHPUnit resources and the exported skill payload/frontmatter. This does not replace unavailable official skills-ref validation or claim native-host activation.

    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-dev identifier 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 check is 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.

  14. coisa commented on Oct 27, 2026

    @coisa
    ContributorAuthor

    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 5738dc4535a61a6e92a91b2d6515ab563c82a1b22124c53f19bde675db9295de and 72-file source manifest 7c498b951d6f438864306f8014cc5c182b2ee34a3297e341b134fb73e0c6ac62 remained 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:

    PHPUnit Code Coverage Symfony Console/Filesystem/Process Agent Reporter Result
    12.5.24 12.5.6 7.4.8 1.3.0 passed
    12.5.16 12.5.3 7.4.8 1.3.0 passed

    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 produced failed / 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. Only initialize, skills/list and skills/config/write were 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:

    • Resource: PHP 8.3 and official skills-ref remain unavailable/unqualified; no denied download was retried.
    • Decision: approve the canonical Testing package/repository and exact released runtime/workflow/skill refs. Recommended: domain-owned Testing release plus immutable matching workflow/source refs; keep local CPX qualification until publication is actually verified. Temporary DevTools orchestration remains an alternative, with explicit adapter/version coupling.
    • Internal work: integrate the unshipped feedback draft into a newly versioned cut and connect a read-only producer to an authenticated trusted publisher. Real fork event/permission handling and remote authentication/publication still require their own proofs.
    • External adoption: canonical CPX cold install, real consumers/rollback and actual model skill invocation remain unqualified.

    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.

  15. coisa commented on Oct 27, 2026

    @coisa
    ContributorAuthor

    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, ZIP 5738dc4535a61a6e92a91b2d6515ab563c82a1b22124c53f19bde675db9295de and 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:

    • PHP 8.5.12, PHPUnit 12.5.40: focused feedback 138 tests / 178 assertions.
    • Fresh isolated offline full development graph, actual composed 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.
    • PHP 8.4.27: focused feedback 138 tests / 178 assertions. This is focused delta proof, not a new full PHP 8.4 matrix.
    • New Composer ZIP 32 files, SHA-256 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.

  16. coisa commented on Oct 27, 2026

    @coisa
    ContributorAuthor

    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:

    • Compatibility with the supported PHP and PHPUnit versions.
    • Extension registration and interaction with the existing PHPUnit extension lifecycle.
    • Configurable duration thresholds and opt-in/reporting policy.
    • Interaction with parallel execution and the reporter consumed by coding agents.
    • Result representation and CI behavior, including useful diagnostics.
    • Protection against false blocking failures caused by slow or contended machines; timing alone must not become an unqualified hard gate.

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions