Skip to content

Declare the installed local retry qualifier finish signal - #276

Merged
rmcdaniel merged 1 commit into
mainfrom
agent/sdk-rust/219-signal-contract
Nov 14, 2026
Merged

rmcdaniel merged 1 commit into
mainfrom
agent/sdk-rust/219-signal-contract

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Nov 14, 2026 •

Copy link
Copy Markdown
Member

The published-package local-retry qualifier waits for finish but did not declare that signal in its workflow registration. Native 3.10 therefore correctly rejects the replay trigger with404 unknown_signal / handler_not_declared; the named observation stops before completing its cases.

Declare finish through the existing public Worker API in the shared factory, so both original and replacement registrations advertise the same durable command contract before the run starts. Retry policy, callback timing/history assertions, process model and invocation limits are unchanged. This is a qualifier-only correction and needs no SDK release.

Validation: whitespace check passes. General and Security source reviews pass; all19 head checks are terminal (17 success/two expected manual skips). Normal merge1129d797 tree equals reviewed1724a530, all four actual-main workflows succeed, and the remote topic branch is absent. A fresh normal-registry4.17 consumer compiles and its two pure validators pass with the installed entrypoint ignored. Separate current caller/runtime and terminal evidence review remain. The actual predecessor result and complete cleanup evidence are retained at SDK275/6871724313; no complete installed timing pass is claimed. Any future observation requires a newly bound published-package test/build/parent/caller packet and separate review. Both earlier unstarted NONPASS attempts also remain preserved; no set-aside item is selected.

@sonarqubecloud

Copy link
Copy Markdown

@rmcdaniel

Copy link
Copy Markdown
Member Author

General narrow scenario rebind: PASS for exact 1724a530a1f3c33bee5e1eb9333caacf4ef4ea7a / tree b076d1e.

I read the exact one-line delta: the shared worker constructor now calls declare_workflow_signals(kind, &["finish"]) after workflow registration and before either Worker registers or the run starts. Both original and replacement therefore advertise the same finish signal through the existing public API. Retry policies, callback timing, reports, identity/history-prefix checks, result, replacement boundary and all original bounds are unchanged.

My earlier scenario read did not catch this missing declaration. The actual404 unknown_signal remains a NONPASS and is not relabeled; this source correction closes that concrete qualifier omission. Current CI, a newly bound registry consumer/build and complete reviewed caller still precede another actual observation. No installed timing acceptance, SDK release or set-aside clock/SQLite continuation follows from this source verdict.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Security source review PASS for exact head 1724a530a1f3c33bee5e1eb9333caacf4ef4ea7a / tree b076d1e922e19a6390ea3cb5a5071dc68cecad7c, scoped to the qualifier correction.

The complete delta from accepted parent d0a8de84833f78fc31749d4e817afa03ee73f42a is one line:

worker.declare_workflow_signals(kind, &["finish"]).unwrap();

It is placed after register_workflow and before Worker registration/start, matching the public Worker::declare_workflow_signals contract. Because it is in the shared factory, original and replacement workers advertise the same finish handler contract. Retry policy, callback/history/timing assertions, process/profile bounds, SDK library bytes, and public API behavior are unchanged. git diff --check passes.

The predecessor evidence is causally exact: the Server rejected finish with declared_signals: []; the added declaration closes precisely that omission. Hosted exact-head Rust 1.86, stable, package, corpus, docs, public-boundary, policy, Sonar and other completed checks are green; Rust CodeQL remained in progress at this review readback and is still required.

This is not installed timing acceptance and does not select another observation. A fresh normal-registry test/build/parent/caller packet and separate effect review remain required before any run.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Final exact-head gate readback: Rust CodeQL is now terminal PASS. All listed #276 checks are terminal with 17 successes and two intended manual qualification skips. This clears the pending source/CI condition in the preceding Security verdict; it does not select or qualify an installed timing observation.

@rmcdaniel
rmcdaniel marked this pull request as ready for review November 14, 2026 04:36
@rmcdaniel
rmcdaniel merged commit 1129d79 into main Nov 14, 2026
19 checks passed
@rmcdaniel
rmcdaniel deleted the agent/sdk-rust/219-signal-contract branch November 14, 2026 04:37
@rmcdaniel

Copy link
Copy Markdown
Member Author

Source correction is main-integrated: normal merge 1129d797f266e518eedf642460c89b412dca9dad, tree b076d1e922e19a6390ea3cb5a5071dc68cecad7c, exactly equal to reviewed 1724a530a1f3c33bee5e1eb9333caacf4ef4ea7a; complete tree diff empty. The remote topic branch is absent and isolated source is clean. General6871804542 and Security6871807369/6871815778 source reviews pass. All19 head checks are terminal (17 success/two expected qualification skips).

All four actual-main workflows succeed: CI43557534754, Public Boundary43557534751, Sonar43557534813 and Push/CodeQL43557534518 (including Rust). This closes the source correction only.

A fresh normal-registry4.17 consumer compiles the accepted test with offline/locked Rust1.86, the exact same manifest/lock and reverified public crate6de/118 source members. New testSHAb11e724e/new executableSHA2c92f7f9 (22,509,496bytes), build messagesfa31e7cd and build receipta927ffaa bind the one-line declaration. Build exit0/OOMfalse; two synthetic validators pass with the installed entrypoint ignored, exit0/OOMfalse. Exact build45174713 and pure-controlad7d4b97 full IDs and nonce inventories are independently absent. Original consumer/three NONPASS packets remain preserved.

The refreshed separate caller retains the complete reviewed profile and changes only receipt/test/binary pins plus literal fixed roots. Its23 inert controls pass. Complete caller review and one new bounded actual observation remain before any installed/shared219 conclusion; no SDK release or set-aside continuation is selected.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant