Skip to content

Make unresolved condition-wait opens idempotent by occurrence ID - #1023

Merged
rmcdaniel merged 2 commits into
mainfrom
fix/1015-condition-wait-occurrence
Nov 4, 2026
Merged

rmcdaniel merged 2 commits into
mainfrom
fix/1015-condition-wait-occurrence

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Nov 4, 2026 •

Copy link
Copy Markdown
Member

A later workflow task can resend an open_condition_wait whose occurrence is still unresolved. Preserve the existing wait, authored sequence and deadline when a nonempty occurrence ID repeats within the same run, while applying other commands in the completion. Missing/null/empty IDs and resolved waits retain per-open behavior; distinct IDs sharing a key/fingerprint remain distinct.

Advertise condition_wait_idempotent_reopen in cluster and worker capabilities through the reviewed native-only fixture addition. The existing command field and Avro format/type acceptance stay unchanged. Close-path physical timer settlement remains separate in #1015/#1025.

This refresh normally merges accepted main 29ea4413 into reviewed head 55968693, producing 0313c801. There are no conflicts or manual resolutions. The old/new stable patch IDs match and all six occurrence-patch file blobs are unchanged. The regression coverage still includes a later activity-resumed task after cold reopen, changed timeout/key/fingerprint values, sequence/other-command preservation, same-batch repeats, legacy/distinct IDs, resolved reopening and the existing false-wake cases.

Validation: fresh exact-head hosted qualification is terminal with 57 successful checks, one intended conditional skip, zero failures and zero pending checks. All six original workflows completed successfully at attempt 1, including shell/Rust execution, SQLite/PostgreSQL/MySQL/MariaDB matrices, repository contracts and CodeQL. Independent Security source PASS covers the exact combined head/base. Local focused Node (27) and Python identity/result-gate (88) checks also passed. Disclosed local Bash/jq setup failures remain excluded from pass evidence. After General lifted the broad incident hold, the 2026-11-04 17:20 UTC readback confirms the same exact head/base and 57 successful checks / one intended skip / zero failures or pending checks. All six original workflows remain successful at attempt 1; Security's exact-pair source PASS is unchanged. General retains the merge decision.

General retains merge/order. #1025/#1026 remain frozen, and frozen 3.1.0 source/tag/image plus all native recovery/publication holds remain unchanged. This prepares a future source train and clears no release or runtime-experiment gate.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Local regression proof at exact head 55968693:

  • Candidate: all seven condition_occurrences tests pass. This includes the later task after database reopen, unchanged original wait/timer payloads and deadline, no extra timer, other commands and authored sequence preservation, distinct/legacy IDs, and reopening after a fired timeout.
  • Guard-only counterfactual: an isolated checkout of the same commit with exactly the 13-line idempotency guard removed yields two failures and five passes. The same-batch case records three waits instead of two. The later-task case reports a new timer task instead of an empty created_task_ids list. Capability advertisement and all tests stay intact.
  • Restoration check: the first attempt to switch back through a shared Cargo target reused the counterfactual objects without rebuilding (Cargo reported 0.15s), so that attempt is invalid as candidate evidence. The fixed source's Git blob still matched 46288e270c058f8d39082f4aeaf4d679501f67f9. Forcing recompilation from that unchanged fixed source passes all seven tests again.
  • Final fixed run: 8/8 pass, adding the existing signal_reopen_keeps_occurrence_but_authors_new_physical_timer_and_deadline test. That checks the preserved false-wake/satisfaction reopen behavior in both default and named namespaces.
  • Capability contract: 20 Node checks pass. Public-boundary, staged credential-pattern/manual review and diff checks pass.

These were offline native arm64 checks with Cargo jobs and test threads limited to two, low process priority, a 20-minute deadline and a 5 GiB process-group RSS cutoff. Builds took 44–48 seconds and peaked at approximately 2.9–3.1 GiB RSS. No containers or credentials were used. The counterfactual checkout is removed after retaining the sanitized failure summary; the candidate worktree is clean.

Full GitHub CI is still running across SQLite, PostgreSQL, MySQL and MariaDB. This remains the first #1015 slice for 3.1.1; close-path timer settlement and published-artifact delivery remain outstanding.

@rmcdaniel
rmcdaniel marked this pull request as ready for review November 4, 2026 08:31
@rmcdaniel

Copy link
Copy Markdown
Member Author

CI is terminal at 559686931195cfd6ec84b9e1d7d0846dc0c17821: 57 success, 1 path-filtered skip, 0 failed or pending. The full shared execution/fixture matrix passed on SQLite, PostgreSQL, MySQL and MariaDB. GitHub currently reports CLEAN against F.

The local proof records eight passing fixed-code Rust tests, 20 capability-contract checks, and the guard-only counterfactual's two reproducing failures. The intermediate stale-Cargo-cache attempt is explicitly excluded; a forced rebuild of the committed fixed source passed afterward. The counterfactual checkout has been removed, and the candidate worktree is clean.

Ready for Security's source review. Merge follows the 3.1.0 release/acceptance sequence: this is 3.1.1 work, and its shared capability fixture expects the new native capability. The current 3.1.0 published-digest checks must keep their existing fixture tuple. If #1022 advances main first, this branch needs an ordinary refresh and exact-head check/readback before merge.

The separate 3.1.0 tag stop remains unchanged. This PR does not close #1015: run-close timeout settlement remains the second slice.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Server is preparing the General-ordered source refresh from reviewed occurrence-id head 559686931195cfd6ec84b9e1d7d0846dc0c17821 to actual main 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42, after #1027 exact-main acceptance. The refresh uses one normal merge on an isolated worktree, preserves the old patch/fixtures and records any resolution, then returns fresh combined-head qualification and Security carry. The PR is draft during renewed qualification. #1025/#1026 stay frozen. No source merge to main, broad local experiment, frozen 3.1 image/tag change, dispatch or release is included.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Normal main-merge refresh is pushed at 0313c801ee2f13c7fe763c99290a421d208b9534, tree 2b2394851079f4c1c6f01be27892b8f2fad40535. Ordered parents are reviewed occurrence head 559686931195cfd6ec84b9e1d7d0846dc0c17821 and accepted current main 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42. This is one ordinary merge commit, pushed by fast-forward to the existing PR branch without force.

Old/new patch carry:

  • Old pair: 5d7fd2ba533551de78444ecd5f9987f842c5f014 → 559686931195cfd6ec84b9e1d7d0846dc0c17821.
  • New pair: 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42 → 0313c801ee2f13c7fe763c99290a421d208b9534.
  • Stable patch ID is identical for both: 2d00c5cc4112bbd2397079397dd7620b8a3f8f42.
  • Six files, 226 additions/6 deletions remain the complete occurrence-id delta relative to main. Every reviewed file blob is byte-identical to the old head:
File Preserved Git blob
docs/contracts/condition-wait-occurrences.md 7432caa7d8b682d4bded05c46dd9afa4dcb3fed7
docs/server-reference.md 63696884bd326c7221bbcf254c52e1f8d1350ca2
rust/src/runtime/cluster_info.rs f60e9a13a34c107e104d725444df895108b01026
rust/src/runtime/store.rs 46288e270c058f8d39082f4aeaf4d679501f67f9
rust/tests/execution/condition_occurrences.rs aa8b341b41f774eb4c92fd60fec276f6e3fc2904
tests/Fixtures/ServerParity/cluster-capabilities.json 0020211315ae7e80beb85af5c55370bb8fad2b19

The merge was automatic and clean: zero conflicts and zero manual resolutions. No occurrence logic, fixture, test or documentation was rewritten. Main’s inspector/runner integration is carried normally.

Focused local checks on the combined tree pass 27 Node capability/fixture-selection tests and 88 Python identity/result-gate tests, plus staged diff and added-line secret/private-host scans. The initial broader Node invocation passed those 27 cases but seven mocked shell-runner cases stopped because host Bash3.2 lacks inherit_errexit. A bounded network-none tool container had Bash5/Node but lacked jq and stopped before tests; it was removed and independently read back as absent. Those setup failures are retained, no Linux unit pass is claimed, and no test/source workaround was added. The ordinary hosted Ubuntu checks own that runner coverage and all fresh Rust/backend execution qualification. No local Rust build or broad runtime experiment was run.

The PR is draft with agent:server during new qualification. Previous head/base test and Security dispositions are historical, not authority for this new pair. Fresh exact-head normal CI and independent Security carry are requested before General’s disposition. This remains future-source preparation: no automatic PR merge, 3.1 artifact/runner clearance, image/tag/registry mutation, dispatch or release. #1025/#1026 remain frozen.

@sonarqubecloud

sonarqubecloud Bot commented Nov 4, 2026

Copy link
Copy Markdown

@rmcdaniel

rmcdaniel commented Nov 4, 2026 •

Copy link
Copy Markdown
Member Author

Qualification checkpoint at 2026-11-04 16:05 UTC: exact combined head 0313c801ee2f13c7fe763c99290a421d208b9534 remains unchanged. All six normal workflow runs created at 15:55 UTC remain queued; repository-wide readback reports zero in-progress workflow runs. Check runs show one external Sonar success, one intentional conditional skip, 53 queued and no failures. This records execution state only and attributes no cause.

Required run handles include Shared Server fixtures, PHPUnit Feature and CodeQL. These normal runs must start and reach terminal required results before fresh combined-head disposition. No rerun, cancellation, check waiver or fallback local broad experiment has been performed.

Security independently verified the ordered parents, tree, unchanged six blobs and unchanged 226+/6- patch carry, with no new source/merge-resolution blocker. Final Security/General disposition still waits for the fresh hosted results. Draft/auto-merge-null, #1025/#1026 freeze and all artifact/runtime/release holds remain. Local Server allocation is zero.

Actions incident reconciliation, 2026-11-04 16:11 UTC: a cache-busted direct GitHub Status summary response (HTTP Date 16:11:07 GMT, Age 2) reports incident xr3myzj7ms51, investigating since 16:05:31 UTC, with Actions and Pages degraded: https://stspg.io/pjgptg3cfc6n . The previously empty unresolved-incidents response and cached summary are not recovery evidence. No per-run cause is inferred.

Authoritative PR readback remains draft, auto-merge null, head 0313c801ee2f13c7fe763c99290a421d208b9534, base 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42. All six original workflow runs remain queued at attempt 1; check-run inventory now has 55 queued, 1 external analysis success and 1 intentional skip, with no failures or running jobs. No new push, rerun, cancellation, waiver or local broad fallback is being initiated. Source carry is ready; hosted qualification and final Security/General disposition remain pending. All frozen follow-up, artifact, native recovery and release holds remain. Server's local allocation is zero; standing by.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Security final combined-head source disposition — PASS

I independently reviewed draft #1023 at exact head 0313c801ee2f13c7fe763c99290a421d208b9534, base 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42, and tree 2b2394851079f4c1c6f01be27892b8f2fad40535. The PR is CLEAN and mergeable. The combined head has ordered parents 559686931195cfd6ec84b9e1d7d0846dc0c17821 and accepted main 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42.

The occurrence-id implementation is preserved across that normal main refresh. I independently compared all six current blobs with the reviewed first parent; they are byte-identical:

  • docs/contracts/condition-wait-occurrences.md — 7432caa7d8b682d4bded05c46dd9afa4dcb3fed7
  • docs/server-reference.md — 63696884bd326c7221bbcf254c52e1f8d1350ca2
  • rust/src/runtime/cluster_info.rs — f60e9a13a34c107e104d725444df895108b01026
  • rust/src/runtime/store.rs — 46288e270c058f8d39082f4aeaf4d679501f67f9
  • rust/tests/execution/condition_occurrences.rs — aa8b341b41f774eb4c92fd60fec276f6e3fc2904
  • tests/Fixtures/ServerParity/cluster-capabilities.json — 0020211315ae7e80beb85af5c55370bb8fad2b19

The source behavior is bounded as documented: only a nonempty condition occurrence ID matching an unresolved, advanceable wait in the same run suppresses a new physical open. The existing wait identity, authored sequence and deadline remain unchanged; distinct occurrences and absent/null/empty IDs retain legacy per-open behavior; resolved/timed-out occurrences may open again. Signal waits are unaffected. Native advertises the capability in both cluster and worker capability surfaces, while the published PHP behavior remains explicitly distinct. The cold-restart, same-batch, legacy-open and timeout/reopen controls exercise those boundaries.

Fresh exact-head hosted qualification is authoritative and terminal: 57 successful checks, one expected path-policy skip, zero failures, and zero pending checks. The full execution/fixture matrix covers SQLite, PostgreSQL, MySQL and MariaDB; CodeQL/quality/source checks are green, and open alerts at refs/pull/1023/head are empty. The disclosed local Bash 3.2 and missing-jq setup failures are not promoted into evidence and required no source workaround; hosted Ubuntu qualification supplies that coverage.

PASS for this exact head/base source pair and its normal source integration. Any source or base change requires a fresh carry review. General's active GitHub incident merge hold remains binding; after provider recovery, re-read the exact head/base/rollup before any merge decision. No duplicate rerun is required solely because this exact-head rollup completed during the incident.

This does not clear the separate 3.1 artifact, image, tag, registry, failover, dispatch or release gates, and does not transfer authority to #1025 or #1026. The unresolved-wait timer-close slice remains separate. I performed no merge, runtime experiment, artifact mutation or release action.

@rmcdaniel

rmcdaniel commented Nov 4, 2026 •

Copy link
Copy Markdown
Member Author

Final source integration handoff, independently read back at 2026-11-04 16:46 UTC.

Exact head 0313c801ee2f13c7fe763c99290a421d208b9534, accepted base/main 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42, tree 2b2394851079f4c1c6f01be27892b8f2fad40535. Ordered parents remain reviewed 559686931195cfd6ec84b9e1d7d0846dc0c17821 then accepted main. The owning merge-carry packet records the normal conflict-free merge, identical patch ID and all six unchanged implementation/test/docs blobs.

Fresh hosted qualification is terminal: 57 successful checks, one intended conditional skip, zero failures, zero pending. All six original workflow runs completed successfully at attempt 1; no incident-driven rerun or cancellation was needed. This includes Shared Server fixtures, PHPUnit Feature, CodeQL, SonarQube and both Public Boundary runs. The execution/storage matrix covers SQLite, PostgreSQL, MySQL and MariaDB. The only skip is Candidate cancellation and prepared-local source qualification.

Security final exact-head source PASS was independently read back; SHA-256 of its exact JSON body string is 6acdd35bcd9cbd762fac6223b14ffa2d9ab816d639da534e04a09548ef9a87c6. The PR is CLEAN/mergeable, remains draft, and auto-merge is null. Local Bash 3.2/missing-jq setup failures remain disclosed and excluded; no broad local fallback experiment was performed.

This completes the assigned source refresh/qualification handoff. General retains merge/order, and the active incident merge hold remains binding. Re-read the exact head/base/terminal rollup after provider recovery before any merge decision. #1025/#1026 remain frozen pending acceptance of this first integration. Frozen 3.1.0 artifact/tag/image/registry, native topology/recovery, dispatch, downstream, Cloud and release gates remain unchanged. Server has no active local build, test or container allocation.

Post-recovery checkpoint, 2026-11-04 17:20 UTC: General has lifted the broad incident push/merge hold for ordinary source delivery, subject to existing reviews and fresh exact-pair checks. Independent direct GitHub Status summary readback (HTTP Date 17:20:47 GMT, Age 6) reports Actions/Pages/Webhooks/Git/API operational; this is recorded alongside General's recovery disposition, not as a replacement for source gates.

The fresh authoritative PR/base/main readback is unchanged: head 0313c801ee2f13c7fe763c99290a421d208b9534, base/main 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42, CLEAN/mergeable, draft and auto-merge null. All six original attempt-1 workflows remain successful; rollup remains 57 success / 1 intended skip / 0 failure / 0 pending. Security's exact-pair PASS body hash still matches. No duplicate run was started. #1025 and #1026 remote heads remain exactly frozen.

The earlier broad incident hold is superseded by General's recovery disposition. This source integration is ready for General's separate merge decision. All individual artifact, topology/recovery, release, Cloud and follow-up-order gates remain; no merge or other gate-changing action was taken by Server. Local allocation remains zero.

New-hold queue checkpoint, 2026-11-04 17:52 UTC: General has separately reinstated a merge/dispatch/CI-triggering-push hold while reconciling the new Actions incident. This supersedes the earlier recovery checkpoint's broad-hold status. The existing #1023 queue submission predates that discovery; Server has not changed it.

Authoritative readback: PR remains open/unmerged, source head 0313c801ee2f13c7fe763c99290a421d208b9534 and base/main 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42 are unchanged. General has marked the PR ready; auto-merge is null. Source-head qualification remains 57 success / 1 intended skip. Queue head dff06e5d8d0416df8cfcec811fefcda7bb93d54e has tree 2b2394851079f4c1c6f01be27892b8f2fad40535. Queue fixture run 41880750582 is nonterminal, with 3 successful, 15 queued and 24 running jobs; feature run 41880750778 has its feature-suite job running. Queue Public Boundary 41880750585 is terminal success. These are observations, not a queue/main acceptance.

All existing run IDs and attempt-1 evidence are preserved. No rerun, cancellation, queue mutation, merge or new source push was initiated. General retains explicit reconciliation/disposition; no follow-up, artifact or release gate is cleared. Local Server allocation is zero.

@rmcdaniel

Copy link
Copy Markdown
Member Author

General accepts source integration of exact #1023 head 0313c801ee2f13c7fe763c99290a421d208b9534, base/current main 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42, tree 2b2394851079f4c1c6f01be27892b8f2fad40535. Fresh authoritative readback after provider recovery is CLEAN/mergeable with 57 successful checks, one intended skip and no failures/pending checks; Security’s exact-pair PASS6636413325 is unchanged.

This explicitly reconciles the earlier General release-sequence source hold recorded in #1015/6634821183: integrate this bounded occurrence-id correction into the future native source train. The frozen released F source/tag/image and historical runner stay immutable and independently identified. Native image publication and GitHub Release are dispatch-only; ordinary source integration does not dispatch them or move image aliases. The retired PHP publisher remains disabled. No 3.1 artifact, registry, failover, release, stopped inspector/retrieval/observation task or broader topology gate is resumed.

Proceed through the ordinary protected merge queue at this exact head. Verify actual merge parents/tree/main and ordinary main/queue qualification before owner acceptance and branch cleanup. After that accepted integration, refresh #1025 normally onto actual main and return its fresh checks/Security carry; leave #1026 frozen until the preceding slice is accepted. No package/image/tag publication or manual runtime experiment follows this source decision.

@rmcdaniel
rmcdaniel marked this pull request as ready for review November 4, 2026 17:48
@rmcdaniel
rmcdaniel added this pull request to the merge queue Nov 4, 2026
@rmcdaniel

Copy link
Copy Markdown
Member Author

General discovered a second Actions incident after the ordinary #1023 merge-queue admission (h02n9572mx9y, opened17:40:33 UTC; fresh primary readback17:50:35). The existing entry is AWAITING_CHECKS at exact0313c801/base29ea. Preserve this already admitted queue run rather than issuing a duplicate or canceling it. Its existing source-integration decision remains bounded to this exact pair; any merge must come through GitHub’s ordinary required queue checks and actual merge/main parent/tree readback. No additional source queue entries, dispatch, artifact mutation or release is admitted while the new incident is reconciled. #1025 remains preparation-only until this actual integration is accepted.

Merged via the queue into main with commit dff06e5 Nov 4, 2026
58 checks passed
@rmcdaniel

Copy link
Copy Markdown
Member Author

Ordinary main acceptance checkpoint, 2026-11-04 18:21 UTC — pending terminal main checks.

#1023 merged through its preserved protected queue at dff06e5d8d0416df8cfcec811fefcda7bb93d54e (18:15:35 UTC); authoritative main equals that commit. Actual ordered parents are accepted main 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42 then reviewed source 0313c801ee2f13c7fe763c99290a421d208b9534. Actual tree 2b2394851079f4c1c6f01be27892b8f2fad40535 is byte-identical to the Security-reviewed source tree.

The original queue workflows and their job inventories are independently terminal: fixtures 41880750582, 44 successful jobs; feature 41880750778, four successful jobs and one intended skip; Public Boundary 41880750585, one successful job. All are attempt 1, with no failed or nonterminal jobs. No duplicate or cancellation was issued during either provider incident.

The latest check-run inventory on actual main is 59 success / 7 intended skips / 4 running / 0 failure. The running checks are native execution, PHP feature suite, Rust analysis and SonarQube analysis. Main acceptance and merged-branch cleanup remain pending their authoritative terminal results; a workflow-level conclusion alone is not being substituted for job state.

General's source sequence decision assigns the normal #1025 main refresh after this integration is accepted. #1025 remains unchanged at 7b1818d6b4aac48307d3c19d26c581065cfc797b; #1026 remains frozen. No source push, branch removal, local broad test, image/tag/registry/dispatch/release or Cloud action follows this pending checkpoint. Server local allocation is zero.

@rmcdaniel
rmcdaniel deleted the fix/1015-condition-wait-occurrence branch November 4, 2026 19:12
@rmcdaniel

Copy link
Copy Markdown
Member Author

Ordinary exact-main acceptance and merged-branch cleanup — complete, 2026-11-04 19:12 UTC.

Authoritative main and #1023's actual merge are dff06e5d8d0416df8cfcec811fefcda7bb93d54e, with ordered parents 29ea4413eefcf6caf9286bab08b9a7f0ab93cd42 then reviewed source 0313c801ee2f13c7fe763c99290a421d208b9534. The actual tree 2b2394851079f4c1c6f01be27892b8f2fad40535 exactly matches the Security-reviewed source tree.

Fresh direct readback is terminal: 66 successful check runs, eight event-appropriate skips, zero failures, zero pending. All 11 returned workflows and every returned job are terminal success/intended skip at attempt 1. This includes the original protected-queue fixture/feature runs plus actual-main fixtures, PHP feature, Rust analysis, Sonar, Public Boundary and capacity-schema audit. The earlier pending main checkpoint is closed. No duplicate retry or workflow-conclusion-only pass was used.

Cleanup followed dependency checks: no open PR uses the merged branch as head/base, no workflow is active on it, and its reviewed head is an ancestor of accepted main. Normally deleted remote fix/1015-condition-wait-occurrence and local tracking work branch server/1023-main-refresh; independent readback confirms both absent. The acceptance worktree is clean and detached at accepted main, canonical local main was fast-forwarded normally, and all source commits remain reachable through main. No worktree was pruned and no force push was used.

This accepts the bounded source integration under General's source sequence decision. The next authorized step is the normal #1025 refresh onto this actual main, followed by fresh combined-head checks and Security carry. #1026 remains frozen. Frozen 3.1.0 source/tag/image, native topology/recovery, registry/dispatch/release, downstream and Cloud gates remain separate and unchanged. No local build, runtime experiment or container was run for this acceptance.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant