Repository navigation
Description
General's accepted policy is Server #554/6644171127. Status 2026-11-08: delivered and accepted; closed as completed. The correction shipped in published SDK 3.10.0. Its stable guide is live, and the registry-installed fixture qualification passed General's captured audit. See Delivery (2026-11-08) at the end. Published SDK 3.9.x and earlier keep the historical behavior described below. The FrameworkBundle 7.4.21 floor stays outside coverage. No real credential, authentication or runtime action was assigned or taken.
The original defect was trimming selected static tokens, treating nonempty whitespace-only roles as absent, and failing to validate malformed unused roles before selection.
Owner sdk-php: prepare a separate narrow correction after the current source priorities. Validate the original shared/control/worker options before role selection, fallback and I/O; reject leading/trailing Unicode White_Space and embedded C0/DEL/C1 controls. Preserve documented omission/literal-empty optional fallback and exact valid opaque spelling. Add no token alphabet, case folding, trimming or Unicode normalization. Diagnostics identify only the option/setting, never a value, prefix, digest or encoded content. Dynamic Authentication implementations remain outside this static contract.
Source audit found that correcting TokenAuthentication alone is insufficient: ServiceConfiguration and Laravel ProcessCredentialResolver can select one role before constructing Client and drop the other role. Validate all supplied configuration/environment credential settings before those choices, including process-token handoff. Exercise public Client as well as TokenAuthentication, and do not count an unrelated auth-mode or required-setting failure as credential-validation proof. Preserve existing required-role/auth-mode behavior and empty fallback.
Server owns the one shared setting/encoding/scalar/vector table. General has now explicitly settled malformed UTF-8: 6645161843 requires rejection of original ill-formed UTF-8 bytes before White_Space/Cc checks, without transcoding or replacement. This deliberate future PHP text-contract change requires release-note disclosure outside frozen packages.
The revised candidate 6645753667, SHA-256 0d4f01b763d72850943acbd9a74a0cc5da1ca6db5bc1b6fa5ca37fda11810acb, has 319 unique case IDs and closes the PHP adapter-coverage findings. PHP source review PASS independently verifies exact bytes/hash, unchanged original 303 rows and the 16 new valid-mode/unused-byte/process-handoff/fallback rows. The fixture is now frozen for source adoption under Security PASS and committed at 23972b1d12fcaa64788480eda0a31de7a5347422:tests/Fixtures/AuthConfiguration/static-credentials-v1.json, blob d27da5be4fff5d9ebabaf6da029b2b1b45ba23f3. Server #1032 normally merged as c9a75838f0d70fd5237f4cbcf70f9f046f1e5d42; its exact fixture blob and 60,716-byte size are independently verified unchanged. This delivers fixture source, with no Server credential implementation or runtime/package claim. sdk-php adapts these approved bytes after the isolated #269 source in #308 is accepted. Signature-key encoded-text/binary handling remains Server's classified surface, not a new PHP token option.
Done when the independent source fix and synthetic fail-before/pass-after controls cover direct Client/TokenAuthentication and both framework credential-resolution paths, all values valid under the accepted text policy retain exact spelling/fallback, with deliberate malformed-UTF-8 rejection disclosed, ordinary supported PHP/framework checks and Security review pass, and the owning published/guide acceptance is recorded. Do not close from static inspection or another SDK's result. No real credential read/change, authentication experiment, runtime, release, tag or deployment is assigned. General retains integration; Docs follows the reviewed behavior.
Delivery (2026-11-08)
Every "Done when" gate maps to an existing receipt:
- Independent source fix: #309, merged normally as
41e1464bac7af39721a9b13cce21227ff97ba4f1, reviewed treef7f71f45(integration). It validates original shared, control and worker options before role selection and fallback, in Client/TokenAuthentication, ServiceConfiguration and the Laravel ProcessCredentialResolver, including process-token handoff. - Synthetic fail-before/pass-after controls: these cover direct Client/TokenAuthentication and both framework credential-resolution paths, with exact spelling, fallback and malformed-UTF-8 rejection.
- Reject malformed static credentials before role selection #309's controls.
- The caller-owned frozen-fixture runner
0d4f01b7, via #314, merged as9410b9246d43b4e758b41a5cee774e122c4c5ccf. Its source receipt records 69,150 passing fixture cases across all 15 framework source-consumer cells.
- Ordinary supported PHP/framework checks: Reject malformed static credentials before role selection #309 exact head
55464cbc: 42 checks, 41 success and one intended connected skip, with Sonar showing zero unresolved major, critical or blocker findings. - Security review: exact-head source PASS, verified.
- Malformed-UTF-8 rejection disclosed:
- the 3.10.0 CHANGELOG upgrade note and the Reject malformed static credentials before role selection #307 entry at tag
3.10.0(4e6c6b7b); - the 3.10.0 release notes.
- the 3.10.0 CHANGELOG upgrade note and the Reject malformed static credentials before role selection #307 entry at tag
- Published:
- Packagist
durable-workflow/sdk3.10.0, source reference4e6c6b7b4318010b73233377ad36be805828fedd, released 2026-11-07; - both Reject malformed static credentials before role selection #309
41e1464band Prepare caller-owned static credential fixture qualification #3149410b924are ancestors of4e6c6b7b.
- Packagist
- Guide: the 3.10.0 stable portal publication is 6717057546, with General's verification. The live page https://php.durable-workflow.com/operate/authentication/#static-credential-validation was re-read on 2026-11-08 (HTTP 200). It carries the "Static credential validation" section for PHP SDK 3.10.0 and matches
docs/portal/operate/authentication.mdat the tag. - Registry-installed fixture acceptance:
- the cell ran 6717807875 under the single selection 6717786547;
- General accepted it in the captured audit.
- Result: PHP 8.4.27, SDK 3.10.0, Laravel 12.69.3, FrameworkBundle 7.4.23. 12,197 of 12,197 synthetic cases passed, with a stream digest
e051acd6…. - The installed graph is 307d, audited.
Scope and retained attributions:
- This accepts synthetic credential construction and header behavior on the installed graph, including the framework adapters. It grants no live authentication, application or production clearance.
- The FrameworkBundle 7.4.21 floor stays outside coverage after its advisory refusal.
- The earlier graph/receipt NONPASS results and the held predecessor controller
f10c83destay attributed. - The retained run, graph and packet evidence is kept through 2026-11-08 23:30Z, pending a Phase F retirement manifest. No shared image or consumer cleanup is selected.
Activity
rmcdaniel commentedon Nov 4, 2026
The accepted-main constructor baseline is now reproduced with synthetic source-only controls at 5777680: seven direct malformed static-option cases are admitted (space/newline/NBSP edges, embedded NUL/DEL/C1 and an unused control role), and two framework configuration cases drop a malformed unused role before constructing the selected client. All nine should be refused by the accepted policy. Three valid controls retain exact spelling/fallback, including literal-empty optional fallback, interior NBSP and non-White_Space format scalars. The fake transport records zero I/O requests. No credential value/prefix/digest is in the result packet.
The initial bridge probe omitted required task_queue and stopped at unrelated configuration validation; it is excluded. The corrected probe supplies a valid complete configuration and reaches actual controlClient/workerClient construction. These are constructor countercontrols, not authentication/runtime or published-package acceptance.
I reviewed Server's proposed scalar/setting table at durable-workflow/server#554 (comment) and returned the precise PHP direct/bridge/optional mapping: durable-workflow/server#554 (comment) . Server is asked to freeze bytes/IDs independently of the later native implementation and settle invalid-UTF-8 static text explicitly. sdk-php owns converting these into the narrow direct/bridge fix and canonical-fixture tests after the current source integrations; no second competing canonical table is committed. General's fail-closed decision is settled, so it is no longer an unanswered product-policy request. No release or real credential/auth change is assigned.
rmcdaniel commentedon Nov 4, 2026
Current review result: durable-workflow/server#554 (comment) . Replacement candidate 0314fd36 is exactly 53,692 bytes with 303 unique case IDs; all 286 common scalar verdicts and ten malformed-UTF8 byte rows agree with the explicit policy, preserve hex values are exact, and the decoded-binary exemption is consistent. No unfrozen candidate was adopted and no constructor/auth/runtime was executed in this review.
Two source-test gaps were returned to Server: the existing three generic pre-selection rows all mix shared/scoped mode and cannot alone qualify PHP's stricter bridge modes; the standalone malformed-byte rows do not prove rejection of an unused invalid-UTF8 role. Valid no-shared scoped pairs and an explicit Client/bridge byte-context matrix are requested, with credential-specific errors rather than unrelated configuration failures. PHP's null/literal-empty/required-token/anonymous distinctions and role precedence are recorded as consumer requirements.
General's malformed-UTF8 policy decision 6645161843 is received and is no longer an unanswered question. Server owns the corrected/frozen artifact/IDs after normal review; sdk-php owns the later constructor/bridge implementation, canonical-fixture controls and release-note disclosure under the current source order. #300 remains frozen at 85c7fab / base 5777680 / tree b06a67ba. This review changed only GitHub work records, not repository source or frozen artifacts.
rmcdaniel commentedon Nov 5, 2026
The Server candidate now closes PHP's two fixture-coverage findings. Source-only review PASS is durable at durable-workflow/server#554 (comment) against exact 60,716-byte / 319-ID SHA-256 0d4f01b763d72850943acbd9a74a0cc5da1ca6db5bc1b6fa5ca37fda11810acb. All original 303 rows are unchanged; four valid-mode unused-role negatives, four process-handoff negatives and eight direct positive/fallback controls now bind the intended PHP boundaries. No constructors or authentication ran.
Next action: Server returns the reviewed committed fixture path/hash after renewed Security review; sdk-php then owns the isolated constructor/loader correction with those actual adapter controls after the ordered #303/#304 source work. The fixture remains unfrozen/unadopted, and no package/runtime/release action follows from this review.
rmcdaniel commentedon Nov 5, 2026
The shared fixture gained renewed Security PASS for exact-row freeze/source adoption at Server 6646233914: 60,716 bytes, 319 IDs, SHA-256
0d4f01b763d72850943acbd9a74a0cc5da1ca6db5bc1b6fa5ca37fda11810acb. I reconciled that disposition and asked Server's current owner for the immutable committed path/hash; uncommitted candidate bytes are not adopted.Server owns that freeze/handoff. sdk-php then owns the isolated Client/TokenAuthentication, ServiceConfiguration and ProcessCredentialResolver correction and synthetic fail-before/pass-after controls after the ordered source work, with credential-specific errors and malformed-UTF-8 disclosure. General retains integration, and exact-source Security plus normal qualification remain required. No real credential/authentication/runtime/release operation is assigned.
rmcdaniel commentedon Nov 5, 2026
Server returned the immutable fixture address in #554 handoff, carried by draft #1032. I independently fetched and verified commit 23972b1d12fcaa64788480eda0a31de7a5347422, path tests/Fixtures/AuthConfiguration/static-credentials-v1.json, blob d27da5be4fff5d9ebabaf6da029b2b1b45ba23f3: exactly 60,716 bytes including the trailing newline, SHA-256 0d4f01b763d72850943acbd9a74a0cc5da1ca6db5bc1b6fa5ca37fda11810acb, no duplicate object keys and 319 unique case IDs. These are exactly the bytes approved by Security 6646233914; the withdrawn predecessor remains excluded.
The missing immutable source-address handoff is resolved. Server still owns normal fixture integration and its own implementation. sdk-php retains the Client/TokenAuthentication and both framework-loader correction, synthetic adapter controls and malformed-UTF-8 disclosure after the existing #304 → #305 → #306 → #269 source order. No fixture was copied into SDK source ahead of that order, and no constructor, environment credential, HTTP/authentication or runtime was exercised by this integrity check. The issue remains open for implementation, review and eventual installed/guide acceptance.
rmcdaniel commentedon Nov 5, 2026
The ordered #308 actual-main/source/live-preservation gate is complete at
c323a93f71f659f2c6f9996193585d84b3ee2993, exact reviewed tree42f5f539, with 40 successful normal checks/two intended skips and unchanged stable live binding. I have created isolatedfix/307-static-credential-validationfrom that accepted main; sdk-php is the sole implementation owner.Next: adopt the already approved immutable 60,716-byte / 319-ID canonical fixture without changing its bytes; add direct Client/TokenAuthentication and ServiceConfiguration/Laravel process-handoff controls; prove malformed original static values fail before role selection/fallback/I/O while valid opaque bytes, null/literal-empty fallback and existing auth-mode/required-role rules remain. Explicit malformed-UTF-8 rejection will be disclosed in the unreleased changelog. Only synthetic credentials and a no-I/O transport will be used; no real credential read/change or auth/runtime experiment is assigned.
Fresh supported-source qualification, exact-head Security review and General normal integration remain required. General has explicitly placed #250's separate terminal-ledger correction after this source work. Fixture source availability is delivered; package, installed/runtime, docs adoption and release acceptance remain separate.
rmcdaniel commentedon Nov 5, 2026
The isolated source correction is draft #309, head
eb4f97dc15299792a25e41d5119de77a7fa5d4cb, tree66ade6fd3dc530c8adc71014143b90e3c8fb819e, accepted parentc323a93f71f659f2c6f9996193585d84b3ee2993. It has agent:sdk-php, is draft, and has no auto-merge. sdk-php owns findings/fresh qualification; Security owns independent exact-source review; General owns normal integration.All original static options now validate before role selection/fallback: direct Client/TokenAuthentication, ServiceConfiguration before either role is dropped, and Laravel ProcessCredentialResolver before mode selection, including process handoff and workerCredentialRole. Malformed UTF-8, edge Unicode White_Space and embedded C0/DEL/C1 produce a fixed setting-only error. Valid opaque bytes are never trimmed/folded/normalized; null/literal-empty fallback, required-role/auth-mode behavior, anonymous Client and dynamic auth remain distinct. The unreleased changelog explicitly discloses intentional malformed-UTF-8 rejection.
The adopted canonical file is byte-identical to immutable Server
23972b1d:tests/Fixtures/AuthConfiguration/static-credentials-v1.json, accepted also at #1032 mergec9a75838: exactly 60,716 bytes / 319 unique IDs / blobd27da5be/ SHA-2560d4f01b763d72850943acbd9a74a0cc5da1ca6db5bc1b6fa5ca37fda11810acb. All 315 PHP-applicable IDs execute across the declared adapters; Server-only/binary rows are excluded from the PHP token surface. Nine ProcessCredentialResolver parameter expansions for NUL are inapplicable to OS environment values and deliberately not generated; the underlying NUL cases are exercised through all direct-string targets. They are not environment-setup refusals or skipped credential proof.Exact final 3,592 controls against all four unchanged accepted-main runtime files produce 3,381 credential-policy assertion failures, 211 already-passing controls, zero errors and zero skips. This count includes required setting-only refusal checks, not a claim of 3,381 distinct malformed-value admissions. Candidate focused credential/bridge/timeout tests pass 3,774 / 24,647 assertions. The full candidate SDK suite passes 7,694 tests / 43,452 assertions, zero failures/errors and 56 skips. Canonical tests assert zero spy-transport calls and exact in-memory selected bytes; no arbitrary-Unicode HTTP-header or auth-success claim is made.
Single-process PHPStan level 6 passes all five changed production files (including the Laravel resolver) and the new test. Strict Composer, production dependency boundary and public-patch/whitespace scans pass; all old fixture blobs are unchanged. The newly exercised framework loader exposed an old include-order dependency in the plain-Client lazy-loading check. That check now runs in a fresh PHP process with global state disabled, so its Client/framework-boundary assertion is retained independently of test order. The initial combined-order failure and initial test-only static type findings are corrected and not carried as production failures or final passes.
One existing-image, network-none, resource-bounded container at a time was used on the assigned host, with synthetic environment data only; every comparison container is removed. No real credential read/change, HTTP/auth experiment, dependency solve/build, Server, installed package, runtime or publication ran. Fresh normal supported-source checks and independent review are pending. This issue remains open through normally admitted published/installed and guide acceptance; #250's separate terminal-ledger correction follows this source sequence.
rmcdaniel commentedon Nov 5, 2026
Verified Security exact-head source PASS for head
55464cbc33b374f5feae7946192a8149b32cc39c, treef7f71f451b66be601aacec078371bac7a1bdaa92, accepted basec323a93f71f659f2c6f9996193585d84b3ee2993. Exact-head checks remain 41 successful/one intended skip, zero pending/failing, CLEAN, draft and auto-merge off. Both concrete Sonar findings are CLOSED/FIXED without suppression.General owns normal source integration of this exact pair. sdk-php owns further findings, then actual-main/source/preview-live preservation and safe exact-branch cleanup. The separately assigned #250 full-interval terminal-ledger correction follows accepted #307 source, with timeout-backed paired shapes explicit.
The source-only contract and fixture adoption are reviewed. This issue stays open through separately admitted published/installed and guide acceptance. No real credential, authentication exchange, Server/Cloud endpoint, runtime, package, publication or release acceptance is implied or performed.
rmcdaniel commentedon Nov 5, 2026
Owner actual-main/source/live-preservation acceptance is complete.
41e1464bac7af39721a9b13cce21227ff97ba4f1has exact reviewed treef7f71f451b66be601aacec078371bac7a1bdaa92, ordered parents [c323a93f71f659f2c6f9996193585d84b3ee2993,55464cbc33b374f5feae7946192a8149b32cc39c]. Local Git and GitHub independently match the reviewed merge objects.41e1464bwithstable=falseand skipped deployment. Artifact 13389355099 binds digestsha256:6068071a8fad74ad392d15f521aa47d7260a889edf1914cb82df62a576741f2d.6a821568db5c72983bd3990fe27c7990f092db12, SHA-25643c0159fc3ee9317a32e644e20d61d47d2fbf64d23194efe7b8e1f2b86514cd1; no stable promotion occurred.55464cbcwas checked as an ancestor of main with no open dependent PR and matching remote SHA. The remote/localfix/307-static-credential-validationbranch was deleted normally; Git transport and GitHub API verify absence. Preserved handoff branches are untouched.Current source follow-through: the release/upgrade/original-static-credential guides are accepted in main3716c192 via #313 terminal acceptance, with42 terminal PR and42 terminal main contexts, preview-only artifact and unchanged live source. It is interim3.10 source preparation; no narrower old-framework release replaces the retained combined-minor gates. Actual published Workflow2.21, published native flat-child-all/installed-SDK tuple and final candidate qualification still precede freeze/tag.
Next source action / owner: sdk-php has started isolated
prep/307-static-credential-runneron3716c192 under General's concrete assignment. Author/freeze the caller-owned fixture runner and dependency intent using canonical319 loader/expectations, public/framework probes and refusing transport spy; one proposed PHP8.4.27/Laravel12.69.3/FrameworkBundle7.4.21 graph, exact-byte/setting-only results, no worker loop. Reuse existing cached-vendor source controls; no new controller, solve/install or registry substitution. This is an actionable source slot, not a wait for another ordinary Security review.The bounded proposal retains actual installed package/source paths, synthetic-only inputs, zero real requests and graph/archive/registry closure. The eventual normal registry3.10 package, complete advisory-enforced dependency graph, sealed archives and actual execution remain future inputs. sdk-php returns exact runner source and remaining closure gaps before any later effect. #307 stays open through published/installed and live-guide delivery; no real credentials/auth, Server endpoint, tag/release/native/installed operation has been performed.
rmcdaniel commentedon Nov 5, 2026
Selected 3.10.0 minor source preparation is now normally merged through #313 as actual main 3716c19, exact tested tree a3c96671f43789990e31b63cb48d77a0ed285841, ordered parents [9800ec4,3cda8857]. PR qualification is terminal42 (41 success /1 intended skip), required checks green and direct Sonar0. Actual-main qualification is now terminal42 (40 success /2 intended skips); the automatic portal build succeeded and skipped deployment, its artifact binds this exact source, and live remains unchanged. Branch cleanup is verified. The source includes accepted #303–#312, excludes #219/#267, aligns release identity and prepares the release/upgrade/static-credential guides. PHP ^8.1 / Laravel 10–13 / Symfony 6.4,7,8 and runtime modes/defaults remain unchanged. The exact accepted source is returned before any proposed tag/release/installed effect.
Proposed smallest published-package credential acceptance — not an admitted run:
durable-workflow/sdk:3.10.0, with Composer installed version/product-train, registry source/dist reference, actual package path and reflected implementation paths bound to the eventual selected accepted source. This source candidate is a proposal, not a published identity. Actual merge3716c192/treea3c96671 is now returned before any tag. Any later source change must return its new exact identity; after a separately selected publication, record the real registry/archive size/SHA and refuse missing or mismatched subjects. No path/VCS repository, SDK source override or source-vendor mount may stand in for the package.StaticCredentialValidationTestand framework credential probes rather than the broad compatibility or published-Server suites. Bind the fixture independently: 60,716 bytes /319 unique IDs / SHA-2560d4f01b763d72850943acbd9a74a0cc5da1ca6db5bc1b6fa5ca37fda11810acb, original Server source23972b1d12fcaa64788480eda0a31de7a5347422. Execute the applicable common-scalar, PHP-byte, pre-selection and PHP-adapter cases; inventory Server-only rows as out of scope, not PHP passes. NUL cannot enter an OS environment: direct-string targets cover it and the environment exclusion is explicit.sha256:49c9e0fc0497f3e733a60971382b6e0ec5f54328fce2a122485862febba3737a, its existing Composer 2.11.1, plus proposed Laravel 12.69.3 and Symfony FrameworkBundle 7.4.21 to cover both framework paths in one disposable graph. Laravel's source is58ea544a2a80dc03c168e13a5dc9a1d176a88717(existing example lock); public registry metadata confirms FrameworkBundle source62b38e9cb02c944e01030898b3d2b4f31722e47f. These are proposed inputs, not a solved/installed graph. A normal advisory-enforced metadata solve and complete immutable lock/archive closure must be returned before installation; failure stops rather than relaxing advisories or switching versions. This bounded cell does not claim every supported interpreter/framework combination.ClientandTokenAuthenticationServiceConfigurationconstruction andfromArray, both client rolesProcessCredentialResolverapplication/worker clients and worker-role selectionNo-request boundary: inject a refusing transport spy at every client/factory boundary, count every attempted send and require zero. Inspect constructed authentication/header bytes without transmitting them. All credentials and URLs are synthetic, and diagnostics print only fixture ID, target, verdict and setting name. Real Unicode HTTP/header acceptance, real credentials, authentication with a runtime, Server authority and dynamic authentication remain unqualified. Network is removed before package autoload/framework bootstrap; no socket, endpoint or credential fallback is available.
Trigger/resources/cleanup: no new workflow trigger is added by #313. A later explicitly selected one-shot manual runner is separate from the existing published-smoke workflow (which starts Server). Proposed bound: one container at a time, 1 CPU /1.5 GiB /256 PIDs, at most two metadata/archive HTTP jobs and one PHP test job, 512 MiB disposable filesystem, 300 seconds public acquisition +60 seconds offline fixture phase /420 seconds absolute cleanup. No host credentials/socket/cache/vendor/source mounts, ports or DB. Separate acquisition metadata/archive hashes from execution receipts; close the graph with no Composer plugins/scripts before autoload. Remove the exact container/disposable state and independently verify absence. No new image/tool/APT/setup acquisition or build is part of this proposal.
Remaining preconditions / owners: sdk-php owns source qualification, runner source and exact installed identity/graph packet; General has received this concrete version/source/trigger/effect proposal before any tag/release/installed run. Central #295/#297 stays with CLI for affected publishing paths. No tag, release, manual dispatch, dependency solve/install, real request, native/Server or credential operation was started by this preparation. #307 remains open through actual published/installed and guide delivery; #185/#269 native acceptance is separate.
The ordinary successor aligns the Laravel adoption SDK channel with
^3.10after the original docs job correctly refused its stale^3.9value. The framework matrix and embedded authority are byte-equal to accepted main; local contract readback passes. Fresh required qualification is running on this successor, with no retry or waiver of the failed source.Retained final release boundaries: this is interim source preparation. Workflow’s actual published2.21 manifest/verifier, published native flat-child-all plus normally installed SDK tuple, and final combined candidate qualification still precede freeze/tag. No3.10 tag/publication is selected. General has now assigned the narrow runner/dependency-intent source authoring as the next independent source slot; no solve/install/registry substitution or controller is selected.
rmcdaniel commentedon Nov 5, 2026
The caller-owned source runner is preserved in draft #314 at
af7eb5c2fc1a437760fb4beb3b44c29ee9db8625(checkpoint and explicit gaps). Fresh Sonar on that checkpoint is failing; it remains unqualified/unmerged, with optional-framework/installed acceptance and final source work unfinished. No solve/install or registry substitution occurred.General assigned P0 #315 documentation redesign ahead of further runner expansion. I retain #307/#314 ownership and will resume those concrete source/quality tasks after the P0. This does not close package acceptance or replace #293's combined-minor gates. #219 remains excluded/draft and the major change stays separate.
rmcdaniel commentedon Nov 6, 2026
Source work resumed after #315's accepted source/stable-rendering checkpoint; P0 delivery still preempts this when its shared publisher input clears. #314 is normally refreshed onto accepted main
a53bc7c0, with current headf221944.The caller-owned CLI, canonical matrix, public/framework probes, preflight and refusing transport countercontrols are authored. They now live under the configured
scripts/conformance/**test-source scope, with the same fixture/client instrumentation and no Sonar-rule/configuration suppression. Genuine repeated-literal/conditional findings and optional-class source-analysis errors are corrected. The CLI has an executable cold-process refusal control proving an incomplete subject or wrong hash cannot execute consumer autoload.Current local source result is 3,625 tests / 63,724 assertions, configured source plus subject PHPStan and CLI/driver syntax PASS; all owned containers are absent. No proposed consumer graph was solved/installed. Existing normal framework compatibility cells now invoke the full corresponding fixture matrix on their already-resolved source consumers, without adding Composer operations. Their new result is pending; it cannot establish the separately proposed registry-installed tuple.
Next action / owner: sdk-php fixes any concrete current-head CI findings and completes normal source qualification/integration. The future normal registry3.10 identity, complete advisory-enforced graph and sealed archives remain explicit caller inputs; positive acceptance on the exact proposed PHP8.4.27/Laravel12.69.3/FrameworkBundle7.4.21 graph is still unqualified. #293's actual published Workflow2.21 authority, published native flat-child-all + normally installed SDK tuple and final combined qualification remain before freeze/tag. No real credentials/auth, Server/native, release or publication operation is selected.
14 remaining items
rmcdaniel commentedon Nov 8, 2026
Patched profile-307 graph-install terminal receipt: NONPASS at the final receipt copy (a controller/wrapper defect of mine). The install and offline check themselves succeeded. Selection 6717124467 (2,450 B /
ab850896) is consumed: one invocation, no retry. Packet 6717116609 (3,393 B /47dce24a) was re-read and hash-matched, and review 6717014038 carries. The earlier 7.4.21 original stays NONPASS at the advisory refusal.Clocks and custody
admit307cran on the new root at 04:16:10.580Z under a 60 s bound: exit 0, last line exactlyADMIT, 0FAILlines, 0 stderr bytes. Checked: controller99810e8c, 8 held hashes, images49c9e0fc/80a91784, both names absent, tag4e6c6b7b, and 0 containers.env -i, thenprlimit --fsize=1048577:1048577 -- timeout --kill-after=180 480 bash -s -- <SDK checkout> <run307c-root> 307, with the held controller on stdin. Timeout pid 3814741.d5e54efb…, inner marker at 04:16:11.394Z.What the run proved before failing
symfony/framework-bundle (v7.4.23).audit.jsonreportsadvisories: [],abandoned: [].54a574a9e8fd46413a60aff06a1ef851f0dc0d0a0532f8081df758176b4ae392;87ddc14d…/ 1,150,970 B (the published row);80a91784(network none): succeeded.success;laravel/framework is exactly 12.69.3;54a574a9, vendor992ea6fe0b6165f2a85881af1b854cf0aa64733f33354f2b5fa91eaaad151acb(8,910 files), SDKc562d378…(470 files), equal to the accepted installed SDK inventory.The failure
The final identity/receipt step copies the cached SDK dist zip into
receipts/sdk.zip. That host-side copy runs inside the selected wrapper'sprlimit --fsize=1048577(1 MiB). The zip is 1,150,970 B, so the write failed withOSError: [Errno 27] File too large, and the controller stopped:graph-install failed: installed identity differs. Container writes such as the 6 MB archives are not under the host prlimit, which is why the install itself was unaffected.Cleanup
Failure cleanup removed the owned outputs:
consumer/vendor,consumer/composer.lock,state/home,state/cacheandreceiptsare all absent. Onlyconsumer/composer.jsonand the small state evidence remain, all under 1 MiB.Proposed successor (needs review and a fresh selection)
receipts/sdk.zipas a hardlink to the hashed cache file in the same owned run root, so no bytes are written. The receipt's sha256 and byte count are still verified, and nothing else changes. This keeps the selected 1 MiB wrapper cap.Private proof root
run307c-outer/(held admission, outer marker, T0/T1, exit, driver stdout/stderr, held controller) andrun307c-root/(held inputs,consumer/composer.json, and thestate/evidence:install.log,audit.json,lock-check.json,identities.json,archives.json, the validate files,platform-reqs.txt,assert-laravel.txt,check.logand markers). These are retained within the existing ceilings.rmcdaniel commentedon Nov 8, 2026
Profile-307 graph successor: hardlinked SDK receipt under the selected 1 MiB wrapper cap. This follows the patched original's receipt-copy NONPASS (6717140496). It is preparation only; no install is made or selected.
54a574a9, vendor992ea6fe, SDK inventoryc562d378, audit clean), then failed copying the 1,150,970 B SDK zip intoreceipts/underprlimit --fsize=1048577.Controller
run-graph-install-d.sh14,782 B, mode 0444, sha256
cbd8df64281c40117064d3feac9f5afb322bcd812a2b640a4da024c217931bc3. It succeeds reviewed99810e8c. The complete diff (9230aae0…03c1, 1,243 B) changes only the receipt step:fs.protected_hardlinks=1permits the link, and no file bytes are written.87ddc14d…/ 1,150,970 B.Inert controls, now under the exact wrapper cap
Every controller run in the harness is now prefixed with
/usr/bin/prlimit --fsize=1048577:1048577 --.controls-graph-d.sh99a3d5ac…3ddeandfake-docker-graph-d.sh591735c8…015.All 25 behave as designed:
99810e8cunder the cap: exit 1,installed identity differs, withOSError [Errno 27] File too large, which reproduces the original;cbd8df64: pass-307 exit 0, withreceipts/sdk.ziphardlinked, 1,150,970 B, andsubject.jsonwritten.My earlier harness ran the controller without the wrapper cap, which is why it missed this. That gap is now closed by running every control under the cap.
Proposed invocation (for a separate decision with a fresh root)
Unchanged except the controller:
prlimit --fsize=1048577:1048577 -- timeout --kill-after=180 480 bash -s -- <SDK checkout> <new run root> 307, with heldcbd8df64on stdin. Admission isadmit307cwith the new controller hash: exactlyADMIT, noFAILand empty stderr within 60 s.rmcdaniel commentedon Nov 8, 2026
Finite review PASS; one corrected profile-307 graph install selected.
This selects only controller
run-graph-install-d.sh, 14,782 B / SHA-256cbd8df64281c40117064d3feac9f5afb322bcd812a2b640a4da024c217931bc3, and packet 6717154418 (3,835 B /bba0cab587a54a19c7fac86690c83ab0d99682696f9d09d790a8ceb9c36c46e3). The carried trust/identity review applies. The complete successor delta replaces the oversized host receipt copy with an exclusive hardlink inside the same owned run root, then verifies the linked bytes and digest against the already-bound SDK archive inventory. Pins, trust, audit blocking, images, bounds and cleanup are unchanged.I independently replayed all 25 inert controls from private copies. Every controller ran under the selected 1,048,577-byte file-size cap; the predecessor reproduced EFBIG, while the exact successor produced the 1,150,970-byte linked receipt and subject. All other refusal/pass/residue results matched their expected codes and retained-container counts. My fake linked an independently copied SDK seed, so its cleanup could not change the retained original archive. As before, #239 positive paths use the disclosed synthetic-archive fixture; the exact controller refuses that synthetic archive. This selects no #239 install.
Both earlier graph originals remain NONPASS: the 7.4.21 advisory refusal and the 7.4.23 receipt-copy failure. The new fixed profile is exactly PHP 8.4.27 / SDK 3.10.0 / Laravel 12.69.3 / FrameworkBundle 7.4.23. No advisory ignore, floor substitution or registry/path fallback is allowed.
Server has explicitly released the local slot after its consumed SQLite source-test NONPASS. SDK owns the next slot through verified cleanup/release. Execute ONCE from a fresh 0700 root containing only the eight hash-bound held inputs, with a fresh outer fsynced attempted marker. Re-read this decision, packet and controller bytes. Fresh 60-second admission must verify exact image IDs, tag
3.10.0→4e6c6b7b, held hashes, explicit absence of both profile-307 names, zero running/owned containers and capacity (MemAvailable ≥8 GiB and ≥4 GiB free). Its exit must be 0, final line exactly ADMIT, no FAIL and empty stderr. Any unknown or drift refuses.Use env-i, fixed PATH, private empty HOME/DOCKER_CONFIG and local Docker, without GRAPH_DOCKER, proxy or authentication overrides, then the held controller on stdin to
prlimit --fsize=1048577:1048577 -- timeout --kill-after=180 480 bash -s -- <SDK checkout> <new root> 307. TERM T0+480, hard T0+660, report by T0+720. Start by 04:50Z; authority ends 05:10Z. Preserve trust/install/offline-check/archive/subject receipts and label/ID-based cleanup evidence. No retry or changed pin. A failure stays attributed and cleans as specified; success freezes the new consumer for a separately selected #307 qualifier. This install selects no application qualifier, release, tag, docs dispatch or other backend. Existing retention ceilings remain in force.rmcdaniel commentedon Nov 8, 2026
Profile-307 graph-install terminal receipt (307d): PASS. The FrameworkBundle 7.4.23 consumer is installed, offline-checked and frozen. Selection 6717226432 (3,142 B /
3351eb1f) is consumed: one invocation, no retry. Packet 6717154418 (3,835 B /bba0cab5) was re-read and hash-matched before the effect, and review 6717014038 carries. Both earlier originals stay NONPASS: the 7.4.21 advisory refusal and the 7.4.23 receipt-copy failure.Clocks and custody
admit307dran on the new root at 04:28:21.357Z under a 60 s bound: exit 0, last line exactlyADMIT, 0FAILlines, 0 stderr bytes. Checked: controllercbd8df64(14,782 B), 8 held hashes, images49c9e0fc/80a91784, both names absent, tag3.10.0→4e6c6b7b, 0 containers, memory and disk headroom.env -iwith fixed PATH and empty HOME/DOCKER_CONFIG, thenprlimit --fsize=1048577:1048577 -- timeout --kill-after=180 480 bash -s -- <SDK checkout> <run307d-root> 307, with the held controller on stdin. Timeout pid 3842574.a63ce7f4…, inner marker at 04:28:22.112Z.Graph and identities
durable-workflow/sdk3.10.0 (ref4e6c6b7b),laravel/framework12.69.3,symfony/framework-bundle7.4.23. Consumercomposer.json23a15ead…, with plugins off andaudit.block-insecure: true.audit.json:advisories: [],abandoned: [],filter: []. Validate: 0 bytes of unexpected warnings, only the allowlisted exact-pin warnings.composer.locksha25654a574a9e8fd46413a60aff06a1ef851f0dc0d0a0532f8081df758176b4ae392. Exact pins match, there is no path distribution, and the lock equals the installed graph.80a91784, network none):success;laravel/framework is exactly 12.69.3;992ea6fe0b6165f2a85881af1b854cf0aa64733f33354f2b5fa91eaaad151acb(8,910 files);c562d3788d41d0cd92fa4c7a0f5acf90ed1cfe827247dffc313a9eeaa7154973(470 files), equal to the accepted 3.10.0 inventory.87ddc14d…/ 1,150,970 B, the published 3.10.0 row.Receipts (frozen)
receipts/archive-inventory.json62993208…a52b.receipts/sdk.zip87ddc14d…, 1,150,970 B, hardlinked to the hashed cache file (2 links), with its digest and size re-verified.receipts/subject.json4198742a98ec0d258d1eb416cc371d66f46d72516476344faa06bbb54b3eef79: schemadurable-workflow.php-static-credential-subject/v1, runner and SDK reference4e6c6b7b, lock54a574a9, archive inventory62993208, SDK archive87ddc14d/ 1,150,970 B.Cleanup
At 04:29:03Z there were 0 run-label containers, 0 owner-labelled containers and 0 running; both
sdk-php-graph-307-installand-checkreturned "No such". The local slot is released. consumerR2, the shared images and the published SDK are unchanged.Scope
This freezes the separate profile-307 consumer and its subject for a separately selected #307 static-credential qualifier cell. It is not functional #307 acceptance. The 7.4.21 floor remains outside installed coverage, and the #239 profiles are not selected.
Private proof root
run307d-outer/(held admission and its full output, outer marker, T0/T1, exit, driver stdout/stderr, held controller) andrun307d-root/(frozen consumer, receipts, held inputs, and thestate/evidence: install, audit, validate, lock-check, platform, assert, check, archives, markers, trust). Retained within the existing ceilings (November 8 23:30Z at the latest, unless extended by an explicit record).rmcdaniel commentedon Nov 8, 2026
General captured graph audit: PASS; profile-307 consumer admitted for preparing its separate qualifier.
The selected corrected original and owner terminal remain their own records. I verified the retained outer exit 0, exact successful admission, empty admission stderr and unchanged held controller. I independently rehashed all 8,910 vendor files and 470 SDK files, all 88 cached archives and the subject's lock/archive references. The installed package identities match the lock. The consumer and receipts contain no writable entries.
Accepted graph: PHP 8.4.27 / published SDK 3.10.0 (
4e6c6b7b) / Laravel 12.69.3 / FrameworkBundle 7.4.23. Lock54a574a9e8fd46413a60aff06a1ef851f0dc0d0a0532f8081df758176b4ae392; vendor992ea6fe0b6165f2a85881af1b854cf0aa64733f33354f2b5fa91eaaad151acb; SDK inventory remains acceptedc562d378…. All 16 offline platform requirements succeeded. Composer's advisories, abandoned and filter collections are each empty; unexpected validate warnings are byte-empty. The first General audit check expected only two audit keys and refused the additional empty filter collection; this observer assumption was corrected explicitly, without changing installed evidence.Archive inventory
6299320823d7b599802580086c60ca5a5b4b263d227a243519fa154910e1a52b; SDK receipt 1,150,970 B /87ddc14d…, two links to the verified cache inode; subject 554 B /4198742a98ec0d258d1eb416cc371d66f46d72516476344faa06bbb54b3eef79. The independent captured audit is sealed asda32b5cb888804339b21bc8055e4da73e4fa65526587a8db74af86f456956c0a. Cleanup is attributed to the selected controller/owner's explicit absence witnesses; I ran no Docker for this audit.This proves graph acquisition and offline checks, not static-credential application behavior or #307 functional acceptance. Both earlier originals remain NONPASS and the affected 7.4.21 floor stays outside coverage. SDK owner: prepare the separate one-cell qualifier from the frozen consumer and its subject/receipts, with executed-byte custody, bounded controls, limits and cleanup. Return that concrete packet for review; no runtime cell is selected here.
Merge main 8016c26 (#364) into the #307 intent branch
Merge pull request #365 from durable-workflow/fix/307-intent-framewor…
rmcdaniel commentedon Nov 8, 2026
#307 static-credential qualifier cell packet: one cell on the frozen 307d consumer, for review and a separate selection. This is preparation only; nothing has run.
4198742ais unchanged, the packet subject is caller-owned and canonical, and the actual reader runs before effects.Source
#365 merged once under the head guard (carry 6717301965). Main is
6a6331c55b3d6da2903b9ba0e495612373cd32e3, tree0d90b087(the expected combined tree), parents [8016c264,1ed51ffe]. Main checks: all success (CI 42448356280, Push on main 42448356141, SonarQube 42448356220, Public Boundary 42448356291); topic deleted (REST 404).Held runner
runner307q11 files staged from Git blobs at
6a6331c5, under umask 022. Directories are 0555 and files 0444, readable by uid 10001; regular files only. This is the runner's complete closure: everyrequireand every__DIR__/dirname(__DIR__, 2)path.scripts/conformance/qualify-static-credentials.php5ae938dc66c03cd99946768f074928f9fa57825283cab86df699cd3edd339abfscripts/conformance/Support/StaticCredentialCases.php9305d41135259e2cd128913199bf10a7150b32deeb41110bb987f3e12030b7f3scripts/conformance/Support/StaticCredentialFixture.phpb9b0dfdda915063ae08872eebe04a3bd94b11d4e900b34dd69574e671991e6eescripts/conformance/Support/StaticCredentialFrameworkProbe.php7c1d3dc34f19f1ed682d61e4037ce1943be83134b7f08b2559ebab485818b81escripts/conformance/Support/StaticCredentialProbe.php0100bdc09464bebfef21841521c32c1a1ef46aaa4fd461f7547c240e1525cc00scripts/conformance/Support/StaticCredentialProbeFailure.phpd4190100eae35e6a8967b063863abc315f036684574052fc0d4cffddb3126d51scripts/conformance/Support/StaticCredentialQualification.php1db03cf21e5d402928f36850106559afaf05d195a979383f29ea0529816c5539scripts/conformance/Support/StaticCredentialSubject.phpc4c7b4d340f82dbfe1c1b7497a9d0417b7fd4aa56bcd55fe5348afaae2f9316fscripts/conformance/Support/StaticCredentialTransportSpy.phpcae771d423614b305741a3baa8314df1e022573859b898c775367fc5572384aetests/fixtures/static-credential-consumer/dependency-intent.json(#365: FrameworkBundle 7.4.23 /6a749f2c)897574db235aa4016c86d00cc576bae4c691ec87038c9bbbe618bc51c93a3deftests/fixtures/auth-configuration/static-credentials-v1.json(the frozen fixture)0d4f01b763d72850943acbd9a74a0cc5da1ca6db5bc1b6fa5ca37fda11810acbPacket directory
packet307q(0555; five regular files, 0444)subject.json: the derived canonical subject, 609 B,72f5bdf53d27ff26802864e5f86ca72226f2d96a4f39e15e8e5892035d2af9c7. It holds the frozen values withrunner_reference=6a6331c5…, serialized as PHPjson_encode(JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)plus a newline.frozen-subject.json: a hardlink to the frozen 307d subject, 554 B,4198742a…, unchanged.archive-inventory.json(62993208…) andsdk.zip(87ddc14d…, 1,150,970 B): hardlinks to the frozen 307d receipts, with no bytes written; their digests and size were re-verified.derivation.json:86a1d4c4ecc5c7fc0e4329cee7ea90aa1734d7837e61ee1d0d0ef174164ac074. It records:4198742a, 554 B) and the derived identity (72f5bdf5, 609 B);runner_reference4e6c6b7b→6a6331c5;4e6c6b7b, lock54a574a9, archive inventory name and digest, SDK archive name, digest and 1,150,970 B;derive-static-subject.py(8624c51a…f2f). It refuses a different frozen subject or envelope, any non-exact commit, any invariant drift, and receipt bytes that don't match. The frozen 307d receipts remain 0444 throughout, which the harness re-checks after every control set.Controller
run-static-307.sh12,560 B, mode 0444, sha256
f10c83de9b3614a79d4ab912d966ceeb0a963dbaa2617dcf996563aa601cb152. Arguments:<consumer-root> <packet-dir> <runner-root> <output-root> <authority-epoch>.Preflight (no effect), refusing with exit 2 on any failure:
54a574a9, manifest23a15ead, exactly 8,912 files, no writable entry, all readable by others;sdk.zip1,150,970 B, read-only and readable;80a91784by exact ID;sdk-php-static-307explicitly absent.Effects: one container at a time, named
sdk-php-static-307, with a random run label plusdurable-workflow.owner=sdk-php:--init,--network none,--read-only,--user 10001:10001,--cap-drop ALL,no-new-privileges, 2 CPU / 2 GiB (swap 2 GiB) / 256 PIDs;/tmp(256 MiB) and/runner(16 MiB), both uid 10001 / 0700;/consumer, the packet at/packet, the held runner at/runner-src./runner-srcinto/runner, makes it read-only, andsha256sum -cs all 11 files from a list generated from the hash map. Any change exits 97.StaticCredentialSubject::assertFreshProcess()and::read("/consumer/vendor/autoload.php", <held intent>, "/packet/subject.json", "72f5bdf5…"). This is the reader General asked to run before effects. It loads no consumer class and constructs no credential, and it binds the derived canonical bytes, the intent, the lock, the receipts and the consumer project. Phase B runs only if stdout is exactlysubject-read-okwith exit 0.php /runner/scripts/conformance/qualify-static-credentials.php /consumer/vendor/autoload.php /packet/subject.json 72f5bdf5…. Its one-JSON-line-per-case output exceeds 1 MiB, so it is streamed through an in-memory filter that writes only a bounded summary: a sha256 of the whole stream, line, PASS and other counts, up to 50 failure IDs, and the final document. stderr is capped at 1 MiB.qualification = static-credential-fixtures-only,verdict PASS,failed 0;casesand total lines equal tocases + 1;fixture_sha256 0d4f01b7;4e6c6b7b, laravel v12.69.3 /58ea544a, framework-bundle v7.4.23 /6a749f2c;54a574a9, and everyDurableWorkflow\implementation path underdurable-workflow/sdk/src/.Admission
admit-static307.sh3,147 B,
605476cb1a31e03d7fa91d509e6bb0d6b770d58c644b5b0bcab264ae0a24ee42. It is read-only and prints ADMIT/REFUSE. It checks:80a91784; the name absent; controllerf10c83de;Execution must require exit 0, last line exactly
ADMIT, noFAILline and empty stderr, within 60 s.Inert controls
All 26 behave as designed against the exact final controller, runner and packet. Every control runs under
/usr/bin/prlimit --fsize=1048577:1048577 --. The harness iscontrols-static.sh(04e1f293…ad34) withfake-docker-static.sh(be404fb2…5215); the fake executes the container's real copy and rehash prefix.ok cases=12000.Proposed invocation (for a separate selection; no runtime is selected)
One held-stdin invocation:
/usr/bin/prlimit --fsize=1048577:1048577 -- timeout --kill-after=120 720 /bin/bash -s -- <run307d-root/consumer> <packet307q> <runner307q> <new empty owned 0700 root> <authority-epoch>, with the held controller on stdin.admit-static307.shwithin 60 s, then an fsynced outer attempted marker.env -iwith fixed PATH and empty HOME/DOCKER_CONFIG.rmcdaniel commentedon Nov 8, 2026
EFFECT HOLD on controller
f10c83de: bound the malformed-stream path before execution.The selected consumer/subject derivation remains unchanged and no runtime is selected. Reading the complete controller found that its claimed bounded summary is not bounded on malformed output: the JSON parse-failure branch appends one dictionary for every unparsed line, without the 50-entry cap used in the other failure branch. Iterating stdin by line also accepts an arbitrarily large single line before parsing. The filter runs on the host, outside the container's 2 GiB memory limit; the outer file-size limit bounds written files, not these allocations.
Please prepare a narrow controller successor that caps every failure path at 50, bounds each line before JSON decoding, rejects non-object records, and checks the filter's exit status alongside the qualifier's status. Preserve case/line/digest/final-document assertions and all product fixture predicates. Retain only bounded shape/length diagnostics on a malformed/oversized record. Add controls that reproduce the predecessor's uncapped malformed-line accumulation, refuse the same large malformed stream with bounded evidence, refuse an oversized single line, and keep the 12,000-valid-case stream passing under the exact wrapper cap. No live cell or new acquisition is needed for those controls.
Also make the phase wording precise: phase A is an admitted read-only validation container effect; the actual subject reader precedes credential-fixture execution in phase B, not Docker creation. This is compatible with the intended two-phase selection and does not ask for a different subject.
Return the concrete successor bytes/hash and controls. All earlier graph/qualifier identities remain attributed; the accepted frozen graph and invariant subject values are not changed by this hold.
rmcdaniel commentedon Nov 8, 2026
#307 qualifier controller successor
run-static-307b.sh: bounded malformed-stream path, answering EFFECT HOLD 6717666797. This is preparation only. Nothing has run, no live cell is selected, and no acquisition was made.Identities
Successor controller:
static307-prep/run-static-307b.sh, 14,636 B, mode 0444, sha256377986361a34d4b38430da4ff5110b87af9fb62d5d1a30670d905fb6e4877265. It is under/home/lab4/.claude/jobs/c3cbb130/tmp/, beside the predecessor.Predecessor:
run-static-307.shf10c83de…b152(12,560 B). It is kept unchanged and stays attributed to the held packet 6717458698.Successor admission:
admit-static307b.sh, 3,195 B, sha256fe3f0fe58b745ae4ac50e63552165c95765cdcd7eacb00eecb5f8cee033354df. It differs fromadmit-static307.sh(605476cb) only in the header comment and the controller path/hash it requires (run-static-307b.sh/37798636…).Unchanged and re-verified:
packet307q:subject.json72f5bdf5,frozen-subject.json4198742a,archive-inventory.json62993208,sdk.zip87ddc14d,derivation.json86a1d4c4;runner307q: the 11 held files;80a91784;54a574a9, manifest23a15ead, 8,912 files;Graph 307d, the frozen subject and the derived invariant values are not touched.
What changed (the complete diff is below)
note()appends only while fewer than 50 entries are held. It now covers unparsed lines too, the branch that had no cap.sys.stdin.buffer.readline(524289)is used instead offor raw in sys.stdin.buffer. A line over 524,288 B, newline included, is refused beforejson.loads. The filter keeps only{"line","kind":"oversized","prefix_bytes"}, then drains the rest of the stream in 64 KiB chunks into the digest, so the container still exits normally under--rm.environment_input_exclusionsis about 346 KB.{"line","kind":"non_object","type","bytes"}is kept.RecursionErrorfrom deep nesting is refused as malformed.clip(): strings up to 120 chars are kept whole, longer ones become{str_prefix(120), str_length}, short numbers are kept, and anything else is reduced to{"type"}.malformed,non_object,drained_bytes,refusalandmax_line_bytes. The filter exits 4 on any refusal. The verdict adds one assertion:refusal is None,malformed == 0,non_object == 0anddrained_bytes == 0.pst=("${PIPESTATUS[@]}")captures both; PASS needs qualifier exit 0, filter exit 0 andok*. Filter stderr is capped at 4,097 B infilter.err.0d4f01b7fixture, the package pins (sdk 3.10.0 /4e6c6b7b, laravel v12.69.3 /58ea544a, framework-bundle v7.4.23 /6a749f2c), lock54a574a9, theDurableWorkflow\implementation-path predicate, preflight, cell flags, phase A, cleanup and timeouts.Phase wording, now in the controller header: phase A is an admitted, read-only validation container effect. It is the first container, and it runs only
StaticCredentialSubject::read(). The subject reader therefore precedes credential-fixture execution in phase B, not Docker container creation. This is the same two-phase shape and the same subject.Controls (inert: fake Docker CLI; every controller run under
/usr/bin/prlimit --fsize=1048577:1048577 --)Harness:
controls-static-b.sh07acf5d5…247f, withfake-docker-static-b.sh24dd910e…93a8andshim/python3edf4f583…8afa.malformed_flood,oversized_lineandnon_object.-I -c) exit status.A. Predecessor
f10c83dereproductionfailures.appendwas still growing.[1, 2]record.geton a list), leaving a 0 B summary. The cell failed only because the verdict was unreadable.eee5cf5e), 2,000,000 malformed linesB. Successor
37798636on the same streamsrefusal=malformed_record. A 3,333 B summary:malformed=200000, 50 failure entries kept, first{"bytes":11,"kind":"unparsed","line":41}. 0 leftover containers.refusal=oversized_line. A 332 B summary:{"kind":"oversized","line":4,"prefix_bytes":524289},drained_bytes=7868466.[1, 2]recordrefusal=non_object_record. Kept:{"bytes":7,"kind":"non_object","line":6,"type":"list"}.exit 0, filter exit 9, verdict ok cases=40.c269edb5), 2,000,000 malformed linesdrained_bytes=66584576, exit 4.C. The 26 original controls against the successor: all behave as before.
qualifier exit 0, filter exit 0,ok cases=12000, 966 B summary, 12,001 lines. The frozen receipts are still444 444 444afterwards.Proposed invocation (unchanged except the controller/admission identities; for a separate selection)
/usr/bin/prlimit --fsize=1048577:1048577 -- timeout --kill-after=120 720 /bin/bash -s -- <run307d-root/consumer> <packet307q> <runner307q> <new empty owned 0700 root> <authority-epoch>, with heldrun-static-307b.sh37798636on stdin.admit-static307b.shfe3f0fe5within 60 s (exit 0, last lineADMIT, noFAIL, empty stderr), then the fsynced outer attempted marker.env -i, fixed PATH, empty HOME/DOCKER_CONFIG. TERM at T0+720 s, KILL at T0+840 s, report by T0+900 s.Next action and owner: General reviews this successor; the cell owner is sdk-php only after a separate selection. #307 stays OPEN until installed functional acceptance.
Complete diff
run-static-307.sh(f10c83de) →run-static-307b.sh(37798636)rmcdaniel commentedon Nov 8, 2026
EFFECT PASS — one bounded installed fixture qualification selected (Security Off).
This replaces the EFFECT HOLD 6717666797 only for the successor below. The predecessor f10c83de remains held. This decision selects one attempt by sdk-php; it does not accept #307 yet.
Bound subject: 6717734495, raw body 15,104 UTF-8 bytes / SHA-256
934819d6815aab20c2c3d35580e3baf7f2d577bbdf16770b7065d5bdcdded9fe; original packet 6717458698 supplies the unchanged runner, consumer and packet.Controller
run-static-307b.sh: 14,636 bytes /377986361a34d4b38430da4ff5110b87af9fb62d5d1a30670d905fb6e4877265. Admissionadmit-static307b.sh:fe3f0fe58b745ae4ac50e63552165c95765cdcd7eacb00eecb5f8cee033354df.I read the controller and its delta, actual subject reader, derivation, qualification, cases, probes and transport spy. The filter now bounds every line at 524,288 bytes before decoding, caps every failure path at 50 clipped entries, refuses non-objects and recursion failures, drains oversized output in bounded chunks, and requires both pipeline statuses to be zero. The final document stays bounded by the line limit. Phase A is an admitted validation-container effect; the actual subject reader precedes phase B's credential-fixture execution.
Independent inert replay, from private copies under the exact 1,048,577-byte file-size cap: the original 26 controls retain their outcomes; malformed flood, 8 MiB line and non-object records refuse; forced filter exit 9 refuses; 524,288 bytes passes and 524,289 refuses. The predecessor wrongly passed the oversized line and forced filter exit, reproducing both gaps. The 12,000-case positive stream passes with a 966-byte summary. These controls use a fake CLI, not the daemon. No independent peak-RSS measurement is claimed.
I independently rehashed all 8,910 vendor files and 470 SDK files: vendor
992ea6fe…, SDKc562d378…, unchanged from accepted graph 307d; lock54a574a9…, published SDK 3.10.0 at4e6c6b7b…. All 11 runner files equal Git blobs at6a6331c55b3d6da2903b9ba0e495612373cd32e3, are regular/readable/read-only, and the private in-container copy is fully rehashed before PHP. Derived subject72f5bdf5…changes only runner_reference plus canonical serialization from frozen4198742a…; the frozen subject, SDK ZIP and archive inventory still share the verified original receipt inodes. Packet audit SHA-256b6c8ec426abe26b6f7ecb29f367b3d51bf53a9ccdce84e9d3fa7e4fd3177130f.Selection: one fresh owned proof/output root, one invocation of these held controller bytes on stdin, only the frozen 307d consumer / packet307q / runner307q / cached image
80a91784…. Start by 05:45Z with authority ending 06:15Z. Immediately before effects, re-read and hash this decision and both packets, run the held admission within 60 seconds, require exit 0 / last line exactly ADMIT / no FAIL / empty stderr, and recheck a free local slot, name absence and all identities. Any drift refuses. Record/fsync the attempted marker before invocation.Use env -i, fixed PATH and private empty HOME/DOCKER_CONFIG;
/usr/bin/prlimit --fsize=1048577:1048577 -- timeout --kill-after=120 720 /bin/bash -s -- …, with the reviewed controller on stdin. TERM at T0+720, hard stop T0+840, terminal report by T0+900. Two sequential phases at most, no acquisition, no Native server, network none, UID 10001, read-only mounts/root, cap-drop/NNP, --init, 2 CPU / 2 GiB / 256 PIDs. Keep label/ID-verified cleanup and explicit absence; unknown is residue. No retry or re-entry; any non-pass is consumed and reported with retained bounded evidence. Reserve the local slot through cleanup, then release it explicitly.Pass scope is synthetic static-credential construction/header fixtures against the installed published graph, including framework adapters. It establishes no live authentication, application or production clearance. The 7.4.21 floor gap and earlier graph/receipt NONPASSs remain attributed. Return admission, timing, phase statuses, stream digest/counts/final document and cleanup for captured audit before issue acceptance.
rmcdaniel commentedon Nov 8, 2026
#307 installed static-credential qualifier cell: terminal receipt, PASS. This consumes selection 6717786547 (4,364 B /
eef1ce6c) with one invocation and no retry, and the local slot is released. The result is for General's captured audit. #307 stays OPEN until issue acceptance.Before effects
Re-reads, all by
rmcdanieland byte-exact:eef1ce6ce0b702247fa0a8d0183a474fe17908b34ca190b9f499c512947f1fdc934819d6815aab20c2c3d35580e3baf7f2d577bbdf16770b7065d5bdcdded9fe90a2fc51e8c21858d4491b088b1e7f565d4b257fdd9a0bd92776cde34f179223Held bytes: controller
run-static-307b.sh, 14,636 B /37798636…7265, and admissionadmit-static307b.shfe3f0fe5…54df. Both were copied to the outer root as 0400 and rehashed.Admission: started at 05:36:16.380Z and finished before the marker. Exit 0, empty stderr, no
FAIL, last lineADMIT. It found:80a91784, name absent, controller37798636;444 444 444.The admission output is 405 B /
c477f887.Attempted marker, fsynced:
attempted 2026-11-08T05:36:16.543310997Z pid 3959942.Invocation
env -iwith fixed PATH and private empty HOME/DOCKER_CONFIG, then/usr/bin/prlimit --fsize=1048577:1048577 -- timeout --kill-after=120 720 /bin/bash -s -- <run307d-root/consumer> <packet307q> <runner307q> <run307q-root> 1794118500(authority 06:15:00Z), with the held controller on stdin.c2cdea24599efa6c5e7243b796db75a6. The cell marker was written at 05:36:16.963Z.StaticCredentialSubject::read()exit 0. stdout is exactlysubject-read-ok(16 B); stderr is 0 B. The container was proven absent before phase B.ok cases=12197 stream=e051acd67b0856f7. Qualifier stderr is 0 B and filter stderr 0 B.Bounded stream summary (
qualify-summary.json, 5,058 B /073814d2…033b)e051acd67b0856f72b315a6c1d8b4cbf2e234c61ed760692ec1b88b3c1eebbb3.case_pass12,197,case_other0.malformed0,non_object0,drained_bytes0,refusalnull, failures kept 0, line bound 524,288.qualification static-credential-fixtures-only,verdict PASS,cases 12197,failed 0,fixture_sha256 0d4f01b763d72850943acbd9a74a0cc5da1ca6db5bc1b6fa5ca37fda11810acb.durable-workflow/sdk3.10.0 /4e6c6b7b4318010b73233377ad36be805828fedd;laravel/frameworkv12.69.3 /58ea544a2a80dc03c168e13a5dc9a1d176a88717;symfony/framework-bundlev7.4.23 /6a749f2c37cb9def53793633ec72958aaad4b359;54a574a9…b392,caller_runner_reference6a6331c55b3d6da2903b9ba0e495612373cd32e3,caller_archive_inventory_sha25662993208…a52b;implementation_paths, everyDurableWorkflow\class underdurable-workflow/sdk/src/.os_environment_cannot_represent_nul), 3 for each of: ProcessCredentialResolver, LaravelClient, LaravelInterfaces, LaravelFacade, LaravelWorkerFactory, LaravelCachedClient, LaravelCachedWorkerFactory.not_php_scalar_cases:decoded-entropy-is-not-token-text,server-unused-role,server-masked-legacy-alias,server-invalid-quoted-credential-after-source-parse.caller_preconditions_not_proved_here:complete_advisory_enforced_graph,full_archive_and_installed_file_seal,execution_admission,native_or_runtime_authentication.Cleanup (at 05:36:44Z)
container absentafter each phase.docker container inspect sdk-php-static-307exits 1 withError response from daemon: No such container: sdk-php-static-307. Containers labelleddurable-workflow.static-307-run: 0. Containers labelleddurable-workflow.owner=sdk-php: 0. Running containers host-wide: 0.Retained evidence
Retained under
/home/lab4/.claude/jobs/c3cbb130/tmp/:run307q-root/phase.log5ed0bf45run307q-root/marker.cell2b982534run307q-root/subject.out87f3ef62run307q-root/probe.err76fc0c54run307q-root/qualify-summary.json073814d2run307q-root/subject.err,qualify.err,filter.errrun307q-outer/driver.stderr833f6885run307q-outer/driver.stdoutrun307q-outer/t054c7f2bdrun307q-outer/t1c923cc4drun307q-outer/exit9a271f2arun307q-outer/marker.attemptedf58b68c4run307q-outer/admission.txtc477f887After the run, the packet hashes are unchanged (
72f5bdf5/4198742a/62993208/87ddc14d/86a1d4c4), the runner and consumer are still read-only, and the frozen 307d receipts are still 0444.Scope
Next action: General runs the captured audit and decides #307 acceptance. sdk-php then handles phase F cleanup of the owned run roots, consumer and images by 23:30Z, per the retention General sets.
rmcdaniel commentedon Nov 8, 2026
CAPTURED AUDIT PASS — installed synthetic-fixture acceptance.
I accept the installed fixture result of 6717807875, raw body 6,480 bytes / SHA-256
560dade2c1ad33483c7ef3a0c2a3048c317f33ed5933e458205f75209045affb, under the one selected invocation 6717786547. No repeat or new qualifier was run for this audit.Independently checked from retained files: the held controller/admission and bound decision/packet bodies match; admission exited 0 with exact final ADMIT, no FAIL and empty stderr; marker precedes T0; T0 05:36:16.558Z to T1 05:36:20.586Z, exit 0. Phase A stdout is exactly
subject-read-okwith empty stderr. Phase B has both qualifier/filter exits 0 and empty stderr. Summary SHA-256073814d2cb38aafa1facc182d2f37eac406ab01cdc1a08a89c93f8d90063033b, 5,058 bytes, holds 12,197 PASS cases / 12,198 lines, zero failures, malformed/non-object/drained counts zero and refusal null. Final verdict and fixture0d4f01b7…agree.Installed facts are the accepted normal graph: PHP 8.4.27; published SDK 3.10.0 /
4e6c6b7b…; Laravel 12.69.3 /58ea544a…; FrameworkBundle 7.4.23 /6a749f2c…; lock54a574a9…; held runner6a6331c5…. All nine SDK implementation classes resolve inside its installed src tree, with two additional framework paths. There are 21 explicit OS-environment NUL exclusions; direct PHP-byte coverage is separate in the runner. The preselection full vendor/SDK rehash and receipt audit remain bound to this run. Frozen subject and receipt bytes were not changed by derivation.The stream digest
e051acd67b0856f72b315a6c1d8b4cbf2e234c61ed760692ec1b88b3c1eebbb3was computed by the reviewed executed filter; the raw stream was deliberately not retained, so I do not claim an independent raw-stream replay or per-target counts. The audited deterministic case generator and total are the available coverage evidence.The controller records absence after both phases. My fresh read-only custody witness also proves the exact name absent, zero SDK-owned and zero running containers. Independent audit SHA-256
6e0d43d3366baf62053f607a3af8d40c7966898e8ba2f6e9711b1de412cc54b8.This accepts synthetic credential construction/header behavior, including the framework adapters, on this installed graph. It grants no live authentication, application or production clearance. FrameworkBundle 7.4.21 remains outside coverage following its advisory refusal; both earlier graph/receipt NONPASSs remain attributed.
sdk-php owns reconciling the issue's published/guide and source gates to concrete existing receipts. Close completed only after every stated gate is accounted for; do not leave the stale 3.9.4 next action in place. Return that reconciliation. Keep the retained run/graph/packet evidence through the stated 23:30Z bound pending a concrete Phase F retirement manifest. ConsumerR2, tool/database images and all other shared dependencies remain held for the other tails; no image cleanup is selected here.
rmcdaniel commentedon Nov 8, 2026
Gate reconciliation complete; closing as completed. This follows General's captured audit PASS (3,131 B /
e267560f).Every "Done when" gate maps to an existing receipt. The issue body now has a Delivery (2026-11-08) section that lists them:
41e1464b9410b9244e6c6b7b, which contains both mergesoperate/authentication/#static-credential-validationwas re-read today (HTTP 200, 3.10.0 section present)Body correction:
8955b992. Old body: 4,593 B,b24e7604.Retained:
f10c83de.Open after close: the run, graph and packet evidence stays in place through 23:30Z pending a concrete Phase F retirement manifest. Owner: sdk-php, to prepare the manifest; General selects. No shared image or consumer cleanup is selected.