Skip to content

v2.7.0

Choose a tag to compare

@github-actions github-actions released this 13 Jun 08:57
4867512

v2.7.0 Release Summary

What's New

This release turns invoice itemization into a one-click, AI-assisted workflow and makes budget bookkeeping far more forgiving. Cornerstone can now read the line items off a vendor's PDF invoice for you, you can edit and re-home invoice-linked budget lines without deleting them, and a brand-new in-app editor lets you mark up diary photos directly in the browser. No manual migration steps are required.

Highlights

  • Auto-itemize Invoices (LLM-powered) -- Open a linked invoice PDF and let Cornerstone extract its line items for you. A dedicated review page shows the original document side-by-side with the extracted lines, each on its own card with editable amounts, a confidence indicator, and inline category, funding-source, and item-assignment pickers. Works with any OpenAI-compatible provider -- Google Gemini, Anthropic, OpenAI, or a self-hosted Ollama model -- auto-detected from the endpoint you configure. The feature is opt-in and off by default: nothing leaves your server until you set the LLM environment variables, and even then only the document's OCR text and a few invoice details are sent -- never the PDF itself or your API key.

  • Photo Annotation Editor -- A Shottr-style markup editor for diary photos, right in the browser. Open any diary photo and annotate it with arrows, rectangles, ellipses, lines, text labels, dimension measurements, freehand strokes, and translucent highlights. It is optimized for touch and Apple Pencil, fully non-destructive (the original is always preserved, with a View original toggle and Reset to original action), and the annotated copy is saved alongside the original.

  • Inline budget line editing & move -- Edit invoice-linked budget lines directly from the Work Item and Household Item detail pages -- no need to unlink first. You can now also move a line to a different work item or household item, so a line that landed on the wrong item (a common case with auto-itemized lines) can be re-homed instead of deleted and re-created.

  • Document viewer "hide already-linked" toggle -- The document picker gains a system-wide filter that hides any document already linked anywhere in Cornerstone, making it easy to find documents you have not filed yet.

Notable Fixes

  • Print/export of the Budget Overview now restores your expansion state afterwards and resets dark-mode styling correctly for a clean printout.
  • The Budget Overview no longer shows a redundant "Auto-itemized" badge that provided no useful information.
  • Diary entry editing no longer triggers spurious native form-validation popups.
  • Save buttons on budget forms now meet the 44px minimum touch-target size on mobile.

Upgrade

docker pull steilerdev/cornerstone:latest

Restart your container. Schema migrations run automatically on first boot. To enable Auto-itemize, set the LLM_BASE_URL, LLM_API_KEY, and LLM_MODEL environment variables -- see the Auto-itemize guide for provider examples.


2.7.0 (2026-06-13)

Features

Bug Fixes

Documentation

  • auto-itemize: user guide + configuration + roadmap (#1547) (#1552) (99dd418), closes #1551
  • claude: expand CI quirks section to cover both skip-directive failure modes (#1544) (3dc9b4d)
  • claude: reorganize CLAUDE.md for clearer section grouping (#1650) (9dc3e9e)
  • server/services: document better-sqlite3 12.10.0 percentile adoption opportunity (#1571) (#1644) (1c2850d)
  • update documentation for photo annotator + auto-itemize release (#1669) (6506063)
  • update wiki submodule — API Contract GET /api/config autoItemizeEnabled (#1629) (dd96923)

Chores

  • deps-dev: bump the dev-dependencies group across 1 directory with 13 updates (#1652) (d3d379c)
  • deps-dev: bump the dev-dependencies group with 9 updates (#1511) (1287ce7)
  • deps-dev: bump tmp from 0.2.5 to 0.2.7 (#1604) (df744bb)
  • deps: bump qs and express (#1560) (bb3a07d)
  • deps: bump the github-actions group with 2 updates (#1510) (6e9af5d)
  • deps: bump the github-actions group with 7 updates (#1647) (cf2a670)
  • deps: bump the prod-dependencies group across 1 directory with 5 updates (#1527) (f87d4c2)
  • eslint: add cleanup for setTimeout/setInterval/addEventListener in useEffect (#1468) (#1643) (148d993), closes #1455
  • eslint: add test-files override to relax React Compiler rules (#1618) (d338328), closes #1456
  • eslint: extract IIFEs from JSX to const variables (#1460) (#1632) (9bc6660), closes #1455
  • eslint: fix @typescript-eslint/no-unused-vars across all workspaces (#1457) (#1628) (5e5c9d0), closes #1560
  • eslint: fix eslint-react/purity warnings — move side effects to useEffect (#1471) (#1640) (fb4c5d9), closes #1455
  • eslint: fix jsx-no-children-prop — use JSX children syntax (#1461) (#1634) (7a6f122), closes #1455
  • eslint: fix miscellaneous @eslint-react structural errors (#1462) (#1642) (9c1ced3), closes #1455
  • eslint: fix React 19 migration warnings (no-context-provider, no-use-context) (#1464) (#1636) (e06c5b3), closes #1455
  • eslint: rename useRef variables to *Ref naming convention (#1467) (#1639) (3af0d23), closes #1455
  • eslint: replace array index keys with stable identifiers (#1466) (#1641) (64d8a73), closes #1455
  • eslint: wrap non-trivial useState initializers in arrow functions (#1465) (#1638) (473501e), closes #1455
  • retrigger promotion CI (post-docs auto-fix skip-ci) (#1670) (1717704)
  • retrigger promotion CI after auto-fix skip-ci (#1664) (28fe6ae)
  • skills: add /dependabot for end-to-end alert and PR processing (#1567) (8f30048)
  • test-infra: add afterEach(jest.clearAllMocks) hygiene to unit tests (#1622) (36d1cfe), closes #1620 #1646
  • update implementation checklist with lessons from release (#1659) (3a4068d)

Code Refactoring

  • invoice: align handleAddSelectedLines to use loadBudgetLines() (#1627) (#1645) (37680de)