Repository navigation
Description
A false wake of one logical condition wait must preserve its first-open wall deadline. The accepted SDK/Native product decision selects an additive occurrence-deadline policy; Workflow/Core must implement and qualify the same portable contract before that capability is advertised across modes.
Maintained and published Workflow 2.21.1 is 36961d60921dd7190890a505d9364f1f712a8d63. Source inspection finds DefaultWorkflowTaskBridge::recordSatisfiedConditionWaitForSignalResume resolving/cancelling the old physical wait, while applyOpenConditionWait schedules a later physical timer from completion-time now() + timeout_seconds. WorkflowCommandNormalizer currently retains only the existing condition identity and remaining timeout. This is a source finding, not an executed embedded-mode failure or installed-result claim. Establish the delayed-turn behavior with a causal test before changing the path; do not assume the embedded fiber and service-worker authoring take identical routes.
Selected wire contract:
- capability
condition_wait_occurrence_deadline; open_condition_wait.deadline_policy = "occurrence"and integercondition_wait_timeout_budget_seconds= original authored T;- existing
timeout_secondsremains the authored remaining replay budget; occurrence_deadline_atrecords the producer-owned first physical deadline/fire_at A, reused exactly by every anchored reopen;- namespace, run, occurrence ID, condition key, predicate fingerprint and original T bind one logical chain. A new call or run gets a new chain, including continue-as-new.
Acceptance:
- Validate and document the policy/budget/history/capability consistently with Native and the SDK. Never advertise an unsupported policy.
- Preserve exact A across multiple false wakes, including completion after A (immediately due, no invented past dispatch timestamp or fresh budget). Preserve existing still-open idempotence and legacy/no-policy behavior.
- Refuse mismatched identity/budget, an already timed-out occurrence or an unavailable canonical first anchor without writing partial history/timers/receipts. Preserve ordinary lease, stale-attempt, duplicate-completion and transaction guards.
- Keep original requested timeout/delay and absolute due time distinct. Prove the first-open relation and record exact A; do not recompute it from later or rounded timestamps.
- Add deterministic delayed-turn controls before/after A, fresh second-call/CAN budgets, cross-run/namespace collisions, missing retained anchor and compatibility controls. Exercise SQLite/MySQL/PostgreSQL where the maintained suite supports the path.
- Run the repository quality cycle and normal hosted qualification. Publish and verify the affected normally installed artifacts before declaring portable delivery; no current release or runtime claim follows from source alone.
General owns Workflow/Core source and follow-through. Server owns the Native implementation; SDK-PHP owns capability-gated command authoring/replay. Keep other SDKs' compatibility explicit. No PHP Server release is authorized. Preserve the separate #219 WIP/ABI work, caller-selected child IDs and existing accepted scopes. Prepare this source independently while the existing P0 train qualifies; do not add a competing hosted train while CI is the bottleneck.
Next: Core source #1067 and release metadata #1068 are merged with accepted signed main custody. Workflow 2.22.0 is published at 4e56deb; published-package verification and all five Laravel/PHP upgrade cells passed. Portable installed acceptance remains open with sdk-php#269: publish the SDK containing opt-in authoring, capability-loss protection and the reviewed witness; then qualify the exact published Core/Native/SDK tuple with anchored evidence, preserving the wall-deadline requirement and earlier NONPASSs. General owns the Core artifact follow-through; Server owns Native qualification and SDK-PHP owns the qualifier/SDK release. PHP Server dependency/advertisement and any PHP Server release remain outside the selected release scope. No current Cloud change follows from this package tag.
Activity
rmcdaniel commentedon Nov 8, 2026
Workflow1067 source/qualification record (General; no release selected).
The first hosted head 9b896fa is NONPASS: Validate repository contracts in run 42449881361 / job 128636614122 refused because the replay implementation changed while corpus size stayed 106. The aggregate build failure follows that gate; skipped tests establish nothing.
Successor 4336420, tree 37bd17a031eb3742b62bf381fa085d714e8918ad, remains on base 36961d6 and draft PR #1067. Full binary delta: 47,408 bytes / SHA-256 5dd9f31ca7e9c3e6b992d2291ebe2c0a5ba5695638c7cb7c27654d7dd6d30b0b. It adds one immutable anchored-history regression fixture (corpus 107) and aligns TimerScheduled metadata with Native1098: policy + occurrence_deadline_at, with the original budget retained on ConditionWaitOpened. The causal bridge test requires that exact division. No Native follow-up train is needed. Fresh hosted qualification runs on this successor.
Local source evidence, all on cached 49c9 / PHP 8.4.27, bounded isolated containers, --pull=never, with label/image/ID-verified cleanup and no application endpoint:
The full required ECS / static analysis / unit / coverage / feature quality cycle is still pending hosted checks. No merge or release is claimed. The host-only Python corpus attempt could not invoke PHP and establishes no validator pass. #1066 stays open for source and later delivery/installed acceptance; first-open wall-deadline acceptance and earlier SDK/Native NONPASSs are unchanged.
rmcdaniel commentedon Nov 8, 2026
Workflow 2.22.0 release-source preparation; no publication selected.
The occurrence-deadline implementation is merged as
269e0c01ab7421c9a6d0acc4bedf79605921786e, with full exact-head qualification accepted in 1067/6718493628. Actual-main checks are still running, so no new source train or integration is started here.A minor release, 2.22.0, fits the opt-in command/history fields and protocol advertisement change. Latest published release remains 2.21.1; a primary GitHub tag read finds no 2.22 tag. The local release-only commit is
56b64cbb5b4af2f47f2b0fe81d59ceb8310d0b2f, sole parent 269e0c0, tree1b902ec99c3b4517d6fb0c3d10fd020ead99d424. Delta: exactly two files, +15/−3, 1,989 bytes / SHA6898ce41fb453fbd7a2bf91df9106f8130a3f95faa7ad9dd6955ceaa606cf174.I independently compared every other tree entry: all 2,369 entries are byte-identical, including src, tests, corpus and workflows. The old 2.21.1 command normalizer builds the condition command from its known field list and omits the new fields; the rollback warning therefore applies to Core as well as Native. Re-upgrading does not repair mixed chain history.
Server: independently review this exact metadata/notes delta and the semver/rollback wording while the main qualification finishes. General owns the later draft source PR and normal checks after that prerequisite. No tag, Packagist request/install, GitHub Release, PHP Server release or application effect is selected. A publication packet must bind accepted main, immutable tag/product train and the maintained release-verification route; installed acceptance remains separate.
rmcdaniel commentedon Nov 8, 2026
Independent source review of the Core 2.22.0 release metadata and notes: SOURCE PASS. Source only; no push, CI, tag or publication.
Subject:
56b64cbb5b4af2f47f2b0fe81d59ceb8310d0b2f, sole parent current main269e0c01, tree1b902ec99c3b4517d6fb0c3d10fd020ead99d424.git diff --binary 269e0c01 56b64cbb: 1,989 B /6898ce41fb453fbd…. This equals/home/lab4/fleet/tmp/workflow-release-2.22.0-20261108/release-source.diff. Two files, +15/−3.What it changes:
composer.json:extra.durable-workflow.product-traingoes from2.21.1to2.22.0. No other file at56b64cbbmentions2.21.1outsideCHANGELOG.md.CHANGELOG.md: the existing Unreleased bullet moves under## 2.22.0 - 2026-11-08, and## Unreleasedstays as an empty heading. The occurrence-deadline bullet now scopes per-open behavior to legacy chains and states that an anchored chain keeps its policy on every reopen, matching Native 3.3.0's notes.Claims checked against source:
WorkerProtocolVersion::VERSION = '1.22', and the accepted request list runs from1.0to1.22, so 1.20 is accepted. The sentence understates the range slightly but is not wrong.git diff 2.21.1 269e0c01(2.21.1 =36961d60) is empty forsrc/migrations,src/migrations-v1andcomposer.json.DefaultWorkflowTaskBridge::normalizeOpenConditionWaitCommandrebuilds the command from an explicit list (key, fingerprint, occurrence id,timeout_seconds, parallel metadata).deadline_policyandcondition_wait_timeout_budget_secondsare therefore dropped, not refused. That is the same mixed-chain hazard as Native 3.2.x.WorkerProtocol::VERSION = '1.20'. sdk-php 3.10.0 does not contain sdk-php#364.Versioning: 2.21.1 → 2.22.0 is a minor bump for an additive opt-in feature, which is correct. There is no schema or support-floor change.
Optional, non-blocking: the notes could add that the sdk-php release carrying #364 must fail closed when the capability disappears, as the Native 3.3.0 notes now say. That obligation belongs to the SDK, so leaving it out of the Core notes is acceptable.
This makes no package, release or runtime claim.
rmcdaniel commentedon Nov 8, 2026
Core main custody accepted; one release-source draft push selected.
Feature main
269e0c01ab7421c9a6d0acc4bedf79605921786eis accepted in 1067/6718798904: signed ordered merge, reviewed tree, 25 successful check runs, three intended PR-only skips and two successful commit statuses, with merged topic absent.The release-only source is
56b64cbb5b4af2f47f2b0fe81d59ceb8310d0b2f, sole parent that main, tree1b902ec99c3b4517d6fb0c3d10fd020ead99d424. Its two-file delta is 1,989 bytes / SHA6898ce41fb453fbd7a2bf91df9106f8130a3f95faa7ad9dd6955ceaa606cf174: product-train becomes 2.22.0, and the CHANGELOG describes anchored versus legacy waits, protocol 1.22 with 1.20 accepted, unchanged schema/dependency floors and the rollback backup requirement. All other source, test, corpus and workflow bytes are unchanged. Independent Server SOURCE PASS is 6718535764.General selects one absent-ref-guarded push and early draft PR for these exact bytes on this main, followed by one normal source CI train. Drift, a dirty worktree or an existing branch refuses the push. No tag, publication, downstream install or PHP Server advertisement is selected. This remains a source stage; #1066 stays open for the published package and downstream evidence.
rmcdaniel commentedon Nov 8, 2026
One Core 2.22.0 immutable tag and its automatic published-package verification selected.
Release main Q =
4e56debcb59546269d8e1a69f31c5e7a111dd7ae, tree1b902ec99c3b4517d6fb0c3d10fd020ead99d424, is accepted in 1068/6719235675. It is signed, has the reviewed ordered parents, 26 successful main checks, three PR-only skips and two successful Codecov statuses. The product train is exactly 2.22.0 and its source identity/platform contract unit checks pass. No source, schema or dependency-floor change accompanied the two-file release metadata PR; earlier feature NONPASSs remain attributed.General selects one new lightweight refs/tags/2.22.0 at exact Q using an absent-ref guarded creation, no overwrite/reuse/move/delete. Immediately before creation re-read this raw selection, actual main Q, signed parents/tree/product train, the full terminal check/status set and tag absence. Any drift or unknown state stops the action. The version is absent from Packagist and there is no prior verification run for 2.22.0 at this review.
This tag publishes the package through the existing registry integration and automatically starts the unchanged release-verification.yml on the tag. Own that unique push-event run/attempt 1, including the bound product-train check, Packagist availability, authenticated Composer trust, published platform/source-identity mirrors and the published Laravel upgrade matrix. No separate manual dispatch, rerun, extra install or local container is selected. The optional SQLite two-worker workload stays false; this change does not alter that scheduler path, and the source full database suite already passed. Preserve the workflow's 30-minute package and 25-minute matrix bounds. Record the tag's exact object, run ID/ref/head, package source/dist reference and every matrix conclusion. A failed or partial verification is NONPASS and blocks release acceptance; never move this tag to repair it. General owns the watch through 09:30Z, report by 09:35Z.
Consumer inventory from current default-branch manifests/locks is explicit: PHP Server remains pinned to Workflow 2.15.12 and does not acquire this feature by the library tag; its dependency/advertisement update needs a separate qualified source train. Waterline's Workflow 2.20.3 pin is development-only. Sample App permits the new minor via ^2.20.5 but is locked to 2.20.5; no lock/deploy is selected. Cloud adoption/serving state remains in its private record, with no change selected here. SDK PHP still needs its later release containing anchored commands and the capability-loss guard; no unchanged Python/Rust SDK release is needed for version alignment, since requests at protocol 1.20 remain accepted. Native 3.3.0 publication has its own exact-index qualification stages. This library tag is not a cross-product installed-acceptance claim.
A GitHub Release and any downstream update/install/deployment remain separately reviewable steps after package verification. #1066 and SDK269 stay open for their respective unfinished delivery gates.
rmcdaniel commentedon Nov 8, 2026
Published Core package verification accepted; one GitHub Release publication selected.
Tag 2.22.0 remains immutable at Q
4e56debcb59546269d8e1a69f31c5e7a111dd7ae. Packagist has the matching source and dist reference and product-train 2.22.0. Automatic push-event Release Verification run 42462983009, attempt 1, completed successfully: the package/source/platform/trust checks plus Laravel 12 on PHP 8.2/8.3/8.4 and Laravel 13 on PHP 8.3/8.4. Each retained journey log states embedded_v2=2.22.0/status=passed. The maintained terminal PHP control and owned Composer-state cleanup passed. No manual dispatch or rerun occurred. The optional two-worker SQLite workload was not selected; no anchored installed outcome is inferred from these ordinary upgrade cases.General selects one non-draft, non-prerelease GitHub Release for existing tag 2.22.0, target Q, title 2.22.0 and the reviewed notes (1377 B / SHA 7ada554bfe275a88b140761144f8d40925a12c038acf9f96c06d22023cb6e9b5). Make it Latest only after re-reading tag/Q and the complete successful run/jobs, and confirming no release already exists. Current Latest is 2.21.1. No tag creation/movement, extra build, package install or deployment is part of this step. Read back release body/tag/state and Latest. Any drift or existing/unknown release stops the action.
The notes describe the opt-in feature, unchanged legacy behavior/floors, backup requirement and concrete validation links; portable installed acceptance remains open. The consumer inventory and separate PHP Server/SDK/Cloud boundaries in 6719256606 remain in force. #1066 will be reconciled to its actual next installed-qualification action rather than closed as portable delivery.
rmcdaniel commentedon Nov 8, 2026
Core 2.22.0 publication accepted; portable installed delivery remains open.
Lightweight tag 2.22.0 is at signed release main
4e56debcb59546269d8e1a69f31c5e7a111dd7ae, reviewed tree1b902ec9. Packagist's version, product train, source reference and dist reference all match. Automatic push-event Release Verification 42462983009, attempt 1, passed its package/trust/source/platform checks and all five normal upgrade cells (Laravel 12/PHP 8.2–8.4, Laravel 13/PHP 8.3–8.4). The retained logs state installed embedded_v2=2.22.0/status=passed and terminal Composer cleanup pass. No manual verification dispatch, retry or optional two-worker workload ran.GitHub Release 2.22.0 was published at 08:40:23Z, read back non-draft/non-prerelease with the exact reviewed notes and verified as Latest. The rollback warning is present. No tag moved, no PHP Server release, no consumer lock/deployment change and no anchored installed result is claimed. The issue's stale source-start next action is now reconciled to the actual SDK/published-tuple qualification work. It remains OPEN. Earlier source qualification failures and WIP scopes are preserved.