Release 1.2.1: README rewrite, popover scroll fix, and post-RMQ cleanup#29
Merged
Conversation
README has been rewritten with a tighter structure and a more direct tone. The architecture section now relies on the diagram instead of restating it in prose. The package picker that opens from the Class Browser dialog had a broken mouse-wheel scroll. Root cause: the popover content was being rendered through a portal into document.body, which sat outside the parent dialog's scroll-lock allow-list (Radix Dialog wraps its content in react-remove-scroll, which installs a document-level wheel listener and blocks wheel events on anything not inside its content subtree or shards). The shadcn popover wrapper now accepts an opt-in 'withoutPortal' prop, and the package combobox uses it so the popover renders inline inside the dialog content — where the dialog's scroll lock recognises it as a child and lets wheel events through. Three stubs in services/ai.ts (generateQuery, getSuggestions, submitFeedback) posted to backend endpoints that were never implemented. Nothing in production code was calling them. Removed the stubs along with their test cases and the unused response types. Also cleaned up three stale 'advisor' mentions in the loader_v2 docstring, which referred to a feature that was never built. Architecture diagram source (architecture.mmd) and the rendered SVG are committed to keep the repo self-consistent with what docs.fabrikops.com serves.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three things in one release, all small, all independent:
README rewrite
The previous README leaned on marketing-style summaries and three layered architecture sections that nobody scrolled to. The rewrite trims that down: a short "Why this exists" paragraph that talks about the actual operator pain (the moquery folder, the Postman collection, the spreadsheets), a tighter "What it does" list with five concrete categories, a four-command quickstart, and a single architecture image with a stack table. About a third shorter overall.
Popover scroll fix
The package picker that opens from the Class Browser dialog had a broken mouse-wheel scroll. Drag worked, wheel didn't.
Root cause was a layering issue between two libraries:
react-remove-scroll. That installs a document-level wheel event listener and callspreventDefault()on wheel events targeting anything outside the dialog's content subtree or its shards array.PopoverPrimitive.Portalintodocument.body. That puts the popover body outside the dialog's content DOM and outside its shards.The shadcn
popover.tsxwrapper now accepts an opt-inwithoutPortalprop.PackageComboboxuses it so the popover renders inline inside the dialog content, which makes the dialog's scroll lock recognise it as a child and let wheel events through. Other call sites ofPopoverContentare unaffected because the prop defaults tofalse.Frontend cleanup
services/ai.tscarried three stubs (generateQuery,getSuggestions,submitFeedback) that posted to backend endpoints which were never wired up (/api/ai/generate/,/generate/suggest/,/generate/feedback/). The only callers were the matching test cases. Removed both. Five orphan response types (AIGenerateResponse,AISuggestResponse,AIGeneratedNode/Filter/Edge) went with them.Also dropped three stale "advisor" mentions in the
loader_v2docstring that referred to a feature that was never built.Architecture diagram
frontend/src/assets/architecture.mmdis updated to match the post-RMQ topology (no event-bus node, AWX webhook arrow points at the backend, separate edge for the 30-second beat poll). The rendered SVG is committed alongside the source so the repo stays self-consistent with whatdocs.fabrikops.comserves.Verification
npx tsc --noEmitclean