Opus 0.17.1 · Consumption · 2026-11-05
The app writes the release notes.
Opus 0.17.1 fixes Data Grid sorting on pills, badges and nested cell content — a defect that only appeared once the published package was consumed by a real application, which is how this project finds its changes.
The component demo sorted correctly. The application did not. That gap is the method behind Opus: the library is installed from npm and consumed by the product it comes from, and whatever breaks in that product becomes the next release.
Explore the components
What actually broke
Sorting a column of status pills ordered the rows by the shape of the markup, not by the words in the pills. A Badge renders its text through a label prop rather than a child node, and a cell assembled from pills has no plain string to compare, so the comparator fell back to whatever it could see in the node tree and produced an order no reader could explain.
Why consuming the package found it
The documentation demo used plain strings in its cells, so it sorted perfectly and said nothing. The application runs the same Data Grid with real CRM records — status badges, priority pills, counts inside chips — and that is where the ordering visibly disagreed with the labels. The published package is not a snapshot we ship and forget; it is installed into this application, upgraded on release, and used to build the screens the site itself shows. Defects like this surface there first.
What changed in 0.17.1
Cell text is now read from the rendered content instead of the node structure: element children are walked first, then label, aria-label, title, alt, count and value, so components that pass their text as a prop are covered too. Whitespace is normalised before comparison. Sorting, filtering, grouping and pivot all read through the same helper, so a pill column now orders by the text a person reads. It ships in opus-react 0.17.1 on npm.
Why that is the whole project
Opus exists to be consumed. The library and the application that uses it are the same codebase, released on the same day, so every real screen is also a test of the published package. When something reads wrong in the product, the fix belongs in the library, and the version that carries it is the version the application upgrades to. Release notes here are not a marketing list bolted onto a release; they are the record of what consumption raised.
