Skip to content

chore(release): promote develop to main - #179

Merged
nicolasiscoding merged 17 commits into
mainfrom
develop
Sep 23, 2026
Merged

nicolasiscoding merged 17 commits into
mainfrom
develop

Conversation

@nicolasiscoding

Copy link
Copy Markdown
Member

Promotes develop to main. Merging this deploys docs.turbodocx.com to production — deploy.yml runs on push to main.

What's in this release (2 commits)

CI fix (production-blocking)

Dependencies

Note for whoever merges

main's last few production deploys all predate Cloudflare removing pages-action, so they show green from before the break — they are not evidence this is already fixed on main. This PR's merge is the first deploy on main with the corrected action; watch the Deploy to Cloudflare Pages check on this PR and the post-merge run on main for green, and confirm in the Cloudflare Pages dashboard that the post-merge run lands as a Production deployment (not a preview) before considering this done.

…2) (#164)

Lockfile-only, semver-compatible bumps: 4 high and 1 low closed, 48 -> 42 total.

The 42 that remain both need a major bump of a direct dependency and so are not
appropriate for a lockfile sweep — recorded in the Change Request issue instead:
- @faker-js/faker (high), reached through postman-collection; fix is
  docusaurus-theme-openapi-docs@2.1.3, a major.
- @tiptap/core (moderate, 36 instances across the tiptap extension set); fix is
  the tiptap 3.31.3 line, also a major.

Not addressed here: vendor/docusaurus-plugin-llms is a git submodule, so it has
no lockfile entry in this repo and Dependabot cannot see it. Its own tree audits
at 44 advisories, but every one is in upstream's dev/test toolchain rather than
anything this site ships. Noted in the CR issue.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Nicolas Fry added 14 commits September 23, 2026 11:57
…ining docs/API/*.api.mdx

Rolls out the PR #155 pattern (real description, when-to-use, curl example,
verified request/response, common-errors table, related links) to every
docs/API/*.api.mdx page under 300 live words, excluding the 3 pages #155
already enriched (delete-template, get-templates-and-folders,
upload-template-with-optional-default-values) and the turbodocx-api-documentation
info page.

Covered: 3 template endpoints (edit-template-metadata, get-template-by-id,
extract-template-placeholders-and-generate-preview), all 10 TurboSign webhook
endpoints (create/get/update/delete/notify/test/regenerate-secret/
list-deliveries/replay-delivery/get-stats), and 8 tag/variable endpoints
(create/read/update-tag, delete-tags-by-i-ds, create-image-variable-folder,
read-variables-folder, update-variable-by-id, delete-variables-by-i-ds).

Every path, method, field, response shape, and error was verified against
the route/handler code in RapidDocxBackend (Template, Webhooks, Tag,
Variable routes + handlers), not the OpenAPI spec, which is stale in
several places. Also fixed two pre-existing frontmatter issues on webhook
pages: an em-dash and an inaccurate "soft-delete" claim on delete-webhook
(the handler hard-deletes the row).
…/SDKs

10 deliverable-*/partner-* pages carried a full copy of the generic
Error Handling intro + status-code table already documented once on
each language's canonical page (javascript.md, python.md, go.md,
php.md, java.md). template-detector.mjs flagged the same 5-word
phrases across ~17 files, matching the URL Inspection evidence that
javascript, python, java, quote-javascript, webhooks-java,
deliverable-go, and deliverable-php are crawled/discovered but not
indexed.

Replaced the duplicated table on each deliverable-*/partner-* page
with a short paragraph naming the errors that operation actually
raises (verified against /home/nicolas/repos/SDK), followed by a link
to the language's own Error Handling reference for the full table.
Kept the already-differentiated code samples and product-specific
notes (Go's errors.As, PHP's typed exceptions, Java's nested
TurboDocxException.* classes, partner's IOException/409-conflict
callouts) as-is.

Also:
- Fixed a real bug found while verifying code samples: index.md's PHP
  error handling example called $e->getCode(), but PHP's
  Exception::getCode() is hardcoded to 0 by TurboDocxException's
  constructor; the real field is $e->errorCode.
- Fixed two broken links (go.md, java.md pointed at
  /docs/TurboSign/API-Signatures instead of the correctly-encoded
  .../API%20Signatures used elsewhere in the same files) and two
  broken anchors (partner-php.md, partner-javascript.md linked to
  #orguserrole-organization-users, truncated; the real heading
  slugifies to #orguserrole-organization-users-and-org-api-keys).
- Shortened 11 frontmatter descriptions over 160 chars (agent-skills
  + 5 quote-*/5 webhooks-* pages) to <=155 chars, language + product
  first.

Not fixed (noted for the owner): docs/SDKs/ruby.md and
deliverable-ruby.md 404 live but still get search impressions. This
is intentional (draft: true, set in 40efd12 because the gem isn't on
RubyGems yet); Docusaurus excludes draft pages from the production
build. If those impressions are worth capturing, that needs a
redirect decision, not a content change.
…s, fix canonical tables

Follow-up to the previous commit after review found three real gaps:

1. The 5 canonical per-language pages (javascript.md, python.md, go.md,
   php.md, java.md) still shared the generic "The SDK provides typed
   error(s)/exception(s) for different ... scenarios" intro sentence
   verbatim, and 3 of them (javascript, python, java) are themselves
   evidence pages (crawled/discovered but not indexed). Rewrote each
   intro to state the real, verified idiom for that language: Go's
   errors.As + embedded struct, PHP's readonly statusCode/errorCode
   (and the getCode()-returns-0 gotcha), Java's nested
   TurboDocxException.* classes with getCode()'s orDefault fallback,
   JS's code passthrough from the API response, Python's DEFAULT_CODE
   class attribute and Exception-subclass catch order. Sourced from
   packages/{go,php,java,js,py}-sdk directly (errors.ts,
   TurboDocxException.java, TurboDocxException.php, http.py).

2. deliverable-go.md and deliverable-php.md linked to go.md/php.md as
   the canonical Error Handling reference for classes those pages
   didn't actually document: go.md's table was missing ConflictError
   (it exists in http.go) and php.md's was missing
   AuthorizationException and ConflictException (both exist in
   packages/php-sdk/src/Exceptions/). Added the missing rows so the
   canonical pages actually contain what the product pages point to.

3. Removed unverified "most commonly" frequency language from the 10
   deliverable-*/partner-* pages' Error Handling intros (added in the
   previous commit); rephrased as "returns/throws/raises X when Y"
   without a frequency claim.

Also swept remaining em-dashes in the 5 base-language pages, now that
they have real body edits (previously only go.md/java.md were fully
swept, for their link fixes).
…andling intro

The previous wording implied errors.As was needed specifically because
TurboDocxError is embedded by value ("so match... rather than a type
switch"), which isn't the right causal link and isn't accurate SDK
guidance (a plain type switch would work fine on the unwrapped return
values; errors.As is just the more defensive/robust choice against any
future wrapping). Reworded to state two independently-true facts: by-
value embedding promotes the fields for direct access, and the SDK's
own example already uses errors.As.
Second review pass found more accuracy issues:

- go.md/java.md/python.md's Code-field descriptions said the machine-
  readable code is "always populated". True only for the 7 named
  subclasses (each has a default). The bare base error returned for an
  unmapped HTTP status (e.g. an unexpected 5xx) can have an empty/null
  code, verified: Go's defaultErrorCode() returns "" in its default
  case, Java's HttpClient.java falls through to
  `new TurboDocxException(message, code, ...)` with no fallback, and
  Python's base TurboDocxError has DEFAULT_CODE = None. Qualified all
  three.

- index.md's Java Error Handling tab imported `com.turbodocx.sdk.*`
  (wrong package; the SDK's actual package is `com.turbodocx`, no
  `.sdk`), used a response type SigningResult that doesn't exist, and
  called `turboSign.sendSignature(...)` on a bare variable instead of
  `client.turboSign().sendSignature(...)`. All three didn't match
  java.md's own (correct) examples. Fixed to match.

- Five deliverable-*.md pages claimed ValidationError fires when a
  variable is missing "placeholder or mimeType". Checked
  RapidDocxBackend's actual generate-deliverable handler
  (DeliverableGenerationHandlers.ts): the Variable interface has
  `placeholder: string` (required) but `mimeType?: string` (optional).
  Dropped the incorrect mimeType half of the claim.
…ied field claim

Third review pass on index.md's Error Handling tabs (the same code
block already touched for the PHP getCode()/Java package fixes):

- Go tab: errors.As(err, &turboErr) targeted *sdk.TurboDocxError only.
  Go's errors.As requires the target's concrete type to match; the 6
  named error types (ValidationError, AuthenticationError, ...) are
  distinct types from TurboDocxError even though they embed it, and
  none implement Unwrap/As, so this silently matched nothing except
  the generic unmapped-status case. The VALIDATION_ERROR branch shown
  was dead code. Fixed to match *sdk.ValidationError directly.

- Python tab: printed e.message, but TurboDocxError.__init__ never
  sets self.message and Python 3's Exception doesn't have one either,
  so this raises AttributeError at runtime. Fixed to {e} (str(e)),
  matching python.md's own examples.

- Java tab: missing the com.turbodocx.models.* import that
  SendSignatureResponse needs (follow-up to the package-name fix in
  the previous commit).

- The "code is always populated" line above these tabs had the same
  gap already qualified on the language pages. Qualified it the same
  way.

Also corrected the 5 deliverable-*.md pages' claim that ValidationError
fires on a variable missing "placeholder or mimeType". Checked
RapidDocxBackend's DeliverableGenerationHandlers.ts: the Variable
interface has placeholder required, mimeType optional (the reverse of
what was claimed), and I could not find where a missing placeholder is
actually validated at the HTTP boundary (the handler doesn't appear to
check it before using it). Rather than assert an unverified 400, all 5
now say "missing a required field" without naming one, matching
deliverable-java.md's already-safe phrasing.
…rors broke the build)

11 SDK pages (agent-skills, quote-*, webhooks-*) had unquoted description
values like 'TurboQuote Go SDK: ...'; YAML reads the second ': ' as a
mapping and Docusaurus fails to build. Quote them.
Playbook task: meta-length-checker (Google truncates descriptions over
~160 chars). Rewrites 26 frontmatter descriptions to <= 155 chars, keeping
the main keyword first. Frontmatter description lines only.

docs/SDKs/* and docs/API/* are left to their own Trace PRs. Three
embedded-signing pages that exist only on feature/turbosign-embedded-identity
are not included here.
Fixed broken internal links across docs site:
- 25 Wrike integration links (converted relative paths to absolute /docs/ paths)
- 6 Pipelines links (converted relative paths to absolute /docs/ paths)
- 5 TurboDocx Templating links (converted relative paths, removed non-existent page links)
- 3 TurboQuote links (converted relative paths)
- 2 Dashboard links (converted relative paths)
- 2 TurboSign links (converted relative/absolute paths)

Reduced broken links from 56 to 19 (13 in SDK files owned by other PR, 2 commented-out images, 1 directory link in Webhooks).

Excluded from fixes:
- Links within docs/SDKs/ and docs/API/ (owned by SDK/API enrichment PRs)
- Redirected external links that resolve to current URLs
- Rate-limited or auth-gated external URLs (false positives)

Test plan:
- Before: 56 broken links found
- After: 19 broken links (all in SDK files or commented content)
- Internal link fixes: ./path -> /docs/path conversion
- Removed broken links to non-existent pages, keeping text
The broken-link checker resolved Docusaurus file-relative links
(./setting-up-automation.md, ../../TurboSign/Webhooks.md) against the
site root instead of the source file's directory, so it flagged many
working links as broken. This reverts those 25 files back to their
original relative links, which resolve correctly on the live site.

It also removes the '(coming soon)' text the previous commit added
for genuinely dead links, since that publicly promises features that
may not exist (one of them, Webhook Integration, already has a real
page). The three files with real dead links now either point to the
correct existing page or have the dead bullet removed:

- Webhook Integration / Webhook Configuration -> /docs/TurboSign/Webhooks
- Bulk Document Generation / Bulk Processing -> removed (no matching page)
- Template Version Management -> removed (no matching page)
- Template Management Guide -> removed (no matching page)
- Integration Examples -> removed (/docs/Integrations 404s live; no
  index page exists for it)
- API Authentication -> reverted to /docs/API/turbodocx-api-documentation
  (the original target, confirmed live 200; the previous commit had
  pointed it at /docs/API/Deliverable%20API instead)
/ renders ~1 word to a first-pass crawler: it's a client-side redirect
(<Redirect to="/docs" /> from @docusaurus/router) to the real hub at
/docs. Per config/noindex-strategy.json (auto-noindex under 100 words),
add a noindex,follow meta tag via @docusaurus/Head and exclude / from
the sitemap plugin's ignorePatterns so the two signals agree.

A server-side redirect (e.g. a Cloudflare Pages static/_redirects
entry) would be the long-term fix so crawlers and users never hit the
client-rendered stub at all, but that's out of scope here.
The Create Webhook and Regenerate Webhook Secret response examples used
realistic-looking whsec_ values (TurboDocx format: whsec_ + 64 hex), which
secret scanners report as a Stripe webhook secret. Replace them with an
obvious placeholder.
@nicolasiscoding
nicolasiscoding marked this pull request as ready for review September 23, 2026 18:49
@nicolasiscoding
nicolasiscoding merged commit 16b76f8 into main Sep 23, 2026
1 check passed

This branch was successfully deployed

1 active deployment
preview — 1706bbf0 Deployed Sep 23, 2026 by github-actions[bot]
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.

2 participants