Skip to content

port(upstream#1968): clearly mark the selected node in path chains - #46

Merged
dborup merged 3 commits into
masterfrom
codex/port-upstream-1968-selected-node-path-chain
Sep 20, 2026
Merged

dborup merged 3 commits into
masterfrom
codex/port-upstream-1968-selected-node-path-chain

Conversation

@adminopenclaw8-sketch

@adminopenclaw8-sketch adminopenclaw8-sketch commented Sep 13, 2026 •

Copy link
Copy Markdown
Collaborator

Split out of #25 (commit 6ca5964d there). This branch holds exactly one upstream change so it can be reviewed, tested and reverted on its own.

Upstream

Problem

In “Paths Through This Node” the selected node was matched with a case-sensitive pubkey comparison and highlighted only by inline bold styling, so it was easy to miss or not marked at all.

Change

Case-insensitive comparison on full public keys; the matching hop gets the .hop-current class, which now draws a compact outline using var(--link-color) (no hardcoded colour). Same-prefix siblings and unresolved hops stay unmarked.

Adaptation to this fork

None. The cherry-pick applied without conflicts and the changed lines are identical to upstream.

Dependencies and merge order

Verification

Local run of the same commands as CI's “Go Build & Test” job (server tests with -race), on this branch and on master fda24ca5 under the same conditions (same machine, run one after another):

Check master fda24ca5 this branch verdict
xss-gate-diff PASS PASS
channel-lib-test PASS PASS
decrypt-cli-build-test PASS PASS
dockerfile-copy-invariants FAIL FAIL not runnable locally: script needs bash ≥4 (declare -A), macOS has 3.2; identical on master
staging-disk-monitor PASS PASS
css-vars-lint PASS PASS
JS unit tests from CI list + AGENTS.md set (67 files) see below 63 PASS, 4 FAIL
test-issue-1375-scope-stats-fetch.js FAIL FAIL Exactly one api('/scope-stats' call exists (the fixed loader) — found 2 baseline failure, unchanged
test-issue-1648-m4-emoji-scan.js FAIL FAIL map.js has 1 emoji/misc-icon hit(s): baseline failure, unchanged
test-a11y-axe-routes-coverage.js FAIL FAIL axe ROUTES missing analytics tabs (issue #1706): areas, foreign-traffic, wardriving baseline failure, unchanged
test-frontend-helpers.js FAIL FAIL favStar returns empty star for non-favorite: The expression evaluated to a falsy value:, favStar returns filled star for favorite: The expression evaluated to a falsy value: baseline failure, unchanged

Baseline failures (fail identically on master; not introduced or changed here): see rows marked baseline failure, unchanged.

Browser validation (local, fixture DB, no staging/production): Local Go server (built from master) on the committed E2E fixture DB (freshened, migrated and seeded exactly like CI), serving this branch's public/, compared side by side with the same server serving master's public/. Full node detail for a fixture repeater that appears in its own "Paths Through This Node" chain. master: the matching hop has .hop-current with bold text only (outline: none). this branch: the same hop carries .hop-current with bold text and outline: solid 1px in --link-color (rgb(37, 99, 235) in the light theme); screenshot shows the outlined node name at the start of the chain, other hops unmarked.

Not run:

  • The E2E assertions this PR adds/extends in test-issue-1146-path-link-contrast-e2e.js (Playwright) have not run anywhere for this fork.
  • Playwright E2E suites (no local Playwright install); CI's E2E job will also be skipped, see below.
  • eslint (not installed locally; CI installs it on the fly).
  • Go -race/tests for modules this PR does not touch (unchanged code, identical to master).
  • Browser tests against staging/production (deliberately none).

Expected GitHub CI: “Go Build & Test” is expected to fail on TestPruneOldNeighborMetrics, which already fails on master (see #25's run). Downstream jobs (Playwright, image build) are therefore skipped. “Deploy Staging” and all GHCR publish steps only run on push to master and cannot run for this PR.
Two further ingestor tests have failed intermittently in this split's CI on branches whose cmd/ingestor tree is byte-identical to master (#27, #28), so they can also appear here without being caused by this change:

GitHub CI result: run 34752478311 on 50045bbd. Go Build & Test: failure; all downstream jobs incl. Deploy Staging skipped. Failed tests:

  • TestPruneOldNeighborMetrics: fails on master, documented baseline

🤖 Generated with Claude Code

n30nex and others added 3 commits September 13, 2026 10:43
…t#1968)

Red commit: `0988bc0` (local browser: 3 passed, 8 behavior assertion
failures before the fix).

The selected node now has a compact outline in long “Paths Through This
Node” chains, in the side panel and full detail page. Matching uses
complete public keys without case sensitivity; same-prefix siblings and
unresolved hops stay unmarked. Existing links, escaped names, warnings
and ambiguity underlines are preserved.

Fixes Kpa-clawbot#1153. Its prerequisite Kpa-clawbot#1144 is already merged.

- E2E assertion added: `test-issue-1146-path-link-contrast-e2e.js:220`.
The existing CI-selected harness passes 11 checks across 18-hop paths,
both themes, desktop/mobile, and the renderer fallback. Review follow-up
`bd8118f` verifies the marked ambiguous hop's dashed underline.
- Browser verified: `http://127.0.0.1:55635`; desktop/mobile path
screenshots were inspected. The broader smoke runner exited successfully
with fixture-dependent skips.
- Required frontend checks pass: 99 filter, 18 aging, 666 helpers. CSS
variables, seven CSS self-tests, 31 XSS sink checks, 17 XSS gate
self-tests and XSS diff preflight pass.
- Three independent reviews found no blocking issues. Traversal remains
linear with no new requests, settings, dependencies or cache
invalidation; styling uses the existing customizer token.

## Preflight overrides

- The external preflight runner is absent; corresponding scoped gates
passed. Red browser evidence is local, with upstream CI approval tracked
separately under the process in Kpa-clawbot#1922.
- Existing rapid-navigation map resize timer errors remain visible in
browser logs and are outside this change.

(cherry picked from commit a938176)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Brings the branch up to master 7125b62 (post #45, which also touched
public/nodes.js in a different region) so CI runs on current master.

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

Independent review found that the new marker uses outline, which is this
app's focus affordance (style.css "Focus Indicators": a:focus-visible gets
outline: 2px solid var(--accent)). Measured on the rendered chain, an
unfocused marked hop drew a 1px blue outline and a focused one 2px in a
near-identical blue — so the marker read as focus, and real focus was almost
indistinguishable from it while tabbing an 18-hop chain.

box-shadow: 0 0 0 1px draws the same ring, keeps the property the original
comment was reaching for (it does not disturb the shared renderer's dashed
ambiguity border, verified by the existing dashed-bottom assertion), and
leaves outline exclusively to :focus-visible.

The test's ring detection only recognised outline/border, so it now also
accepts a shadow ring, and asserts the marker does NOT use outline. Both
mutations fail: reverting to outline → 8 failures, removing the ring → 8.

Not changed, and reported instead: the review traced that the case-sensitive
pubkey compare this PR also fixes was never actually reachable — both sides
come from the same lowercase nodes.public_key column (the uppercase domain is
the observers table, which never feeds path hops). The lowercasing is kept as
harmless normalisation, but it is hardening, not a fix for an observed bug.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@dborup
dborup merged commit 9f3625e into master Sep 20, 2026
6 checks passed
dborup pushed a commit that referenced this pull request Sep 20, 2026
Keeps the PR diff limited to the test change (branch was cut before #45,
#46 and #40 landed).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.

3 participants