Skip to content

fix(skill): create_signing_url never throws NotSignersTurn - #35

Merged
nicolasiscoding merged 1 commit into
mainfrom
fix/213-not-signers-turn-python-ref
Oct 20, 2026
Merged

nicolasiscoding merged 1 commit into
mainfrom
fix/213-not-signers-turn-python-ref

Conversation

@yacinekahlerras-turbodocx

@yacinekahlerras-turbodocx yacinekahlerras-turbodocx commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Part of TurboDocx/Docs#213 (docs fix: TurboDocx/Docs#217).

Why

skills/turbodocx-sdk/references/python.md:497 said create_signing_url throws NotSignersTurn. The API never returns it: the only turn refusal is RecipientNotInTurn. The skill generates customer code from this file, so it would write handling for a code that never arrives.

What

One sentence: create_signing_url throws RecipientNotInTurn / RecipientAlreadySigned. It adds that the Python SDK still catches the reserved NotSignersTurn in create_embedded_signature for cross-SDK parity (py-sdk/.../modules/sign.py:41), so generated code shouldn't handle it.

Verified

  • Against a local TurboDocx API, an out-of-turn createSigningUrl returns 409 RecipientNotInTurn.
  • No other reference file in the skill mentions NotSignersTurn.

🤖 Generated with Claude Code

@yacinekahlerras-turbodocx

yacinekahlerras-turbodocx commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Self-review (author). No blocking issues found.

  • The new wording matches the Python SDK. create_embedded_signature degrades RecipientNotInTurn / NotSignersTurn to pending and RecipientAlreadySigned to completed (py-sdk/.../modules/sign.py:40), and the parenthetical keeps that parity fact without suggesting generated code handle it.
  • The API side was checked live against a TurboDocx API: an out-of-turn createSigningUrl returns 409 RecipientNotInTurn.
  • No other reference file in the skill, and nothing in evals/evals.json, mentions NotSignersTurn, so this one line is the whole fix.

Pairs with TurboDocx/Docs#217 (both close out TurboDocx/Docs#213).

…/Docs#213)

The API's only turn refusal is RecipientNotInTurn. Note that the SDK still catches
NotSignersTurn for cross-SDK parity so generated code doesn't add handling for it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nicolasiscoding

Copy link
Copy Markdown
Member

Update: rebased and fact-checked

  • Rebase: rebased onto current main (08de352) with no conflicts. The sentence is now at skills/turbodocx-sdk/references/python.md:497, and the line reference in the PR body is updated to match. New head: e723ac9.
  • API behaviour: minting a signing URL checks two things before anything else. A signer who already signed gets 409 RecipientAlreadySigned. A signer whose turn hasn't come in the signing order gets 409 RecipientNotInTurn. Neither the signing-URL path nor anything else in the current API returns NotSignersTurn; it is only a reserved code the error mapping still recognises.
  • SDK (public, origin/main): create_embedded_signature degrades RecipientNotInTurn / NotSignersTurn to pending and RecipientAlreadySigned to completed, and re-raises everything else (packages/py-sdk/src/turbodocx_sdk/modules/sign.py:41-42, :1269-1279). PhoneRequiredForSmsOtp is raised before the send (:1173). The JS, Go, PHP, Java and Ruby SDKs keep the same three-code set for parity.
  • Other language references: javascript.md, go.md, php.md, java.md and ruby.md never name NotSignersTurn or the throw codes, and neither does evals/evals.json. So this single line is the complete fix.
  • Kept this PR over docs(python): create_signing_url never throws NotSignersTurn #34, which made the same fix. docs(python): create_signing_url never throws NotSignersTurn #34 is closed as superseded because its "catches exactly those codes … also accepts NotSignersTurn" wording contradicted itself.

🤖 Generated with Claude Code

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.

3 participants