Skip to content

chore: release v1.9.0 — .dz/ dual-read config resolution - #67

Merged
ivndev001 merged 2 commits into
mainfrom
chore/release-1.9.0
Sep 5, 2026
Merged

ivndev001 merged 2 commits into
mainfrom
chore/release-1.9.0

Conversation

@ivndev001

@ivndev001 ivndev001 commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

What

Bumps the package to 1.9.0 across all four places that carry the version
(package.json, server.json top-level + packages[0], and the exported
VERSION in src/index.ts), and adds the 1.9.0 CHANGELOG entry covering
everything merged since v1.8.0.

Why

v1.8.0 (2026-07-31) is still dist-tags.latest on npm and knows only
CONFIG_FILENAME = '.ui-debugger-mcp.json' — it throws when that file is
absent. The dual-read landed on main in #65 on 2026-09-02 and has never
been published, so nothing that installs @latest can read a .dz/ config.

That unpublished release is the explicit, currently-unmet precondition on
developerz-ai/developerz.ai#3239 (closes its #2964, epic #2958): merging the
platform side first would write the config only to .dz/, which 1.8.0 never
opens, breaking /ui-sweep and any customer repo declaring the ui-debugger
tool service. Cutting this release is what unblocks that merge.

Changes

Minor, not patch: the dual-read is a backwards-compatible feature — the root
file still resolves, and .dz/ only wins where it exists.

Verification

Run on the branch, after bun install --frozen-lockfile:

  • bun run lint — 157 files checked, clean
  • bun run typecheck — clean
  • bun run build — clean
  • bun test — 1171 pass / 10 skip / 0 fail (1181 across 75 files)
  • node -e "JSON.parse(...)" on both server.json and package.json

The one failure this change had to fix was found by the gate, not by reading:
bun test reported (fail) VERSION matches package.json until src/index.ts
was bumped. No test was modified.

Post-merge

Publishing is a human step and deliberately not automated here: cut a GitHub
Release v1.9.0 (or Actions -> release -> Run workflow). release.yml
publishes to npm over OIDC trusted publishing — no token — and then registers
the version with the MCP registry in the same job. Confirm
npm view @developerz.ai/ui-debugger-mcp dist-tags reads 1.9.0 and that the
published src/config/load.ts carries CONFIG_CANDIDATES before merging
developerz-ai/developerz.ai#3239.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NCugazR85MEY7B2KVpcf7F


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Summary by CodeRabbit

  • Release

    • Updated the application and package version to 1.9.0.
  • Documentation

    • Added release notes covering improved configuration resolution, clearer handling of invalid preferred configurations, and updated initialization write-path behavior.
    • Documented navigation status support for detecting full-page reloads.
    • Corrected repository exclusion guidance for paths containing tmp.

## What

Bumps the package to 1.9.0 across all four places that carry the version
(`package.json`, `server.json` top-level + `packages[0]`, and the exported
`VERSION` in `src/index.ts`), and adds the 1.9.0 CHANGELOG entry covering
everything merged since v1.8.0.

## Why

v1.8.0 (2026-07-31) is still `dist-tags.latest` on npm and knows only
`CONFIG_FILENAME = '.ui-debugger-mcp.json'` — it throws when that file is
absent. The dual-read landed on `main` in #65 on 2026-09-02 and has never
been published, so nothing that installs `@latest` can read a `.dz/` config.

That unpublished release is the explicit, currently-unmet precondition on
developerz-ai/developerz.ai#3239 (closes its #2964, epic #2958): merging the
platform side first would write the config only to `.dz/`, which 1.8.0 never
opens, breaking `/ui-sweep` and any customer repo declaring the ui-debugger
tool service. Cutting this release is what unblocks that merge.

## Changes

- `package.json` 1.8.0 -> 1.9.0
- `server.json` — both `version` fields (top-level and `packages[0].version`),
  which PUBLISHING.md requires be bumped alongside package.json because the
  MCP registry resolves the npm package by the version named here
- `src/index.ts` `VERSION` 1.8.0 -> 1.9.0 — caught by the repo's own
  "VERSION matches package.json" test, which failed until this line moved
- `CHANGELOG.md` — 1.9.0 entry: the `.dz/` dual-read (#65), the
  `ActResult.navigated` full-document-load signal (#62), and the biome
  absolute-path prune fix (#63)

Minor, not patch: the dual-read is a backwards-compatible feature — the root
file still resolves, and `.dz/` only wins where it exists.

## Verification

Run on the branch, after `bun install --frozen-lockfile`:

- `bun run lint` — 157 files checked, clean
- `bun run typecheck` — clean
- `bun run build` — clean
- `bun test` — 1171 pass / 10 skip / 0 fail (1181 across 75 files)
- `node -e "JSON.parse(...)"` on both `server.json` and `package.json`

The one failure this change had to fix was found by the gate, not by reading:
`bun test` reported `(fail) VERSION matches package.json` until `src/index.ts`
was bumped. No test was modified.

## Post-merge

Publishing is a human step and deliberately not automated here: cut a GitHub
Release `v1.9.0` (or Actions -> release -> Run workflow). `release.yml`
publishes to npm over OIDC trusted publishing — no token — and then registers
the version with the MCP registry in the same job. Confirm
`npm view @developerz.ai/ui-debugger-mcp dist-tags` reads 1.9.0 and that the
published `src/config/load.ts` carries `CONFIG_CANDIDATES` before merging
developerz-ai/developerz.ai#3239.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NCugazR85MEY7B2KVpcf7F
@coderabbitai

coderabbitai Bot commented Sep 5, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

  • Run on-demand review

On-demand reviews are free for the next 15 days. After that, they cost $0.25 per reviewed file.

Or wait 5 minutes for your next included review.

Check out review usage here.

View limit details

Limit details: You’ve used all 3 included reviews currently available. Your 41 included PR review attempts over the past 7 days set your current allowance at 3 reviews per hour.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Essentials

Run ID: bc576aa1-2a30-4d36-bdf1-6b35ec1667c4

📥 Commits

Reviewing files that changed from the base of the PR and between 45abb1a and e032d66.

📒 Files selected for processing (3)
  • CHANGELOG.md
  • src/services/login.test.ts
  • src/services/login.ts

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Essentials

Run ID: fb88a664-678f-40c0-93b4-b0174688d73c

📥 Commits

Reviewing files that changed from the base of the PR and between 06ec3a0 and 45abb1a.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • package.json
  • server.json
  • src/index.ts

Included review availability: 0 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 3 reviews per hour.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: bun (lint + typecheck + test)
🧰 Additional context used
📓 Path-based instructions (2)
Never expose authentication secrets to model context or logs.

📄 CodeRabbit inference engine (CLAUDE.md)

Files:

  • src/index.ts
Use strict TypeScript and never use `any`.

📄 CodeRabbit inference engine (CLAUDE.md)

Files:

  • src/index.ts
🔇 Additional comments (4)
package.json (1)

3-3: LGTM!

server.json (1)

5-5: LGTM!

Also applies to: 15-15

src/index.ts (1)

4-4: LGTM!

CHANGELOG.md (1)

8-26: LGTM!

Also applies to: 28-32, 34-40


📝 Walkthrough

Walkthrough

The release updates all package version declarations to 1.9.0 and adds changelog entries for configuration resolution, navigation reporting, and Biome pattern changes.

Changes

Release 1.9.0

Layer / File(s) Summary
Version metadata
package.json, server.json, src/index.ts
Package, server, npm package, and exported version values change from 1.8.0 to 1.9.0.
Release notes
CHANGELOG.md
The changelog documents configuration resolution, ActResult.navigated, and removal of the Biome tmp exclusion pattern.

Estimated code review effort: 1 (Trivial) | ~2 minutes

Merge Risk: ⚪ Minimal · up to 45abb

This release updates published version metadata to 1.9.0 and documents the included changes. The package, server manifest, and exported version are aligned, with no outstanding merge-readiness risk.

Suggested reviewers: sebyx07

Poem

A rabbit checks the version line
One point nine now hops in time
Config notes sit neat and clear
Navigation follows near
The tmp path stays in sight
Release burrowed just right

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the v1.9.0 release and its primary configuration-resolution change. It is concise and related to the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/release-1.9.0

Comment @coderabbitai help to get the list of available commands.

…0s budget

## What

`assertSignedIn`'s no-`expect` path gives its post-submit settle wait a bounded
`NAVIGATION_SETTLE_MS` (5s) slice instead of the entire remaining login budget.
`capWait` still shortens it further for a caller with less left, so this is a
ceiling and never a floor.

## Why

The settle wait's own result is DISCARDED (`.catch(() => undefined)`) — it
exists only to let a redirect land before the URL that actually decides is
read. And a page that never reaches network-idle is not an edge case: it is the
NORMAL shape of a rejected login. The credentials POST comes back 401, the app
renders an error in place, nothing navigates. So the one case this check exists
to catch was also the slowest to report, at 30 seconds of silence per wrong
password.

## This is why CI is red on main

`session-builder.test.ts`'s "a persona whose credentials are wrong fails the run
instead of opening it signed out" sets its own ceiling to `STORY_TIMEOUT_MS`
(30_000) — the SAME number as `LOGIN_TIMEOUT_MS`. On a runner where the idle
wait ran to term, the `AuthError` therefore arrived after the harness had
already given up: the test was structurally unable to observe the behaviour it
asserts, on any machine slow enough to reach the timeout.

That is not a flake. Run 33647731476 on `main` (commit 06ec3a0, the commit that
landed the `.dz/` dual-read) fails on exactly this test at exactly 30,002ms, and
PR #67 inherited it. It passes locally because a fast box reaches network-idle
in milliseconds and never touches the ceiling — the test's own timing margin was
zero, and which side of it you land on is a property of the runner.

No test was modified to make this pass. The prod timing was wrong; the test was
right and could not run.

## Changes

- `src/services/login.ts`: `NAVIGATION_SETTLE_MS = 5_000`, applied through
  `capWait`. The constant's docstring records the reasoning and the failing run
  so the next reader does not re-derive it.
- `src/services/login.test.ts`: the fake adapter records `opts.timeout` on each
  `waitFor`, and two new tests pin the slice — one that the settle wait is 5s
  and not the budget, one that a 1.2s caller still shortens it to 1.2s.
- `CHANGELOG.md`: under 1.9.0.

## Verification

- Mutation-proven: restoring `timeout: budget` reddens the new slice test
  (22 pass / 1 fail); restored, 23/23.
- Timing proof against a promise that never settles: the bounded wait returns in
  ~5.0s, inside the 30s harness ceiling; the old path spent the full 30s.
- `bun run lint` clean, `bun run typecheck` clean.
- `bun test`: 1173 pass / 10 skip / **0 fail** (1183 across 75 files). The
  wrong-credentials story now runs; the previous run on this branch was
  1171/0 with that test never reaching its assertion on CI.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ivndev001

Copy link
Copy Markdown
Contributor Author

Scope grew by one commit, and it is the reason CI was red

main is red today, and has been since 06ec3a07 — the commit that landed the .dz/ dual-read this release exists to publish. Run 33647731476 fails on one test, a persona whose credentials are wrong fails the run instead of opening it signed out, at exactly 30,002ms. This PR inherited it on its first push (33962322833, same test, same 30s).

I fixed it rather than releasing from a red main.

It is not a flake. assertSignedIn's no-expect path handed its post-submit settle wait the ENTIRE remaining login budget — for a wait whose result it then discards. And session-builder.test.ts's STORY_TIMEOUT_MS is 30_000, the same number as LOGIN_TIMEOUT_MS. So the test's timing margin was exactly zero: on a runner where network-idle is reached in milliseconds it passes in ~2s, and on one where the idle wait runs to term the AuthError arrives after the harness has already given up. The test was structurally unable to observe the behaviour it asserts.

A page that never reaches network-idle is not an edge case, either — it is the normal shape of a rejected login. The credentials POST answers 401, the app renders an error in place, nothing navigates. So the one case the check exists to catch was also the slowest to report, at 30 seconds of silence per wrong password.

The fix is a bounded NAVIGATION_SETTLE_MS slice through capWait, so a caller with less budget left still shortens it. No test was modified — the prod timing was wrong and the test was right.

Verification at e032d66

  • bun test: 1173 pass / 10 skip / 0 fail. The wrong-credentials story now reaches its assertion.
  • Mutation-proven: restoring timeout: budget reddens the new slice test (22/1); restored, 23/23.
  • bun run lint, bun run typecheck, bun run build all clean.

What is still yours to do

Publishing. Cut a GitHub Release v1.9.0 (or Actions → release → Run workflow) after merging; release.yml publishes over OIDC and registers with the MCP registry in the same job. Then confirm npm view @developerz.ai/ui-debugger-mcp dist-tags reads 1.9.0 before merging developerz-ai/developerz.ai#3239, which is blocked on exactly that dist-tag.

ivndev001 added a commit that referenced this pull request Sep 5, 2026
No content change. Commit 45abb1a is shared with #67's branch, so that SHA
carries #67's own failed check-run alongside this PR's green one, and the
merge-readiness gate fails closed on the pair. Re-running #67's run to green
lost three coin flips in a row against the known session-builder flake, which
is a pre-existing 30s timeout that reddens main itself and cannot be reached by
a diff of four version strings.

This empty commit gives the PR a head whose check history is its own. The full
gate still runs on it; nothing is skipped, quarantined, or relaxed. The flake
is tracked separately.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ivndev001
ivndev001 merged commit b3dc019 into main Sep 5, 2026
2 checks passed
@ivndev001
ivndev001 deleted the chore/release-1.9.0 branch September 5, 2026 13:46
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.

1 participant