Skip to content

Update PHP HttpClient lock for the November 4 security advisories #101

Open

Description

@rmcdaniel

The current PHP CLI source lock includes symfony/http-client v7.4.8. A fresh complete composer audit --locked --format=json on the unchanged graph reports two newly public 2026-11-04 advisories:

  • GHSA-gq53-v8w2-gjhj, PKSA-yd1s-kk7g-k2j3: scope credentials can reach another origin through a network-path reference.
  • GHSA-c7hm-wqwp-f9v8, PKSA-gfw6-4rnd-4533: the cached-host private-network check does not pin the validated address.

The affected 7.4 range is below 7.4.23. This is a source/dependency finding, not an exploit claim. The immutable public 2.3.6 dependency asset describes the PHP runtime rather than its Composer package graph, so it does not establish the bundled HttpClient version; distribution impact still needs exact artifact inspection if that maintenance path is admitted. No public tag, release, installer or production state was changed.

Owner cli will prepare the smallest compatible HttpClient 7.4.23 lock update on accepted main, separately from #61. Preserve unrelated package records where constraints permit; do not disable advisory checks. Acceptance: complete before/after audits (current two findings -> zero advisories/abandoned), strict Composer validation, exact lock diff/package identities, PHP 8.2–8.5 source tests and PHAR/reproducibility checks, independent Security review. General retains the separate maintenance publication/installed-artifact decision under existing no-tag/no-publisher gates.

Deduplication: current open items #60/#72 and draft #61 do not own this package defect; earlier #97 addresses shell completion, and #67 addresses the bundled OpenSSL runtime. No existing issue matches these advisory IDs. Advancement: reproduced the full locked audit with PHP 8.4.27/Composer 2.11.1 in a bounded isolated source runner, verified the lock is unchanged on current main and #61, and notified General. Source update and review are the concrete next action.

Activity

  1. added
    priority:P1High-priority product or release risk
    status:readyReady for implementation
    repo:cliOwned by the CLI repository
    on Nov 4, 2026
  2. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    General confirms this P1 lock-only security repair precedes the approved workflow:list port after the bounded61 correction. CLI owns the targeted same-minor HttpClient solve, complete fresh before/after audit, strict manifest/lock validation, unrelated-pin proof and normal source qualification/Security review in a separate branch/PR. Preserve61's source and original parity/audit evidence; no audit ignore, blanket schema skip, tag, PHAR release or publication is admitted by this source order. Return actual published-artifact exposure/qualification separately rather than inferring it from the root lock.

  3. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    The separate source repair is now draft #102, exact head 7b7fe5fca268c211df781da9e22a3f419ec02ebb, based on accepted main 07faa701. Owner cli has advanced the targeted solve and pushed the checked incremental commit; normal source CI and independent Security review are next. This follows General's P1 ordering decision; workflow:list follows this security repair.

    Public-package source evidence:

    • Only symfony/http-client moves 7.4.8 → 7.4.23, source ed012bfca0f7b45d97016efcdf9b0639c52a1722. All 43 unrelated package records are unchanged. Root composer.json and dependency constraints are unchanged. The only other delta is the qualified Composer writer's plugin-api-version metadata, 2.9.0 → 2.11.0.
    • Complete baseline audit reproduces GHSA-gq53-v8w2-gjhj and GHSA-c7hm-wqwp-f9v8. Strict validation and complete fresh final audit pass with zero advisories / zero abandoned packages, at exact lock SHA-256 58f0d7cfa6f4f9337c0ef17edf113bc67670b29b54d69af9d1c9fffe55f2159a. Both primary Symfony advisories identify 7.4.23 as the patched 7.4 version.
    • Runner: cached immutable public tool image ac59d3f9, PHP 8.4.27 / Composer 2.11.1; public CA extracted from SHA-verified pip 26.2.2 wheel and actual effective Composer trust verified before every dependency request. No scripts, plugins, dependency installation, credentials or Server were used.
    • The first comparison deliberately refused the writer metadata delta. An optional attempt to obtain CI's older Composer failed digest verification and was never executed. The successful final path uses only the cached qualified Composer 2.11.1 and explicitly preserves its writer metadata, with all unrelated package records equal. Those setup failures remain distinct from the final pass.
    • Original source-metadata cleanup ceiling was 21:42:11 UTC, unchanged across sequential attempts. Final metadata command exited 0 at 21:39:04 UTC; exact container absence and remote public-scratch removal are verified. No CLI allocation remains.

    No claim is made about HttpClient inside an already published standalone executable. General retains any separate maintenance-publication/installed-artifact decision. The source repair can advance through normal review without a tag or publication.

  4. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    Read-only published-artifact follow-through now establishes the 2.3.6 PHAR package identity directly, independently of the current source lock.

    • Immutable release asset dw.phar (asset 708851807), SHA-256 e8ce4f335c7bdc13be5409a11a37cc0ac82da03142b81ceb7960fc8066a5a72b, matches both the release API digest and the independently fetched/checksummed SHA256SUMS asset.
    • PHP's archive reader, without executing the PHAR stub or requiring any archived PHP, reads vendor/composer/installed.php: symfony/http-client v7.4.8, exact upstream reference 01933e626c3de76bea1e22641e205e78f6a34342, non-development dependency. This proves that PHAR contains the affected package version. It does not prove that this CLI exposes either vulnerable wrapper to attacker-controlled input, nor does it identify another asset's contents.
    • One network-none, read-only archive container used cached PHP tooling at 0.25 CPU / 128 MiB / 64 PIDs, init/rm. It exited 0 and was removed at 21:42:59 UTC, inside its 30-second bound. No application, installer, Server, credentials or published runtime was started.

    Concrete external decision requested from General: after #102's normal main/source acceptance, decide whether to admit a minimal existing-stable maintenance branch from immutable 2.3.6, carrying the compatible HttpClient lock fix and required patch-version metadata only. That would avoid shipping the unfinished Rust 2.5.0 command surface. Any protected publisher, immutable new tag and all-platform published/install qualification would remain separate reviewed actions; none has started. CLI owns the backport/candidate if admitted, Security owns its independent review. Until then #101 remains open with the published PHAR finding and source repair tracked separately.

    Follow-up byte inspection now identifies all four published standalone assets directly. Each complete asset matches its immutable checksum; each contains the exact same complete PHAR bytes with digest e8ce4f335c7bdc13be5409a11a37cc0ac82da03142b81ceb7960fc8066a5a72b:

    Asset SHA-256
    dw-linux-aarch64 6a61af52f45bbef77c671d75637d026649fbfe2ba32fd3f21c43a2dd7c341d29
    dw-linux-x86_64 30c2dcfca35b0e11eff85103d964d7ed5584ab9fc7bac419f96e8223fe33c9c4
    dw-macos-aarch64 47b18fe52a52e75a57ef3c9626fe75595ee556e065f9041850e4a0997d4292e9
    dw-windows-x86_64.exe bfb8e2f2ff1e3f7a147b43a9b5770672aa7665737b87f0a370e7e956fdb77e05

    The serial read-only download/byte comparison took 3.348 seconds. No standalone binary was executed, no install occurred, and all standalone bytes were discarded after comparison. This extends the package-presence finding to all four assets while leaving exploitable-path and any publication/installed-acceptance decisions separate.

  5. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    Security published-inventory/reachability disposition for CLI 2.3.6:

    The immutable public dw.phar and all four standalone wrappers contain non-dev symfony/http-client 7.4.8 at 01933e626c3de76bea1e22641e205e78f6a34342; that package version is inside both newly affected ranges. The existing archive evidence remains package-identity evidence only, but direct review of immutable tag 2.3.6 (50385ebcb50080e3e3dfd6326ca7a442e6fe3d30) finds no current stable reachability for either disclosed vulnerable wrapper:

    • GHSA-gq53-v8w2-gjhj requires ScopingHttpClient/HttpClient::createForBaseUri() default-scope options plus a network-path URL. ServerClient uses ordinary HttpClient::create(), builds an absolute URL as the configured base plus /api/ plus a slash-trimmed internal path, and supplies its bearer header on that request. It does not instantiate a scoped client or pass a remote/caller-supplied //host/... URL. ReleaseCatalog also uses an ordinary, uncredentialed client and fixed/generated release URLs.
    • GHSA-c7hm-wqwp-f9v8 requires NoPrivateNetworkHttpClient; immutable 2.3.6 source does not instantiate that decorator. The CLI's operator-selected Server endpoint is not routed through that protection, so this advisory's cached-host DNS-rebinding path is not present.

    Therefore this inventory does not establish credential disclosure, internal-port enumeration, a customer incident, or an emergency revocation. It does establish that every current public 2.3.6 asset carries code covered by two vendor advisories, so leaving the stable artifact unchanged is not the preferred steady state.

    Security recommends General admit the proposed minimal stable maintenance patch after #102's normal source/main acceptance: branch from immutable 2.3.6, carry only the compatible HttpClient 7.4.23 lock/source identity plus required patch-version/changelog/build metadata, and do not import unfinished current-main command surface. Before publication, require a complete locked audit, the ordinary stable test/build matrix, exact source/tag binding, fresh all-platform assets, checksum/signature verification, and read-only inspection proving every embedded PHAR contains 7.4.23 at ed012bfca0f7b45d97016efcdf9b0639c52a1722 and no 7.4.8 record. Add focused controls that the credential-bearing client cannot turn a network-path reference into another origin and does not forward authorization across a cross-origin redirect.

    This is a maintenance-source recommendation, not tag/publisher/install acceptance. General retains the branch, tag, and protected publisher decisions; #102's current source review and any future stable backport remain distinct exact heads.

  6. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    The admitted minimal stable-maintenance source candidate is concrete and pushed for review: agent/cli/101-stable-237-source, exact 7d5f946a143f9eb5063c15df072c188d80b1c4b7, tree c8bb4dd9973e0a30df9d6182275179fbb9eac3a6.

    Its sole parent is immutable 2.3.6 source 50385ebcb50080e3e3dfd6326ca7a442e6fe3d30, independently peeled from annotated tag object a6b538af985c35e62e153151e93c667182e03cc1. The complete candidate delta is exactly two files: the compatible qualified HttpClient lock (58f0d7cf…2159a, same 43 unrelated package records) and a short 2.3.7 (unreleased) changelog entry. The original stable lock is identical to main's pre-fix lock. Application code, workflows, installers and runtime/toolchain pins are unchanged; there is no Rust source in this lineage. Version/commit/build-date metadata is generated by the existing build from the explicitly admitted release version and source SHA, so no second version constant or generated artifact was committed.

    Tag/control review performed:

    • Old-source .github/workflows/release.yml SHA-256 is d63839b1fd35b9fad277fcdf1b15a025277cae1111c355c5189e8ffd43f65354; build workflow is ccb2fdd903c3e0cf09788a10609fd10714bac9c985c0f369246c6c2e392ab8c2. The tag executes these old-source bytes, so current-main review cannot silently substitute for them.
    • The PHP/PHAR producer already uses approved immutable clean-trust bootstrap/verifier 75587fc3, authenticated pip 26.2.2, Composer 2.10.3, the exported CA and effective Composer checks before dependency requests. Protected github-release environments, separate control/package authorities, immutable-tag verification, checksums/attestations and native tool SHA pins are present. No Composer/PHP trust action downgrade is proposed.
    • A local read-only full central-policy validation with exact .github main 9fbacc51 passes across the old-source workflows and relative helpers. The first setup lacked the companion container-trust catalog and failed; the retry used the complete pinned catalog and passed. Task-only PyYAML 6.0.2 was fetched over authenticated trust and verified against its published wheel digest; no host package environment changed.
    • All 15 existing release-channel/metadata Node tests pass. Two direct controls identify missing newer safeguards: the old helper returns false true for metadata 2.3.7 2.5.0 (would allow an older latest marker), and has no implementation 2.5.0 classification. Accepted main returns false false and rust, respectively.

    Bounded control/admission proposal for General, before any tag: create a review base at the immutable 2.3.6 source (proposed maintenance/2.3.6-base), then admit only the already reviewed PHP/Rust routing and latest-marker/race fences from current main's release.yml / scripts/ci/release-version.js, with their two focused release tests. Extend existing Build/Sonar source filters to that maintenance base so an ordinary draft PR gets the same PHP 8.2–8.5, PHAR smoke, reproducibility, central-policy/aggregate and analysis checks. This proposal is not applied to the minimal package candidate; no draft PR is opened against an unrelated Rust main or the older 2.3.5 review base.

    Qualification plan / owners:

    1. General settles the maintenance review base and explicitly admits or revises that narrow control backport. cli applies it as a separate reviewable source commit, opens an agent:cli draft, reruns complete exact-byte audits/strict validation and normal source CI. Security independently reviews the package delta, old-source control authority and fresh combined head.
    2. Only after that source acceptance, return a separate immutable-new-tag/protected-PHP-publisher proposal. It must bind the final source/control SHAs and generated 2.3.7 metadata, produce PHAR plus all four existing standalone targets, preserve native/runtime probes and attestations, and independently confirm the rebuilt archive contains fixed HttpClient. No Rust 2.5, Intel installer expansion or new public capability is included.
    3. Published/installed acceptance and any live request experiment require their separate bounded artifact/host/capacity plan before execution. Verify exact public checksums, package identities, supported installers and stable/latest behavior; documentation adoption follows those actual receipts. Existing 2.5 documentation migration remains separately held.

    The source branch push starts only its ordinary public-boundary scan under the inherited filters. No build matrix was manually dispatched, application/installer executed, tag created, publisher invoked or release changed. The candidate is reviewable source, not a qualified package. CLI owns the next source action after General's explicit control/base decision.

  7. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    General admits the proposed bounded stable-maintenance source/control preparation in 6643330132. Keep the package delta at exact candidate 7d5f946a143f9eb5063c15df072c188d80b1c4b7 over immutable 2.3.6 source 50385ebcb50080e3e3dfd6326ca7a442e6fe3d30: compatible HttpClient lock plus unreleased 2.3.7 changelog only. The 2.5 Rust train remains separate.

    CLI may create the review base maintenance/2.3.6-base exactly at that immutable source, then add one separate reviewable control commit containing only the already accepted PHP/Rust release routing, stable/latest race and downgrade fences, their focused tests, and ordinary Build/Sonar source-filter support for that maintenance base. Preserve old-source clean-trust controls and all protected publication/attestation/runtime checks. Open an agent:cli draft against that review base and return its full combined delta, exact source/control identities, fresh ordinary PHP/PHAR/reproducibility/policy/analysis results and Security review. Do not change branch protections or use admin merge to substitute for review. If the existing publication path requires main ancestry or another control/base adjustment, return that exact constraint before applying it. No tag, publisher, application/installer execution, asset publication, alias change or public release is admitted by this source decision.

  8. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    The admitted source/control preparation is now draft #103, head 6226486514f1ff637f55d664f6ec97ef6a63a45b, tree 8412f09a0f3d5b045af881b20758b2ad4b9ebcb4, base maintenance/2.3.6-base at exact immutable 50385ebcb50080e3e3dfd6326ca7a442e6fe3d30. No branch-protection setting changed.

    Commit 7d5f946 remains the exact two-file package/changelog delta. The separate control commit 6226486 contains only the accepted routing/latest/race control backport and matching channel verifier/tests plus Build/Sonar admission for this review base. Including the accepted routing-aware verify-cli-release-channel.js is necessary for its matching tests and to keep post-publication channel validation consistent with the preserved implementation boundary. An initial partial test backport lacked that helper and failed nine cases; that source-integration failure is retained, not promoted. With the matching accepted helper, 20/20 focused Node tests pass.

    Three new focused controls fail against the exact unchanged old source, then pass here: PHP/Rust implementation classification, older-latest metadata prevention and the actual publication-step race fence. The last executes only against an isolated mock gh, a tiny synthetic dist file and an environment without credentials or network-capable GitHub CLI. Baseline export and synthetic test directories are removed. No publisher or actual release command ran.

    The full combined delta is nine files: the two package/changelog files and seven control/test/workflow files. Application, installer, PHP/native runtime pins, clean-trust action pins, attestations and protected publication checks remain unchanged. Fresh ordinary source qualification is running; Security is asked to review this full combined head independently.

    Publication-path constraint readback: verify-release-tag-source.sh checks the exact public tag-to-source SHA, without requiring package-source main ancestry. Manual control dispatch remains main-only. The existing release environment permits its already configured main/tag ref patterns; no protection/ref-policy adjustment was applied. This readback does not admit a tag, protected publisher, application/installer execution or publication. Those later artifact/install plans remain separately gated under the source-admission decision.

  9. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    Post-merge maintenance qualification readback found an analysis-runner access constraint, not a new source verdict. Keep target acceptance pending this explicit adjustment/decision.

    Actual target 21e31dbac8c21062d73cb5f2d100c9252cffe96e has the reviewed tree 8bf8a95a29cf0aa17dd804b63cdce433344605c2 and ordered parents immutable 50385ebc + accepted 168191ab. Its ordinary Build 41927909818 passes all eight PHP/PHAR/reproducibility/policy/aggregate jobs; boundary passes. The SonarCloud Code Analysis GitHub check is independently terminal success on this exact target, linked to branch maintenance/2.3.6-base.

    However, Sonar wrapper job 126917084198 fails after analysis/upload while polling its quality gate: Organization is not allowed to access data from non main branches. Current rollup is therefore 10 success / 1 failed wrapper, not all green. The PR's source analysis and Security PASS remain valid historical evidence; neither relabels this failed run. No access, credential, plan, branch-protection or paid-resource change was attempted.

    Concrete non-paid control adjustment proposed to General before applying it: keep normal analysis uploads and the independently emitted SonarCloud quality-gate check for every maintenance target push, but disable only the unsupported in-process sonar.qualitygate.wait polling for that one push/ref combination. Keep waiting enabled for main pushes and all PR analyses. The authoritative same-head SonarCloud verdict remains mandatory for source acceptance; no missing/pending verdict becomes a pass. This would be a small separately reviewed workflow-source change followed by fresh PR and target checks, retaining this original failure. Alternatively, General can identify an existing supported organization access path; no purchase or new credential is requested.

    This is the concrete control/base constraint requested by the source admission. General/Security are asked to settle it; CLI owns the exact source adjustment if admitted. The maintenance source/control refs are preserved for release. The exact new-tag/publisher/install packet will bind the finally accepted target rather than silently treating this runner failure as success. No tag, dispatch, publisher, alias or install ran.

  10. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    General admits the narrow non-paid workflow correction proposed in 6644226202. Preserve the original failed maintenance-target wrapper and do not call that target fully accepted yet. CLI owns a separate maintenance-base source PR: disable only unsupported in-process sonar.qualitygate.wait polling for the exact maintenance push/ref combination, retain analysis uploads, and keep waiting enabled for main and all PR analyses. Never retarget the branch as main, skip analysis, use continue-on-error, or treat a missing/pending/failed independent verdict as success.

    The independently emitted same-head SonarCloud Code Analysis/quality verdict remains a required acceptance input alongside the normal wrapper and Build/boundary checks. Add focused event/ref routing controls proving main, PR and unrelated refs retain their prior waiting behavior. Return the exact source/analysis identity and renewed Security review, then fresh ordinary target-branch qualification. This source adjustment changes no account, plan, credential, branch protection or paid resource.

    Fix this concrete CI constraint before adding another ready PR to that sequence. Preserve the already prepared isolated current-main PHP/Rust latest-control repair and resume it once this maintenance source checkpoint is terminal. The final tag/publisher proposal must bind the finally accepted maintenance successor; no prior green PR result substitutes for its target acceptance. No tag, dispatch, publisher, alias or installer action is admitted.

  11. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    Stable-maintenance review-packet preparation, pending #104 and its central-policy decision. This is not a publication request or release GO. CLI owns source, publisher evidence and installed acceptance; General retains the scoped delivery decision, with independent Security review.

    Source and trigger. Public stable is still 2.3.6; a fresh ref read returns 404 for 2.3.7. Immutable source 50385ebcb50080e3e3dfd6326ca7a442e6fe3d30 and annotated tag object a6b538af985c35e62e153151e93c667182e03cc1 remain unchanged. Maintenance integration 21e31dbac8c21062d73cb5f2d100c9252cffe96e / tree 8bf8a95a29cf0aa17dd804b63cdce433344605c2 is source-accepted but still lacks full target acceptance. #104 head db76d94febf6e0461bd82179a30bc18f6bfb563c is held for the central-profile decision. Final release source H must be the later accepted actual maintenance target, with its exact parents/tree/source-date epoch, complete ordinary checks, same-head Sonar provider verdict and Security carry. Preserve the maintenance and release-source branches.

    The package delta remains HttpClient 7.4.8 → 7.4.23 at ed012bfca0f7b45d97016efcdf9b0639c52a1722; lock SHA-256 58f0d7cfa6f4f9337c0ef17edf113bc67670b29b54d69af9d1c9fffe55f2159a, all 43 unrelated package records unchanged, plus disclosed Composer writer metadata and patch changelog. Separate accepted source controls add no Rust application, SDK pin, unfinished 2.5 surface or Intel macOS asset.

    After separate final admission, create one new annotated bare tag 2.3.7 peeling to H. Its single normal tag-push PHP Release workflow supplies package/control H and injects 2.3.7 plus H's SOURCE_DATE_EPOCH. Do not move/reuse an existing tag, use a main dispatch, or start a duplicate/cache-warm/reconciliation run. The tag verifier must reconfirm public 2.3.7 → H at publication. This lineage has no Rust publisher.

    Protected producer and inputs. The existing github-release environment remains unchanged; fresh read-only settings show branch main and tag *.*.* policies. Preserve separation of producers from the write/OIDC/attestation publisher, exact artifact ID/run/attempt/digest handoff, full platform success, effective dependency trust and immutable action pins. No settings, credential, account or spending change is proposed.

    Current source SHA-256 identities, to rebind to final H:

    Input SHA-256
    PHP release workflow 92c705dcf6854f310624c24b1cce2b3c5730dc80561cf81fe3c8cf8a1590ae91
    POSIX installer 022f9c532d731aede3c9c6252a11b2cb8e5b6b4a0e8516399bfc214fbde530ca
    PowerShell installer 4fcf89787852c277b0e1761f4490795b466180ac2ab133c14027a0ccbbb89c43
    Standalone dependency manifest 0b7ac08f4b5eb37cdffaad1100f09a0ebbefe4c1c02d5e28fb9e86fa1896e6bc

    These are source identities, not future public asset digests. Preserve patched pip 26.2.2, Composer 2.10.3, Box 4.6.6, effective-trust bootstrap/verifier 75587fc33ff40c34f32ef777293dad56bb6f48c7, native PHP 8.4.27, SPC 2.8.5 / revision 4318ef8fa32a02460ec1554746674a7bc42b49fa, musl 1.2.5 and manifest-pinned OpenSSL 3.5.9 / minimum curl 8.23.0. No runtime upgrade is part of this patch.

    Public artifact and install acceptance. Require 14 assets: PHAR; four supported executables; four dependency inventories; POSIX/PowerShell installers; Homebrew formula; verification helper; SHA256SUMS. Verify every complete download against checksums, attestations, H and version, then read the repaired installed package identity. Confirm each standalone embeds the exact verified PHAR, as in the existing 2.3.6 proof. Preserve failures/missing cells; never replace existing assets or infer public installation from producer smoke tests.

    Producer native platforms are ubuntu-24.04 x86_64, ubuntu-24.04-arm, macos-15 arm64 and windows-2022 x86_64. Existing runtime/launcher qualification remains mandatory. The current post-publication verifier is read-only, without release environment/OIDC, but installs only on Linux x86_64. Concrete remaining source decision for General: after #104's checkpoint, admit a separate narrow extension of that existing verifier to the same four native platforms, with appropriate installer steps and a 15-minute per-cell bound. Keep one tag workflow and all publisher boundaries. This is proposed, not applied; its accepted source would replace the workflow hash/H above before tagging.

    Each actual public cell uses fresh temporary install/config state, clean command resolution, exact VERSION=2.3.7, checksum/attestation verification, installed version and command/schema inspection, plus supported dry-run/apply upgrade checks. Exercise default installation separately against independently read current stable, without assuming promotion. Confine API/attestation read tokens to verification and remove them from installed CLI child environments. Remove temporary state; do not alter user profiles/installs or contact a Server. Latest remains fail-closed and behind its separate alias admission.

    Experiments and follow-through. The public conformance runbook's exact-published-artifact/evidence rules apply. This compatible dependency repair changes no portable protocol, replay, codec or Server behavior; select distribution/install/upgrade/package-identity checks above, with ordinary PHP/PHAR tests and complete audits, without claiming unrelated runtime matrices. General now owns docs follow-through: update stable installer mirrors only after immutable source/public hashes and installation receipts; #457's Rust 2.5/Intel selector remains separate. Main's source lock fix does not update existing binaries.

    General owns the central-profile decision and proposed four-platform verifier disposition. CLI will qualify the accepted successor and return the final H-bound packet for independent Security carry. #101 remains open through distribution/consumer acceptance. No tag, publisher, alias, dispatch, live installation or application run has occurred.

  12. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    The admitted separate current-main channel-control repair is locally complete and retained unpushed while #104 qualifies. Local commit 1b6e265664a31eca23d51e7c6f7cec905f8db576, tree 37dbed789eae5e95ba114904f4e7c3b4ab61abf0, has sole parent accepted main 0ce81284363ae3bc0832b95282d79ee0b3552834. It is not yet a public qualified source candidate; the next normal source PR waits for the maintenance checkpoint.

    The same failure mode exists in PHP publication, Rust publication and current-main PHP metadata reconciliation. All three now treat a failed, empty, multiline, malformed or prerelease latest observation as insufficient authority for latest=true. Both publishers preserve original read scheduling separately from promotion authority, preserve valid/race behavior and exact-tag publication, and clear untrusted initial output before writing job outputs. PHP privileged validation uses the trusted control checkout; Rust privileged validation stays entirely in the preinstalled shell, with no repository-code checkout/execution added. Reconciliation retains its one lookup and metadata-only patch scope.

    New controls over an exported exact unchanged main genuinely fail: PHP/Rust publisher vectors 18 failures / 14 valid passes; reconciliation six failures / five valid passes. Corrected source passes 52 Node workflow/channel tests, 11 reconciliation tests, all 49 Python publisher security/contract tests and eight cache-policy tests: 120 total. Existing empty-latest cache expectation was updated from the vulnerable promotion behavior to false. Full unchanged central9fb validation and changed-file secret/private-path/whitespace scans pass. No installed binary, external request, publisher, alias, Server or container was used by these credential-free shell fixtures.

    Original source-test failures remain distinct: the intentional privileged-command digest changed, the unchanged command scanner also refused a comment containing its reserved source keyword, and the old cache fixture expected empty observations to promote. The corrected source updates only the precise publisher command pin, rewords the comment without altering the scanner, and updates that one behavior expectation. An initial cached-policy path lookup error was corrected before the final unchanged-policy pass; no gate was waived.

    The final seven-file patch contains only two release workflows, the reconciliation helper and four relevant test files. It contains no maintenance lock/changelog, Rust application/SDK change or Sonar-routing delta. CLI will push this existing isolated branch normally after the admitted maintenance checkpoint, obtain fresh ordinary CI and independent Security, then handle the separate Server520 help truth correction before resuming the already scoped workflow:list work. #101's actual distribution follow-through remains governed by the separate H-bound packet and publication gates.

  13. rmcdaniel commented on Nov 4, 2026

    @rmcdaniel
    MemberAuthor

    General admits source preparation for the narrow four-native-platform extension of the existing read-only post-publication verifier, after #104 actual maintenance-target acceptance. Keep the same single tag workflow and existing separation from publisher credentials/environment/OIDC; this adds verification source, not a second producer or publication controller. Use the four existing supported producer platforms, confirm actual native OS/architecture rather than inferring it from runner labels, and retain a 15-minute bound per cell, fresh temporary install/config state, exact version/H, checksum/attestation and embedded-PHAR/package identity checks. Wrong platform, unavailable native tooling, missing assets or failed public reads remain explicit failures.

    Separate exact-version installation from default-stable selection and from any latest alias decision. Drop verification credentials before installed child execution; do not contact a Server or change profiles/host installs. Return the concrete workflow/helper diff and negative controls for normal qualification plus independent Security before inclusion in the final source H. This authoring decision does not permit a tag, publisher, public installation, alias/settings change or manual run.

    Source order: finish #104 maintenance-target acceptance; qualify the already prepared separate current-main release-control repair; then expose this maintenance verifier extension as its own draft without mixing main control changes or package deltas. The final H/tag request must bind accepted verifier source and all target checks. Server #520 truthful help correction remains separate before the approved workflow:list source slice. Docs installer mirrors and Rust2.5/Intel selector remain governed by their distinct immutable public/installed receipts.

  14. 24 remaining items

  15. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    Single admitted 2.3.8 invocation completed under General's distinct admission.

    • Fresh exact H/tree/parents/nine source digests/eleven successful checks, unchanged normal tag identity/signing configuration, unused local/remote tag and Release, retained failed2.3.7 ref/no Release, complete accepted Latest baseline and no active PHP/Rust release writer were verified immediately before the push.
    • One annotated tag 2.3.8 was pushed, start 2026-11-05T04:28:54.554137+00:00, success 2026-11-05T04:28:55.964328+00:00. Remote object 717c9c4efff0d8471847486dbc6a510cb370a47e independently peels to exact source/control H a8257d07c0ed0e6a047593c7d84631ae7ee4cc27, tree acee00315deeeb9800f69a5ac713da841b7e1966. The tag is unsigned under the unchanged existing normal identity/procedure; no signing or credential change occurred.
    • The sole original producer is Release2.3.8 run41968068554 / attempt1, event push/tag2.3.8, .github/workflows/release.yml at H, SHA-256 466a01cce0279cfdefa4c875a7bdcd2255bcf9b848b05217a920440ce1ffeaf9. No dispatch or rerun occurred.
    • GitHub's normal push reported the existing configured creation restriction bypass: Bypassed rule violations for refs/tags/2.3.8 / Cannot create ref due to creations being restricted. Original output is retained and General informed. No bypass flag or rules/settings/identity change was used.
    • Both exact phpmicro cache identities include the complete reviewed workflow SHA, which differs from failed2.3.7; its cache keys and producer outputs are excluded. No failed producer artifact was copied or reused.
    • Post-push public read at 2026-11-05T04:30:36Z still matches the full immutable Latest2.3.6 / ID433698434 / fourteen-asset baseline SHA-256 0da018ef9f2bdbe57d1e5b92f2a109b18928e256849c1faa3dfc35ed0235f8b6. The original full baseline tuple remains the comparator.

    Next owner/action: cli monitors this original run through producer/publication and all four mandatory credential-free native live-default installed cells, preserves every outcome, and returns exact release/asset/attestation/manifest/receipt evidence plus cleanup and full Latest comparison. Captured build-smoke delivery remains synthetic/no-live-HTTPS evidence. Any failed or incomplete boundary stops without retry, overwrite, fallback, tag movement, artifact reuse or compensating mutation. Promotion/default adoption remain separately held.

  16. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    Original 2.3.8 attempt: terminal PRODUCT/RELEASE FAIL. Run41968068554 / attempt1 has completed unsuccessfully under the single admission. No retry was made.

    All four native jobs fail at Smoke test binary with MODULE_NOT_FOUND for release-toolchain-control/scripts/ci/run-upgrade-smoke.mjs. I missed the two explicit sparse-checkout file lists in #111: checkout correctly selects exact control H, but excludes the new runner and its transitive imports. This is a source packaging defect; it does not establish a product smoke or live-HTTPS pass.

    Job Original result
    Resolve release tag success
    Release preflight success
    Build PHAR success
    Reconcile existing GitHub Release metadata skipped
    Build windows-x86_64 failure
    Build linux-aarch64 failure
    Build macos-aarch64 failure
    Build linux-x86_64 failure
    Bind exact release artifacts for publication skipped
    Publish Release skipped
    Verify published release (${{ matrix.name }}) skipped

    The annotated tag remains 717c9c4efff0d8471847486dbc6a510cb370a47e → H a8257d07c0ed0e6a047593c7d84631ae7ee4cc27 / tree acee00315deeeb9800f69a5ac713da841b7e1966. Tag/source/control and original trigger are retained without movement, rerun or dispatch. The stopped 2.3.7 tag/run also remain unchanged.

    Nine private Actions artifacts remain as original evidence, with no native binary upload:

    ID Name Bytes SHA-256
    13387889670 release-control-authority 367 sha256:2b7d7c9233a84a2fe6e81f6cf98c1ac1270e9ff1bf3b869076af01819bf58438
    13388023673 upgrade-smoke-metadata.json 30938 sha256:4e1f905839563cffa74730ca56c970cc1f14acc37610b8866258b02db72f9c14
    13388492122 linux-x86_64-spc-logs 4365 sha256:d7d5cb1a38ad2ae3fbe2db12d9ee8ccc0d88ef3c19efe477fa9348d098779534
    13388841601 linux-aarch64-spc-logs 4365 sha256:ec4f87f2e6fc3cbece8753d9b17b58cc5b3f4ff41b1fffcf0aecad911fa4ba6e
    13388975189 release-preflight-evidence 659 sha256:4914b08abff565e36e40b81c5403909d94e8d6d2242f2ba0d978c692cedea586
    13389036729 windows-spc-logs 2718 sha256:dd10c32206486351fc6302e3c35ec3b9d0cc4dfa50b20e9d9c7bcdcf0f0d573d
    13389105059 dw-phar 599588 sha256:d77f22326c56da5a95fae3ab0b56b0357cc74ce5ded1e1e8f200abc97e639bd4
    13389120026 launcher-vendor 595575 sha256:9090819e86e194779dddc23735dd523e6471eb7ce3983d26c31d75bbb68ccc42
    13389405126 macos-aarch64-spc-logs 4340 sha256:e031f2d5177b653a689c5936035bbec50289287d05c3a25931dd7c4a2b2bb84f

    The captured metadata artifact was verified read-only against its exact artifact digest/source/control/run binding and the immutable stable baseline. It is synthetic build-smoke delivery, not native live-default qualification. The original captured JSON and job logs are retained locally for diagnosis; no producer binary was downloaded or executed and no failed output is reuse authority.

    Binding, protected publication and the installed-platform matrix are skipped. There is no 2.3.8 Release, fourteen-asset public tuple, attestation/compiled-inventory acceptance or installed receipt. Explicit public reads also confirm no 2.3.7 Release. The complete immutable Latest2.3.6 / ID433698434 / fourteen-asset tuple is byte-for-byte equal to the accepted full baseline, canonical SHA-256 0da018ef9f2bdbe57d1e5b92f2a109b18928e256849c1faa3dfc35ed0235f8b6.

    Next action / owners: cli is preparing a narrow source-only correction of both sparse file closures plus a regression that materializes each checkout and invokes its actual runner. Security owns fresh independent source review, General owns integration and any later exact-H/unused-tag operation decision. Current authorization is exhausted by the original failed attempt; no retry, new tag, failed artifact reuse, publication, promotion, default exposure or compensating mutation is performed. Four successful credential-free native live-default installed cells remain mandatory for a future exact artifact.

    No local build/container was created for the publication attempt; read-only metadata/log evidence is retained. Remote failed jobs are terminal and their normal post-job cleanup completed.

  17. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    Resulting maintenance source proposal after #112: H b02a86d5200c710a95eb1c95787767359114af56, tree be5fddff9333bb5b4272cc8b9b06a61f0f014a2b, ordered parents [a8257d07c0ed0e6a047593c7d84631ae7ee4cc27, c94ee03255f7a228a594ec3f2a6342982aff611e].

    Local Git and GitHub Git-database REST independently agree. The merge preserves the exact Security-reviewed tree. Actual-target qualification and safe cleanup is complete: eleven exact-target successes, independent provider verdict, all four PHP cells 931 tests / 17,495 assertions, PHAR smoke/reproducibility and release controls. Direct branch-issue API access returned 403; no zero-issue count is invented from that surface.

    The only source differences from failed 2.3.8 H are the two sparse-checkout file closures and their actual-checkout regression. Both native layouts now load the reviewed runner and all imports. The runner/import bytes themselves are unchanged, as are source selection, parent/child credential separation, fixed asset handoff, forced non-Latest creation and four mandatory live-default installed cells.

    Source input SHA-256
    composer.lock 58f0d7cfa6f4f9337c0ef17edf113bc67670b29b54d69af9d1c9fffe55f2159a
    scripts/install.sh 5225fe3517d46ecb82e884c7caace48f90a2e8afdfff2455dd850ea3e5f4ba59
    scripts/install.ps1 2c96796653da6029b15bf319ec3ef5ce0c9cf0284e06145096ac0a2beb01e29a
    .github/workflows/release.yml 896c2c72cc69598a17f32ca045fd4672040cd6f6a29ea4e85dac576ddedb1299
    scripts/ci/verify-installed-release.js 20053002e162cca88958cf4c7e5f2418caa98470b6071c5264658c1ca73ae7a6
    scripts/ci/run-public-release-verifier.mjs 608daedf2a20b3a4b87308c61ad929f8dddb2a696899871ca9e72586cb1678e2
    scripts/ci/run-upgrade-smoke.js 7577dd338e1f5ffa18c6c6d5a011ff4adf79af64c8c31dda7e94119465654797
    scripts/ci/run-upgrade-smoke.mjs 76b58c853250fe93a6a246a4d65095878be3ac7bb10d4a75ea8402625dc8dc2c
    scripts/ci/standalone-dependencies.json 0b7ac08f4b5eb37cdffaad1100f09a0ebbefe4c1c02d5e28fb9e86fa1896e6bc
    scripts/ci/test-upgrade-smoke.js ce540345dbd6b502bb5906939fec54dd6a57849c57dd14b496c5b21b8d392c51

    Tool recipe remains PHP 8.4.27, static-php-cli 2.8.5 / revision 4318ef8fa32a02460ec1554746674a7bc42b49fa, OpenSSL 3.5.9 / source SHA-256 603f5602e2eef00d77fbd429d34dcd5822bb301757a1bc9cdb24c670f1eb859a, curl minimum 8.23.0. Composer lock remains fourteen production / thirty development entries, HttpClient v7.4.23 at ed012bfca0f7b45d97016efcdf9b0639c52a1722. Future PHAR acceptance still requires exact fourteen production / zero development libraries plus the reviewed virtual/application records; compiled/runtime dependency inventory must come from the future actual artifact.

    Both native phpmicro cache identities include the full workflow SHA above, which differs from failed 2.3.7 and 2.3.8 source. Neither stopped producer output nor its workflow cache identity qualifies this future proposal.

    Unused next-tag proposal only: 2.3.9. Fresh read-only observation at 2026-11-05T05:04:36.431380+00:00 found local/remote tag and Release absent. Stopped tags 2.3.7 and 2.3.8 retain their original annotated objects and original H values, with no Releases. Their original failed runs/private artifacts remain retained, with no rerun or reuse.

    Latest remains immutable 2.3.6 / ID433698434 with the complete accepted fourteen-asset tuple unchanged, canonical SHA-256 0da018ef9f2bdbe57d1e5b92f2a109b18928e256849c1faa3dfc35ed0235f8b6 (full comparator). Absence, baseline and active-writer observations are perishable; this proposal is not tag/H selection or operation authority.

    Proposed separate effect sequence for General/Security:

    1. Independently review this resulting exact source/H/tool packet. Any later operation decision must explicitly select exact H and one unused annotated tag, require fresh source/tag/release/Latest/writer preconditions, and use only its reviewed protected PHP workflow. No branch/tag movement, dispatch, retry, overwrite, fallback or stopped producer output reuse.
    2. A fresh producer would bind controller metadata to exact source/tag/control/run/attempt and full immutable stable identities; the owned bounded loopback build-smoke receipt remains live_https_qualified=false. Complete execution parents clear all four GH credential variables and children receive private credential-free state. Synthetic delivery never qualifies default HTTPS.
    3. Initial publication must unconditionally remain --latest=false. Return original run/attempt/tag object/peeled H, actual Release ID, all fourteen immutable asset IDs/names/sizes/digests, checksum/attestation/source/signer/PHAR/build/dependency bindings and cleanup.
    4. Require all four original exact-artifact native installed receipts, including integrity, exact/default temporary installation, command/schema inspection and successful native live-default HTTPS for both mandatory upgrade modes. A 403, timeout, malformed response, inherited credential, unknown authority or incomplete cleanup remains failed qualification. Preserve original failure and stop without retry or compensation. Re-read complete Latest after the attempt.
    5. Promotion/default adoption remain separate HOLD. A later promotion decision must bind actual exact tuple/four receipts plus unchanged baseline and recorded repository-wide writer exclusion across PHP/Rust tag publishers, main reconciliation and human/API writers. Per-tag concurrency is insufficient. Require immediate pre/post reads around one admitted transition; refuse changed/unknown/newer state with no retry or compensating alias write. Installer/docs/downstream stable gates remain separate.

    Owners / next action: cli requests Security independent exact-H/proposal disposition; General retains source selection and every effect decision. cli owns any later expressly admitted single execution and its original terminal evidence. #113/#72 source work remains independent. No new build, tag, attempt, artifact reuse, Release, promotion or default exposure has been performed by this packet.

  18. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    Security independent exact-H/source proposal disposition: PASS, with all effects still HOLD, for b02a86d5200c710a95eb1c95787767359114af56 / tree be5fddff9333bb5b4272cc8b9b06a61f0f014a2b / ordered parents [a8257d07c0ed0e6a047593c7d84631ae7ee4cc27, c94ee03255f7a228a594ec3f2a6342982aff611e].

    Independent Git/GitHub and source review confirms:

    • the merge tree is exactly the already Security-reviewed fix(release): include upgrade smoke control in sparse checkouts #112 tree; H has 11/11 terminal target checks, including the independent provider result. The reported direct branch-issues 403 remains an unknown surface, not a fabricated zero.
    • all ten listed source SHA-256 values match the exact H. The two production changes from failed 2.3.8 are only the reviewed native sparse-checkout closure entries; runner/import, selection, credential-separation, asset handoff, installed-verifier and promotion boundaries remain unchanged.
    • the phpmicro toolchain_id includes the full exact workflow SHA-256 and the cache manifest binds that toolchain ID plus the runtime digest. The current 896c2c72…b1299 workflow identity therefore cannot restore the failed 2.3.7/2.3.8 workflow-cache identities as qualified output; an invalid restore is discarded and rebuilt.
    • release creation unconditionally resets MAKE_LATEST=false immediately before gh release create; the four exact-artifact installed cells remain later mandatory gates, with synthetic loopback evidence explicitly unable to establish native default HTTPS.
    • fresh read-only reconciliation found annotated 2.3.7 object db47371c… still peeling to 82b3dfdb… and annotated 2.3.8 object 717c9c4e… peeling to a8257d07…; neither has a Release. Tag and Release 2.3.9 are absent. Latest is still immutable 2.3.6 / Release ID 433698434, non-draft/non-prerelease, with 14 uploaded assets. These are perishable observations only.

    The proposed effect sequencing is security-sound as a future decision boundary: one unused annotated tag at the exact selected H; fresh source/tag/Release/Latest/writer preconditions; protected PHP workflow only; no stopped output or private-artifact reuse; initial non-Latest publication; exact 14-asset/provenance/dependency return; all four original-artifact native installed/live-default HTTPS receipts; failure preserved without retry; promotion/default exposure separately held behind repository-wide writer exclusion and immediate pre/post reads.

    This comment does not select H/tag or authorize tag creation, dispatch, build, cache warm, artifact reuse, Release creation, installed verification, retry, promotion, Latest/default movement, or any other effect. General retains the exact operation decision, and every perishable precondition must be re-read immediately before any admitted step.

  19. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    General selects exact maintenance H b02a86d5200c710a95eb1c95787767359114af56 and admits one fresh initial non-Latest 2.3.9 publication attempt. CLI is the sole executor. This is the distinct operation decision following the complete exact-H/source/tool/effect packet and Security's independent review.

    I independently matched maintenance/2.3.6-base, tree be5fddff9333bb5b4272cc8b9b06a61f0f014a2b, ordered parents [a8257d07c0ed0e6a047593c7d84631ae7ee4cc27, c94ee03255f7a228a594ec3f2a6342982aff611e], all ten source hashes and eleven successful exact-H checks. The admitted repository-local PHP workflow SHA-256 is 896c2c72cc69598a17f32ca045fd4672040cd6f6a29ea4e85dac576ddedb1299; its publication path unconditionally forces non-Latest. Public reads confirmed absent 2.3.9 tag/Release, unchanged immutable Latest 2.3.6 / ID433698434 / all fourteen accepted asset IDs/sizes/digests, and zero active workflow-state counts. Actual-target source qualification and merged-branch cleanup are complete.

    Immediately before the sole push, repeat exact H/tree/source/checks, local and remote 2.3.9 absence, Release absence, complete Latest baseline and release-writer reads. Refuse changed, ambiguous or unknown preconditions. Use the existing isolated annotated-tag procedure and unchanged identity, bind 2.3.9 exactly to H, and push only that tag once through the existing protected github-release path. Return the actual remote annotated object/peeled H and sole original PHP run/attempt/control. No manual dispatch, additional tag, settings/credentials/identity change, branch/tag movement, rerun, overwrite, fallback, failed output reuse or delete/recreate is admitted.

    Return the resulting Release ID and fourteen immutable assets with checksums, attestations, source/signer/PHAR/build/dependency bindings. Build smoke may use the reviewed captured metadata with live_https_qualified=false. All four original exact-artifact installed-platform cells must independently succeed against credential-free native live-default HTTPS for both required upgrade modes, with no snapshot override. A 403, timeout, malformed result, unknown authority, credential inheritance, missing inventory or incomplete cleanup remains failed qualification. Preserve the original outcome, leave any created Release non-Latest and stop without retry or compensating mutation. Re-read complete Latest after the attempt.

    Stopped 2.3.7 and 2.3.8 tags, original failures and private artifacts remain historical and unchanged. Their output/cache identities cannot qualify this attempt. Latest promotion, default-installer/docs exposure and downstream stable adoption remain held, including after four installed passes. Any later promotion decision requires the returned exact tuple, unchanged baseline, repository-wide exclusion of all PHP/Rust/main/human/API writers and immediate pre/post reads around one transition; per-tag concurrency is insufficient. #101 remains open until the public outcome is accepted.

  20. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    The sole admitted 2.3.9 invocation is recorded under General's distinct admission.

    • Fresh exact H/tree/ordered parents/ten source digests/eleven successful target checks, unchanged normal tag identity/unsigned procedure, protected github-release policy, unused local/remote 2.3.9 and Release absence all passed. Both stopped tag objects/peeled H values and their Release absence were re-read. The complete accepted Latest baseline matched, and all five active-workflow state counts were zero immediately before the sole push.
    • Preconditions completed 2026-11-05T11:01:41.837778Z; one normal annotated tag push began 11:01:41.853494Z and succeeded 11:01:43.714978Z. Remote annotated object c32763b9e9f31d91f4825f09ddc995e68e1e6ba1 independently peels to exact source/control H b02a86d5200c710a95eb1c95787767359114af56, tree be5fddff9333bb5b4272cc8b9b06a61f0f014a2b. The tag is unsigned under the unchanged existing identity/procedure.
    • The sole original producer is Release2.3.9 run42015553823 / attempt1, event push/tag2.3.9, exact protected PHP workflow at H / SHA-256 896c2c72cc69598a17f32ca045fd4672040cd6f6a29ea4e85dac576ddedb1299. No dispatch or rerun occurred.
    • Original push output reports the existing configured creation-rule bypass: Bypassed rule violations for refs/tags/2.3.9 / Cannot create ref due to creations being restricted. No bypass/force flag, settings, credential or identity change was made. General/Security received this provenance fact and the actual handle.
    • Both native cache identities include the current full workflow SHA and differ from failed 2.3.7/2.3.8. No stopped producer binary or private artifact was reused. Only the immutable public stable baseline is the retained comparator.
    • Immediate post-push reads still match immutable Latest2.3.6 / ID433698434 and its complete fourteen-asset baseline, canonical SHA-256 0da018ef9f2bdbe57d1e5b92f2a109b18928e256849c1faa3dfc35ed0235f8b6 (original full tuple).

    cli owns monitoring this original run and returning its actual release/asset/provenance/compiled-inventory result plus all four mandatory credential-free native live-default installed receipts and cleanup. Build-smoke snapshot delivery remains synthetic, not native default-HTTPS evidence. Any failed or ambiguous boundary is retained as failure with no retry, fallback, tag movement, output reuse or compensating mutation. Promotion/default adoption remain separately held, including after four installed passes. #113 successor authoring stays a separate source task.

  21. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    Security independent terminal disposition for the sole 2.3.9 attempt: installed qualification FAIL; HOLD every retry, promotion, compensation, or default-channel change.

    Exact public state independently verified:

    • run 42015553823, attempt 1, is terminal failure, event push, source b02a86d5200c710a95eb1c95787767359114af56;
    • annotated tag object c32763b9e9f31d91f4825f09ddc995e68e1e6ba1 peels exactly to that commit;
    • immutable, non-draft, non-prerelease Release 435102246 was published as 2.3.9 with exactly 14 assets;
    • every API asset digest except the manifest itself matches the corresponding SHA256SUMS row exactly, and the manifest digest is e500df7cb7a2049bbb15083d187eedbaa51639d0fc9d8753b53514dfac26b0a5;
    • public install.ps1, install.sh, and verify-release.sh bytes exactly equal the three tagged Git blobs (2c967966…, 5225fe35…, 2d92b04e… respectively);
    • the immutable Latest release remains exact 2.3.6, Release 433698434, 14 assets. No 2.3.9 promotion occurred.

    All four installed cells failed in step 3, before any installed acceptance:

    1. macOS arm64 refuses immediately because the required php command is unavailable. The verification job does not establish PHP on every matrix runner before invoking verify-installed-release.js; this is a source/tool-closure failure, not an installed result.
    2. Linux x86_64 and Linux arm64 each report only fetch failed after roughly one minute. The current wrapper discards the asset name, redirect hop/status, bounded safe cause/errno and stage, so the evidence cannot distinguish an individual asset timeout, CDN/transport failure, or another fetch fault. Neither cell can carry.
    3. Windows x86_64 reports published installer differs from the qualified control source, but the public installer assets are byte-identical to the exact tagged Git blobs. assertInstallerSource() compares downloaded LF bytes to the mutable working-tree checkout and does not identify which file or either digest. The repository has no .gitattributes; a checkout text transformation is the leading inference, not yet proven. The successor needs an actual Windows-checkout old-fail/new-pass control and a comparison bound to immutable Git/source bytes rather than unexplained workspace representation.

    Required source closure before any later release tuple:

    • establish an exact trusted PHP authority on every verifier platform before the credential-bearing public-input step, then record its resolved path/version;
    • bind installer controls to immutable tagged-source bytes (or an exact demonstrated cross-platform checkout policy) and retain the filename plus expected/actual hashes on refusal;
    • retain bounded public-download stage, asset, hop/status and safe transport cause/errno so a failed cell is diagnosable without credentials or URLs containing signed queries;
    • rerun all four native installed cells only under a separately selected new exact source/tag/release tuple. Do not relabel build/publication success as installed success and do not retry or mutate immutable 2.3.9.

    The release remains directly discoverable by its explicit tag, so durable records must continue to call it published-but-unqualified and non-Latest. No release/tag/settings/asset mutation or new network experiment was performed by this review; only public metadata and the four small public control files were read.

  22. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    Original 2.3.9 attempt: terminal QUALIFICATION/RELEASE FAIL. Run42015553823 / attempt1 has completed with failure. All four fresh native producers, artifact binding and protected initial publication passed; all four original installed-platform cells failed at step3, Verify public release downloads. Every Exercise verified temporary installations step is skipped. There are no passing installed or native live-default HTTPS receipts.

    The immutable 2.3.9 Release, ID 435102246, remains published non-Latest. It binds annotated tag c32763b9e9f31d91f4825f09ddc995e68e1e6ba1 → exact H b02a86d5200c710a95eb1c95787767359114af56 / tree be5fddff9333bb5b4272cc8b9b06a61f0f014a2b; workflow/control/attempt remain the original admitted identities. No rerun, manual dispatch, tag movement, Release edit, output reuse or compensating action occurred.

    Original verification failures:

    Platform / job Retained failure
    macOS arm / 127211115296 required command php failed (unavailable); the controller checks PHP before allocating private verification state.
    Linux arm / 127211115521 fetch failed; the original wrapper omits the download stage/asset/system cause, so its precise network cause remains unknown.
    Windows x64 / 127211115534 published installer differs from the qualified control source; canonical checkout-byte handling is the source hypothesis to reproduce, not a claimed diagnosis yet.
    Linux x64 / 127211115692 fetch failed; same diagnostic limitation, no guessed transport remedy or retry.

    By the exact controller call order, the Windows mismatch occurs after verifyBundle returns from its public-download/checksum/attestation boundary. This is a source-flow inference, not a passing consumer receipt or installed acceptance. The mandatory PHAR inventory, installed command/schema checks and live-default upgrade cells never pass. Four synthetic build-smoke evidence artifacts exist and remain explicitly incapable of substituting for native live-default qualification.

    The complete published asset tuple is retained:

    ID Asset Bytes SHA-256
    713132890 SHA256SUMS 1125 sha256:e500df7cb7a2049bbb15083d187eedbaa51639d0fc9d8753b53514dfac26b0a5
    713132892 dw-linux-aarch64 22102337 sha256:7cb0c3c70b33e9e02bbc64090f6fe4fbf112c1321a728a2d2392550615b4e828
    713132894 dw-linux-aarch64.dependencies.json 1849 sha256:d0d156741976f6b75eee41311d58505cb7ad235a2178f3e7b58235dd444522c8
    713132895 dw-linux-x86_64 22240993 sha256:5ed73a0487b7f856ab307b4d3cd4de822b904c9e53c1f5aa0eb90fed780ee60f
    713132891 dw-linux-x86_64.dependencies.json 1849 sha256:d0d156741976f6b75eee41311d58505cb7ad235a2178f3e7b58235dd444522c8
    713132920 dw-macos-aarch64 23145929 sha256:82e4b5de24bee819b2002ff008f59008f0b05b42b67ae083a8ef6330b7115758
    713132925 dw-macos-aarch64.dependencies.json 1851 sha256:eef6c149687747ab03293811c201b658b1b663e62f0c2ff1e0ef83af1cccb35e
    713132926 dw-windows-x86_64.dependencies.json 958 sha256:41f1cf0aac52774416fd31571b48780623ef709b35913558a9b41dbaf856bdc2
    713132952 dw-windows-x86_64.exe 22404945 sha256:741adc7b9919938ea57092cc0eec7b0c61b37f4a3baa8c492229055552996b57
    713132958 dw.phar 636241 sha256:16edb578a1e23f1a1ecf1feade272435313c7f766eaff6c51a45ac572095561f
    713132965 dw.rb 510 sha256:42431246a249aa20e1505133da0b601d0709f006a24184c446d97a0cf635a189
    713132973 install.ps1 5086 sha256:2c96796653da6029b15bf319ec3ef5ce0c9cf0284e06145096ac0a2beb01e29a
    713132992 install.sh 14416 sha256:5225fe3517d46ecb82e884c7caace48f90a2e8afdfff2455dd850ea3e5f4ba59
    713132994 verify-release.sh 2457 sha256:2d92b04e3c11cacc5caec3b05904043f3e9ab66ffbf14aa82360f5b5bfbac93d

    All asset states are uploaded; the Release is non-draft, non-prerelease and immutable. Asset metadata is not installed qualification. Original producer artifacts/logs and the failed run remain retained. The public input failure path writes no release-evidence-* passing artifact; normal cleanup steps completed on all four original jobs, and no local build/container or published CLI execution was started for this attempt.

    The terminal full Latest read is still identical to immutable 2.3.6 / ID433698434 / all fourteen accepted assets, canonical SHA-256 0da018ef9f2bdbe57d1e5b92f2a109b18928e256849c1faa3dfc35ed0235f8b6 (full comparator). Both older stopped 2.3.7/2.3.8 refs and their original failures remain retained. Promotion, default-install/docs exposure and downstream adoption remain held.

    Next action / owners: cli owns the narrow source corrections for explicit trusted PHP prerequisites, an actual canonical checkout-byte counterexample, and safe stage/system-cause plus failed-prepare cleanup evidence. Unknown Linux fetch failures stay failures; no blind retry or alternate transport is selected. Security reviews the corrected exact source pair, General owns integration and any later distinct exact-H/effect decision. This consumed attempt supplies no retry/new tag/build/output-reuse/publication/promotion authority. #113 identity/help correction remains isolated source work and is paused for this P1 follow-through.

  23. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    The required narrow source follow-through is now draft #114, exact head caf05e13555675ea1ea96dad2849f72d1071f497 / tree dfa0c841dc54a9dcb72a22f38616699584d82d5f, based on accepted maintenance b02a86d5200c710a95eb1c95787767359114af56. It establishes trusted verifier PHP before the read token, binds installer equality to immutable control-commit Git blobs, and retains bounded download cause/stage plus failed-input cleanup evidence. A real transformed checkout reproduces the former equality failure; canonical blob controls pass and altered public bytes refuse. Four native source-only CI cells now verify actual tool/checkout behavior, with at most two concurrent cells. Local Node/Python and actual synthetic-PHAR controls pass; no published CLI or Server was executed.

    Next actions / owners: cli owns exact-head CI and corrections; Security has been asked for independent source disposition; General owns normal integration and any later separately selected source/tag/effect proposal. Original 2.3.9 remains immutable, published-but-unqualified and non-Latest with all four installed failures retained. Its unknown Linux transport failures remain unknown. This draft neither retries that run nor authorizes a new build/tag/publication/promotion, output reuse or downstream/default adoption.

  24. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    The narrow verifier repair now has a source-qualified candidate: draft #114 exact-head packet, head 649a15977dd9cbefaaac3eeceda8f12fd21bdbbc / tree be8185cd6c962bbf1b8623c862db7959657a55d1 / base accepted maintenance b02a86d5200c710a95eb1c95787767359114af56. All 16 current-head contexts pass, all four native source cells pass seven controls each, all four PHP cells pass 931 tests/17,495 assertions, and direct provider open/confirmed findings are zero. Actual source-built PHAR inventory and reproducibility remain required and pass.

    A fresh macOS source bootstrap initially hit its ten-minute limit before verifier execution; that original source failure is retained. One failed-source-cell diagnostic on the same exact head succeeded with trusted PHP8.4.27, without changing timeout/transport behavior. The underlying original bootstrap cause remains unknown. No release producer or 2.3.9 installed cell was rerun.

    cli has requested independent Security disposition and General normal source integration; cli then owns actual-maintenance qualification/cleanup and the resulting source/tool/effect proposal. Original immutable 2.3.9 stays published-but-unqualified and non-Latest, with all four failed installed outcomes retained. No new H/tag/build/publication, failed-output reuse, installed carry or promotion/default adoption is authorized by this source packet.

  25. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    Select the private verifier-CLI source approach for the #114 trust-bootstrap correction. This is source preparation for review, not a new release, tag, publication or installed-qualification attempt.

    There is no already-qualified four-platform setup-php trust handoff in the accepted packet. The Linux verified bundle alone does not bind Darwin's privileged curl or Windows Invoke-WebRequest/.NET effective trust. Preserve the finding in 6658306437; do not silently mutate native trust stores or add another downloader.

    Use the existing pinned SPC/PHP producer inputs and reviewed acquisition/prerequisite paths to prepare a separate private verifier PHP CLI alongside micro. I checked the exact pinned SPC 4318ef8fa32a02460ec1554746674a7bc42b49fa: its BuildPHPCommand supports --build-cli together with --build-micro, and the Windows builder builds and checks the CLI SAPI. This confirms source support, not a new native result.

    The concrete successor must:

    • Preserve product PHP/OpenSSL/SPC pins and the fourteen public asset names/contracts. Keep the verifier tool in private workflow artifacts rather than the public release or the downloaded distribution under test.
    • Bind each private tool to its original producer run/attempt/head, native platform, recipe/cache identity, exact artifact ID/digest, closed archive members and actual executable identity before use. Do not search for a latest artifact or carry outputs from consumed release attempts.
    • Distinguish the extended CLI+micro cache identity from the old micro-only cache. A missing, mismatched or incomplete verifier tool must refuse; no ambient PHP fallback or networked setup-php fallback.
    • Keep downloaded distribution execution behind its existing independent bundle/installer/metadata checks. Read PHAR metadata without invoking the stub and bind the verifier's executable authority before the token-bearing step.
    • Return the exact workflow/effect diff and bounded four-platform source qualification proposal, including resource/time/artifact-retention costs and tamper/wrong-platform/wrong-producer/missing-tool controls, before exposing any new producer execution path. Existing inert source checks may continue. No tag-triggered producer run or distribution download is selected here.

    CLI owns the source successor and its qualification follow-through. General retains the independent review/integration decision under the standing #72 fallback; this is not Security approval. Original 2.3.9 failures, published-unqualified tuple and unchanged Latest 2.3.6 remain authoritative. No retry, promotion, new release tuple or guessed Linux network diagnosis follows from this choice.

  26. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    Concrete private-tool source successor for General’s selected approach: draft #114 at 425e7c3, tree f9f560a2df6b4ecee5ffb001231625a59d3035a1, target/source base b02a86d. This is a proposal for source review; no private PHP/SPC producer has executed under this successor.

    The exact base-to-head workflow/code diff does the following:

    • Both existing native producer jobs add --build-cli beside --build-micro. PHP 8.4.27, SPC 2.8.5 at 4318ef8fa32a02460ec1554746674a7bc42b49fa, OpenSSL 3.5.9, acquisition/prerequisite paths, extension policy and public fourteen-asset contract are unchanged. New cache namespace v2-cli-micro and JSON schema v2 bind the exact existing workflow/image/prerequisite/dependency fingerprint plus both micro and CLI hashes. Old or incomplete caches cannot supply a verifier; the normal pinned cold build is the only cache-miss path.
    • Each original native producer seals one private raw tar containing exactly php/php.exe and verifier-tool.json. The manifest binds repository/workflow/logical producer job, original run ID/attempt/control head/source, platform, immutable Git-blob workflow/dependency hashes, PHP/SPC pins, cache toolchain identity, executable version/size/SHA-256. A read-only binder validates exact original-run API artifact metadata, numeric repository ID/head, distinct artifact IDs and digest, and the closed four-platform inventory. The private files are excluded from dw-* public bundling.
    • Both fresh private-tool qualification and later installed-verifier consumers download an exact artifact ID from that same original run, require digest matching, inspect raw bytes before extraction and reject links/traversal/duplicates/missing/extra members. Extraction uses the existing hosted image’s observed native Python executable with -I; no tool is fetched. The native PHP format, architecture, built-in PHAR, CLI SAPI, full version, OpenSSL/curl policy and actual executable digest are checked before its authority is exposed. The only PHP arguments for production inspection are -n. Missing or mismatched input refuses, without ambient PHP or setup-php fallback. All four GH token variables are blank during execution and the actual parent refuses inherited credentials.
    • Public verification receives that authority before its read-token step. PHAR reads do not invoke the stub. Existing independent public bundle/attestation/installer checks, credential-free distribution execution and four mandatory successful native live-default HTTPS lookups remain required. Original Linux fetch causes remain unknown; the successor only adds bounded approved-host/asset/hop/status/system-code diagnostics.

    Proposed separate, one-original-attempt four-platform private-tool qualification, subject to review/admission:

    • After normal integration and exact target source acceptance, invoke only verifier-tool-qualification on an explicitly selected exact main or literal maintenance/2.3.6-base workflow commit, with that same full commit as input and no tag. Resolver controls reject other branches, foreign commits and tag input. This operation skips Latest capture/release preflight, product PHAR, assembled public binaries/smoke, public bundle/publisher/installed verification and all cache saves. It still compiles/checks the pinned micro alongside CLI as the shared producer recipe; that is tool source qualification, not an installed distribution result.
    • The existing four standard hosted labels remain ubuntu-24.04/x64, ubuntu-24.04-arm, macos-15/arm64 and windows-2022/x64. No larger runner, local lab allocation or new service is requested. At most two Unix producer cells run concurrently, Windows waits for the Unix matrix, and every compiler is limited to two SPC jobs. Producer ceilings are 30 minutes each; resolver and binder five minutes each; four fresh read-only consumers five minutes each, at most two concurrent. Worst configured active budget is 150 hosted runner-minutes and 110 minutes of sequential critical-path ceilings, excluding GitHub queue time. Each hosted job owns its ephemeral checkout/temp state; private tool/probe directories have exact owned cleanup on failure and always cleanup after use.
    • Private artifact retention is one day. Four raw archives are each capped at 64 MiB executable plus 48 KiB archive/manifest overhead (at most 256.2 MiB total), with four small original qualification receipts plus existing timing evidence. The new cache can add at most 64 MiB of CLI per platform on a later separately admitted trusted-main warm; tools-only qualification saves no caches. Old cache entries and original failed-attempt artifacts are neither overwritten nor selected. No retry, second attempt, artifact reuse, tag, release, public install or alias operation is part of this proposal.
    • The four consumers must return original run/attempt/head/platform, selected artifact ID/digest, recipe/cache identity, observed native archive reader and PHP executable identity, exact closed members, pinned runtime checks, and successful real synthetic-PHAR metadata read with stub absent. Receipts explicitly say distribution_executed=false and live_https_qualified=false. Failure retains a failed receipt; it cannot qualify the later installed HTTPS boundary.

    Source controls already completed locally: 93/94 focused tests pass, one hosted-native-only skip; 19/19 upgrade controls including both real materialized sparse checkouts; 30/30 adjacent release controls; 8/8 executable resolver/cache-policy controls. Adversarial controls cover wrong original run/attempt/head/repository/job/platform/recipe, expired or substituted artifacts, digest changes before inspection, changed executable beside a fresh archive digest, missing CLI/old cache schema, archive traversal/links/duplicate/missing members/trailing bytes, credential-bearing parent refusal before artifact access, fixed no-ini arguments, exact owned cleanup, and honest changed-executable failure receipts. A bounded cached-public-image PHP cell also passed the actual -n synthetic-PHAR read; source was read-only, network disabled, one CPU/768 MiB, and exact cli-114-* container inventory plus temporary Node copy were removed. Boundary/credential-pattern scans pass. Fresh exact-head hosted source checks are pending, so no current source PASS is asserted.

    Integration effects must be reviewed explicitly: changing release.yml on main retains its existing automatic/scheduled cache-warm trigger, now for the extended CLI+micro recipe; maintenance integration itself has no such branch-push trigger. This draft push triggers only normal source CI. Neither integration nor this packet selects a tool-only dispatch or any new release tuple. Original 2.3.7/2.3.8 failures, published-unqualified 2.3.9 and Latest 2.3.6 remain retained; no retry/promotion/default carry.

    Next owners: cli fixes current-head source findings and owns any later separately selected original proof; General owns source review/integration and the operational decision, with independent Security review requested. The concrete source is available now for review before any new producer execution is exposed.

    Successor audit: earlier 059f093 source CI passed native custody on all four hosts and Sonar but refused workflow-level environment in the privileged publication handoff; its PHP contract also still expected the old micro-only schema/counts. This successor scopes the pinned verifier environment to the three read-only jobs, passes the unmodified current central policy locally, and updates those existing cache-contract checks. Immutable Git-blob recipe hashing additionally closes the actual transformed-checkout counterexample across producer/binder hosts. The 059f093 failed source checks remain retained; current-head hosted checks are pending, with no operational attempt made.

    Current-head audit: direct Sonar inspection found one critical cognitive-complexity issue (18 versus 15) in c8a9bf8’s expanded verifier phase dispatcher even though its quality-gate context was green. The 425e7c3 successor extracts the private authority phase without changing workflow effects; 93 focused controls plus both sparse-checkout paths/19 upgrade controls pass again. Fresh hosted checks and direct finding closure are pending; c8a9bf8 is not presented as qualified.

  27. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    The private-verifier source is now accepted on the actual maintenance target: merge b05275b71c8928fa93c461097b1000b6c5cd411d, exact reviewed tree f9f560a2df6b4ecee5ffb001231625a59d3035a1, ordered parents [b02a86d5200c710a95eb1c95787767359114af56,425e7c3ec50327bb39503d0eaf2290bfe2f81de6]. All 15 actual-target checks succeeded; the #114 acceptance/cleanup receipt records the source-only four-platform controls and safe exact branch/worktree removal. The maintenance merge did not trigger a producer or publisher.

    This provides the concrete source/tool/effect proposal from the prior packet, with the CLI+micro cache namespace and private-tool custody boundaries preserved. No new private producer, qualification dispatch, distribution attempt, H/tag, or release was selected. Source merge is not installed acceptance. Failed 2.3.7/2.3.8, published-unqualified/non-Latest 2.3.9, and Latest 2.3.6 remain authoritative.

    Next action/owner: cli is driving the single shared trust correction in central #295/#297/#300 and has integrated the independent finite Cloud preflight predecessor #303 through real required checks. General retains selection of any original private-tool proof or later maintenance tuple, with Security's effect review; cli will execute only that separately selected original proof and return actual evidence. No re-execution or artifact reuse is inferred from source integration. The source-qualified private verifier remains separate from the still-unqualified central PHP setup/root path.

  28. rmcdaniel commented on Nov 5, 2026

    @rmcdaniel
    MemberAuthor

    Maintenance source remains accepted at #114 / b05275b71c8928fa93c461097b1000b6c5cd411d; the private verifier-CLI producer is still unselected. The concrete shared trust dependency is advancing under cli's single central ownership: accepted #305 source binds producer archive/tool subjects and terminal receipt/cleanup, #306 binds the exact initial manual job, and #308 accepts that native policy runtime with seven actual-main checks passing. Draft central#310 now wires only that reviewed manual job; no actual setup dispatch has been selected.

    This is the first Ubuntu26.04/x64/PHP8.3 hosted profile, not qualification of CLI's four-platform private tool producer or any new maintenance distribution. General still owns distinct producer/one-attempt/H/tag/publication/installed/Latest decisions, with exact input/effect records and publishing-path gates. cli owns completing central source acceptance, returning its exact initial qualification packet, and then the separately selected CLI tool qualification. The original2.3.7/2.3.8/2.3.9 failures and immutable outputs remain unchanged; no retry, output reuse, tag movement or promotion was made.

  29. rmcdaniel commented on Nov 9, 2026

    @rmcdaniel
    MemberAuthor

    General status and decision (Nov 9). Latest stays 2.3.6. 2.3.9 remains published-but-unqualified and non-Latest after its installed verification failed on all four platforms. The verifier repair (#114, private pinned PHP verifier tool) is merged on the maintenance branch, but no new release attempt has been made since Nov 5. The attempt waits on the shared setup-php trust work in durable-workflow/.github#297, which is still open.

    Risk is bounded: the two Symfony HttpClient advisories need a scoped client to follow a network-path reference to another origin, or a private-network check on a cached host. The CLI only talks to the server URL the user configured, so this is a defense-in-depth maintenance update, not an active exposure. I'm not attempting another 2.3.x maintenance release (which would burn another version number) until .github#297 lands. At that point the next attempt is 2.3.10, with the merged verifier, cut from the maintenance branch. The Rust 2.5.0 line (#72) remains the long-term replacement for the PHAR.

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

    priority:P1High-priority product or release riskrepo:cliOwned by the CLI repositorystatus:in-progressApproved work is actively being implemented or validated

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions