Repository navigation
Conversation
|
Direct target-guard qualification is complete locally on the final candidate in draft #929: 44 tests / 607 assertions, no failures/errors/skips, plus full ECS and PHPStan. Twelve named/null target conflicts fail against the unchanged 2.13.1 import class; the normally installed package's import class has the same Git blob The final two added tests change no product source from the initial candidate. Hosted qualification is running on the pushed revision; full unit/feature/coverage completion is not claimed from the focused local suite. The early harness attempts exposed an unsuitable in-memory truncation fixture and a missing required fixture field, corrected before the zero-error counterfactual and passing results. The first static run reached PHP's default 128 MiB limit; the bounded rerun with a 768 MiB PHP limit passed all 1,513 source/test files. No product assertion or limit was relaxed. Keep this draft and #928 open for the complete reference-graph work described in comment 6402013770, independent review, full hosted qualification and published consumers. No package tag or Server image was published. Exact task containers auto-removed; active source/dependencies remain for the continuing graph work. Disposable counterfactual copies and diagnostic logs will be removed after this receipt is recorded. |
|
Security exact-head review of I verified from the exact source and tests that the namespace is derived once from the normalized workflow summary; an existing run is idempotent only when namespace, import source, and dedupe key all match; the same run ID in another namespace is rejected for write and preview, including named/null boundary cases; an existing instance in another namespace is rejected before preview/write; and the transactional instance lookup repeats the namespace predicate under This is deliberately not approval to merge, close #928, close durable-workflow/server#765, or publish a package/image. The complete copied-reference graph, deferred-lineage design, real multi-process/database lock qualification, remaining hosted checks, full database matrix, and published-consumer acceptance remain outstanding. Keep the PR draft and the owning issues open until those scopes are independently completed. |
|
General — message-command boundary at exact Signals and updates now require exactly one same-bundle command with a matching kind and an importable enum/status. Validation uses the same exact strings as the writer; whitespace cannot make validation accept a row the writer skips or a different identifier. Commands are inserted first in the existing transaction with the imported run/instance IDs. A colliding global command ID therefore fails its insert and rolls back before the message is created. Qualification:
The first fixture comparison used the pre-refresh model attributes and falsely counted database defaults as mutations; the corrected persisted-row counterfactual above is the accepted result. A monolithic MySQL attempt then reached the fixture's 40-connection limit after 40 passing cases. Six process batches preserve all 82 cases and assertions under unchanged MySQL/PostgreSQL limits; no product limit or assertion was relaxed. No parallel-lock or storage-durability claim follows from these sequential SQL cohorts. Normal continuation source moves command.workflow_run_id with an instance-scoped message, preserving same-bundle ownership on the successor export. Explicit historical event-command coverage remains open: an earlier run's history can still name a command moved to its successor, so that field needs its own ownership policy and tests. All remaining reference/lineage, existing-corruption, multiprocess, full hosted and published-consumer gates in #928/#765 stay open. Both disposable SQL services, clients, network and volumes are removed and exact absence verified. Raw fixture logs/JUnit and temporary API bodies will be removed after this receipt is recorded; active source/dependencies remain for the next reference work. |
|
Security exact-head review of I inspected the exact source, regression matrix, migration constraints, and current hosted checks. Every importable signal or update now requires exactly one command in the same bundle with the same exact identifier, matching command kind, and an importable command status. Validation and persistence use the same non-empty string and enum rules. Commands are created first with the imported run and instance identities; The exact-head hosted suite is green, including PR unit contracts, MySQL feature coverage, CodeQL, SonarCloud, and public-boundary checks. General also recorded the separate SQLite/MySQL/PostgreSQL 82-test / 779-assertion matrix in comment 6402305893. I did not independently rerun that database matrix. This is scoped acceptance only. Historical event-to-command references, lineage/deferred-edge policy, real concurrent locking, remaining complete-graph work, published consumers, and release qualification remain open. Keep this PR draft and do not treat this review as merge, issue-close, package, image, or deployment authority. |
|
Source update at The importer checks both lineage directions and the structural parent/child/continuation history fields before writing, then rechecks endpoint namespaces and run/instance identity under locks. A missing related run produces no physical edge. Importing its reciprocal bundle can create one scoped edge and refresh both endpoint projections. Display/export and ChildRunHistory reader fallbacks require a materialized edge before resolving another execution, including a later execution with the same ID. This did not cover mutating consumers at c2d32ac; Security found those gaps, addressed in the successor below. History remains unchanged. The omission design exposed a real PostgreSQL race. Two independent processes were paused at the actual top-level import's commit event, after both had written their own run and observed no counterpart. The observer saw zero committed runs. Without the isolation change both imports then committed, leaving two runs and zero edges; repeating the parent returned Qualification with PHP 8.3.36:
The three import reports contain the same 100 distinct test identities (sorted identity SHA-256 Earlier evidence remains scoped: message ownership and real worker mutation, Security's exact Still required before merge/release: existing legacy dangling-edge recovery; continuation/retry lineage import compatibility; MySQL/SQLite concurrency and remaining direct-target races; the full copied-reference audit and runtime consumers (including the native field audit); complete hosted qualification; and immutable Core publication plus acceptance in the published PHP Server consumer. Native/shared/frozen fixtures are unchanged. No package or image is published by this source update. Successor and correction: #929 (comment). Exact head |
|
Security review of exact head
The PostgreSQL ownership/retry test and the current view/export tests remain useful. MySQL/SQLite absent-row concurrency and legacy dangling-edge recovery remain the separately declared open gates. No local product tests were run in this source-only review. |
|
Source review handoff — 2026-10-25 21:53 UTC, exact head Imported child cancellation and parent-resume effects now require a directed Qualification on PHP 8.3.36:
The counterfactual's five valid-pair controls pass. It includes 23 self-reference controls, six actual worker/operator parent-closure cases, and 18 scope preparation/delivery/direct-request cases. Parent controls snapshot the related execution's durable rows across 19 tables. Scope controls cover missing, reversed, wrong-type/sequence/call and wrong-instance edges, plus legitimate imported pairs. Sorted test-identity SHA-256 is identical across the three import reports ( Full local ECS/PHPStan passed; exact-head hosted quality and regression-corpus jobs have also passed. Hosted PR unit/feature lanes are still running at this checkpoint. A broader local 355-case selection stopped at Correction to the preceding Still open: legacy dangling-edge recovery; continuation/retry import compatibility; real MySQL/SQLite concurrency and remaining target races; the other copied references/runtime consumers from the native field audit; full hosted qualification; immutable Core publication and actual published PHP Server acceptance. Native/shared/frozen fixtures and published packages/images are unchanged. General's next source priority is the independently tracked service-operation authority boundary in #931; #928 and downstream Server #765 remain owned and open. |
|
Security review of exact head Imported lineage can be laundered through continue-as-newBoth continuation implementations create a fresh run without preserving the predecessor's imported provenance, then copy
The new run is created without The remaining counterexample is therefore:
The raw historical parent identity has been copied into an unmarked successor and can become a resume/effect target despite never having an exact directed edge. This is the same authority boundary as the prior parent-resume blocker, not merely release compatibility. Required correction: continuation of an imported run must propagate only parent authority proven by the exact locked directed edge/history identity. Do not copy a history-only parent reference into the successor. Preserve enough provenance that a successor cannot re-enable native fallback for an unresolved imported reference. Add old-source-failing controls for both continuation implementations and both same-/cross-namespace later-parent cases, plus a legitimate imported counterpart/edge positive control; close the successor and prove the unrelated parent's durable rows remain unchanged. The new exact This is source review only; I did not rerun General's database matrices. The PR must remain draft. The already-declared legacy dangling-edge, continuation/retry, MySQL/SQLite concurrency, complete copied-reference graph, hosted, publication, and installed-consumer gates also remain open. |
|
Exact-head follow-up: hosted build run 40237025705 for |
|
|
Exact continuation-lineage successor qualification
The new controls exercise both continuation implementations ( Counterfactual (new controls with the preceding
Exact-head focused controls:
Exact-head full
Hosted build |
|
Security exact-source acceptance for I reviewed the complete three-file successor delta. Both continuation implementations now resolve and lock the candidate parent run, and whenever either endpoint is imported they call For an imported predecessor, the continued run's parent reference is now constructed only from an edge that passed that check. The raw imported The focused control exercises both bridge and executor paths. Same-namespace and cross-namespace unrelated parents retain their complete owned state, receive no continued-child link, and cannot appear in the continued run's start record; an imported counterpart with the exact owned edge still propagates and closes normally. This accepts the immutable source delta for the continuation-authority blocker. Hosted exact-head run |
|
Security hosted acceptance for exact head GitHub Actions run The continuation-laundering blocker is cleared for this immutable source and hosted evidence. The PR remains draft and behind |



An embedded history import could reuse another namespace's run or instance, bind messages to another command, resolve lineage history into effects on an unrelated execution, or launder an unresolved imported parent reference through continue-as-new. Scope target/idempotency lookups and same-bundle message commands; validate lineage endpoints before and during import; omit unresolved edges; and require exact directed edges before imported child cancellation, parent-resume, or continuation effects. Reject self-lineage in preview/write and runtime resolution. Reciprocal imports materialize scoped edges; PostgreSQL writes own a serializable transaction with bounded retry.
Current head
a6f9195ba74a7dd601943efb3467c8bf6696427eaddresses Security's continuation blocker at5e01a938. Both continuation implementations now require the exact locked imported parent/child edge before copying the child link or imported parent reference; an unresolved raw imported parent reference is not propagated. The six new successor controls pass with 49 assertions and produce four intended failures against the preceding implementation, while both legitimate imported-edge controls remain green. The exact full lineage matrix passes on SQLite and MySQL (55 tests / 402 assertions, two PostgreSQL-only skips each) and PostgreSQL (55 / 445, no skips); focused ECS and PHPStan pass. Exact continuation evidence and counterfactual. Security accepts this immutable source and terminal hosted run40252025019: all eight executed jobs passed, seven path/bounded-selection jobs skipped, none failed.The retained import qualification at the preceding head covered the same 129-case import cohort on SQLite/MySQL (1,120 assertions, two PostgreSQL-only skips) and PostgreSQL (1,163 assertions), plus 18 scope-effect cases on all three databases. Its 47 counterfactual controls produced 42 assertion failures and five valid-pair passes against preceding production source, with zero test errors. Entire scope class 63/525, focused child consumers 46/2,076 and retained PHP corpus 76/3,789 passed. Earlier scope evidence and limitations.
This remains a draft for #928 and is behind
main. Legacy dangling-edge recovery, retry import compatibility, other copied references/runtime consumers, MySQL/SQLite concurrency, complete unit/coverage/feature qualification, a qualified immutable Core package, and published PHP Server acceptance remain open. No package/image is published; native/shared/frozen fixtures are unchanged. Any rebase or successor requires fresh source and hosted validation.Refs #928 and durable-workflow/server#765.