Skip to content

fix(core): detect homepage cards for events reusing another meeting code - #35

Open
onevcat wants to merge 3 commits into
masterfrom
fix/meet-home-reused-code-card
Open

fix(core): detect homepage cards for events reusing another meeting code#35
onevcat wants to merge 3 commits into
masterfrom
fix/meet-home-reused-code-card

Conversation

@onevcat

@onevcat onevcat commented Aug 20, 2026

Copy link
Copy Markdown
Owner

Problem

A user reported a scheduled meeting with a Meet URL that never appeared in the MeetCat tray, even though Google Meet's homepage displayed it. The affected event showed Calendar's "this meeting code belongs to another event" info banner (この会議コードは別の予定のものです).

Root cause

Confirmed against a live reproduction (event duplicated from another event so it reuses that event's meeting code): the redesigned Meet homepage renders such cards with a bare calendar event id (e.g. 3n4i5i5mf9v3lqf03ipnct6g4a) instead of the usual instance id with a _<YYYYMMDD>T<HHMMSS>Z suffix. The v2 parser requires that suffix (CALENDAR_INSTANCE_ID_PATTERN), so findCalendarCards dropped the card and the meeting never reached the scheduler, the tray, or auto-join. These cards also carry no machine-readable timestamp at all — the only time source is the localized label text (e.g. 17:15 – 18:15).

Fix

  • Add BARE_EVENT_ID_PATTERN and accept bare-id cards in findCalendarCards / parseCalendarCard.
  • Recover the begin time from the label text via the new extractBeginClockMinutes: 24h ranges, trailing AM/PM (including the U+202F narrow no-break space ICU emits), and prefix meridiems (午前/午後, 上午/下午, 오전/오후 — CLDR formats Korean as 오후 5:15).
  • Anchor the calendar date to a visible sibling instance-id card — the homepage renders one day at a time, and hidden stale cards from another day must not misdate visible ones — falling back to the current date when no visible anchor exists.
  • Bare-id cards without a parseable time range stay excluded, keeping unrelated buttons out of the card set.
  • Widen findMeetingCardById / closestCalendarCard so the click-to-join flow works with bare ids. The fix lives in @meetcat/core, so the Tauri app and the Chrome extension both pick it up.

Testing

  • pnpm -r test: all JS/TS suites green (core 253, plus settings/settings-ui/extension/tauri), test:rust green.
  • 16 new unit tests, including fixtures replicating the captured real-world layout (anchored past-section cards + a bare-id card in the scheduled section), a verbatim en-US 12-hour sample captured from a real homepage, CLDR ko-KR samples, and a stale-hidden-anchor regression.
  • Live end-to-end verification on a reproduced reused-code meeting: parsed with the correct begin time, shown in the tray, and auto-joined by clicking the bare-id card at trigger time.

Known limitations

  • If the homepage is manually navigated to another day and that day contains only bare-id cards, their date falls back to "today". In practice MeetCat always sits on the default (today) view, and a wrongly dated card is dropped by the joinability checks rather than joined at a wrong time.
  • Locales whose CLDR time format uses a dot separator (id-ID 17.15) or non-Latin digits (ar ٥:١٥) are not parsed; such bare-id cards are dropped — the same behavior as before this fix, never a wrong-time join.

onevcat and others added 3 commits August 20, 2026 17:55
Events that reuse a meeting code created for another event (Calendar
shows the "this meeting code belongs to another event" banner) render
on the redesigned Meet homepage with a bare calendar event id — no
`_<timestamp>Z` instance suffix — so the v2 parser dropped them and
such meetings never reached the scheduler or the tray.

Accept bare-event-id cards as a fallback: the begin time is recovered
from the localized label text (24h, trailing AM/PM including the
narrow no-break space ICU emits, and CJK prefix meridiems), with the
calendar date anchored to sibling instance-id cards since the homepage
renders a single day at a time. Cards without a parseable time range
stay excluded to keep unrelated buttons out. Card lookup helpers used
by the click-to-join flow accept bare ids as well, so both the Tauri
app and the extension pick up the fix.

Verified end-to-end against a live reproduction: parse, tray display,
and auto-join via card click all confirmed on a reused-code meeting.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… anchors

Two review findings on the bare-event-id card fallback:

- CLDR formats Korean times with a prefix meridiem ("오후 5:15"), which
  the meridiem resolver did not recognize, so afternoon meetings parsed
  as early morning and were dropped as expired. Add 오전/오후 to the
  prefix-meridiem markers.

- The date anchor was chosen before visibility filtering, so a hidden
  stale instance card from another day could misdate visible bare-id
  cards. Resolve visibility once per card and only let visible
  instance-id cards anchor the date.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Confirms on real DOM that the homepage renders Korean times exactly as
CLDR predicts ("오후 5:45 – 오후 6:45", prefix meridiem, plain space).

Co-Authored-By: Claude Fable 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.

1 participant