feat: add meeting deletion - #2268
Conversation
93e9eef to
ae1179e
Compare
ae1179e to
9365a52
Compare
Design Review (Fable 5, fork) — 🟡 CONCERNSAdvisory design-level review of Design-Verdict: CONCERNS Sound deletion design; the risk is two unrelated production/test changes riding along, including a timing change to AgentsPage's delete-confirmation guard. Watch
Suggestions
[DESIGN-REVIEWED] 190f273 |
Opus 4.8 Review (fork) — ✅ no blocking findingsReviewed Review detailsI've reviewed the full diff and the surrounding lock/containment machinery. Let me do a final check on lock ordering to rule out a deadlock in the new delete path. The delete path acquires locks in order: No findings. [OPUS-REVIEWED] 190f273 |
GPT 5.6 Review (fork) — ✅ no blocking findingsReviewed Review detailsNo findings. |
UX Review (Fable 5, fork) — 🟡 CONCERNSAdvisory UX-level review of I've reviewed the full patch, the surrounding UX-Verdict: CONCERNS Solid guarded delete flow, but calendar-synced rows survive their own "Deleted" toast, and failures render the backend's raw lowercase English in all 12 locales. Watch
Suggestions
[UX-REVIEWED] 190f273 |
9365a52 to
2f7e813
Compare
|
Addressed the Fable UX review in
Focused frontend coverage: 92 tests passed. The full frontend and Electron test command also passes (844 Electron tests). |
2f7e813 to
cdbdc28
Compare
let users remove inactive meetings and their local notes from the meetings list while protecting live sessions from destructive races.
cdbdc28 to
190f273
Compare
) The 0.2.0 section was written in #2305, the commit that became v0.2.0-rc.4. Seventy-one commits have landed on main since, nineteen of them feat:, and the section was never revisited. It therefore both omitted shipped features and described one that no longer exists as written. The wrong entry mattered most: the Webhooks bullet told the reader to manage inbound automation "from Settings", but #2343 moved that page behind a per-device Preview pages toggle under Developer and hides it by default. A 0.2.0 user following the release notes would have gone looking for a page that is not there. Added, all from the rc.6 range: opt-in Slack setup and the multi-channel repositioning (#2340), Telegram multi-account (#2203) and inbound attachments (#2201), sub-agent completions reaching non-Slack parents (#2352), Discord reply continuation (#2326), Slack OPTIONS as a control (#1467), the Agent Templates two-pane inspector, project-local agent discovery (#2167), send-a-copy-to-another-instance, Jira and setting link chips (#2019, #1907), CJK emphasis rendering, the MCP Apps switch (#2293, #2337), the Connections provider registry (#2285), GitHub Enterprise Server support in Code Review Sage (#2154), operator notes on user deny patterns (#2341), the locked git-publish floor rules (#2369), the persist-or-refuse boot guard (#2279), and the turn-ceiling bounds on the approval and stall windows (#2372, #2373). Scope is exactly 5fe4bd5..ab20b4e, the range v0.2.0-rc.6 ships. The three commits main carries beyond rc.6, including meeting deletion (#2268), belong to the next release and are deliberately not described here.
…c.7 delta (#2413) #2412 reconciled the 0.2.0 section against what rc.6 ships. Cutting rc.7 from main moves the target, so this closes the remaining gap and surfaces a larger omission found while checking it. Four built-in apps ship today and appear in NO release's notes at all: Meetings (#1080), Papyrus (#1077), PPTX Maker (#1079), and Mochi (#1258). All four landed in the 0.1.2-to-0.2.0 window, 0.1.2's list did not include them, and 0.2.0's heading claimed "Four new built-in apps" while eight had in fact arrived. A user can install and enable any of them from the App Store, so the notes were hiding shipped functionality rather than merely lagging. Since 0.1.2's notes are already published and immutable, 0.2.0 is the only place they can surface. The heading now reads eight, and the entry states plainly that all of them are opt-in. Also documents the three user-visible changes main carries beyond rc.6, which rc.7 will therefore ship: meeting deletion (#2268), the wait tool's live countdown and early-end button (#2331), and the MCP OAuth fix that emits oauthScopes and oauth.clientId in the fields kiro-cli reads. Note the structural problem this is the second pass on: a periodic reconciliation drifts again the moment another user-visible PR merges. The durable fix is requiring a changelog line in the PR that introduces the change, not a sweep before each release.
let users remove inactive meetings and their local notes from the meetings list while protecting live sessions from destructive races.
…rodotdev#2412) The 0.2.0 section was written in kirodotdev#2305, the commit that became v0.2.0-rc.4. Seventy-one commits have landed on main since, nineteen of them feat:, and the section was never revisited. It therefore both omitted shipped features and described one that no longer exists as written. The wrong entry mattered most: the Webhooks bullet told the reader to manage inbound automation "from Settings", but kirodotdev#2343 moved that page behind a per-device Preview pages toggle under Developer and hides it by default. A 0.2.0 user following the release notes would have gone looking for a page that is not there. Added, all from the rc.6 range: opt-in Slack setup and the multi-channel repositioning (kirodotdev#2340), Telegram multi-account (kirodotdev#2203) and inbound attachments (kirodotdev#2201), sub-agent completions reaching non-Slack parents (kirodotdev#2352), Discord reply continuation (kirodotdev#2326), Slack OPTIONS as a control (kirodotdev#1467), the Agent Templates two-pane inspector, project-local agent discovery (kirodotdev#2167), send-a-copy-to-another-instance, Jira and setting link chips (kirodotdev#2019, kirodotdev#1907), CJK emphasis rendering, the MCP Apps switch (kirodotdev#2293, kirodotdev#2337), the Connections provider registry (kirodotdev#2285), GitHub Enterprise Server support in Code Review Sage (kirodotdev#2154), operator notes on user deny patterns (kirodotdev#2341), the locked git-publish floor rules (kirodotdev#2369), the persist-or-refuse boot guard (kirodotdev#2279), and the turn-ceiling bounds on the approval and stall windows (kirodotdev#2372, kirodotdev#2373). Scope is exactly 5fe4bd5..ab20b4e, the range v0.2.0-rc.6 ships. The three commits main carries beyond rc.6, including meeting deletion (kirodotdev#2268), belong to the next release and are deliberately not described here.
…c.7 delta (kirodotdev#2413) kirodotdev#2412 reconciled the 0.2.0 section against what rc.6 ships. Cutting rc.7 from main moves the target, so this closes the remaining gap and surfaces a larger omission found while checking it. Four built-in apps ship today and appear in NO release's notes at all: Meetings (kirodotdev#1080), Papyrus (kirodotdev#1077), PPTX Maker (kirodotdev#1079), and Mochi (kirodotdev#1258). All four landed in the 0.1.2-to-0.2.0 window, 0.1.2's list did not include them, and 0.2.0's heading claimed "Four new built-in apps" while eight had in fact arrived. A user can install and enable any of them from the App Store, so the notes were hiding shipped functionality rather than merely lagging. Since 0.1.2's notes are already published and immutable, 0.2.0 is the only place they can surface. The heading now reads eight, and the entry states plainly that all of them are opt-in. Also documents the three user-visible changes main carries beyond rc.6, which rc.7 will therefore ship: meeting deletion (kirodotdev#2268), the wait tool's live countdown and early-end button (kirodotdev#2331), and the MCP OAuth fix that emits oauthScopes and oauth.clientId in the fields kiro-cli reads. Note the structural problem this is the second pass on: a periodic reconciliation drifts again the moment another user-visible PR merges. The durable fix is requiring a changelog line in the PR that introduces the change, not a sweep before each release.
Problem / Motivation
Meetings that have local notes and artifacts cannot be removed from the dashboard. Users have no way to clean up completed test, duplicate, or no-longer-needed meeting data without editing the data directory manually.
Why it matters
Meeting data can include transcripts, notes, diagrams, and action items. A clear, guarded deletion flow gives users control over that local data while preventing an in-progress meeting from being removed accidentally.
What changed (motivation → approach → change)
IconButtonwith the dashboard's establishedTrash2delete icon to the far right of each locally stored meeting row, after the status and notes icon.active,paused, andreviewingmeetings. Calendar-only rows do not expose a local-data delete action.409response.DELETE /api/apps/meetings/meetings/{meeting_id}. The backend validates containment, refuses linked meeting directories, rejects live sessions with409 meeting_active, and returns404 meeting_not_foundfor missing meetings.State behavior
Tests
python -m pytest -q test/test_error_code_contract.py test/test_meetings_routes.py test/test_meetings_store.py— 242 passed; covers the HTTP error-code contract, deletion success/missing/live cases, path safety, and deterministic delete races with initialization, Quick Add, and agent toggles.npx vitest run src/test/MeetingsPage.test.tsx src/test/MeetingsApiClient.test.ts src/i18n/catalogParity.test.ts --coverage=false— 92 passed; covers UI states, semantic delete and pending icons, inline backend failures, confirmation, API behavior, cache cleanup, and catalog parity.test_first_empty_response_requeues_messageby awaiting its cancelled background tasks and scoping the flush assertion to its own slot; it passes 5 consecutive focused runs, the 10-test class, and all 540 dashboard-chat tests in both serial and parallel execution.npm run test:website— 11,408 passed, 2 expected failures, 3 skipped across 858 files.npm run test:electron— 844 passed.npm run build.npm run lint— 0 errors (repository baseline warnings only).I18N_BASE_REF=upstream/main npm run lint:i18nandI18N_BASE_REF=upstream/main npm run i18n:check— passed all diff-scoped and enforced checks.isort --check-only,flake8, andmypyon all modified Meetings backend modules — passed.scripts/docs-lint.sh,scripts/scrub-lint.sh --no-history, the brand-name gate, andgit diff --check— passed.main, which includes the merged Korean catalog parity fix from fix(i18n): restore ko catalog parity broken on main #2244; the duplicate follow-up fix(i18n): add missing ko translations breaking catalogParity on main #2256 was closed without merge.Manual verification
website/scripts/capture-meetings-delete.mjsruns the production SPA in Chromium with deterministic API fixtures and verifies:Screenshots / video
Meeting list states — dark
Successful deletion and notification
Failed deletion with inline feedback
Meeting list states — light
Related Issues
N/A — no open issue or pull request specifically covering meeting deletion was found.
Checklist
feat: add meeting deletion)Contribution License Agreement
N/A — the repository template does not currently require contributor-entered CLA text.