Repository navigation
Add roborev config: pi agent with GLM-5.3 via Fireworks - #117
Closed
elviskahoro wants to merge 19 commits into
Closed
elviskahoro wants to merge 19 commits into
elviskahoro wants to merge 19 commits into
Conversation
Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
…ed, toBase62) (#5) Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Fixes copy buttons in chart_util_wrapper and file_codeblock being absolutely positioned without a positioned ancestor, which caused them to anchor to the page root instead of the codeblock. Matches the pattern already used in demo_wrapper. Closes AI-342.
Collapsible panels snap open and closed because the height state selectors have no transition. Match Accordion timing so both interactions animate consistently.
* chore: remove dead menu.py constants and type aliases * Regenerate menu.md after dead-code removal --------- Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
* chore(tools): add gtm-linear and issue-fetch CLI gtm-linear is a Python SDK with no executable, so scripts/linear_cli.py wraps LinearWorkflow as read-only commands (viewer/teams/issues/issue/search) for fetching Linear issues. Auth resolves LINEAR_API_KEY from env or gitignored .env.local. * refactor(tools): port Linear CLI to Typer Type-hint-driven commands, enum state choices, rich --help, typer.echo/secho output. Typer added as a dev dependency. * fix(tools): harden Linear CLI after review - Disable Typer pretty exceptions (locals in tracebacks could expose the API key) - One _fail() error style for all failure paths - Bound --limit to 1-100 via option validation instead of silent clamping - Add CliRunner tests covering state enum, exit codes, auth failure, and LinearAPIError mapping * test(tools): tighten Linear CLI tests after review Assert main() prints the API error to stderr, cover ValidationError handling with from_env patched, document the verified settings sources on the missing-key test, use result.output directly (click 8.2+ interleaves stderr), note the --limit validation behavior in the CLI docstring. * test(tools): finish Linear CLI test polish after review Clear every LINEAR_* env var in the missing-key smoke test, drop the version-pinned comment, add a case proving unrelated from_env exceptions are not misreported. * test(tools): match LINEAR_ env vars case-insensitively pydantic-settings resolves env names case-insensitively; also assert the original exception message survives and document why ValueError guards a ValidationError regression.
…es (#23) Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Collaborator
Author
|
Closing — created against the wrong repo by mistake (intended for our fork, not upstream). Apologies for the noise. |
elviskahoro
added a commit
that referenced
this pull request
Oct 25, 2026
…ment (#119) **Detail bug report:** [View on Detail](https://app.detail.dev/org_d38a878f-9df9-4c4b-a96a-f5180b860085/bugs/bug_4375577e-69b1-42f0-ba52-a019cfccbfd9) Closes #117 ## Bug The documentation TOC scrollspy never highlighted the active heading. `setActive(id)` in `app/templates/toc.py` compared each link's full rendered `href` against the bare fragment `"#" + id`: ```js link => link.getAttribute('href') === '#' + id ``` But TOC entries render through `rx.el.a`, which is a React Router `<Link>`. React Router renders a hash-only `to` (e.g. `"#dev"`) as an `<a>` whose `href` is path-prefixed (e.g. `/docs/getting-started/dev#dev`). The equality was therefore never true, so no `.toc-link` was ever marked `data-active="true"` — clicking a TOC entry still scrolled, but never highlighted, and scrolling through a page never highlighted the corresponding entry. This was introduced in `5efe74b` (PR #75), which replaced the original substring selector `document.querySelector(\`.toc-link[href*="#${id}"]\`)` with the exact-`===` comparison to fix a `dev`-vs-`dev.py` prefix collision. That over-corrected a partial mis-highlight into a total loss of highlight, and the accompanying static-only test baked in the buggy shape, giving a false green. ## Fix Compare the rendered href's trailing fragment against `id`, matching what the click/scroll handlers already do: ```js link => link.getAttribute('href').split('#')[1] === id ``` This compares the actual rendered fragment (`dev` vs `dev.py`), so `setActive("dev")` highlights the `#dev` link rather than nothing, and `setActive("dev.py")` still highlights `#dev.py` (the `dev`-vs-`dev.py` prefix collision from #75 stays resolved). It also removes the inconsistency the report flagged: `setActive` now interprets the rendered href the same way the click/scroll paths already did. ## Testing The scrollspy is embedded JS executed under React Router at runtime, so static source-shape checks alone cannot catch this regression (the original tests gave a false green). Added runtime coverage that exercises the real `setActive` source under a production-shaped React Router renderer: - **Static shape tests** (`tests/test_toc_scrollspy.py`): assert the comparison uses `getAttribute('href').split('#')[1] === id` (either operand order), forbids `querySelector`/attribute-substring selectors, and forbids `includes`/`indexOf`/`startsWith`/`endsWith` — keeping the #75 collision from reappearing. - **Runtime jsdom + react-router-dom test**: renders `<Link to="#dev.py">` before `<Link to="#dev">` (the ordering that exposes the #75 collision) via `createBrowserRouter` + `RouterProvider` in jsdom at the production pathname, then runs the **real** `setActive` source extracted from `toc.py` and asserts the rendered hrefs are path-prefixed and that `setActive("dev")` → `#dev` and `setActive("dev.py")` → `#dev.py`. The harness deps are pinned to `reflex.lock/package.json` versions in `tests/toc_scrollspy_repro/` (`npm ci` to install; test skips with an instruction if deps or Node are absent). Verification: - Unit tests, typecheck (`uv run pyright`), and lint/format (`ruff`) all pass; the full suite is 825 passed. - Mutation-checked the suite: reverting to the buggy `=== '#' + id` fails both the static and runtime tests (`after_dev == None`); reverting to the original substring selector fails the runtime test (`after_dev == 'devpytoc'`, the #75 collision) and the no-selector static test. Neither regression can recur silently. - End-to-end in real Chromium via Playwright against the running Reflex docs app on the `dev.md` page (which has both `# dev.py` and `## Dev` headings): all 12 `.toc-link` hrefs are path-prefixed (`/docs/getting-started/dev#<id>`); clicking `#dev` highlights "Dev" and clicking `#dev.py` highlights "dev.py"; scrolling each heading into the IntersectionObserver's active band highlights the matching entry; reloading with `#dev` scrolls to and highlights "Dev" on mount. The `dev`-vs-`dev.py` prefix collision is resolved in the real browser. --- _Automatic Fixes PRs can be [configured here](https://app.detail.dev/org_d38a878f-9df9-4c4b-a96a-f5180b860085/settings/repos/repo_04b9d58c-daa0-46b6-9560-7f39569ec6eb/bugs)._ --------- Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com> Co-authored-by: elvis kahoro <github@elvis.ai>
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.
Sets up
.roborev.tomlmatching the gtm-sdk setup:agent = "pi"model = "fireworks/accounts/fireworks/models/glm-5p3"Repo-specific
review_guidelinesfrom the gtm-sdk reference were intentionally omitted — they describe gtm-sdk git hooks that don't exist here. The header comment explaining the mechanism is kept so guidelines can be added later.Verified:
roborev config get agent→pi,roborev config get model→fireworks/accounts/fireworks/models/glm-5p3roborev check-agents→ pi healthygit roborev review --wait) passed on this commit — the review itself ran through pi + GLM-5.3 via Fireworks