Skip to content

feat(server): one-shot primary nav smoke (closes #167) - #585

Open
kushals256 wants to merge 3 commits into
reticlehq:mainfrom
kushals256:feat/nav-smoke
Open

feat(server): one-shot primary nav smoke (closes #167)#585
kushals256 wants to merge 3 commits into
reticlehq:mainfrom
kushals256:feat/nav-smoke

Conversation

@kushals256

@kushals256 kushals256 commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Summary

  • adds reticle_verify { action: "nav_smoke" } to walk primary nav links (default scope: nav landmark)
  • queries role=link with href, clicks each internal link (bounded, default 25), returns one consolidated table
  • uses honest renderedWithoutConsoleErrors naming per issue [agent] One-shot nav smoke: walk the primary routes and return one pass/fail table #167 (not "the route works")
  • skips external, duplicate, and missing-href links with explicit skipped reasons

Test plan

  • unit tests for happy path, console errors, skip heuristics, and verify merge dispatch
  • pnpm format:check and @reticlehq/server lint green
  • maintainer e2e if desired (no new e2e spec in this PR)

Closes #167

@divshekhar divshekhar left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this — the naming discipline here is genuinely good. Calling the result
renderedWithoutConsoleErrors rather than "the route works" is exactly the honesty this repo asks
for, and making the skip reasons explicit rather than folding them into a pass is the harder and
correct choice.

Three things before this can go in, in order of how much they cost you:

1. CI is red on five checksverify, package-quality, macos, windows, gate.
verify red usually means format:check or lint, and verify is a dependency of every expensive
gate behind it, so nothing downstream has actually run against this branch yet. pnpm format writes
the formatting fixes; please get pnpm format:check && pnpm lint && pnpm typecheck && pnpm test:unit
green locally before pushing again, since each push burns a full CI run.

2. No e2e spec. This adds a new action to the tool surface, and the unit gate cannot see
cross-package drift on the tool surface — that is specifically what pnpm test:e2e exists for. A new
verb with no spec in the battery is a verb that can silently stop working without anything going red.

3. Timing. This is +515 lines and a new directory, and the current release is scoped tightly to
stability: things that break, crash, or stop a verification completing. A new capability is off that
theme, not because it is unwanted but because reviewing a new subsystem mid-stability-release is how
both get worse.

So: get CI green, add the e2e spec, and this is a strong candidate for the next feature release
rather than this one. Requesting changes to keep it out of the merge queue for now, not to send it
away.

@kushals256
kushals256 changed the base branch from release/v2.12.0 to main August 30, 2026 12:17
@kushals256

Copy link
Copy Markdown
Contributor Author

@divshekhar thanks — addressed all three:

  1. CI. Rebased onto main. The red verify was TypeScript, not prettier: exactOptionalPropertyTypes rejected optional href/route/skipped assigned from possibly-undefined values, and the unit stubs were incomplete ReticleEvents (missing sessionId). Those are fixed; tsc and the nav-smoke unit tests are green locally.

  2. e2e. Added apps/e2e/specs/nav-smoke-test.mjs (registered in ORDER after crawl-test) against next-smoke's real <nav>. Ran it locally: 2 links found, 2 visited, honesty note present. Also added nav_smoke to the tool-surface sweep so the new action cannot silently drop off the catalog.

  3. Timing. Retargeted this PR from release/v2.12.0 to main so it sits on the next feature release instead of the stability one.

Closes reticlehq#167. Walks nav landmark links and returns a consolidated table
with honest renderedWithoutConsoleErrors naming instead of over-claiming
route health.

Signed-off-by: Kushal S <skushal.mys@gmail.com>
exactOptionalPropertyTypes rejected optional fields assigned from possibly-undefined values, and the unit stubs were incomplete ReticleEvents. An e2e spec now walks next-smoke's real nav so the new verify action cannot silently rot.

Signed-off-by: Kushal S <skushal.mys@gmail.com>
@kushals256

Copy link
Copy Markdown
Contributor Author

Rebased onto origin/main — merge conflicts are gone. The three review items (CI green, e2e spec, retarget to main) were already in from 30 Aug; this push is only the rebase so the branch can merge once CI comes back.

@divshekhar

Copy link
Copy Markdown
Contributor

Rebased this locally onto current main to see whether the red CI was staleness. It is not — there is one real failure, and it is small:

FAIL src/tools/numeric-bounds.test.ts > every top-level numeric tool input has a bound
  → reticle_nav_smoke.maxLinks, reticle_nav_smoke.settleMs, reticle_verify.maxLinks:
    expected [ … ] to deeply equal []

The repo has a guard requiring every numeric tool input to carry a bound, and the new reticle_nav_smoke inputs are bare z.number()s. reticle_verify.maxLinks is in the list too, so this PR either adds or widens that one as well. Give the three a .min()/.max() and that failure goes away.

Everything else was clean after the rebase — format, lint and typecheck all pass, and the rest of the server suite is green (6,527 of 6,528). So it is one schema change plus a rebase, not a rework.

Worth saying since the diff is +581: I have not reviewed the design of the nav-smoke feature itself yet, only established that the CI red is one fixable thing. I will read it properly once it is green.

@divshekhar

Copy link
Copy Markdown
Contributor

Nudge rather than new review — the three items in my earlier review still stand, and item 1 is the one blocking everything else: verify is red, and it gates every expensive check behind it, so nothing downstream has run against this branch yet. pnpm format writes the fixes.

#167 is still open and nobody else has taken it. The naming discipline in this PR is the reason I want it in rather than rewritten.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[agent] One-shot nav smoke: walk the primary routes and return one pass/fail table

2 participants