Skip to content

HF-249 bullet 3: generate built-in functions docs from the HF API (single source of truth)#1699

Open
marcin-kordas-hoc wants to merge 33 commits into
feature/hf-249-function-metadata-apifrom
feature/hf-249-docs-single-source
Open

HF-249 bullet 3: generate built-in functions docs from the HF API (single source of truth)#1699
marcin-kordas-hoc wants to merge 33 commits into
feature/hf-249-function-metadata-apifrom
feature/hf-249-docs-single-source

Conversation

@marcin-kordas-hoc

@marcin-kordas-hoc marcin-kordas-hoc commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator

HF-249 bullet 3 — the docs functions table is generated from HyperFormula (single source of truth)

Third in-scope bullet of HF-249: the built-in functions guide is generated from the public metadata API (getAvailableFunctions / getFunctionDetails) at docs-build time, so function data lives in one place — the catalogue in src/interpreter/functionMetadata/.

What's here

  • Pure render core in scripts/ (dev-only, not part of the published package): formatFunctionSyntax, renderBuiltinFunctionsTable, spliceFunctionsTable. Deterministic (pinned Intl.Collator, LF, byte-idempotent).
  • Dev-only generator scripts/generate-builtin-functions-doc.ts (excluded from the npm package via tsconfig include:["src"]): reads the committed template docs/guide/built-in-functions.tmpl.md (hand-written prose + empty AUTOGENERATED:FUNCTIONS markers), splices the API-rendered table into the marker region, and writes the page.
  • The rendered page docs/guide/built-in-functions.md is a build product and is gitignored — regenerated as the first step of docs:build/docs:dev, so it can never drift from the catalogue and no generated content is committed.
  • OFFSET and VERSION are surfaced via the metadata API (callable in formulas, so the Formula Builder must know them); static getFunctionDetails is protected-aware so it agrees with getAvailableFunctions. OFFSET's parameter names are snake_case, matching the Function metadata API: getAvailableFunctions / getFunctionDetails (HF-249) #1692 convention.
  • The one-time docs → catalogue migration script is deleted (the catalogue is now the source); its dangling provenance comments are softened.
  • Per-function anchors (<a id="canonicalName">) on every row; the table documents 421 functions.
  • The build-product note moved from DEV_DOCS.md to docs/README.md; no CHANGELOG entry (docs-generation infra, not client-facing).

Decisions (confirmed with Kuba — #hyperformula-dev, 2026-07-15)

  1. Build hook = npm step (docs:generate-function-docs prepended to docs:build/docs:dev) rather than a VuePress plugin — Kuba left the choice to me; the standalone script is simpler and deterministic.
  2. built-in-functions.md is gitignored, generated from the committed .tmpl.md template — per Kuba's call (no committed generated artifact).
  3. Drift gate dropped — a gitignored build product can't drift, so the CI docs:functions:check step + npm alias are removed.
  4. shortDescription markup is kept as-is in the API for now — per Kuba, getFunctionDetails returns the same string as the docs (links/<br> included); whether to strip for the Formula Builder is deferred until we see how it renders there. (No stripDocMarkup in this PR.)

The separate shortDescription content fixes (XNPV, MIRR, SECH, BASE, typos) are not in this PR — Kuba asked for them on the parent branch #1692.

Verification

  • npm run docs:build green; the page is generated from the template and correct in the built site (421 functions incl. OFFSET/VERSION, snake_case syntax). tsc --noEmit + lint clean.
  • Metadata unit specs green — paired hyperformula-tests PR Export version and build date as static properties #19, rebased onto the updated API tests (snake_case fixtures; OFFSET/VERSION assert full details).

Base: feature/hf-249-function-metadata-api (ships with the HF-249 API in #1692).


Note

Medium Risk
Touches public metadata listing/details for protected functions and docs build wiring; runtime formula behavior is largely unchanged, but API consumers may see new entries and docs builds depend on the generator succeeding.

Overview
Makes the built-in functions guide a docs-build artifact sourced from getAvailableFunctions / getFunctionDetails and the catalogue in src/interpreter/functionMetadata/, instead of a hand-maintained 580-line markdown file.

Prose and layout stay in committed built-in-functions.tmpl.md; dev-only scripts (docs:generate-function-docs, renderBuiltinFunctionsTable, formatFunctionSyntax) splice API-rendered category tables into AUTOGENERATED:FUNCTIONS markers. built-in-functions.md is gitignored and regenerated as the first step of docs:dev / docs:build. The old docs → catalogue migration script is removed.

Metadata API now lists and describes protected VERSION and OFFSET (catalogue docs + PROTECTED_FUNCTION_METADATA), with FunctionRegistry / HyperFormula.getFunctionDetails updated so list and details stay aligned. Generated rows get per-function anchors; catalogue comments are updated to reflect catalogue-as-source.

Reviewed by Cursor Bugbot for commit 06f9ee0. Bugbot is set up for automated code reviews on this repo. Configure here.

@qunabu

qunabu commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown

Performance comparison of head (06f9ee0) vs base (c8b3e03)

                                     testName |    base |    head | change
--------------------------------------------------------------------------
                                      Sheet A |   420.4 |  409.06 | -2.70%
                                      Sheet B |  134.41 |   129.1 | -3.95%
                                      Sheet T |  120.41 |   115.4 | -4.16%
                                Column ranges |  539.93 |  535.66 | -0.79%
                                Sorted lookup | 16048.9 | 16564.8 | +3.21%
Sheet A:  change value, add/remove row/column |   11.29 |   11.11 | -1.59%
 Sheet B: change value, add/remove row/column |  107.59 |  108.19 | +0.56%
                   Column ranges - add column |  144.01 |  143.56 | -0.31%
                Column ranges - without batch |  453.46 |  451.88 | -0.35%
                        Column ranges - batch |  113.74 |     108 | -5.05%

@marcin-kordas-hoc

Copy link
Copy Markdown
Collaborator Author

Paired tests PR: handsontable/hyperformula-tests#19

@marcin-kordas-hoc
marcin-kordas-hoc requested a review from sequba July 1, 2026 21:54
marcin-kordas-hoc added a commit that referenced this pull request Jul 15, 2026
A traceability audit (run during HF-300) found migrated shortDescriptions that
either misstate behavior or leak markup into the plain-text metadata API. Per
Kuba's call (Slack #hyperformula-dev, 2026-07-15) they belong on the parent
HF-249 branch, since the catalogue is becoming the single source of truth
(docs/guide generated from it at build):

- XNPV: was verbatim identical to NPV; now conveys its non-periodic/date-based nature.
- MIRR: "modified internal value" -> "modified internal rate of return".
- SPLIT/TEXT: dropped <br> + markdown (rendered literally through the API); TEXT
  now also mentions the stringifyCurrency option.
- SECH: "given angle (in radians)" -> "given value" (the argument is a plain number).
- BASE: "positive integer" -> "non-negative integer" (0 is accepted by the impl).
- typos: MROUND "neares"/"multiplicity", Fischer->Fisher, densitity->density,
  skeweness->skewness (x2).

Catalogue-only; docs/guide regenerates from these once #1699 lands.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
marcin-kordas-hoc and others added 21 commits July 15, 2026 11:35
…API (HF-249)

getAvailableFunctions/getFunctionDetails excluded the protected functions
OFFSET and VERSION because they have no plugin for resolveFunctionMetadata
to read arity from. A user can still call both from a formula, so they must
be documented too: getListableFunctionIds (static and instance) now include
the protected ids, and resolveFunctionMetadata resolves them from a new
authored PROTECTED_FUNCTION_METADATA map together with their catalogue
FunctionDoc entries in the lookup-and-reference and information categories.
…venance comments (HF-249)

Mirror buildAvailableFunctions' canonicalName tiebreaker in the built-in functions
table renderer so equal localizedNames sort deterministically regardless of input
order. Also soften the information/lookup-and-reference category file comments,
which claimed full ownership by scripts/hf249-migrate-function-docs.ts even though
they now carry hand-authored protected-function entries (VERSION, OFFSET).
…1692 refactor (HF-249)

Rebasing #1699 onto the refactored #1692 combined that branch's protected-aware
resolveFunctionMetadata (which surfaces VERSION/OFFSET) with #1692's rewritten
static getFunctionDetails, which bails at `plugin === undefined` before reaching
the protected path. Result: getAvailableFunctions listed VERSION/OFFSET but
getFunctionDetails returned undefined for them, so the docs generator threw
"No details for listed function VERSION".

Handle the protected ids explicitly in the plugin-less branch, mirroring
getAvailableFunctions, so the list and the details API agree again. Protected ids
without a catalogue doc still resolve to undefined, so both stay consistent there.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…I drift gate (HF-249)

Run docs:generate-functions as the first step of docs:build and docs:dev so the
built-in-functions table is a build product of the catalogue, not a hand-kept
artifact. With the table regenerated on every build it can never drift, so remove
the redundant docs:functions:check CI step and its npm alias, and update DEV_DOCS
to describe the build-time regeneration instead of a CI staleness check.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…tion (HF-249)

The catalogue short descriptions carry presentational markdown (<br>, links,
footnote refs) that the guide table renders. Add stripDocMarkup and apply it when
building Tier-2 details, so getFunctionDetails returns plain prose. The Tier-1 list
entry keeps the raw markdown, so the generated table's links stay clickable.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…g references (HF-249)

The catalogue is now the source of truth and the guide is generated from it, so the
one-time, reverse-direction migration script (guide -> catalogue) is a footgun. Delete
it and soften the ~16 provenance comments that named it so they no longer point at a
removed file, while keeping the note about SUM/SUMIF carrying hand-authored examples.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ue convention (HF-249)

OFFSET was added to the catalogue on this branch before #1692 standardized every
parameter name to snake_case, so after the rebase it was the lone PascalCase entry
(Reference/Rows/Columns/Height/Width) among snake_case siblings. Align it, so
getFunctionDetails('OFFSET') and the generated table read consistently.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…HF-249)

Reflects the rebased catalogue: snake_case parameter names (#1692 refactor, incl.
OFFSET), the new VSTACK/HSTACK entries (#1698), and the protected VERSION/OFFSET
functions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@marcin-kordas-hoc
marcin-kordas-hoc force-pushed the feature/hf-249-docs-single-source branch from 4b5ef17 to 490c6eb Compare July 15, 2026 17:32
Comment thread package.json Outdated
Comment thread src/HyperFormula.ts
…ctural metadata is missing (HF-249)

resolveFunctionMetadata returned {doc, metadata: PROTECTED_FUNCTION_METADATA[id]} for any
protected id with a catalogue doc, even if the structural-metadata map had no entry for it —
buildFunctionDetails would then read repeatLastArgs/parameters off `undefined` and throw. The
two maps are a hand-maintained invariant (not enforced at runtime), so require both to be
authored: a protected id missing its structural metadata now stays unlisted rather than
crashing the metadata API. Addresses Cursor Bugbot review.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… generator (HF-249)

The --check drift mode existed only to back the CI drift gate, which this branch removed in
favour of regenerating the table on every docs:build. With no caller left, --check was dead
code (and its header comment still claimed a CI role). Reduce the generator to its single job —
regenerate the table — and correct the header. Addresses Cursor Bugbot review.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@marcin-kordas-hoc

Copy link
Copy Markdown
Collaborator Author

bugbot run

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit b1098fd. Configure here.

marcin-kordas-hoc and others added 2 commits July 16, 2026 07:16
…duct from a committed template (HF-249)

Per Kuba (#hyperformula-dev, 2026-07-15): the rendered guide page should not be committed. Split the page into
a committed template `built-in-functions.tmpl.md` (hand-written prose + empty AUTOGENERATED markers) and the
generated `built-in-functions.md`, which is now gitignored and produced at docs:build by splicing the
API-rendered table into the template. No generated content is committed, so it cannot drift from the catalogue.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@marcin-kordas-hoc

Copy link
Copy Markdown
Collaborator Author

bugbot run

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit a8aa6f5. Configure here.

@marcin-kordas-hoc
marcin-kordas-hoc requested review from sequba and removed request for sequba July 16, 2026 08:26
sequba added a commit that referenced this pull request Jul 16, 2026
…iptions (HF-300) (#1705)

## What & why

HF-300 enriches the function-metadata API (`getFunctionDetails`) so
every built-in function returns, in addition to the existing short
description and parameter names:

- a **usage example** (≥1 per function),
- a **documentation URL** — a single shared URL for all functions in v1
(`https://hyperformula.handsontable.com/docs/guide/built-in-functions.html`),
and
- a **short description for each parameter**.

Everything is English (translations are a later phase; the structure is
already i18n-ready). Extends the `SUM`/`SUMIF` exemplar already on the
base branch to the whole catalogue (363 functions).

Base: `feature/hf-249-function-metadata-api` (#1692). Sibling: #1699
(docs single source).

## How

- The single documentation URL is defined once as
`DEFAULT_DOCUMENTATION_URL` in `buildFunctionDescriptions.ts` and
applied as the built-in default — not repeated per function. Custom
(user-registered) functions keep `''`.
- `examples` + per-parameter `description` authored per category file
(`categories/*.ts`). Parameter counts/names and entry order are
unchanged; only bodies were filled.

## Testing (in the paired hyperformula-tests PR)

- Coverage-parity: every listable built-in exposes the shared URL, ≥1
example, and a non-empty description for every parameter.
- Example-validity: every authored example is built in HyperFormula and
asserted not to be a parse (`#ERROR!`) or unknown-function (`#NAME?`)
error.
- Existing `SUM`/`SUMIF` assertions updated to the `.html` URL.
- Arity guard (`buildFunctionDetails`) stays green across all 363
functions.

Local gates: `tsc` (src+test) clean · `eslint` clean · full `jest` 0
failures · metadata+coverage+example-validity specs pass.

## Notes for review

- **No i18n changes — by design.** DoD scopes HF-300 to English; no
functions are added/renamed, so the 17-language-pack rule does not
apply. English-form examples show under every locale for now (accepted
"translations later" trade-off).
- **Operators** (`HF.ADD`, …) are listable built-ins, so they get
examples/descriptions per the DoD's "each function".
- **Aliases** inherit their target's authored doc automatically
(`resolveFunctionMetadata`), so they need no separate authoring.
- **Guide table untouched** → the #1699 docs drift-check stays green
(none of the new fields are rendered in the Function
ID/Description/Syntax table).
- Descriptions describe **HyperFormula's actual behavior** (verified
against the plugins), not Excel where they diverge — e.g. `MOD` result
takes the sign of the dividend, `FILTER` accepts a single row/column,
`XNPV`'s first date is the reference point.

Decisions and citations: ADR in the paired hyperformula-tests repo
(`adr/2026-07-13-hf300-function-metadata-enrichment.md`).

Source: https://app.clickup.com/t/86caprtgj

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Large, user-facing metadata expansion for every built-in via
`getFunctionDetails`, but no formula-engine behavior changes; main risk
is stale or incorrect authored docs and accidental loss if the migration
script is re-run.
> 
> **Overview**
> **HF-300** fills out the built-in `FunctionDoc` catalogue so
`getFunctionDetails` can return real **parameter descriptions**, at
least one **usage example** per function, and a shared **documentation
URL** (`.html` guide link) across the category files—not the previous
empty placeholders.
> 
> `FunctionDescription` / `buildFunctionDetails` comments and contracts
are updated to treat those fields as authored for built-ins (custom
functions still get `''` / `[]`). `buildFunctionDetails` now passes
`documentationUrl` straight from the catalogue instead of defaulting
missing values to `''`.
> 
> The HF-249 migration script and category file headers **warn that
re-running the generator wipes** hand-authored `examples` and parameter
`description` text. One wording fix: **`INT`**’s short description now
matches truncate-toward-zero behavior.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
1c6b6a9. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Kuba Sekowski <sequba@users.noreply.github.com>
Co-authored-by: Kuba Sekowski <jakub.sekowski@handsontable.com>
Comment thread package.json Outdated
"docs:code-examples:generate-all-js": "bash docs/code-examples-generator.sh --generateAll",
"docs:code-examples:format-all-ts": "bash docs/code-examples-generator.sh --formatAllTsExamples",
"snippets:extract": "node script/extract-doc-snippets.js",
"docs:generate-functions": "npm run tsnode scripts/generate-builtin-functions-doc.ts",

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.

Suggested change
"docs:generate-functions": "npm run tsnode scripts/generate-builtin-functions-doc.ts",
"docs:generate-function-docs": "npm run tsnode scripts/generate-builtin-functions-doc.ts",

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Renamed in fc9684d. The key is also referenced by docs:dev and docs:build (npm run docs:generate-functions), so I renamed all three sites to docs:generate-function-docs, plus the two doc references to the old name.

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.

This file should not be in src/. It belongs in scripts/ dir as it is only used by scripts. Never by the production code.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Moved to scripts/renderBuiltinFunctionsTable.ts in fc9684d. It's imported only by the generator, and since tsconfig.json include is ["src"] it was being compiled into the shipped bundle as dead code — the move drops it from the build. Its FunctionDescription import now resolves via ../src/interpreter/functionMetadata/.

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.

This code should also be in the scripts/ dir

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Moved to scripts/formatFunctionSyntax.ts (same commit), next to the generator that consumes it.

Comment thread CHANGELOG.md Outdated
- Added the `getAvailableFunctions()` and `getFunctionDetails()` methods (both static and instance) for retrieving function metadata. [#1692](https://github.com/handsontable/hyperformula/pull/1692)
- Added new functions: VSTACK, HSTACK. [#1698](https://github.com/handsontable/hyperformula/pull/1698)
- Added a new function: `XIRR`. [#1701](https://github.com/handsontable/hyperformula/pull/1701)
- The built-in functions guide table is now generated from the function metadata API (single source of truth), and now also documents OFFSET and VERSION. [#1692](https://github.com/handsontable/hyperformula/pull/1692)

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.

We don't need such entry in changelog. Our clients don't care about how we generate the docs.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Removed in fc9684d.

Comment thread DEV_DOCS.md Outdated
Comment on lines +107 to +118
The built-in functions guide page `docs/guide/built-in-functions.md` is a **build product** and is
**gitignored** &mdash; do not commit or hand-edit it. It is generated from two committed sources:

- **prose** (intro, category list, footnotes) lives in `docs/guide/built-in-functions.tmpl.md`, which carries the
empty `AUTOGENERATED:FUNCTIONS` markers;
- the **function table** is rendered from HyperFormula's API (`getAvailableFunctions`/`getFunctionDetails`), i.e.
from the catalogue in `src/interpreter/functionMetadata/`.

`npm run docs:generate-functions` splices the table into the template and writes the gitignored page; it runs
automatically as the first step of `npm run docs:build` and `npm run docs:dev`. To change the wording, edit the
template; to change a function's row, edit its catalogue metadata.

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.

It does not belong in DEV_DOCS.md. It shoiuld be described in docs/README.md and/or in building.md

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Moved to docs/README.md in fc9684d — new "Built-in functions guide page" section, plus a docs:generate-function-docs entry in the npm-scripts list, since that's where the docs build is documented.

…rename script, relocate docs (HF-249)

- Move renderBuiltinFunctionsTable.ts and formatFunctionSyntax.ts from
  src/interpreter/functionMetadata/ to scripts/: they are used only by the
  doc generator, never by production code, and tsconfig `include` is ["src"]
  so they were being compiled into the shipped bundle as dead code.
- Rename the npm script docs:generate-functions -> docs:generate-function-docs
  (and its callers in docs:dev/docs:build, plus doc references).
- Drop the CHANGELOG entry (docs-generation infra; not client-facing).
- Move the built-in-functions build-product note from DEV_DOCS.md to
  docs/README.md, where the docs build is documented.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread src/interpreter/binarySearch.ts Outdated
Comment thread src/interpreter/binarySearch.ts Outdated
@marcin-kordas-hoc
marcin-kordas-hoc requested a review from sequba July 16, 2026 20:43
@marcin-kordas-hoc
marcin-kordas-hoc force-pushed the feature/hf-249-docs-single-source branch 2 times, most recently from b0b42c5 to fc9684d Compare July 16, 2026 21:56
marcin-kordas-hoc and others added 2 commits July 22, 2026 13:35
…single-source

Updates the stale base: pulls in HF-223's empty-cell skipping
(binarySearch.ts / AdvancedFind.ts), which resolves both the merge conflict
and the Bugbot "lookup empty cells regressed" false positive (it was the diff
of a base that lacked HF-223). Catalogue header-comment conflicts resolved to
this branch's wording (one-time migration script removed); script kept deleted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Catalogued functions without an authored documentationUrl (the protected
OFFSET/VERSION) returned `undefined`, while custom functions returned ''.
Default to '' so the public FunctionDetails contract is consistent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread src/interpreter/functionMetadata/categories/lookup-and-reference.ts
…cted funcs

The HF-300 shared-URL const was dropped during the #1705 merge; the enrichment
spec imports it. Restore it in buildFunctionDescriptions, revert the builder to
read doc.documentationUrl directly (no fallback, per #1705 review), and set
documentationUrl: '' explicitly on the protected OFFSET/VERSION entries, which
stay out of HF-300 enrichment scope.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 3e19410. Configure here.

Comment thread src/interpreter/functionMetadata/categories/information.ts
marcin-kordas-hoc and others added 4 commits July 23, 2026 03:28
…ta-api' into feature/hf-249-docs-single-source
They're callable and rendered in the built-in-functions guide, so returning an
empty documentationUrl left Formula Builder with no doc link for them (unlike
every other function). Point them at the same shared page (Bugbot).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ta-api' into feature/hf-249-docs-single-source

# Conflicts:
#	docs/guide/built-in-functions.md
SORT (HF-69) and UNIQUE (HF-68) landed on develop under the previous doc model
(hand-edited built-in-functions.md). This branch generates that page from the
FUNCTION_DOCS catalogue (single source of truth), so every listable built-in
must have a catalogue entry or it drops out of the generated docs and fails the
metadata-enrichment coverage. Added both under "Array manipulation" with
authored parameter descriptions and examples, matching the plugin arity
(SORT: 4 params, UNIQUE: 3).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@codecov

codecov Bot commented Jul 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (feature/hf-249-function-metadata-api@c8b3e03). Learn more about missing BASE report.

Additional details and impacted files

Impacted file tree graph

@@                           Coverage Diff                           @@
##             feature/hf-249-function-metadata-api    #1699   +/-   ##
=======================================================================
  Coverage                                        ?   97.04%           
=======================================================================
  Files                                           ?      195           
  Lines                                           ?    15759           
  Branches                                        ?     3491           
=======================================================================
  Hits                                            ?    15294           
  Misses                                          ?      465           
  Partials                                        ?        0           
Files with missing lines Coverage Δ
src/HyperFormula.ts 99.63% <100.00%> (ø)
src/interpreter/FunctionRegistry.ts 100.00% <100.00%> (ø)
.../functionMetadata/categories/array-manipulation.ts 100.00% <ø> (ø)
...nterpreter/functionMetadata/categories/database.ts 100.00% <ø> (ø)
...reter/functionMetadata/categories/date-and-time.ts 100.00% <ø> (ø)
...rpreter/functionMetadata/categories/engineering.ts 100.00% <ø> (ø)
...terpreter/functionMetadata/categories/financial.ts 100.00% <ø> (ø)
...rpreter/functionMetadata/categories/information.ts 100.00% <ø> (ø)
...interpreter/functionMetadata/categories/logical.ts 100.00% <ø> (ø)
...unctionMetadata/categories/lookup-and-reference.ts 100.00% <ø> (ø)
... and 7 more
🚀 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.

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