Skip to content

test: issue 174 part A — emoji gate, live anim, naive banner, observers headings - #177

Merged
dborup merged 4 commits into
masterfrom
codex/issue-174-part-a
Oct 3, 2026
Merged

dborup merged 4 commits into
masterfrom
codex/issue-174-part-a

Conversation

@adminopenclaw8-sketch

Copy link
Copy Markdown
Collaborator

Relates to #174 (part A). Part B (favStar, channel-psk-ux, analytics-channels-integration, 1648-m3, the customizer/preset tests and 1470) is handled separately and is not touched here.

test-all.sh and .github/workflows/deploy.yml are unchanged. CI integration is a separate follow-up.

Summary

Five test-all.sh files, plus test-live-anims.js (not in test-all.sh), failed on master 84c637ea. One was a real regression in production code. The other four tests had gone stale after intended behaviour changes.

File Cause Choice Coverage
test-issue-1648-m6-final-sweep.js d5214006 and 6718c246 (2026-07-24) added emoji (📡 🏠 📱 🌡️ 🏁) to View Path tooltips in public/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. (b) fix the code: Phosphor sprite icons (ph-broadcast, ph-house-line, ph-radio, ph-thermometer, the same set as observer-detail.js directNeighborRoleIcon) plus ph-flag for first-to-hear Test unchanged; green again
test-issue-1648-m6-lint-self.js Same 5 violations: its "repo MUST be clean" precondition failed with 5 !== 0. Not a git-checkout artefact; it failed the same way in a real worktree. (b), same commit as above Test unchanged; green again
test-issue-1485-live-anim-z.js 75a38f02 (upstream #1521) moved pulseNode() rings into the canvas engine (activePulses), so animLayer dropped from 3 to 2 .addTo() sites. Intended. (a) fix the test: >= 2, plus a new assertion that animationsPane (where the canvas pulses now draw) has z > markerPane 600 Covers the z-order invariant for both the SVG and the canvas layer
test-live-anims.js (not in test-all.sh) Same commit removed animatePulse() / ghostPulse(), so the null-guard tests looked for functions that no longer exist (a): guard pulseNode() entry and renderAnimations() (animCtx guard + ghost-expiry animLayer guard); fail if the function is missing instead of silently scanning the start of the file Same rAF/teardown null-safety, at the new locations
test-naive-banner-tone.js 5063919d (2026-07-26) added a module-level delegated document.addEventListener('click', …) in observer-detail.js. Intended. The vm stub lacked it. (a): add addEventListener() {} to the document stub All 9 tone assertions run again
test-observers-headings.js 0a55abe5 (#1865) added a "Neighbors" column (th + td). Intended. The column-count test still passed. (a): add 'Neighbors' to the expected ordered list Unchanged

test-packet-path-map.js was 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.

Mutant Test(s) Result
roleIcon('repeater') back to '📡 ' 1648-m6-final-sweep, 1648-m6-lint-self, packet-path-map red, red, red
First-to-hear tooltip back to '🏁 …' 1648-m6-final-sweep, 1648-m6-lint-self red, red
roleIcon('room') returns '' packet-path-map red
Ghost marker .addTo(animLayer) → .addTo(map) (default pane) 1485-live-anim-z red
animationsPane z-index 625 → 500 1485-live-anim-z red
renderAnimations if (!animCtx) return; removed live-anims red
Ghost-expiry animLayer && guard removed live-anims red
pulseNode !animLayer || !nodesLayer guard removed live-anims red
Naive banner role="note" → role="alert" naive-banner-tone red
"Neighbors" heading renamed observers-headings red
Firmware/Client headings swapped observers-headings red

The lint-self anti-tautology probe (an injected ⭐) also passes again, because the precondition now holds.

Test runs

All 104 node lines from test-all.sh were run one at a time (120 s limit each) in real git worktrees, with Node v24.15.0 locally.

Failing files
master 84c637ea 12 (the list in #174)
this branch 7: test-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.
  • Non-E2E live tests (test-live*.js and test-*live*.js, without e2e): identical on master and the branch except 1485 and live-anims, which go from red to green. test-1110-live-filter.js and test-live-dedup.js fail on both because playwright is 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=1 was opened:

  • On the branch, the tooltip HTML contains <svg class="ph-icon"><use href="…#ph-broadcast"> for repeaters and #ph-house-line for a room observer, rendered at 16×16.
  • On master, the same packet shows 📡 emoji.

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

🤖 Generated with Claude Code

dborup and others added 4 commits October 2, 2026 19:12
…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>
@adminopenclaw8-sketch adminopenclaw8-sketch changed the title test: fix #174 part A — emoji gate, live anim, naive banner, observers headings test: issue 174 part A — emoji gate, live anim, naive banner, observers headings Oct 2, 2026
@dborup
dborup marked this pull request as ready for review October 3, 2026 06:56
@dborup
dborup merged commit d2dbe84 into master Oct 3, 2026
6 checks passed
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.

2 participants