Repository navigation
test: issue 174 part A — emoji gate, live anim, naive banner, observers headings - #177
Merged
Merged
Conversation
…h tooltips The role prefix (repeater/room/client/sensor) and the "First to hear it" tooltip used emoji, added after the Kpa-clawbot#1648 M6 emoji lint gate. That made test-issue-1648-m6-final-sweep.js report 5 violations and test-issue-1648-m6-lint-self.js fail its clean-repo precondition. Swap them for Phosphor sprite icons: the same glyphs observer-detail.js uses for neighbor roles, plus ph-flag for first-to-hear. test-packet-path-map.js now asserts the sprite ids. Relates to #174 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…vas pulses Kpa-clawbot#1521 moved pulseNode()'s rings and ghost pulsing from per-node L.circleMarker + rAF loops (animatePulse/ghostPulse) into the canvas engine's activePulses/activeGhosts queues. That left animLayer with 2 .addTo() sites, and the two functions the null-guard tests looked for no longer exist. - test-issue-1485-live-anim-z.js: expect >=2 animLayer shapes, and assert the canvas pane (animationsPane) sits above markerPane (600). - test-live-anims.js: guard pulseNode() entry and renderAnimations() (animCtx + ghost-expiry animLayer) instead of the removed functions, and fail if a looked-up function is missing instead of scanning the start of the file. Relates to #174 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… sandbox observer-detail.js has bound a delegated document click listener at module load since 5063919 (SNR history modal). The vm sandbox document stub had no addEventListener, so loading the module threw before any assertion ran. Relates to #174 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
0a55abe (Kpa-clawbot#1865) added a Neighbors column (th + td). The column-count check still passed, but the ordered heading list was not updated. Relates to #174 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dborup
marked this pull request as ready for review
October 3, 2026 06:56
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.
Relates to #174 (part A). Part B (
favStar,channel-psk-ux,analytics-channels-integration,1648-m3, the customizer/preset tests and1470) is handled separately and is not touched here.test-all.shand.github/workflows/deploy.ymlare unchanged. CI integration is a separate follow-up.Summary
Five
test-all.shfiles, plustest-live-anims.js(not intest-all.sh), failed on master84c637ea. One was a real regression in production code. The other four tests had gone stale after intended behaviour changes.test-issue-1648-m6-final-sweep.jsd5214006and6718c246(2026-07-24) added emoji (📡 🏠 📱 🌡️ 🏁) to View Path tooltips inpublic/packet-path-map.js. The M6 lint gate (89eade6e) is an ancestor of both commits, so the gate already existed and this is a real regression.ph-broadcast,ph-house-line,ph-radio,ph-thermometer, the same set asobserver-detail.jsdirectNeighborRoleIcon) plusph-flagfor first-to-heartest-issue-1648-m6-lint-self.js5 !== 0. Not a git-checkout artefact; it failed the same way in a real worktree.test-issue-1485-live-anim-z.js75a38f02(upstream#1521) movedpulseNode()rings into the canvas engine (activePulses), soanimLayerdropped from 3 to 2.addTo()sites. Intended.>= 2, plus a new assertion thatanimationsPane(where the canvas pulses now draw) has z >markerPane600test-live-anims.js(not intest-all.sh)animatePulse()/ghostPulse(), so the null-guard tests looked for functions that no longer existpulseNode()entry andrenderAnimations()(animCtxguard + ghost-expiryanimLayerguard); fail if the function is missing instead of silently scanning the start of the filetest-naive-banner-tone.js5063919d(2026-07-26) added a module-level delegateddocument.addEventListener('click', …)inobserver-detail.js. Intended. The vm stub lacked it.addEventListener() {}to the document stubtest-observers-headings.js0a55abe5(#1865) added a "Neighbors" column (th + td). Intended. The column-count test still passed.'Neighbors'to the expected ordered listtest-packet-path-map.jswas updated in the same commit as the code fix (📡/🏠→#ph-broadcast/#ph-house-line).No test was deleted. None of the files on the forbidden list (
channels.js,channel-decrypt.js,packets.js,analytics.js,rx-coverage.js,app.js) was touched.Mutants
Each mutant was run in an rsync copy of the branch, never in the worktree. All tests were re-verified green after each restore.
roleIcon('repeater')back to'📡 '1648-m6-final-sweep,1648-m6-lint-self,packet-path-map'🏁 …'1648-m6-final-sweep,1648-m6-lint-selfroleIcon('room')returns''packet-path-map.addTo(animLayer)→.addTo(map)(default pane)1485-live-anim-zanimationsPanez-index 625 → 5001485-live-anim-zrenderAnimationsif (!animCtx) return;removedlive-animsanimLayer &&guard removedlive-animspulseNode!animLayer || !nodesLayerguard removedlive-animsrole="note"→role="alert"naive-banner-toneobservers-headingsobservers-headingsThe lint-self anti-tautology probe (an injected ⭐) also passes again, because the precondition now holds.
Test runs
All 104
nodelines fromtest-all.shwere run one at a time (120 s limit each) in real git worktrees, with Node v24.15.0 locally.84c637eatest-frontend-helpers.js(2 ×favStar),test-channel-psk-ux.js,test-analytics-channels-integration.js,test-issue-1648-m3-emoji-scan.js,test-issue-1438-customizer-mcrole.js,test-issue-1446-cb-preset-cascade.js,test-issue-1470-node-tile-helper.js. All are part B.There are no new failures: master → branch only moves files from red to green.
node test-frontend-helpers.js: 705 passed / 2 failed (favStar), the same on master and the branch.test-live*.jsandtest-*live*.js, withoute2e): identical on master and the branch except1485andlive-anims, which go from red to green.test-1110-live-filter.jsandtest-live-dedup.jsfail on both becauseplaywrightis not installed locally, which is unrelated.Browser check
The Go server was run locally against a copy of
test-fixtures/e2e-fixture.db, and#/packets/<hash>?viewPath=1was opened:<svg class="ph-icon"><use href="…#ph-broadcast">for repeaters and#ph-house-linefor a room observer, rendered at 16×16.The markers have a zero-size layout in this headless pane, on both master and the branch, so tooltips could not be seen in place on the map. The check is therefore DOM-based.
Notes
roleIconinpacket-path-map.jsduplicates the glyph choice inobserver-detail.jsdirectNeighborRoleIcon. Both are module-private IIFE helpers. Extracting a shared helper intoroles.jswas left out to keep this PR scoped to test: test-all.sh fails 12/104 files on master and stops at the first one; none of them run in CI #174.🤖 Generated with Claude Code