Skip to content

Serve the documentation at handsontable.com/docs/hyperformula/ - #1810

Closed
budnix wants to merge 7 commits into
developfrom
docs/move-to-handsontable-com
Closed

budnix wants to merge 7 commits into
developfrom
docs/move-to-handsontable-com

Conversation

@budnix

@budnix budnix commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

✅ Safe to merge into develop now — then release it tomorrow, 2026-10-15

Order with the new handsontable.com (2026-10-15): this release can go out before or after the new handsontable.com, and in both cases every old address keeps working.

  • Released first (recommended): the docs answer at handsontable.com/docs/hyperformula/ at once, and every old address redirects there.
    • The links from the docs to the website work on the current site and on the new one (cf44925): the logo links the landing page's own host, and the "support options" links use handsontable.com/support.
    • Nothing visible changes when the new site goes live.
  • Released after the new site: the new site's links to these docs answer the HyperFormula 404 page until this release.

Review fixes (2026-10-15): b58b4d6, 7195670, 87ef9f9, cf44925 and 14ff109:

  • the Worker reads the base from build.config.js, and the Cloudflare build stops on any base or hostname drift;
  • a canonical link on every page;
  • the README, a JSDoc comment and an example path fixed;
  • the links to the website work on the current site and on the new one;
  • the llms-full.txt page URLs keep .html (14ff109). Without it, the pages with a dot in their name (guide/migration-from-2.x-to-3.0, api/classes/cellcontent.* and others) answered 404 at the listed URL, because the Worker treats a dotted last segment as a file name.

Re-verified on the build before 14ff109 (preview aa81f6de); see the comment "Re-verified on the final build".

Context

The HyperFormula pages move from hyperformula.handsontable.com to handsontable.com:

  • the documentation goes to handsontable.com/docs/hyperformula/, next to the Handsontable docs under /docs/;
  • the landing page goes to handsontable.com/hyperformula/ with the new website (launch 2026-10-15).

The docs stay in this repository and keep deploying exactly as today: Workers Builds builds master into the hyperformula-docs Worker. Nothing moves out of the HF team's hands. handsontable.com proxies /docs/hyperformula/* to this Worker without changing the path, so visitors never see the workers.dev address. This is the same arrangement handsontable.com/docs/ uses for the Handsontable docs.

What changes here:

  • build.config.js: base /docs/hyperformula/, the output under the same prefix, and https://handsontable.com as the hostname. VuePress writes the new address into every link, asset, favicon, search entry, sitemap entry, .md companion and llms-full.txt URL.
  • _headers: the immutable cache follows the hashed assets to /docs/hyperformula/assets/*.
  • worker/index.js: backward compatibility. Every former address (/docs, and anything under /docs/ outside the new base) answers 301 to the same path under https://handsontable.com/docs/hyperformula/, with the query string kept.
    • It lives in the Worker, not in _redirects: a /docs/* rule there would also match /docs/hyperformula/*, because _redirects applies even when an asset matches.
    • The target is absolute, so a visitor on the old host lands on handsontable.com.
  • Hard-coded addresses:
    • in the docs: the logo link, the two "support options" links (now handsontable.com/support/), the three coding-agent snippets, and one release-notes link (now relative);
    • outside the docs: README, DEV_DOCS, the package.json homepage (the landing page) and the GitHub templates.
  • Built-in functions page: the nine catalogue links to API pages become relative on the generated page. The library strings themselves are untouched; see the follow-ups.
  • site.webmanifest: icon paths are relative now. The absolute /favicon/... paths had returned 404 since the docs moved under /docs/.
  • docs/.vuepress/public/robots.txt removed. Under the docs base it was never at a site root. handsontable.com/robots.txt lists this sitemap instead.

How the old addresses keep working

Old address Today, after this merge From the handsontable.com launch (2026-10-15)
hyperformula.handsontable.com/docs/… hyperformula-website proxies it here → this Worker 301s to handsontable.com/docs/hyperformula/… (hyperformula-website passes redirects to other hosts through unchanged) handsontable.com answers the old host itself: one 301 to the same page
…/guide/…, …/api/…, …/api-ref-readme.html hyperformula-website's _redirects → /docs/… → the 301 above (two hops) one 301 to the same page under /docs/hyperformula/
hyperformula.handsontable.com/ (landing page) unchanged 301 to handsontable.com/hyperformula/
handsontable.com/docs/hyperformula/… (the new address) served by this Worker through the handsontable.com proxy the same

How did you test your changes?

1. "Merged now" traced end to end: 26 old addresses, 0 failures. The trace used:

  • hyperformula-website's shortcut rules;
  • this PR's preview build as the docs Worker;
  • the handsontable.com production Worker code (run locally) for the new address.

The list:

  • the 14 distinct old HyperFormula links that the live Handsontable docs carry (1,349 current pages plus the formula pages of 24 older versions);
  • /docs, /docs/, /docs/api, /docs/api/, a guide page with a query, a guide page with an anchor, the demo, llms-full.txt, a .md companion and the security certificate PDF;
  • the /api/, /guide/… and /api-ref-readme.html shortcuts.

Every one ends on a 200, with every #anchor present on the target page.

2. The same 14 links in the launch setup. Run through handsontable.com's own host rule (from 2026-10-15): one 301 each, every target 200, every anchor found.

3. The whole preview build (docs-move-to-handsontable-com-hyperformula-docs.handsoncode.workers.dev, commit 00932e6, the same change on master; re-run on develop below):

  • all 228 sitemap pages and 720 distinct internal links;
  • no link leaves /docs/hyperformula/, and none names the old host;
  • every link answers 200. The exception is ../api on the basic-usage page, which gets the usual trailing-slash 301, as today;
  • the sitemap and llms-full.txt list 228 URLs, all https://handsontable.com/docs/hyperformula/…;
  • hashed assets are served max-age=31536000, immutable;
  • the JavaScript router base is /docs/hyperformula/, with no other /docs/ path and no old host in any bundle.

4. The Worker in Node against a stub asset store:

  • former addresses → 301 with the query kept;
  • /docs/hyperformula → 301 to the slash;
  • documents → 200;
  • a missing page → the 404 page.

5. The deploy. Workers Builds for hyperformula-docs:

  • production branch master, build npm run docs:build:cf, deploy npx wrangler deploy. The active version was deployed from master on 2026-10-09;
  • this branch's preview builds ran the same build command successfully.

CI: now based on develop. The two jobs that failed against master (EDATE tests from develop's test suite) run against the code that has the fix.

Releasing (tomorrow, 2026-10-15)

  1. Merge this PR into develop. The develop preview, and so https://dev.handsontable.com/docs/hyperformula/, shows the docs at the new address right away. Nothing live changes yet.
  2. Bring it to master, by one of these:
  3. Workers Builds deploys master to the hyperformula-docs Worker in a few minutes. Then check:
    • curl -sI https://hyperformula.handsontable.com/docs/guide/basic-usage.html gives a 301 to https://handsontable.com/docs/hyperformula/guide/basic-usage.html;
    • https://handsontable.com/docs/hyperformula/ shows the docs.
  4. Don't merge Migrate documentation to Astro Starlight (regenerated from current develop) #1791 (Astro Starlight) into develop before this is released, unless it adopts the same base first (see below). Otherwise the next release ships docs built for /docs/ again.

Not in this PR (follow-ups)

Types of changes

  • Breaking change (a fix or a feature because of which an existing functionality doesn't work as expected anymore)
  • New feature or improvement (a non-breaking change that adds functionality)
  • Bug fix (a non-breaking change that fixes an issue)
  • Additional language file, or a change to an existing language file (translations)
  • Change to the documentation

Related issues:

  1. ClickUp: MRK-1436 Move HyperFormula docs to handsontable.com/docs/hyperformula/
  2. The proxy on handsontable.com: handsontable/handsontable.com-v3#149 (merged and released); the site's links: handsontable/handsontable.com-v3#151; the old host's direct redirects from the launch: handsontable/handsontable.com-v3#152
  3. Review: base changed to develop as requested

Checklist:

  • I have reviewed the guidelines about Contributing to HyperFormula and I confirm that my code follows the code style of this project.
  • I have signed the Contributor License Agreement.
  • My change is compliant with the OpenDocument standard.
  • My change is compatible with Microsoft Excel.
  • My change is compatible with Google Sheets.
  • I described my changes in the CHANGELOG.md file.
  • My changes require a documentation update.
  • My changes require a migration guide.

🤖 Generated with Claude Code

https://claude.ai/code/session_0137eVKg5r4aRcgL5MKhqKx7

@budnix budnix self-assigned this Oct 14, 2026
@budnix
budnix force-pushed the docs/move-to-handsontable-com branch from 68a7258 to 00932e6 Compare October 14, 2026 12:07
@budnix budnix changed the title Serve the documentation at handsontable.com/hyperformula/docs/ Serve the documentation at handsontable.com/docs/hyperformula/ Oct 14, 2026
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
hyperformula-docs 14ff109 Commit Preview URL

Branch Preview URL
Oct 15 2026, 07:56 AM

@budnix

budnix commented Oct 14, 2026

Copy link
Copy Markdown
Member Author

Preview checks (https://docs-move-to-handsontable-com-hyperformula-docs.handsoncode.workers.dev, commit 00932e6), as browser navigations:

Address Result
/docs/hyperformula/, /docs/hyperformula/guide/basic-usage.html, /docs/hyperformula/guide/basic-usage 200
/docs/hyperformula, /docs/hyperformula/api 301 to the trailing slash
/docs/hyperformula/nope.html 404, the VuePress 404 page
/docs/hyperformula/sitemap.xml, llms-full.txt, guide/basic-usage.md 200
/docs, /docs/ 301 → https://handsontable.com/docs/hyperformula/
/docs/guide/basic-usage.html?x=1 301 → https://handsontable.com/docs/hyperformula/guide/basic-usage.html?x=1
/docs/api/classes/hyperformula.html, /docs/llms-full.txt, /docs/hyperformula_security_certificate.pdf 301 → same path under https://handsontable.com/docs/hyperformula/
/ 302 → /docs/hyperformula/

Content:

  • The sitemap lists 228 pages, all https://handsontable.com/docs/hyperformula/….
  • llms-full.txt has the same 228 URLs.
  • A guide page links only under /docs/hyperformula/ (332 links, 7 scripts).
  • The hashed assets are served max-age=31536000, immutable.
  • The built-in functions page links API pages as /docs/hyperformula/api/… (in-site).
  • No page names workers.dev. The only remaining hyperformula.handsontable.com text is the sample data of a HYPERLINK example in the API reference, not a link.

Through handsontable.com (handsontable/handsontable.com-v3#149 run locally with wrangler dev --env production, pointed at this preview):

  • /docs/hyperformula/… serves these docs, and their redirects come back onto the site's host.
  • /docs/javascript-data-grid/ is still the Handsontable docs.
  • /docs/hyperformula-security-certificate.pdf is still the site's own file.

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Performance comparison of head (14ff109) vs base (05c1a29)

                                     testName |    base |    head | change
--------------------------------------------------------------------------
                                      Sheet A |  486.55 |  493.17 | +1.36%
                                      Sheet B |  159.84 |  157.76 | -1.30%
                                      Sheet T |  138.75 |   139.3 | +0.40%
                                Column ranges |  474.67 |  473.34 | -0.28%
                                Sorted lookup | 13938.6 | 14540.6 | +4.32%
Sheet A:  change value, add/remove row/column |   15.82 |   14.88 | -5.94%
 Sheet B: change value, add/remove row/column |   133.8 |  126.96 | -5.11%
                   Column ranges - add column |  146.93 |  147.04 | +0.07%
                Column ranges - without batch |  450.42 |  448.92 | -0.33%
                        Column ranges - batch |  112.08 |  115.62 | +3.16%

@budnix

budnix commented Oct 14, 2026

Copy link
Copy Markdown
Member Author

About the red unit-tests / browser-tests: both failures are EDATE leap-year cases, for example "EDATE does not truncate the 29th day when the target month is a leap year February". They don't come from this PR, which touches only docs files, the docs Worker and the docs generator.

test/fetch-tests.sh looks for a branch of the same name in hyperformula-tests. When it finds none, it creates one from develop. develop's tests include the EDATE fix from #1781, which master (this PR's base) doesn't have yet.

If you want this PR green, create docs/move-to-handsontable-com in hyperformula-tests from its master and re-run the jobs. lint, build-docs and the Workers Builds preview pass.

🤖 Generated with Claude Code

@budnix

budnix commented Oct 14, 2026

Copy link
Copy Markdown
Member Author

The precondition is met (2026-10-14, 15:42 CEST). handsontable.com/docs/hyperformula* is now routed to the handsontable.com v3 Worker, which proxies it to this Worker:

$ curl -sI https://handsontable.com/docs/hyperformula/ | grep -i '^location'
(none: 404, this Worker's current /docs/ build answering)

The rest of handsontable.com is unchanged (still v2), and so is hyperformula.handsontable.com.

This PR can be merged to master now. Once its Workers Builds deploy finishes (a few minutes):

  • handsontable.com/docs/hyperformula/ serves the docs;
  • hyperformula.handsontable.com/docs/* redirects (301) to the same page there.

I also checked every old HyperFormula link the live Handsontable docs carry (14 distinct ones, current and older doc versions). Each lands on the right page and anchor through the new address, so the Handsontable docs need no change.

🤖 Generated with Claude Code

@budnix
budnix marked this pull request as ready for review October 14, 2026 13:49
@cursor

cursor Bot commented Oct 14, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@budnix
budnix requested review from qunabu and sequba October 14, 2026 13:55
@sequba

sequba commented Oct 14, 2026

Copy link
Copy Markdown
Contributor

@budnix we should not merge pull requests into master. We usually merge into develop and during the release process it goes into master. If it needs to land on master urgently we would need to release it either as a quick release or as a hotfix

@sequba sequba left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All PRs should target develop

budnix and others added 2 commits October 14, 2026 16:04
The HyperFormula pages move from hyperformula.handsontable.com to
handsontable.com: the landing page to /hyperformula/ with the new website,
the documentation to /docs/hyperformula/, next to the Handsontable docs
under /docs/. The docs stay in this repository and keep deploying through
the hyperformula-docs Worker; handsontable.com proxies the path to it
unchanged, so the build has to know its new home.

- build.config.js: base /docs/hyperformula/, the output directory under the
  same prefix, and https://handsontable.com for the sitemap, the .md
  companions and llms-full.txt.
- _headers: the long cache follows the hashed assets to their new path.
- worker/index.js: the former addresses (/docs and everything under /docs/
  outside the new base) answer with a permanent redirect to the same path
  under https://handsontable.com/docs/hyperformula/. hyperformula.
  handsontable.com keeps sending /docs/* here, so every old link redirects
  the moment this build is live. Done in the Worker, not in _redirects: a
  /docs/* rule there would also match the new /docs/hyperformula/*.
- Hard-coded addresses in the docs (logo link, support links, the coding
  agent snippets, one release-notes link) and in the README, DEV_DOCS,
  package.json homepage and GitHub templates point at the new home.
- site.webmanifest: icon paths relative to the manifest; the absolute
  /favicon/ paths already 404ed under the docs base.
- docs/.vuepress/public/robots.txt removed: under the docs base it was
  never at a site root, so no crawler read it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nine function descriptions in the catalogue link API pages by absolute URL
on hyperformula.handsontable.com/docs/. They are library strings, also
returned by getFunctionDetails, so they change with a release; on the
generated built-in functions page they become relative links now, so the
page points at the docs wherever they are served and opens them as
in-site navigation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@budnix
budnix force-pushed the docs/move-to-handsontable-com branch from 00932e6 to efba7bf Compare October 14, 2026 14:05
@budnix
budnix changed the base branch from master to develop October 14, 2026 14:05
@budnix

budnix commented Oct 14, 2026

Copy link
Copy Markdown
Member Author

@sequba thanks, done. The PR now targets develop, rebuilt on top of it with the same two commits and no conflicts.

It needs to reach master tomorrow, 2026-10-15, when the new handsontable.com goes live. Either a quick release of develop or a docs-only hotfix works:

The release needs nothing else from this PR:

Merging into develop changes nothing live. It only updates the develop preview, which staging uses. The steps and the checks to run after the master deploy are in the description, under "Releasing".

🤖 Generated with Claude Code

@budnix

budnix commented Oct 14, 2026

Copy link
Copy Markdown
Member Author

Re-checked on the develop-based build (commit efba7bf, preview version 4e00dfd3):

  • All 228 pages and 720 distinct internal links: none leaves /docs/hyperformula/, and none names the old host. The only redirect is ../api's usual trailing slash. develop's new EDATE line in "List of differences" is in the build.
  • "Merged and released before the handsontable.com launch": 26 old addresses (the 14 old HyperFormula links in the live Handsontable docs, plus /docs, the shortcuts, .md, llms-full.txt and the PDF) through hyperformula-website → this Worker → the handsontable.com proxy. 0 failures. Every page answers 200 with its #anchor present.
  • From the launch on: the same 14 links through handsontable.com's own host rule, one 301 each. 0 failures.
  • CI: build-docs, browser-tests and Workers Builds pass. The two jobs that failed against master now pass or are still running.

🤖 Generated with Claude Code

Comment thread DEV_DOCS.md
- **[Building, testing, and linting](docs/guide/building.md)** &mdash; all `npm` commands and build outputs
- **[Test suite](test/README.md)** &mdash; smoke tests and how to attach the private test suite
- **[Public docs portal](https://hyperformula.handsontable.com/docs)** &mdash; main documentation
- **[Public docs portal](https://handsontable.com/docs/hyperformula/)** &mdash; main documentation

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@budnix I see an inconsistence. Sometimes the changes url is https://handsontable.com/docs/hyperformula/ and sometimes it's https://handsontable.com/hyperformula/docs/. Please make sure that it's valid everywhere

@sequba

sequba commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

It needs to reach master tomorrow, 2026-10-15, when the new handsontable.com goes live. Either a quick release of develop or a docs-only hotfix works

@budnix I'll do a hotfix today, so it will be live

sequba commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

@budnix check if this is a problem

worker/index.js:50: isFormerAddress only checks the path, so the old host serves new-base paths with a 200 instead of a 301 to handsontable.com.

Failure scenario: The hyperformula-website Worker still proxies all of /docs* here. A request for https://hyperformula.handsontable.com/docs/hyperformula/guide/basic-usage.html gets the full page with 200, not a 301. The same content is then indexable on two hosts, and the old host never fully drains. The Worker could check the forwarded host, or redirect every request that does not arrive through the handsontable.com proxy.


Generated by Claude Code

sequba commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

script/generate-builtin-functions-doc.ts:58: The fix rewrites URLs in generated output instead of fixing the source strings, and it assumes the page sits exactly one level below the docs root.

Failure scenario: src/interpreter/functionMetadata/categories/*.ts still holds about 384 links to https://hyperformula.handsontable.com/docs/ (370 documentationUrl, plus shortDescription links). getFunctionDetails users get old-host URLs that need two redirect hops. If the page moves out of guide/, the blind '../' substitution silently breaks every link. Fixing the strings in src, or rewriting to an absolute URL built from the build config, avoids both problems.


Generated by Claude Code

sequba commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

docs/README.md:30: The local setup step still points at http://localhost:8080/hyperformula/, while line 36 of the same file now says /docs/hyperformula/.

Failure scenario: A contributor follows step 5 after npm run docs:dev. They open localhost:8080/hyperformula/ and get a 404, because the base is now /docs/hyperformula/.


Generated by Claude Code

sequba commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

worker/index.js:30: BASE and HOME repeat base and hostname from docs/.vuepress/build.config.js; the path is also typed again in _headers and _redirects.

Failure scenario: If someone changes base in build.config.js and not here, the Worker treats the new base as a former address and 301s every docs page in a loop or to a 404. The Worker could import build.config.js, since wrangler bundles CommonJS.


Generated by Claude Code

sequba commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

docs/.vuepress/plugins/md-companions/index.js:21: The JSDoc for rebaseRootLinks still says the configured base is /docs/ (lines 21–28); the PR updated other comments in this file but not these.

Failure scenario: A maintainer reading the comment assumes the companions are rebased to /docs/. The actual base is /docs/hyperformula/, which makes debugging companion links harder.


Generated by Claude Code

sequba commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

docs/.vuepress/config.js:158: The favicon and manifest <link> tags in head use root-absolute /favicon/... paths. VuePress 1 does not add base to head hrefs, so after the move they point to handsontable.com's root, not this build's /docs/hyperformula/favicon/.

Failure scenario: On https://handsontable.com/docs/hyperformula/guide/basic-usage.html the browser requests https://handsontable.com/favicon/site.webmanifest and favicon-32x32.png from the Handsontable site, which serves a different icon or a 404. The PR's switch to relative icon paths in site.webmanifest therefore has no effect, because the browser never loads that manifest.


Generated by Claude Code

sequba commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

docs/README.md:118: The README still says llms-full.txt is at /docs/llms-full.txt. It is now at /docs/hyperformula/llms-full.txt.

Failure scenario: Fetching /docs/llms-full.txt on handsontable.com returns a 404, because that path belongs to the Handsontable docs app.


Generated by Claude Code

sequba commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

docs/README.md:37: The docs:build line still names /docs/.vuepress/dist as the output folder. The output is now docs/.vuepress/dist/docs/hyperformula.

Failure scenario: A developer looks for index.html and guide/ in dist and doesn't find them.


Generated by Claude Code

From the review of #1810:

- worker/index.js reads the base and the host from
  docs/.vuepress/build.config.js instead of typing them again, and
  script/prepare-cf-assets.js stops a Cloudflare build whose base differs
  from that file (a DOCS_BASE override), whose output is not under it, or
  whose _headers or _redirects do not name it. A base changed in one place
  then fails the build instead of redirecting every docs page.
- Every page carries <link rel="canonical"> to its address on
  handsontable.com (VuePress frontmatter.canonicalUrl, rendered by
  templates/ssr.html). A copy reachable under another host (a workers.dev
  preview, or hyperformula.handsontable.com/docs/hyperformula/* until the
  handsontable.com Worker answers that host) is not indexed in its place.
- The built-in functions page computes its relative prefix from where the
  page is written, not a hard-coded '../'.
- docs/README.md: the local dev URL, the docs:build output directory and
  the llms-full.txt path name the new base; the md-companions JSDoc too.

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

budnix commented Oct 15, 2026

Copy link
Copy Markdown
Member Author

@sequba please hold the hotfix for a short while. I've just pushed b58b4d6, which addresses your review: the Worker reads the base from build.config.js, the build guards against base drift, every page gets a canonical link, and the README is fixed. Its preview has built, and a full re-verification is running now. I'll post the results and the per-comment answers here shortly.

For the hotfix, the commits to cherry-pick onto master are now three: git cherry-pick 0bf433df efba7bfd b58b4d61 (checked: they apply cleanly on master). The PR description is updated.

🤖 Generated with Claude Code

budnix and others added 3 commits October 15, 2026 09:00
The coding-agent setup page still gave /docs/guide/basic-usage.md as the
example of a page's Markdown address. Under the new base that path belongs
to the Handsontable docs and answers 404; the example is
/docs/hyperformula/guide/basic-usage.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… and real rules

Follow-ups from a review of the previous commit:

- The base in build.config.js must start and end with "/": worker/index.js
  uses it as written (config.js normalises it, so VuePress alone would not
  catch a missing slash).
- A DOCS_HOSTNAME override that differs from build.config.js fails the build:
  the canonical links and the sitemap would name one host while the Worker
  redirects to another.
- _headers and _redirects must name the base in a rule, not just in a
  comment, so a stale rule under an updated comment no longer passes.
- The generator's comment names the suite that pins the library strings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This release may go live before the new handsontable.com, which replaces
the current site on 2026-10-15. Two kinds of link pointed at pages only the
new site has, and would have answered 404 in between:

- The logo on the docs home page and in the README linked
  handsontable.com/hyperformula/. They link the HyperFormula landing page's
  own host instead: today it is the landing page itself, and once
  handsontable.com takes the host over, a 301 to /hyperformula/.
- The "support options" links on the Contact and Quality pages linked
  handsontable.com/support/. Without the trailing slash, the current site
  answers it with its contact page and the new one with /support/.

Switch them to the new addresses in a later release, once both sites
have changed over.

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

cursor Bot commented Oct 15, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@budnix

budnix commented Oct 15, 2026

Copy link
Copy Markdown
Member Author

Re-verified on the final build

@sequba thanks for the careful review. Everything is addressed in b58b4d6, 7195670, 87ef9f9 and cf44925, or answered below with evidence. For the hotfix, cherry-pick all six commits onto master:

git cherry-pick 0bf433df efba7bfd b58b4d61 7195670e 87ef9f97 cf44925c

They apply cleanly; the only difference from this branch is develop's EDATE fix.

Your comments

# Comment Status
1 DEV_DOCS.md:9: /docs/hyperformula/ vs /hyperformula/docs/ Consistent now. No /hyperformula/docs/ remains in the branch, its commits or the PR description; only the PR's first title used it, and it was renamed on 2026-10-14. The docs live at handsontable.com/docs/hyperformula/. The landing page is a different page: handsontable.com/hyperformula/ from today's launch (README, docs/index.md, package.json link it in a form that works on both sites; see cf44925).
2 worker/index.js: the old host serves /docs/hyperformula/* with a 200 True, short-lived, and now covered by a canonical link. Only hyperformula.handsontable.com/docs/hyperformula/… (nothing links there) is served. It ends when the hyperformula.handsontable.com/* route moves to the handsontable.com Worker after this release; that Worker 301s the path (handsontable.com-v3#152, released). The docs Worker itself can't tell its two callers apart: both fetch the same workers.dev host, and exact file matches are served before the script runs. Every page now carries <link rel="canonical" href="https://handsontable.com/docs/hyperformula/…">, so no copy is indexed in its place.
3 generator '../' and the library strings The prefix is computed from the page's location now (b58b4d6). The ~384 library strings stay for the next release: getFunctionDetails returns them and hyperformula-tests pins them (unit/function-metadata-api.spec.ts). An old documentationUrl costs one 301 until then.
4 docs/README.md:30 local URL Fixed.
5 worker/index.js: BASE/HOME typed again Fixed. The Worker imports docs/.vuepress/build.config.js; wrangler/esbuild bundles it, as the previews prove. script/prepare-cf-assets.js now fails the Cloudflare build when: the base doesn't start and end with /; DOCS_BASE or DOCS_HOSTNAME differ from that file; the output isn't under the base; or _headers/_redirects have no rule naming it. All tested locally: each case fails and the real setup passes. The Workers Builds triggers set no environment variables.
6 md-companions JSDoc Fixed.
7 config.js:158: favicon <link>s not prefixed They are prefixed in the build: href="/docs/hyperformula/favicon/favicon-32x32.png", …/site.webmanifest etc. on every page, all 200, and the manifest's relative icons resolve to 200.
8 docs/README.md:118: llms-full.txt path Fixed.
9 docs/README.md:37: docs:build output Fixed.

Also fixed: docs/guide/setup-coding-agent.md still gave /docs/guide/basic-usage.md as the example .md address (7195670).

Verification

Four independent checks, plus a re-run of their scripts on the final code. The Cloudflare previews were cad133f1 and aa81f6de; cf44925 changes only four outbound links, checked on aa81f6de.

  • Released before the new handsontable.com. Traced 275 old addresses through hyperformula-website → this Worker → handsontable.com: all 228 sitemap pages, the 14 links the live Handsontable docs carry, shortcuts, .md, llms-full.txt and the PDF.
    • 266/266 that work today still end in 200, with query strings kept and all 11 #anchors found.
    • At most 2 redirects, no loop, and nothing points back to hyperformula.handsontable.com.
    • Tested both as browser navigations and as plain requests.
    • The other 9 were already 404 today (made-up test paths).
  • After the new handsontable.com, both routes on. 261/261 old addresses: one 301 each, then 200.
    • Every combination of the three Cloudflare routes was simulated. The only one that loops is "the handsontable.com/docs/hyperformula* route deleted while handsontable.com/* is off", and that's documented as never-delete.
  • Build audit.
    • 228 pages and 736 internal links: 0 broken, none leaving the base.
    • One canonical per page, equal to its handsontable.com address. The canonical set equals the sitemap. The 404 page has none.
    • Every old page has its counterpart.
    • 257 hashed assets carry the immutable cache. .md is text/markdown.
    • Through the handsontable.com Worker, pages are byte-identical with security headers, and nothing mentions workers.dev.
  • Code review. Safe to hotfix:
    • the bundled Worker matches the preview on every path;
    • all prepare-cf-assets checks ran on Cloudflare's build;
    • publish.yml and the release script don't depend on the base.
  • Order. This can go out before or after today's new handsontable.com, and old addresses work either way. Releasing it first is better: the new site's HF docs links then work from its first minute.

Follow-ups, not blockers:

  • move the library strings to the new address in the next release;
  • in a later docs release, switch the logo back to handsontable.com/hyperformula/;
  • api/globals.md has a relative ../../api/… link that already broke out of the docs folder before this PR;
  • 9 llms-full.txt URL lines for page names containing a dot answer 404, as they do today.

🤖 Generated with Claude Code

The corpus listed every page by its extensionless URL. The Worker treats a
last path segment containing a dot as a file name and never looks up its
.html file, so pages such as guide/migration-from-2.x-to-3.0 and the
api/classes/cellcontent.* pages answered 404 at the listed URL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0137eVKg5r4aRcgL5MKhqKx7
@codecov

codecov Bot commented Oct 15, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.28%. Comparing base (05c1a29) to head (14ff109).

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff            @@
##           develop    #1810   +/-   ##
========================================
  Coverage    97.28%   97.28%           
========================================
  Files          207      207           
  Lines        16218    16218           
  Branches      3588     3588           
========================================
  Hits         15777    15777           
  Misses         433      433           
  Partials         8        8           
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

sequba added a commit that referenced this pull request Oct 15, 2026
#1821)

### Context

This is the gitflow hotfix for #1810. The branch is based on `master`
and carries the 7 commits from #1810, cherry-picked unchanged:

| #1810 | This branch | Commit |
| --- | --- | --- |
| `0bf433d` | `53699fa` | docs: serve the documentation at
handsontable.com/docs/hyperformula/ |
| `efba7bf` | `3c68566` | docs: link the functions page's API references
relatively |
| `b58b4d6` | `f981ddc` | docs: one source for the docs base, canonical
links, review fixes |
| `7195670` | `121e5d3` | docs: the per-page Markdown example names the
new base |
| `87ef9f9` | `5c3d369` | docs: the Cloudflare build guard checks the
base's form, the hostname and real rules |
| `cf44925` | `b67ec89` | docs: links to the website that work before
and after its relaunch |
| `14ff109` | `888bea0` | docs: keep .html in the llms-full.txt page
URLs |

The description of #1810 explains what changes and how it was tested.

After merging into `master`, merge `master` back into `develop`. #1810
can then be closed, because the same commits reach `develop` through
that back-merge.

### How did you test your changes?

- All 7 commits cherry-picked onto `master` without conflicts.
- The diff `master..hotfix/move-docs-to-handsontable-com` has exactly
the same added and removed lines as #1810's diff against `develop` (23
files, +184/−79).
- The testing of the change itself is described in #1810.

### Types of changes
- [ ] Breaking change (a fix or a feature because of which an existing
functionality doesn't work as expected anymore)
- [ ] New feature or improvement (a non-breaking change that adds
functionality)
- [ ] Bug fix (a non-breaking change that fixes an issue)
- [ ] Additional language file, or a change to an existing language file
(translations)
- [x] Change to the documentation

### Related issues:
1. #1810

### Checklist:
- [x] I have reviewed the guidelines about [Contributing to
HyperFormula](https://handsontable.com/docs/hyperformula/guide/contributing.html)
and I confirm that my code follows the code style of this project.
- [ ] I have signed the [Contributor License
Agreement](https://goo.gl/forms/yuutGuN0RjsikVpM2).
- [ ] My change is compliant with the
[OpenDocument](https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html)
standard.
- [ ] My change is compatible with Microsoft Excel.
- [ ] My change is compatible with Google Sheets.
- [ ] I described my changes in the
[CHANGELOG.md](https://github.com/handsontable/hyperformula/blob/master/CHANGELOG.md)
file.
- [ ] My changes require a documentation update.
- [ ] My changes require a migration guide.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_0137eVKg5r4aRcgL5MKhqKx7

---
_Generated by [Claude
Code](https://claude.ai/code/session_0137eVKg5r4aRcgL5MKhqKx7)_

---------

Co-authored-by: Krzysztof Budnik <571316+budnix@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@sequba

sequba commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

These changes were merged to master and develop in:
#1821
#1822

@sequba sequba closed this Oct 15, 2026
sequba added a commit that referenced this pull request Oct 15, 2026
> ### Status (2026-10-15)
> - **Code change: done.** One commit (`fa035e0`).
> - **Also needed:** two manual steps in the repository settings,
outside the code. See "To finish this PR" below.

### Context

The documentation is served by the `hyperformula-docs` Cloudflare Worker
at `https://handsontable.com/docs/hyperformula/`. Cloudflare Workers
Builds deploys it from `master` (see `docs/README.md`, "Deployment").
The move to that address shipped in #1821 (`master`) and #1822
(`develop`).

The old **Publish** workflow (`.github/workflows/publish.yml`, job
`publish-docs`) still ran on every push to `master`:
- it built the docs with `npm run docs:build`;
- it pushed `docs/.vuepress/dist` to the `gh-pages` branch with
`peaceiris/actions-gh-pages` and the CNAME
`hyperformula.handsontable.com`.

That copy is no longer used, so GitHub Pages is being dropped. The job
last ran on `187dfa1` (the #1821 merge) and published the new
`/docs/hyperformula/` layout to `gh-pages`.

### What changes

- **`.github/workflows/publish.yml` removed.** It held only the
`publish-docs` job. This also drops the workflow's `contents: write` and
`pages: write` permissions and the `peaceiris/actions-gh-pages` action.
- **`.github/workflows/build-docs.yml`:** the job id changes from
`publish-docs` to `build-docs`, to match its `name:`. The job publishes
nothing. The status check name comes from `name:`, so it stays
`build-docs (22, ubuntu-latest)`, and branch protection rules that
require it are unaffected.
- **Release checklist** (`script/release/release.sh` and its copy in
`script/release/release-README.md`): the manual step "Check that the
docs workflow deployed the documentation to gh-pages" becomes a check
that Workers Builds deployed the docs from `master` to
`https://handsontable.com/docs/hyperformula/`.

The `build-docs` workflow is unchanged. It still builds the docs on
every PR and on `master`, `develop` and `release/**`.

### To finish this PR

1. **Review and merge into `develop`.** CI should be green; the change
touches no library code.
2. **Turn off GitHub Pages:** in the repository settings, under
**Settings > Pages**, set **Source** to none / unpublish the site. This
needs repository admin rights.
   - Before you do it, check that nothing still needs the Pages site.
- `hyperformula.handsontable.com/docs/*` is served by the
`hyperformula-website` Worker and the docs Worker, not by GitHub Pages.
- Confirm in **Settings > Pages** which custom domain, if any, Pages
still has, and that DNS for it doesn't point at GitHub Pages.
3. **Delete the `gh-pages` branch** once Pages is off (`git push origin
--delete gh-pages`). It is only build output, and keeping it invites
confusion.
4. **When this reaches `master`** (the next release, or merged as part
of a hotfix), the Publish workflow stops running there. Until then,
every push to `master` still publishes to `gh-pages`. That is harmless
once Pages is off.

### How did you test your changes?

- `grep -rniE "gh-pages|actions-gh-pages|publish-docs|publish\.yml"`
over the repository, excluding `node_modules`, finds nothing after the
change.
- `bash -n script/release/release.sh` passes.
- Not run: the release script itself. The change only edits text in its
final checklist heredoc.

### Types of changes
- [ ] Breaking change (a fix or a feature because of which an existing
functionality doesn't work as expected anymore)
- [ ] New feature or improvement (a non-breaking change that adds
functionality)
- [ ] Bug fix (a non-breaking change that fixes an issue)
- [ ] Additional language file, or a change to an existing language file
(translations)
- [x] Change to the documentation

### Related issues:
1. #1810: the docs move to handsontable.com, released through #1821 and
#1822. It listed this workflow as a leftover.

### Checklist:
- [x] I have reviewed the guidelines about [Contributing to
HyperFormula](https://handsontable.com/docs/hyperformula/guide/contributing.html)
and I confirm that my code follows the code style of this project.
- [ ] I have signed the [Contributor License
Agreement](https://goo.gl/forms/yuutGuN0RjsikVpM2).
- [ ] My change is compliant with the
[OpenDocument](https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html)
standard.
- [ ] My change is compatible with Microsoft Excel.
- [ ] My change is compatible with Google Sheets.
- [ ] I described my changes in the
[CHANGELOG.md](https://github.com/handsontable/hyperformula/blob/master/CHANGELOG.md)
file. (Not needed: CI and release tooling only.)
- [ ] My changes require a documentation update.
- [ ] My changes require a migration guide.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_0137eVKg5r4aRcgL5MKhqKx7

---
_Generated by [Claude
Code](https://claude.ai/code/session_0137eVKg5r4aRcgL5MKhqKx7)_

Co-authored-by: Claude <noreply@anthropic.com>
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