Skip to content

Use the accepted activity option names in guide examples and reject unknown ones #188

Closed

Description

@rmcdaniel

The PHP SDK guide shows activity options the runtime does not recognize. A developer who copies them gets one attempt and no per-attempt deadline, with no error.

Current behavior

SDK 4d9ab52f6b7d94b5acd91ccf3d9f907d656c169e, Workflow 15ed117e4c8535d8a797a9631461e4a0b9beb1e6:

  • Failures and retries passes start_to_close_timeout_seconds and retry_policy.maximum_attempts, initial_interval_seconds and maximum_interval_seconds. Workflows and activities passes start_to_close_timeout_seconds.
  • WorkflowCommand forwards remote activity options unchanged.
  • The worker protocol accepts start_to_close_timeout, schedule_to_start_timeout, schedule_to_close_timeout, heartbeat_timeout and retry_policy fields max_attempts, backoff_seconds and non_retryable_error_types. WorkflowCommandNormalizer::optionalRetryPolicy keeps only those fields, so the misspelled keys are dropped and the activity gets a one-attempt budget.
  • Local activity options already reject unknown retry policy fields.

Expected

The examples use accepted fields and say that max_attempts counts the first attempt. An unsupported remote activity option is reported to the developer instead of silently producing one attempt with no timeout.

Acceptance

  • Both guide examples use accepted fields, with backoff expressed as backoff_seconds.
  • A test runs the documented options through the SDK and asserts the emitted schedule_activity carries retry_policy.max_attempts 5 and start_to_close_timeout 30.
  • An unknown remote activity option or retry policy field, such as maximum_attempts, fails before transport with an error naming the field.

Activity

  1. added
    bugSomething isn't working
    kind:defectA public product behavior is incorrect
    priority:P2Normal-priority product work
    status:readyReady for implementation
    status:in-progressApproved work is actively being implemented or validated
    and removed
    status:readyReady for implementation
    on Oct 19, 2026
  2. rmcdaniel commented on Oct 20, 2026

    @rmcdaniel
    MemberAuthor

    Confirmed and prepared in draft #190, exact head
    ae351cc6997c4bb4e6bf583013b255fcc6a8fb57 / whole 834711e5.

    Seven new unknown-field cases fail on unchanged runtime bytes matching
    published 2.5.2; two valid-option controls pass. The executable PHP consumer
    retry fixture also fails before the correction. The candidate rejects the
    unknown field locally and retains all supported options. The normal workflow
    context emits exactly retry_policy.max_attempts=5 and
    start_to_close_timeout=30; both guide examples now use accepted names.

    Focused9/23, full local2498/12418 with56 connected-test skips, full PHPStan,
    both official PHP consumer fixtures and final metadata/options11/84 pass.
    The source checks are not a published-package or actual Server claim. Prospective
    2.5.3 is unpublished; hosted PHP/framework/corpus/docs/Sonar, merge/main,
    publication, installed archive and live portal follow-through remain.

    Existing runs that recorded defaults from misspelled options need a
    replay-compatible policy branch or completion before corrected policy is
    deployed. The guide explains this rather than promising a silent policy change.
    All local tooling, dependencies/cache/build/raw and network are removed at
    05:57:42 UTC, ahead the06:30 bound. No application/DB/paid host was started.

  3. rmcdaniel commented on Oct 20, 2026

    @rmcdaniel
    MemberAuthor

    Delivered in PHP SDK 2.5.3, source 43d39bff50ccace0a309de41306cd350751ec575 / whole 89fbb7363f287b1fb946c10620f8e4ef8a8ddb4b, through #190 and #191.

    The guide now uses accepted activity option names. Unknown top-level and retry-policy fields fail locally with the offending name instead of silently changing the policy. Existing recorded policies still require replay-compatible rollout; the guide explains that boundary.

    Final candidate and independent main checks pass. The first #190 corpus setup failure and the first main portal link failure remain failed records; #191 corrects the link and adds the existing rendered-link check to pull-request qualification.

    Packagist's normal source/dist references match the release. A normal archive installation passes 9 tests / 23 assertions, both official consumer negative fixtures, and the released registration-identity check (durable-workflow-php/2.5.3). The loaded WorkflowCommand comes from vendor and matches the released SHA-256 e5852ff5f70c372d86453d3fa65a41d3c3fa29853c05be5f491e1b801821204c.

    Published source-free service-mode verification passes with explicit SDK 2.5.3 and the declared minimum Server 2.5.0, including a genuine completed class-oriented workflow. Optional cooperative discovery is skipped and is not qualified by that run.

    Portal deployment passes. Live deployment audit identifies exact source 43d39bff; both affected public guides contain the corrected names and working retry-guide link. No minimum protocol, dependency or major-version change is made.

    The issue's published-package and live documentation acceptance is complete. Separate SDK #112/#111/#16 work is unchanged.

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

    bugSomething isn't workingkind:defectA public product behavior is incorrectpriority:P2Normal-priority product workstatus:in-progressApproved work is actively being implemented or validated

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions