This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+6 more
Summary
AI summaryUpdates SEC document normalization, Web / accessibility, and SEC financial facts across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Low |
Adds covering index on InstitutionalHolding (CommonStockId, ReportDate) with INCLUDE columns. Adds covering index on InstitutionalHolding (CommonStockId, ReportDate) with INCLUDE columns. Source: llm_adapter@2026-05-25 Confidence: high |
— |
| Feature | Low |
Makes `IDocumentPersistenceService.Save` accept optional `accessionNumber`. Makes `IDocumentPersistenceService.Save` accept optional `accessionNumber`. Source: llm_adapter@2026-05-25 Confidence: high |
— |
| Bugfix | Medium |
Prevents TableNormalizationStep from dropping rows containing only non‑text visual elements. Prevents TableNormalizationStep from dropping rows containing only non‑text visual elements. Source: llm_adapter@2026-05-25 Confidence: high |
— |
| Bugfix | Medium |
Prevents TableNormalizationStep from dropping columns with only non‑text visual elements. Prevents TableNormalizationStep from dropping columns with only non‑text visual elements. Source: llm_adapter@2026-05-25 Confidence: high |
— |
| Bugfix | Medium |
CurrencyConsolidationStep now uses word‑boundary matching to avoid false currency detection. CurrencyConsolidationStep now uses word‑boundary matching to avoid false currency detection. Source: llm_adapter@2026-05-25 Confidence: high |
— |
| Bugfix | Medium |
CurrencyConsolidationStep re‑applies per‑row gate, preserving non‑empty header cells. CurrencyConsolidationStep re‑applies per‑row gate, preserving non‑empty header cells. Source: llm_adapter@2026-05-25 Confidence: high |
— |
| Bugfix | Medium |
PaginationRemovalStep now requires word boundary after `Part` to avoid false removals. PaginationRemovalStep now requires word boundary after `Part` to avoid false removals. Source: llm_adapter@2026-05-25 Confidence: high |
— |
| Bugfix | Medium |
HeadingConversionStep.IsPartHeading no longer throws IndexOutOfRangeException for malformed part headings. HeadingConversionStep.IsPartHeading no longer throws IndexOutOfRangeException for malformed part headings. Source: llm_adapter@2026-05-25 Confidence: high |
— |
| Bugfix | Medium |
StandaloneXbrlParser.ResolveUnit trims whitespace around measure QName per XBRL spec. StandaloneXbrlParser.ResolveUnit trims whitespace around measure QName per XBRL spec. Source: llm_adapter@2026-05-25 Confidence: high |
— |
| Bugfix | Medium |
Drops XBRL facts with empty local name in measure to avoid unusable Unit = "". Drops XBRL facts with empty local name in measure to avoid unusable Unit = "". Source: llm_adapter@2026-05-25 Confidence: high |
— |
Full changelog
Added
- Covering index on
InstitutionalHolding (CommonStockId, ReportDate)with
INCLUDE (InstitutionalHolderId, Value, Shares). Lets the per-stock
ownership-trend rollup on/Stocks/{ticker}/Holdingsrun as an index-only
scan instead of a bitmap heap scan with lossy blocks. Heavy names like
AAPL (~76k holdings across 18+ quarters) dropped from ~14 s to ~3 s cold
load locally; warm cached responses are unaffected. The annotation is
inlined directly into theInitialmigration — fresh deployments and
upgrades from earlier1.1.xboth run a singleCreateIndexwith the
INCLUDElist attached. - New end-user guide pages (
docs/guide/): how-to — change how far back
data syncs; how-to — use the existing embedding endpoint; FAQ —
disable the update-available banner; FAQ — how much disk space
Equibles needs; FAQ — wipe the database and start over.
Changed
IDocumentPersistenceService.SaveacceptsaccessionNumberas an optional
parameter (= null) so non-SEC document callers (e.g. earnings-call
transcripts) don't have to thread a value they don't have. SEC scrapers
still pass the accession number explicitly; the FinancialFacts importer
continues to link facts to documents via the existing
WHERE AccessionNumber IS NOT NULLfilter.
Fixed
SEC document normalization
TableNormalizationStepno longer drops rows whose only content is an
<img>(or any other non-text visual element —<br>,<canvas>,
<svg>,<iframe>). The previous behavior erased signature-image rows
on 10-K signature pages becauseIsOnlyWhitespaceSpantreated "zero
spans" as "visually empty".TableNormalizationStepalso no longer drops columns whose cells each
contain only a non-text visual element.IsColumnEmptypreviously
checkedcell.TextContentalone; the row-side HTML-aware emptiness
check is now shared between rows and columns.CurrencyConsolidationStepno longer treats unrelated uppercase
acronyms (USDA,USDC,EUREKA) as currency cells. ISO code
detection switched fromtext.Contains(code)to a word-boundary match,
so a row label like "USDA inspected facilities" is left intact and no
longer triggers a spurious "All values are in US Dollars." note.CurrencyConsolidationStepre-applies the per-row gate during the
processing pass, so a header row with a non-empty next cell (e.g. a
"Q1" label in column 1) is no longer silently overwritten when another
row in the same column trips the consolidation gate.PaginationRemovalSteprequires a word boundary afterPartwhen
scanning paragraphs after an<hr>. Previously a paragraph starting
with "Partnership agreement", "Particular circumstances", or "Parts
inventory" was removed alongside genuine "Part I" / "Part II" headers.HeadingConversionStep.IsPartHeadingno longer throws
IndexOutOfRangeExceptionwhen the post-PARTsuffix is composed
entirely of split delimiters (e.g.Part -). The throw used to abort
the whole normalization pipeline for the affected filing.
SEC financial facts (XBRL)
StandaloneXbrlParser.ResolveUnittrims leading/trailing whitespace
around thexbrli:measureQName before resolving, per the XBRL spec's
collapsewhitespace facet. A padded measure like" iso4217:USD "
now emitsUnit = "USD"instead of"USD ", matching
InlineXbrlParser.ResolveUnit. Fixes silent value-column
misclassification in downstream FinancialFacts tools when the two
parsers disagreed on the same logical input.StripPrefix/ResolveUnitdrop XBRL facts whose measure has an
empty local name (e.g.iso4217:). Previously the fact ended up in
the output withUnit = "", which is unusable downstream.
Web / accessibility
- AJAX modal titles use
<h2>to keep the page heading hierarchy intact
(was an<h5>, producing a heading-level skip from the navbar<h1>). - MCP-client accordion radio buttons, the worker status page search box,
and the status page auto-refresh toggle now carryaria-labels for
screen readers. - The site navbar is wrapped in a
<header>landmark so assistive tech
can jump to it directly. - The home-page CTA row wraps on narrow viewports instead of overflowing
horizontally.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About daniel3303/Equibles](https:
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]