Skip to content

media/05-noro-gate#35

Draft
SunkenInTime wants to merge 10 commits into
media/04-macos-adapterfrom
media/05-noro-gate
Draft

media/05-noro-gate#35
SunkenInTime wants to merge 10 commits into
media/04-macos-adapterfrom
media/05-noro-gate

Conversation

@SunkenInTime

@SunkenInTime SunkenInTime commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Stack: 05/05

What becomes usable

  • examples/noro-shell is the complete media-v2 acceptance surface: host-cached art with bundled fallback, live elapsed/title/status/time, status-driven play/pause, previous/play-pause/next controls, and click-to-seek.
  • The pixel-matched 312?3 progress strip uses normalized event.u directly, so seek is independent of a hardcoded width.
  • The portable surface smoke and conjure skill cover media observation, artwork, explicit transport capability, and promise semantics.
  • This head contains every round-1 and round-2 remediation from layers 02?04.

Deliberately missing / unverified

  • Drag-to-seek remains out of scope.
  • The remediated macOS implementation and exact macOS 15.4 floor remain attended-Mac UNVERIFIED, as listed in PR 04 and docs/media-run-status.md.
  • Developer-ID/notarization/Gatekeeper shipping checks remain unverified; Mac App Store distribution is unsupported.

Verification

Final implementation/evidence head 39d9b33:

  • npm test ? PASS, 63/63
  • npm run typecheck ? PASS
  • runtime: zig build test -Dweb-layer=exclude -Dtrace=off ? PASS
  • Windows host: zig build test ? PASS
  • weaver check examples/now-playing and weaver check examples/noro-shell ? PASS
  • GitHub Actions run 30193381494 ? PASS: gate, Intel headless, Apple-silicon headless, and hosted Apple-silicon session
  • Final status-only head f7d7284, Actions run 30194227735 ? PASS: all four jobs, including hosted Apple-silicon session

Windows live checks:

  • Art replacement retained the prior live cover at 250/750/1250 ms and published the new cover/title at 2000 ms; every capture was viewed and no blank/black/fallback flash appeared.
  • With weaverd suspended but connected, transport was visibly pending at 1000 ms and rejected at 3300 ms; the runtime measured TIMEOUT_REJECTED_3003MS.
  • After switching the seek handler to event.u, a viewed live Spotify check moved the visible position from 03:24 to 04:09 within 2.2 s after a 75% strip press, with unchanged rendering.

Visual gate

PASS. The real desktop-layer widget was minimized to the desktop, captured with CopyFromScreen, and every accepted image was opened and viewed. The side-by-side Rainmeter comparison, pre/post seek-track comparison, exact-region captures, and per-element checklist are in docs/media-evidence/pr05-visual.md.

Performance

No no-regression claim. In the recorded matched source-only ~60 s A/B, master Noro used 218.750 ms combined CPU and 41.81 MiB end private memory; media-v2 used 921.875 ms and 47.12 MiB (+703.125 ms, about +1.17 percentage points of one logical core, +5.31 MiB). Method and raw values are in docs/media-v2-results.md.

Cross-session artwork atomicity

The final layer-02 repair is included here. Transient artwork refreshes retain the prior complete frame and retry at the subscription-only 1 Hz cadence. Oversized or three-attempt-exhausted artwork resolves refreshed metadata explicitly without stale art while preserving the prior cache pin; recovery can publish art later.

A real Spotify Next transition was captured at 0/250/750/1500/2500 ms and every exact 340x358 PNG was viewed. FUCK THE SPEAKERZ and its pink cover remained paired through 750 ms; BLIND (RAVE MIX) and its monochrome cover appeared together at 1500 ms. No blank, black, fallback, or old-cover/new-title frame appeared. The per-element checklist and captures are in docs/media-evidence/pr05-visual.md.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 94c66a94-74db-4403-9b05-404cc22a4317

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch media/05-noro-gate

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

@greptile-apps

greptile-apps Bot commented Jul 25, 2026

Copy link
Copy Markdown

Greptile Summary

The PR turns the noro shell into a live media acceptance surface.

  • Subscribes to media and time data and renders live artwork, metadata, playback status, progress, and clock values.
  • Adds previous, play/pause, next, and click-to-seek transport controls.
  • Extends portable smoke coverage and documents the media acceptance contract, authoring guidance, and verification evidence.

Confidence Score: 4/5

The PR appears safe to merge, with the previously reported seek-normalization maintainability issue still outstanding.

The current 312-pixel track remains aligned with the hardcoded divisor, so no present runtime failure is established, but the handler still duplicates geometry rather than consuming the SDK-provided normalized coordinate.

Files Needing Attention: examples/noro-shell/widget.tsx

Important Files Changed

Filename Overview
examples/noro-shell/widget.tsx Replaces the static replica with a live media-driven widget and functional transport controls.
cli/test/example-surface-smoke.mjs Adds noro-shell to the portable check-and-bundle smoke suite.
sdk/CONTRACT.md Documents noro-shell as the executable media acceptance surface and defines its click-to-seek behavior.
skills/conjure-widget/SKILL.md Adds media observation, artwork, transport capability, and promise-semantics guidance.

Reviews (2): Last reviewed commit: "docs: verify adversarial media acceptanc..." | Re-trigger Greptile

Comment thread examples/noro-shell/widget.tsx Outdated
class="w-full h-[3px] bg-[#ffffff]/5"
onPress={(event) => {
if (media.durationMs <= 0) return;
const normalized = Math.max(0, Math.min(1, (event?.x ?? 0) / progressWidth));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Avoid hardcoded seek normalization

The SDK already supplies event.u normalized against the button’s reported width, while dividing event.x by the separate progressWidth constant duplicates layout geometry. Any change to the track’s rendered width will desynchronize click position from the seek target; use event.u as the normalized value.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@SunkenInTime SunkenInTime Jul 26, 2026

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Fixed in final restacked commit ea272fb. The Noro seek handler now passes normalized event.u directly to the absolute-seek calculation; it no longer divides event.x by a hardcoded 312 px width. I also repeated the live Spotify check: a 75% strip press moved the visible position from 03:24 to 04:09 within 2.2 seconds with unchanged rendering.

@SunkenInTime
SunkenInTime force-pushed the media/05-noro-gate branch 2 times, most recently from b43de2e to 3d9a8a8 Compare July 25, 2026 20:18
@SunkenInTime
SunkenInTime force-pushed the media/05-noro-gate branch 2 times, most recently from 97b4880 to a83dc9c Compare July 25, 2026 22:45
@SunkenInTime
SunkenInTime changed the base branch from media/03-transport to media/04-macos-adapter July 25, 2026 22:45
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from 88d3081 to 9558533 Compare July 26, 2026 01:24
@SunkenInTime
SunkenInTime force-pushed the media/05-noro-gate branch 2 times, most recently from 5e09d98 to 43f87ef Compare July 26, 2026 01:38
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from 034530e to da00622 Compare July 26, 2026 01:44
@SunkenInTime
SunkenInTime force-pushed the media/05-noro-gate branch 3 times, most recently from f5f5394 to 5b010fb Compare July 26, 2026 02:08
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from ceea47b to dc5e2e7 Compare July 26, 2026 02:10
@SunkenInTime
SunkenInTime force-pushed the media/05-noro-gate branch 2 times, most recently from 62a0b64 to 770f5cd Compare July 26, 2026 02:10
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from dc5e2e7 to 78530db Compare July 26, 2026 02:37
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from 78530db to 86c9a2d Compare July 26, 2026 03:35
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from 86c9a2d to c050c2e Compare July 26, 2026 03:43
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from c050c2e to 709a2a2 Compare July 26, 2026 03:49
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from 9715235 to b6032d8 Compare July 26, 2026 04:04
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from b6032d8 to 259a7f3 Compare July 26, 2026 04:24
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from 259a7f3 to 863ebc6 Compare July 26, 2026 04:42
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from 863ebc6 to c7452b6 Compare July 26, 2026 05:00
@SunkenInTime
SunkenInTime force-pushed the media/05-noro-gate branch 2 times, most recently from 5844864 to dd99bb0 Compare July 26, 2026 05:19
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from 2da7fe7 to ca5fe86 Compare July 26, 2026 05:20
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from ca5fe86 to 5a40f03 Compare July 26, 2026 05:42
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from 5a40f03 to f7bf7f8 Compare July 26, 2026 06:53
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from f7bf7f8 to dd53c91 Compare July 26, 2026 07:18
@SunkenInTime
SunkenInTime force-pushed the media/04-macos-adapter branch from dd53c91 to 9c31229 Compare July 26, 2026 07:45
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