Skip to content

Audit conformance experiments for complete first-party SDK coverage #122

Description

@rmcdaniel

Request

The owner requested an audit of the existing experiments so portable behavior is not tested in just PHP, Python, or Rust by accident. Scheduled after the current Cloud pricing/contact rollout.

Acceptance

  • Inventory current experiment definitions and map them to the public conformance runbook.
  • Replace unjustified language-only instructions with explicit PHP/Python/Rust coverage and every meaningful supported workflow/activity direction, including cross-language child and Nexus behavior where applicable.
  • Identify genuinely language-specific or embedded-only cases explicitly; do not invent meaningless Cartesian combinations.
  • Cover authoring, inputs/results, retries, timeouts, heartbeats, cancellation, signals/queries/updates, replay/restarts, upgrades, and failure recovery as applicable to each experiment.
  • Keep executable instructions, prerequisites, expected outcomes, and cleanup clear for a new human or agent using only public repositories.
  • Keep Cloud account data, infrastructure, provisioning and chaos procedures in the private Cloud repository; link the private follow-up there without exposing its details here.
  • Run focused representative checks for changed instructions and report outcomes on GitHub. Do not commit generated per-run evidence or rebuild a conformance pipeline.

GitHub remains the source of truth. Reuse ordinary repository commands and GitHub Actions for public happy paths; maintainers handle exceptions directly.

Activity

  1. rmcdaniel commented on Sep 8, 2026

    @rmcdaniel
    MemberAuthor

    Concrete audit finding from server#140: an exploratory unrestricted Server PHPUnit run includes legacy conformance-runner contract tests outside the current feature qualification command. The first failing assertion, ActivityConformanceRunnerContractTest::test_runner_rejects_local_repo_root_vendor_runtime_probe, expects the phrase "local product source probe" while the actual rejection identifies forbidden local source and missing pinned-image evidence. This reproduces identically on unchanged main e918f0c4; no Nexus change causes it. Include runner-test relevance and clean executable prerequisites in this existing experiment audit, alongside first-party SDK coverage. Do not turn obsolete message assertions into another release coordinator. Server release qualification is independently green on the documented 2,132-test command.

  2. rmcdaniel commented on Sep 23, 2026

    @rmcdaniel
    MemberAuthor

    Initial public-runner audit (2026-09-23):

    • Child workflows: the published runner resolves the Rust crate, but its manifest and runtime probe execute only the 2x2 PHP/Python parent-child matrix. Rust WorkflowContext::start_child_workflow exists, so the five Rust-involving directions remain unexecuted. PR Clarify child-workflow conformance evidence scope #128 prevents this install-only pin from being read as behavioral proof.
    • Sagas: the published runner exercises PHP/Python compensation directions; Rust has a Saga API and unit replay tests, but this runner has no Rust execution shard. This is another applicable published-artifact coverage gap.
    • Signals/queries: the published runner has an explicit Rust matrix probe; inspect its scenario results rather than inferring coverage from the crate pin.
    • Heartbeats: separate PHP, Python, and Rust published-artifact runners exist.
    • Nexus: the published runner exercises PHP/Python caller/service directions. The Rust SDK currently has no Nexus API; that is a capability boundary, not a runnable Rust permutation to invent in this experiment.

    Next action after PR #128: add real published-artifact Rust child parent/child cells, then Rust saga compensation cells. Keep these separate from the existing PHP/Python passes and do not treat artifact installation as runtime evidence.

  3. rmcdaniel commented on Sep 23, 2026

    @rmcdaniel
    MemberAuthor

    Merged PR #128 after the shared contract check passed. The public runbook now distinguishes child-workflow Rust artifact resolution from executed PHP/Python runtime cells. The issue remains open for real Rust child and saga published-artifact scenarios and the remaining experiment audit.

  4. rmcdaniel commented on Sep 23, 2026

    @rmcdaniel
    MemberAuthor

    Server PR #170 is merged as 91db02448ddacb70b3ea683c57a07962b7fb97b3. It repairs the stale activity conformance runner contract tests: synthetic evidence is exercised in explicit in-process mode, the extracted-source handoff remains separately tested, and local-source rejection asserts current diagnostics. The containerized contract suite passed 44 tests / 617 assertions; the Server PR feature suite and required checks passed. This is test-harness hygiene only, not new SDK runtime coverage. Rust child and saga published-artifact execution, plus the rest of the experiment audit, remain open.

  5. rmcdaniel commented on Sep 23, 2026

    @rmcdaniel
    MemberAuthor

    Merged PR #130 (d28c6746208dbb9f8aca0e6294f4f5f16ea03467). The stable conformance runbook now includes the existing published-artifact saga runner and states its actual PHP/Python workflow-compensation coverage. The current manifest and runner do not execute Rust saga handlers; Rust remains uncovered rather than inferred from artifact installation or the playground. Shared contract tests passed. This advances the experiment inventory, not the missing Rust execution cells.

  6. rmcdaniel commented on Sep 24, 2026

    @rmcdaniel
    MemberAuthor

    Focused published-artifact child-workflow probe (2026-09-24), isolated local Docker stack:

    • Artifact tuple: durableworkflow/server:2.3.14 (bundled Workflow 2.0.16), PHP SDK 2.0.11, Python SDK 2.0.0, Rust SDK 2.0.7, dw 2.0.0. Server/DB/Redis came from the sample-app playground Compose stack; workers and client ran from the published sample-app dev image with disposable local credentials. No Cloud/customer namespace was used.
    • Rust parent to Rust child: completed; parent run 01m38ewm5323gdfnefvnrnqyxw.
    • Rust parent to Python child: completed; parent run 01m38f3xfn6gm4fpx62rgwg568.
    • Python parent to Rust child: completed; parent run 01m38f8pnh5ctpjq60ycsyq2b1.
    • Rust parent to PHP child: completed; parent run 01m38fcnd93dwg5egnzhq0aqkf.
    • PHP parent to Rust child: completed; parent run 01m38fcyr0r563sh9hdy66mqny.

    Each returned the expected child language and input. For all five, persisted parent history contained StartAccepted, WorkflowStarted, ChildWorkflowScheduled, ChildRunStarted, ChildRunCompleted, WorkflowCompleted in that order; child runs completed. The PHP/Python-only directions remain covered by the existing published runner as noted above.

    This is a focused local execution probe, not a claim that the published child runner now executes all nine directions. Remaining work: add these Rust-involving cells to ordinary reproducible public instructions/runner, cover restart/replay and failure/compensation cases, then run the separate Rust saga cells and continue the broader experiment audit. Scratch workers and stack are being removed after this probe.

  7. rmcdaniel commented on Sep 24, 2026

    @rmcdaniel
    MemberAuthor

    Merged durable-workflow/sample-app#101 at f843d3b961e1a3a38b3a4c9d610d08bebc734eab. The public polyglot/child-workflows/ example now contains PHP, Python, and Rust workers plus a client that starts all nine parent/child directions and checks result identity and persisted lifecycle history. It reuses the existing Sample App playground and Rust lockfile, with no new conformance coordinator.

    Verified local published-artifact run on 2026-09-24 01:34:27-01:34:50 UTC: 9/9 directions completed, zero client failures. Each parent history had WorkflowStarted, ChildWorkflowScheduled, ChildRunStarted, ChildRunCompleted, WorkflowCompleted in order. Exact tuple: Server 2.3.14 (bundled Workflow 2.0.16), Waterline 2.0.3, CLI 2.0.0, PHP SDK 2.0.11, Python SDK 2.0.0, Rust SDK 2.0.7. PHP lint and Pint, Python syntax, Rust cargo check --locked, and all Sample App PR checks passed. The disposable local stack, workers, volumes, and scratch files were removed.

    Scope remains explicit: the existing Server child-workflows-published-artifacts.sh runner still executes its PHP/Python matrix, not Rust; this Sample App example is a separate executable manual experiment. Restart/replay, failure/cancellation and Rust saga compensation cells remain open under this issue. Next: link the manual matrix from the public conformance runbook and then tackle the Rust saga case.

  8. rmcdaniel commented on Sep 24, 2026

    @rmcdaniel
    MemberAuthor

    The public conformance runbook now links the independently executed Sample App child-workflow matrix. Merged #131 at 3ef934b after Shared contract tests passed. The runbook explicitly keeps the Server runner's PHP/Python scenario result separate from the Sample App 9/9 execution result; no Rust pass is inferred from crate installation. Remaining work in this issue: Rust saga/compensation published-artifact execution and the broader experiment inventory, restart/replay and failure coverage.

  9. rmcdaniel commented on Sep 24, 2026

    @rmcdaniel
    MemberAuthor

    Rust saga coverage increment shipped: sample-app#102 merged at 5bcc3b78d444a6d9d4023c2f3a2001bfe3441cda; the public conformance runbook now links it (merged 41c1df2330804970acb54863a752c18aadf664fb).

    Focused local published-artifact execution on 2026-09-24 around 02:57-03:00 UTC (exact wall-clock start/finish were not captured, so this is not a complete stable-release record): Server 2.3.14, Waterline 2.0.3, PHP SDK 2.0.11, Python SDK 2.0.0, Rust SDK 2.0.7. The Rust workflow ran three cases with Rust, PHP and Python compensation workers, twice. The stricter second run passed 3/3: planned decline had ActivityFailed; both forward activities and both reverse-order compensation activities had ActivityCompleted; workflow completed with expected result. No Cloud/customer namespace was used. Rust cargo check --locked, PHP lint/Pint, Python syntax and all Sample App PR checks passed. The disposable local stack and workers were removed. Rust formatting was not checked because the prepared image lacks cargo-fmt.

    This is separate from the Server saga runner PHP/Python matrix and does not qualify external business side effects, restart/replay, duplicate delivery, compensation failure, or PHP/Python workflow with Rust compensation. Next experiment should exercise those inverse directions and restart/replay before claiming full SDK saga parity. The broader experiment inventory in this issue remains open.

  10. rmcdaniel commented on Sep 24, 2026

    @rmcdaniel
    MemberAuthor

    Rust-involving saga coverage update (pass, 2026-09-24 03:17:05-03:18:07 UTC): Sample App #103, merged runner commit 9206e513632c483ac63a4c98b724f74e02ed7bdc; conformance guide #133. A disposable local published-artifact stack completed 5/5 directions: Rust workflow -> Rust/PHP/Python compensation, PHP workflow -> Rust compensation, Python workflow -> Rust compensation. Each checked the intentional decline as ActivityFailed, both reserves and reverse-order compensations as persisted ActivityCompleted, and WorkflowCompleted with the expected result. No customer namespace was used; task-owned workers, Compose services, volumes, and network were removed.

    Tuple: Server image durableworkflow/server:2.3.14 (bundled Workflow 2.0.16), Waterline image durableworkflow/waterline:2.0.3, prepared Sample App CLI 2.0.0, PHP SDK 2.0.11, Python SDK 2.0.0, Rust crate 2.0.7. Command shape: start isolated published Server/Waterline stack with PLAYGROUND_COMPOSE_PROJECT=sample-app-saga-inverse scripts/playground rust; launch polyglot/rust_worker saga binary plus polyglot/sagas/php_worker.php and python_worker.py, then run polyglot/sagas/client.py with disposable runtime URL, namespace, queue, and tokens. The separate Server runner still contains only PHP/Python saga cells. Worker restart, duplicate delivery, and compensation failure are not proven by this run and remain open inventory work.

  11. rmcdaniel commented on Sep 24, 2026

    @rmcdaniel
    MemberAuthor

    Rust saga restart increment (pass, 2026-09-24 approximately 03:56-04:00 UTC): Sample App #104, tested source commit 6062c3f02b54563e3cdfe85acdf4bda7b04c4a86, merged as dc657d023f46c98870acbc9919c306c273c12ae2; guide #134. Exact second-level start/finish times were not retained; future manually run failure-mode checks should capture them before removing the stack.

    Tuple: published Server image durableworkflow/server:2.3.14 (bundled Workflow 2.0.16), Waterline image durableworkflow/waterline:2.0.3, prepared CLI 2.0.0, PHP SDK 2.0.11, Python SDK 2.0.0, Rust SDK 2.0.7. Disposable Compose project sample-app-saga-restart, namespace default, queue sample-app-saga-restart. Command sequence: start saga_compensation_worker; run python polyglot/sagas/restart_client.py start; stop the first Rust worker process after ActivityCompleted(reserve-first) and SignalWaitOpened; run restart_client.py signal <workflow-id> with no Rust worker present; start a new Rust worker process; run restart_client.py verify <workflow-id>. First/new worker host process IDs differed (501160 -> 507206). Run ID 01m38s09gd35hj9pgf9e52xdbd completed with exactly one persisted signal wait and receipt, the expected five scheduled activities with no duplicate first reserve, one planned decline failure, four completed reserve/compensation activities in expected order, and WorkflowCompleted. Task-owned containers, network, and volumes were removed. This proves one Rust-workflow/Rust-compensation cold-replay direction; cross-language restarts, process loss during activity side effects, duplicate delivery, and compensation failure remain unproven.

  12. rmcdaniel commented on Sep 24, 2026

    @rmcdaniel
    MemberAuthor

    Rust-parent saga restart matrix expanded and executed (2026-09-24 07:44:20-07:48:02 UTC). Sample App #105 merged as 416b39a9216f5497e1504d2f61344e3a6043f540; tested source commit f50d434. The runner now selects Rust, PHP, or Python compensation with --compensation-runtime and verifies the selected type, result, and history.

    Published tuple: Workflow 2.0.16 inside Server 2.3.14 (image digest sha256:252b85fd1e177bc40db9c5dc9a638d5d5c0bc465eab93e1024ebe5c7cd58bbc8), Waterline 2.0.3, CLI 2.0.0, PHP SDK 2.0.11, Python SDK 2.0.0, Rust SDK 2.0.7. Disposable local Server, namespace default, queue sample-app-saga-directions. For each direction: python3 polyglot/sagas/restart_client.py start --compensation-runtime <runtime>; stop the Rust worker; signal <workflow-id> with no Rust worker; start a new Rust process; verify <workflow-id> --compensation-runtime <runtime>. Client/worker credentials were only the disposable playground token.

    All three passed: Rust-to-PHP run 01m395yq9hz0pkfwvfw6f7hrym, Rust-to-Python 01m3961vqkxbzmc87p2edr0ks4, Rust-to-Rust 01m3963xt557e4mz0jgp8h3t70. Each history had one persisted signal wait and receipt, no duplicate reserve, the planned decline failure, reverse-order compensation by the selected runtime, and WorkflowCompleted. Separate Rust worker containers/processes spanned each stop/resume; observed host PIDs included 730742, 739384, and 742846. The existing five-direction saga check also passed 5/5 on the same tuple. PR CI passed all ten checks. Task containers, network, and volumes were removed and their absence verified.

    This covers Rust-parent cold replay before compensation for three runtimes. PHP/Python-parent restarts, interruption during an activity side effect, duplicate delivery, and compensation failure remain unproven; #122 stays open.

  13. rmcdaniel commented on Sep 24, 2026

    @rmcdaniel
    MemberAuthor

    PHP- and Python-parent saga restart directions are now implemented and merged in Sample App #106 as 680ce55. Published local tuple: Server 2.3.14 (Workflow 2.0.16), PHP SDK 2.0.11, Python SDK 2.0.0, Rust SDK 2.0.7. PHP parent run 01m397pj801ewhvbqwe1wdntrw and Python parent run 01m397tdwma5t84bacn29m5f54 each persisted the first reserve and condition wait, lost its parent worker, received the signal while that worker was offline, and completed after a fresh parent process with one signal, no duplicate reserve, the planned decline failure, and ordered Rust undo-second/undo-first compensation. The verifier distinguishes PHP/Python ConditionWaitOpened from Rust SignalWaitOpened. Existing five-direction saga check passed 5/5 on the same disposable stack; PHP syntax and Python compile passed, and all PR checks passed. Task containers and volumes were removed. This closes the PHP/Python-parent restart gap, not activity-side interruption, duplicate delivery or compensation failure; #122 remains open.

  14. rmcdaniel commented on Sep 24, 2026

    @rmcdaniel
    MemberAuthor

    Terminal saga-compensation failure increment shipped on 2026-09-24: Sample App #107 merged as 5b5ecf6d6f3e5685a187ae1f6611bba8bdc0f854; conformance runbook #135 merged as 08a375d7ddd4c8d4f64a6a443a867ed185876399. Both required check sets passed.

    Focused published-artifact local execution used Server 2.3.14 (Workflow 2.0.16), PHP SDK 2.0.11, Python SDK 2.0.0, Rust SDK 2.0.7, an isolated MariaDB/Redis stack, and three registered workers. On the tested source cc7c3ea, all five Rust-involving directions passed the new --compensation-failure mode: the planned forward activity and undo-second each persisted ActivityFailed, no undo-first was scheduled, and the workflow ended with persisted SagaCompensationFailed containing both failure identities. The default successful compensation client also passed 5/5 on the same tuple. PHP/Python syntax and locked Rust cargo check passed. The stack, workers, volume, network, and build scratch were removed. The manual result is not an automated Server-runner Rust shard.

    The issue remains open for the broader experiment inventory and failure modes not exercised here, especially process loss during a side effect, duplicate delivery, and real external-effect recovery. The PHP-parent result also exposed that a cross-SDK client should use the persisted exception_type for failure-type identity: exception_class can be a broader runtime class. The experiment now asserts the persisted type and history rather than inferring type from the client class field.

  15. rmcdaniel commented on Sep 24, 2026

    @rmcdaniel
    MemberAuthor

    Heartbeat inventory finding: the current public conformance row already names focused published-artifact heartbeat runners for PHP, Python, and Rust, plus a shared-server wave. It is incorrect to treat the old PHP/Python-only experiment wording as a missing SDK implementation, or to infer simultaneous cross-SDK visibility from three isolated passes. The local experiment guidance has been aligned to the actual public runner and CLI contract. No product heartbeat capability or new conformance pass is claimed by this documentation correction. Next inventory work should identify categories whose executable runner truly omits a supported SDK or direction, then run that cell with exact published artifacts.

  16. 21 remaining items

  17. rmcdaniel commented on Oct 8, 2026

    @rmcdaniel
    MemberAuthor

    The new total-deadline case exposed a PHP worker continuity bug, tracked in SDK #106. The published Server preserves the original deadline, fails the original run with the correct cause, and rejects late completion without changing history. PHP SDK 2.2.4 then exits on that expected rejection and cannot take the next queued activity.

    SDK PR #107 discards a canonically fenced outcome for the exact original claim and resumes acquisition. Focused regressions prove the same worker takes another task after late completion or late failure, while malformed and unrelated conflicts remain errors. Both positive cases fail against the published Worker. The candidate passes 23 focused tests and static analysis.

    The next action is to complete repository qualification, publish patch 2.2.5, and rerun Sample App #163 using that exact published package. The sample and inventory PRs remain drafts until this passes. No Server or other SDK behavior change is needed for this finding.

  18. rmcdaniel commented on Oct 8, 2026

    @rmcdaniel
    MemberAuthor

    Sample App PR #163 and coverage PR #166 are merged. The activity command now passes twenty published-package cases.

    Workflow → activity Retry Worker SIGKILL Total deadline Retry exhaustion
    PHP → Rust pass pass pass pass
    Python → Rust pass pass pass pass
    Rust → PHP pass pass pass pass
    Rust → Python pass pass pass pass
    Rust → Rust pass pass pass pass

    Run 37807030660, October 8, 2026, 16:13:03–16:25:21 UTC, retains raw claims, histories, deadlines, image identities and cleanup observations in its thirty-day artifact. Qualified head 0d435fec989673cf89d767ef9416da332e93d811, actual runner 5af4dd5be6a21d3acf2dbc9ac07ad03a01f15fb6 and merged source 648d04331b42527d81e8c5f1f9dce82fa41cc662 share tree 0eaa01ad31c10072fe3d3d7eb84ae68688144e38.

    The exact tuple uses Workflow 2.5.3, Server 2.5.11, PHP SDK 2.2.5, Python SDK 2.5.0 and Rust SDK 3.4.0. Server index is sha256:ef1ec35808419da8929d3a334ccb44e7a9fbecf26e6768b5826e1b689768c4d5. Run the existing scripts/resolve-current-artifacts.sh assignments followed by scripts/sdk-activity-recovery.sh --result-dir <directory>.

    Deadline cases expire at the original total boundary after two actual attempts. Exhaustion cases retain the second retryable failure before that boundary. Both preserve the original run and execution, carry the terminal activity cause into one workflow failure, reject late completion without changing history, and produce no third attempt or successful result. Each activity worker takes the following case under the same registration. Physical loss receipts show exit 137, no OOM and distinct replacements. Task services, network and consumer images were removed.

    The deadline fixture found and repaired PHP worker continuity in SDK 2.2.5. The affected consumer locks and prepared image publication are complete. Both registries serve index sha256:a0c6ec4c25c850e5ae3441a8b0f20ae1001eb6f883aebadd8cf15e400d163673, with native anonymous startup passing on both architectures. Website PR #178 is deployed and its live manifest and commands select the qualified versions. The merged branches were deleted.

    Post-merge update run 37809351501 timed out once waiting for Rust to finish after its completion signal. The isolated second attempt passed on the identical source and tuple. The first failure and successful recheck are retained. Poll 429s appear in the failure log, but their connection to the timeout is not established.

    Next action: diagnose that intermittent Rust update completion failure with a focused reproduction. Remaining activity scope includes the four PHP/Python service directions, application progress heartbeats and external side-effect recovery. Keep #122 open.

  19. rmcdaniel commented on Oct 8, 2026

    @rmcdaniel
    MemberAuthor

    Sample App #164 landed a bounded Rust update/finish regression and failure diagnostics. Published run 37817302746 passes the existing matrix and ten additional finish cases at a3993748b9c8ca7666bf91f1e402a334099212ed, using Server2.5.11, PHP SDK2.2.5, Python SDK2.5.0, Rust SDK3.4.0 and Workflow2.5.3. Cleanup finishes at17:38:49 UTC. All normal checks pass.

    The investigation also established Server #322: ordinary waiting replay acknowledgments can strand a message accepted during the replay's lease. Three controlled HTTP cases fail on the untouched published Server2.5.11 digest sha256:ef1ec35808419da8929d3a334ccb44e7a9fbecf26e6768b5826e1b689768c4d5, including signal-before-update ordering. Each leaves no delivery task. The isolated reproduction stack is removed.

    Server #323 fixes the atomic handoff and prepares Server2.5.12. Focused checks pass, including 18 tests/389 assertions after correcting a database-fixture fleet-cache isolation failure exposed by full CI. Full exact-head CI, publication, the same published HTTP cases and PHP/Python/Rust follow-through are next.

    The original intermittent Rust snapshot/finish stalls still need direct correlation. These additional passes and the independent Server fix do not close that investigation.

  20. rmcdaniel commented on Oct 8, 2026

    @rmcdaniel
    MemberAuthor

    The expanded published update checks exposed two distinct delivery problems, and both now have focused regressions.

    • Server 322 is delivered and closed in Server 2.5.12. Three real timer-replay message handoffs pass against the published image. The PHP/Python/Rust update matrix, ten Rust finish cases and required consumer checks pass. Sample App 165, its published native multiarchitecture prepared image and Website 179 are delivered. The live release manifest reports Server 2.5.12.
    • Workflow 711 owns the separate buffered signal identity failure captured by the Rust conformance runner. PR 712 is merged after required source checks and the frozen replay regression pass, with matching qualified and merged trees. Full main qualification, Workflow 2.5.4 publication, a pinned Server rebuild and the new published consumer tuple are next. This remains open work.

    The original language matrix and worker replacement checks remain intact. The retained runner diagnosis distinguishes accepted work without a delivery task from a delivery whose persisted identity cannot replay. Both findings came from the normal isolated published-artifact experiment.

  21. rmcdaniel commented on Oct 8, 2026

    @rmcdaniel
    MemberAuthor

    Workflow #711 is delivered and closed. Workflow 2.5.4 and Server 2.5.13 preserve buffered signal wait identity through the MySQL admission/completion race and cold replay. The corrected published tuple passes all nine PHP/Python/Rust update directions, original and replacement snapshots and ten Rust immediate-finish cases. Post-merge updates also pass. Sample App #166, its native multiarchitecture prepared image and Website #180 are published and independently verified.

    The activity recovery gap is next. Sample App #167 adds the four PHP/Python service directions to the existing five Rust-involving directions. Every direction runs retry, activity worker SIGKILL, total deadline expiry and retry exhaustion. The summary rejects missing or duplicate cases and a replacement that conceals worker continuity failure after expiry. The actual thirty-six-case published run is in progress.

    Organization #167 updates the public experiment inventory and will merge after that run passes and Sample App #167 lands. Application progress heartbeats and external side-effect recovery remain separate activity work. This audit stays open.

  22. rmcdaniel commented on Oct 8, 2026

    @rmcdaniel
    MemberAuthor

    Sample App #167 and organization #167 are merged. The activity recovery command now executes all nine service SDK directions.

    Workflow → activity Retry Worker SIGKILL Total deadline Retry exhaustion
    PHP → PHP pass pass pass pass
    PHP → Python pass pass pass pass
    PHP → Rust pass pass pass pass
    Python → PHP pass pass pass pass
    Python → Python pass pass pass pass
    Python → Rust pass pass pass pass
    Rust → PHP pass pass pass pass
    Rust → Python pass pass pass pass
    Rust → Rust pass pass pass pass

    Published run 37832991918, October 8, 2026, 19:35:14–19:54:42 UTC, passes all 36 cells and 11 focused observer checks. Its thirty-day artifact retains actual claims, histories, deadlines, stale completion receipts, image identities and nine physical kill/replacement records. Every killed activity container exits 137 without OOM and has a distinct replacement.

    The exact tuple uses Server 2.5.13, Workflow 2.5.4, PHP SDK 2.2.5, Python SDK 2.5.0 and Rust SDK 3.4.0. Server index is sha256:1b2be3960f9d820f87abf6ba7ee37687c57c3ec75ec793be3417f7e8baa8b767. Qualified head 9b4cfb3569bc1c53bce7d9b5921d54fc9d53dee3, actual runner 3c5c886ae48929e8e50b7a0fbd673f97ceb14a2f and merged main 497c6d18618b9845f4db5f7f08c52601976457c3 have the same tree.

    The four new PHP/Python directions preserve the same run, execution and total deadline checks as the Rust directions. They reject stale first claims while a retry is live and second claims after terminal failure, without changing history. A worker that observes deadline expiry must take the following exhaustion case under the same registration. The summary rejects the previous partial matrix and missing or duplicate cells.

    Use the documented scripts/resolve-current-artifacts.sh assignments, then scripts/sdk-activity-recovery.sh --result-dir <directory>. Cleanup removed the task stack and consumer images. Merged branches and worktrees are removed. These test changes need no new package release or prepared tool/dependency image.

    Next activity work is application progress heartbeats, followed by external side-effect recovery with application idempotency or downstream fencing. The experiment audit remains open.

  23. rmcdaniel commented on Oct 8, 2026

    @rmcdaniel
    MemberAuthor

    Cooperative requester attribution is delivered through
    Sample App #176 and
    shared guide #175.

    Published execution
    passes October 9, 01:47:58–01:52:42 UTC, with successful cleanup through 01:52:51.
    All five Rust-involving PHP/Python/Rust parent-child directions preserve the
    authenticated legacy token requester through cooperative propagation, duplicate
    requests, committed delivery and cold cleanup recovery. Five original HTTP 202
    requests and five HTTP 200 duplicates actually carry the five forged identity
    body fields and eleven headers, while preserving their original identity and
    deadline. Root history retains the authenticated actor. Parent/child contexts,
    cleanup markers and CLI/API cascade metadata retain that requester and source.
    Internal propagation, delivery and cleanup have explicit null audit principals.

    Three workers have independently inspected SIGKILL exit 137 without OOM and
    distinct running replacement containers. All ten original parent/child runs
    close as Cancelled once in 15.399–16.577 seconds, before their original 30-second
    deadlines. Original delivery, timers, relationships and cleanup outcomes remain
    unchanged. Nine completion, five typed failure and five cold-recovery directions
    also pass. Thirty-seven distinct focused checks, 76 metadata checks and all 15
    normal gates pass. Actual histories, cascade views, receipts and process-loss records
    have 30-day hosted retention.

    Qualified head edcef7611d9c41389cd9c4a933288b2b68b0f9ff, actual runner
    a86a687cdf69b7447f04992460ce863e02e5bd2d and merged Sample App
    4427a537e092f9d92c96d2a4867b9186e0e75ccd share tree
    f260d463edecbf0f022ee6e568243bd903daa930. Shared guide merges 5d182df
    with its tested tree unchanged. Tuple: CLI 2.2.0 / PHP 2.2.6 / Python 2.5.0 /
    Rust 3.4.1 / Server 2.5.13 / Waterline 2.3.1 / Workflow 2.5.4. Server index
    sha256:1b2be3960f9d820f87abf6ba7ee37687c57c3ec75ec793be3417f7e8baa8b767.
    No package release or prepared-image rebuild is required. Completed worktrees
    and local/remote branches are removed, with GitHub absence verified.

    This case uses a published Python cancellation caller and the self-hosted legacy
    token. Runtime-token role cooperation, anonymous cooperation, Rust cancellation
    clients and rendered Waterline UI remain separate cases. Earlier
    actual Rust CLI/Waterline API inspection,
    named/anonymous principal checks, credential rotation, activity recovery, external
    effects and typed search/cold replay remain delivered.

    The broader audit stays open. The coverage inventory retains remaining
    compatibility-skew and runtime directions. The accepted Simplified Chinese increment is published through
    Website #183,
    with all eleven guides, five-locale build, normal CI and live desktop/mobile
    qualification passing. Chinese word search, English API terms and existing
    English/Ukrainian/Spanish/Portuguese search pass. Reference and 1.x pages
    identify their English content, with direct English links. The merged branch,
    local build and temporary qualification resources are removed.

    Japanese is also delivered through
    Website #184.
    All eleven guides, six-locale build, source/main checks, Pages and actual live
    desktop/mobile qualification pass. Japanese phrases and English API terms,
    all five existing locale searches, canonical/six alternates, complete SDK
    programs, fallback/1.x notices and language switching are verified.
    The merged branch and temporary qualification resources are removed.

    French is delivered through
    Website #185.
    All eleven guides, seven-locale build, source/main checks, Pages37887378868 and
    actual live desktop/mobile qualification pass. Accented French/English API
    search, all six existing locale searches, canonical/seven alternates, complete
    SDK programs, shared artifact values, fallback/1.x notices and language switching
    are verified. Cleanup is part of this completed handoff.

    German is delivered through
    Website #186.
    All eleven guides, eight-locale build, source/main checks, Pages37891946193 and
    actual live desktop/mobile qualification pass. German/English API searches,
    all seven existing locale searches, metadata, complete rendered SDK programs,
    fallback/1.x notices and language switching are verified.

    The operator's language-menu feedback is addressed through
    Website #187:
    English first, followed by native-name order. Source/main checks, Pages37893493146
    and actual desktop/mobile order and destination checks pass.
    Website #169
    is complete. Merged remote branches and temporary qualification resources are removed.

    The main CI repair in
    Workflow #740 is delivered.
    Three measured PostgreSQL timing hints distribute the previously overloaded
    suites across separate shards. Every discovered feature file remains included.
    The full candidate matrix passed before merge, and
    main build37896378843
    and the actual README badge are passing.
    Workflow #739 is complete.
    The separate #426 coverage assignment is preserved.

    The next accepted language work is
    Waterline #157,
    starting with Spanish operator-interface translation and both embedded/service
    qualification. The issue separately owns all six additional interface languages.
    Remaining SDK audit cases continue to belong here.

    Workflow #741 tracks
    the embedded PostgreSQL cancellation-reason truncation found in the Server
    parity suite. The PHP correction takes priority and is assigned separately from
    #426 coverage. Server #325 retains its pending fixture and published differential
    qualification, with no competing PHP correction.

    Server #325 separately
    owns the assigned Rust successor and PHP/Rust/embedded differential fixtures.
    Coordinate shared-contract changes through its owning record.

  24. rmcdaniel commented on Oct 10, 2026

    @rmcdaniel
    MemberAuthor

    Waterline #157 is complete through published 2.9.0, including the six additional interface languages and qualified public consumers.

    Next here: extend the existing published cooperative-cancellation experiment to PHP/Python/Rust cancellation clients with the documented runtime-token roles and anonymous configuration, then inspect the actual rendered Waterline cascade. Verify authenticated requester attribution, unauthorized-role refusal, resistance to forged identity, original identity/deadline preservation and cold cleanup recovery. Reuse the public runner and current published tuple.

    Server #325 retains ownership of native/shared differential fixtures. Coordinate any shared-contract change in its owning record. Waterline #136 retains its separate full cancellation acceptance gate.

  25. rmcdaniel commented on Oct 10, 2026

    @rmcdaniel
    MemberAuthor

    The actual cancellation caller/access extension is merged in Sample App #186, source dcb95b846734d767f833761ae70ac59c330151bc, identical to the qualified PR tree. All 17 PR checks pass, including published children run 38065074579.

    The unchanged published tuple executes cancellation through all three PHP/Python/Rust clients. Five runtime-token cascades preserve the original operator actor through administrator duplicates, and five anonymous cascades preserve the configured anonymous actor. They finish 20 additional Cancelled runs within their original shared 30-second deadlines, with a maximum measured 17.576 seconds. Actual receipts cover five worker-role 403 refusals and five unauthenticated discovery 401 refusals under forged metadata. Original delivery and cleanup resume after SIGKILL and distinct cold replacements. The five prior legacy cascades and ordinary child/failure/recovery directions also pass.

    The official artifact is retained on that run, ID 11674727609, verified SHA-256 8b367b72c376bee961af7947d77b1b6cdf6de8b5270d5bfaf50388c12e706d2c. This covers CLI and selected-run API inspection. All nine main workflows pass, including children run 38066795418.

    The public experiment map is delivered in organization #176, main 16b9297ee667ab402285558a6c7afee8006c4cc8. Next: execute the caller/access family's actual Waterline browser cascade case. The stronger full-cascade gate is organization #136, already complete with 236 published-artifact assertions and rendered Waterline proof. Waterline #136 is the separately completed prefix-links defect. The additional caller/access browser inspection belongs to this audit. Shared Server/PHP/Rust/embedded fixture work remains with Server #325's owner.

  26. rmcdaniel commented on Oct 11, 2026

    @rmcdaniel
    MemberAuthor

    Connected cancellation browser case delivered

    Sample App #194 is merged at 8ef57b2ca80d5ee75f31a1291d6b11417c66036b, tree 4a0ad9d048bc0ec1893a8ea62a1df64d1843f6e9. All 18 PR checks and all 20 main checks pass. The earlier #186 actual caller/access API coverage now has the connected published Waterline browser counterpart.

    Published PR run 38112417086 and independent main run 38114006472 each pass 45 real browser views: parent desktop/mobile and child desktop across the five Rust-involving directions and legacy/operator/anonymous access. Actual HTTP evidence agrees with original SDK/Server cancellation identity, requester, deadline, delivery and cleanup. All 15 PR cascades converge before their original 30-second deadline. Browser time is outside that measurement. No routes or responses are mocked.

    This exposed and delivered Waterline #171 in published 2.9.1. The original requester ID is visible alongside its label/source, safely escaped and wrapped on mobile. The official artifact checksum is independently verified. The sample image publication passes both native architectures and public pull/attestation checks, with both registries matching the qualified main image.

    Other tuple entries and existing workflows remain frozen. This adds actual rendered evidence to the completed caller/access case. Native Server #325 qualification and SDK major decisions retain their existing owners and gates.

    Next general product action: inspect the separately handed-off concurrent SQLite claim/recovery finding, and perform the targeted Sample embedded/Waterline consumer update when the owner publishes Workflow #744's corrected package. The owning records will hold the reproduction and exact published qualification.

  27. rmcdaniel commented on Oct 11, 2026

    @rmcdaniel
    MemberAuthor

    The documentation correction is open in .github #178 and Sample #197. The child command already executes the 45 connected Waterline browser views delivered in #194. Its instructions and inventory now describe that scope and retained outputs.

    The Nexus audit found a different execution gap in the existing Server host runner. probePublishedPhpPythonServiceCalls() invokes PHP → Python through the installed PHP SDK, but its Python → PHP cell uses Node apiRequest() after reflecting Python's API. It assigns caller workflow/run IDs without executing those workflow workers. The required scenario list names only the two cross-language client/service cells, despite two supported caller and service runtimes.

    The inventory correction distinguishes actual SDK invocation, HTTP probes and workflow execution. Next execution work is to call the installed Python SDK, exercise the supported same-language client/service pairs, and retain async result/failure/cancellation outcomes. Workflow authoring and replay need actual caller workers and histories, separately from these client calls. PHP's service-mode workflow context currently lacks a Nexus operation command, so client invocation must not be described as workflow authoring.

    Server implementation scope is being coordinated with #325's owner before edits. Rust Nexus support remains outside the current public SDK scope. This finding does not invalidate the separate child/browser or queue-recovery qualifications.

  28. rmcdaniel commented on Oct 11, 2026

    @rmcdaniel
    MemberAuthor

    The browser documentation correction is delivered in .github #178 and Sample #197.

    • The inventory merged at d3f2ebbfaf6e60d572af9a04e988fcabdf5f632a. Its exact qualified tree and normal PR/main contract checks pass.
    • The child README merged at df763865ed0db3774dc1fbea685605006fc7f2a5. Its exact qualified tree, all 15 PR checks and all 14 main checks pass, including the published child/browser command.
    • Both completed remote branches are deleted. Only Markdown changed. Runtime code, tuples and image inputs stay as qualified by the existing implementation.

    The next execution correction is Server #393, coordinated with #325's owner. It replaces the Node invocation labeled Python with the installed SDK, exercises four client/service admission pairs and prevents API reflection or independent handler probes from counting as durable workflow execution. Actual published qualification is running. Full Nexus workflow/service outcomes remain unfinished in this audit.

  29. rmcdaniel commented on Oct 11, 2026

    @rmcdaniel
    MemberAuthor

    Delivered at 8694aa5679f4402027d3224d25253558bda19071, with the exact reviewed tree. All seven PR checks and six main checks pass, with the prepared-local qualification correctly skipped outside this change's scope.

    The independent main published run executes all four PHP/Python client and service admission pairs using installed SDKs. Its official artifact independently verifies at 3318203 bytes and SHA-256 8bc66d5b171b64679e4e22824d840a42b4cf4859aafc4709ce27daa01ca6c8f8. Observed calls are accepted with real process IDs, versions, HTTP exchanges, call IDs and caller-indexed rows. Twelve existing checks pass and exactly two full workflow cases remain not_covered.

    The inventory is updated in .github #179. PHP SDK #116 records the missing durable PHP workflow authoring path. The next audit work is actual Python caller-worker execution and terminal service results, followed by recovery, failure and cancellation coverage. #122 stays open. No runtime release is needed for this runner correction. The completed remote branch is deleted and verified absent.

  30. rmcdaniel commented on Oct 11, 2026

    @rmcdaniel
    MemberAuthor

    Actual authored Python workflow execution in Server #394 reproduced three distinct product gaps on the frozen published tuple.

    • Python #111: the cross namespace workflow sends its caller namespace to the target catalog and gets endpoint_not_found.
    • Python #112: plain JSON Nexus arguments reach the real PHP SDK service worker as missing input. The Avro correction is in Python #113, with 11 focused wire/client/replay tests passing. Source checks, oversized transport and published consumer qualification remain required.
    • Workflow #753: the synchronous completion-waiting caller finishes with an admission surface, while the linked service fails. A subsequent Server API read still reports the original call as started with no terminal timestamps.

    Latest published run 38126596930, runner 33792ad2f89b0df80656699d3addb38a6eeabf7b, executes actual Python 2.5.4 / PHP SDK 2.2.7 workers against Server 2.5.19 / Workflow 2.5.9. Original caller/service histories, HTTP receipts and the post-service durable call read are retained in its official artifact. Size and SHA-256 independently verify. CLI 2.2.3 / Waterline 2.9.1 complete the frozen tuple.

    The previous four client admission pairs and 12 existing checks remain passing, with exactly two full workflow cases uncovered. #394's added real workflow check fails as required. The next work is to complete the wire and addressing fixes, converge linked outcomes, then qualify the actual published positive cases, failure, cancellation and cold recovery. #122 remains open. PHP durable authoring is separately tracked in durable-workflow/sdk-php#116. Native/shared fixture work stays coordinated with Server #325.

  31. rmcdaniel commented on Oct 11, 2026

    @rmcdaniel
    MemberAuthor

    Python SDK PR #113 merged at aeded98bc64a3537f973a475cd524c4302b564e0, with the exact source tree qualified at 4fd246840f6d34dab76333b0697b041f3e5d1f18. All PR and main CI, package, corpus, docs, boundary and integration checks pass. Nexus arguments now use Avro. Oversized arguments use runtime payload upload while the recorded request and existing idempotency input stay unchanged. The merged branch is deleted.

    Publication and actual installed PHP service verification remain outstanding, so #112 stays open. Target routing is separate PR #114, whose focused request/worker/payload/replay tests pass and full source integration is running. Server #396 passes its source gates and six HTTP transport regressions but is currently closed without merging. Its disposition must be resolved before the dependent Server fix is published.

    Next complete routing qualification and the published payload delivery checks. Linked terminal service/caller convergence remains Workflow #753, with the real workflow fixture Server #394 still draft and failing its new completion gate. HTTP admissions do not close that work.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions