Skip to content

daniel3303/Equibles](https:

v1.1.1 Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

Published 12d Productivity & Wikis
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

congressional-trading .net financial-data finra insider-trading institutional-holdings
+6 more
mcp postgresql sec sec-filings self-hosted short-data

Summary

AI summary

Updates SEC document normalization, Web / accessibility, and SEC financial facts across a mixed release.

Changes in this release

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}/Holdings run 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 the Initial migration — fresh deployments and
    upgrades from earlier 1.1.x both run a single CreateIndex with the
    INCLUDE list 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.Save accepts accessionNumber as 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 NULL filter.

Fixed

SEC document normalization

  • TableNormalizationStep no 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 because IsOnlyWhitespaceSpan treated "zero
    spans" as "visually empty".
  • TableNormalizationStep also no longer drops columns whose cells each
    contain only a non-text visual element. IsColumnEmpty previously
    checked cell.TextContent alone; the row-side HTML-aware emptiness
    check is now shared between rows and columns.
  • CurrencyConsolidationStep no longer treats unrelated uppercase
    acronyms (USDA, USDC, EUREKA) as currency cells. ISO code
    detection switched from text.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.
  • CurrencyConsolidationStep re-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.
  • PaginationRemovalStep requires a word boundary after Part when
    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.IsPartHeading no longer throws
    IndexOutOfRangeException when the post-PART suffix 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.ResolveUnit trims leading/trailing whitespace
    around the xbrli:measure QName before resolving, per the XBRL spec's
    collapse whitespace facet. A padded measure like " iso4217:USD "
    now emits Unit = "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 / ResolveUnit drop XBRL facts whose measure has an
    empty local name (e.g. iso4217:). Previously the fact ended up in
    the output with Unit = "", 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 carry aria-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

Track daniel3303/Equibles](https:

Get notified when new releases ship.

Sign up free

About daniel3303/Equibles](https:

All releases →

Related context

Beta — feedback welcome: [email protected]