Skip to content

feat(control-ui): browse meeting notes and manage capture sources - #140084

Merged
steipete merged 2 commits into
mainfrom
codex/130860-ui-publish-20260906
Sep 6, 2026
Merged

steipete merged 2 commits into
mainfrom
codex/130860-ui-publish-20260906

Conversation

@steipete

@steipete steipete commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

Related: #130860

Builds on the merged archive APIs in #139875; the capture and Discord ownership repairs are already merged in #139484, #139572, and #139658.

What Problem This Solves

Meeting transcripts need a reader that can find saved meetings and search speech beyond the currently loaded page, with capture settings available from the same workflow.

Why This Change Was Made

The existing Meetings route becomes a paginated archive and summary-first reader. It uses the shared transcript APIs for filtering, full-text search, and complete downloads. Meeting capture has native source controls under Communications settings, with observed Gateway state shown separately from unsaved configuration.

Saved summaries load through their existing read contract independently of paged speech. A transcript page that exceeds its transfer limit does not hide readable notes or available downloads.

Capture controls edit existing settings without introducing configuration keys or changing defaults. The UI retains the existing ID and reopening behavior. Title-only source edits apply to future captures through the normal configuration flow; the current capture and saved notes retain their identity. Feature copy and reader code remain lazy-loaded.

User Impact

Operators can find meetings by title, source, account, agent, and date; read stored notes or speech; and download complete Markdown or JSONL even while a search is active. Capture sources can be added, edited, and removed through native controls. Existing links redirect into the same workflow, and mobile navigation returns to the library.

Evidence

  • The initial UI slice passed 334 UI/catalog cases, its changed-code gate, build, and unchanged performance budgets. The final summary-read repair passed 32 reader cases, 11 browser E2E cases, three Chromium layout cases, UI types, the full changed-code gate, and a fresh independent P0–P2 review. Its upgrade regression fails on the original paged-summary request and passes while retaining the existing transfer limits.
  • An isolated real Gateway, SQLite store, and Chromium passed pagination, deep links, summary-first reading, search beyond loaded speech, source editing, and mobile navigation with 55 synthetic sessions and 310 utterances.
  • Both native downloads matched their exact Gateway response bytes, names, and MIME types. Markdown preserved a deliberately distinct three-utterance stored note and appended all 310 durable utterances; JSONL preserved every utterance in order.
  • Nine screenshots and both complete recordings were inspected as synthetic-only. Those proof leases were stopped.

The browser proof ran in the isolated Gateway workflow. The archive parent separately received real Gateway compatibility, date, and configuration proof and relocated capture E2E execution. The original browser run is bound to its recorded revision. Capture-editor sources are unchanged; the final reader repair receives separate large-summary Gateway proof and fresh branch CI. No external Discord room or operator Gateway was used for these browser checks.

The dedicated large-summary Gateway proof passed with all 58 frozen UI/runtime source hashes verified against the c8f candidate. The 2,623,030-byte summary response remained readable while paged speech correctly rejected its 1 MiB limit; the 1,311,399-byte native Markdown download matched its RPC payload and preserved all 1,311,214 bytes of canonical notes. Ordinary 50+10-row paging passed. The existing bounded Markdown preview is unchanged. Build and default-enforced budgets passed (343,761 B startup JS; 43,989 B CSS), and the lease is independently completed.

Current head: c8f0ee40a540d6af7eef508590735ecbede0f647. Exact-head CI passed on this revision. The attached before/after views and capture-settings view contain synthetic data only.

Before: meeting notes in the original reader

After: searchable library and summary-first reader

Native capture settings on an isolated real Gateway

Large saved notes remain readable through the summary-only contract

Transcript page limit preserves usable download controls

Add a paginated Meetings library with stored notes, full-transcript search,
complete Markdown/JSONL downloads, and accessible mobile navigation. Keep
capture configuration in native Communications controls using the shared
provider metadata and Gateway configuration flow.

Separate route state, rendering, and capture editing from request ownership.
Fence asynchronous reads and exports to the active connection and selection,
clear denied content, preserve drafts, and keep feature copy lazy-loaded.
Retain existing capture IDs and reopening behavior.

Validation: focused UI/catalog tests, changed-code checks, UI build and
unchanged performance budgets, independent review, and isolated real
Gateway/SQLite/Chromium proof with complete native downloads.

Refs: #130860
@clawsweeper

clawsweeper Bot commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review in progress

ClawSweeper is reviewing this revision. This supersedes any previous blocked status.

View the workflow run.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation app: web-ui App: web-ui scripts Repository scripts labels Sep 6, 2026
@steipete
steipete marked this pull request as ready for review September 6, 2026 12:04
@openclaw-barnacle openclaw-barnacle Bot added size: XL maintainer Maintainer-authored PR labels Sep 6, 2026
@clawsweeper clawsweeper Bot added P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Sep 6, 2026
@clawsweeper

clawsweeper Bot commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

Codex review: blocked before merge. Reviewed September 6, 2026, 8:39 AM ET / 12:39 UTC.

ClawSweeper review

What this changes

Adds searchable meeting archives, paginated transcript reading, downloads, and capture-source controls through the existing Communications settings flow.

Merge readiness

⛔ Blocked before merge - 2 items remain

The previous summary-compatibility blocker is resolved, and no new blocking defect was found. This distinct UI work remains absent from current main and carries protected maintainer ownership.

Priority: P2
Reviewed head: c8f0ee40a540d6af7eef508590735ecbede0f647

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A useful, coherent feature with the prior compatibility blocker repaired and substantial boundary coverage; no actionable blocking finding remains.
Proof confidence 🌊 off-meta tidepool Not applicable: The maintainer-authored PR is exempt from the external-contributor proof gate. Its body reports real Gateway/SQLite/Chromium reader, download, and capture-editor evidence; final summary compatibility is separately covered in source, while linked media and the pending dedicated runtime result could not be inspected here.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Not applicable Not applicable: The maintainer-authored PR is exempt from the external-contributor proof gate. Its body reports real Gateway/SQLite/Chromium reader, download, and capture-editor evidence; final summary compatibility is separately covered in source, while linked media and the pending dedicated runtime result could not be inspected here.
Evidence reviewed 8 items Current main still needs the UI work: The fetched main revision retains the 200-item Meetings list and selector-only notes reader, without the proposed filtering, transcript pagination, downloads, or native capture editor.
Published reader contract: The v2026.9.2 reader uses the original selector-only summary request. The release tag resolves to the supplied release commit; this UI feature is not present there.
Prior finding resolved: The summary task now sends only selector, independently of the bounded speech request. Rendering and download controls can use the summary result when speech paging fails. This addresses the concrete blocker retained in the previous review projection.
Findings None None.
Security None None.

How this fits together

Meeting plugins save transcripts in the Gateway’s shared SQLite archive. The Control UI reads that archive through existing Gateway APIs and sends capture-setting edits through the shared Settings coordinator.

flowchart LR
  A[Meeting plugins] --> B[SQLite transcript archive]
  B --> C[Authorized Gateway reads]
  C --> D[Meetings library and reader]
  D --> E[Markdown and JSONL downloads]
  F[Capture source editor] --> G[Settings validation and saving]
  G --> A
Loading

Before merge

  • Resolve merge risk (P1) - Linked browser captures and workflow artifacts could not be independently inspected here; the captured body describes the final large-summary Gateway proof as still in progress.
  • Review config compatibility - Confirm compatibility and upgrade impact for the changed config or default surface before merge.
Agent review details

Security

None.

PR surface

Source +1756, Tests +2629, Docs +120, Generated 0, Other +3. Total +4508 across 39 files.

View PR surface stats
Area Files Added Removed Net
Source 19 2136 380 +1756
Tests 16 2647 18 +2629
Docs 2 139 19 +120
Config 0 0 0 0
Generated 1 2 2 0
Other 1 3 0 +3
Total 39 4927 419 +4508

Review metrics

Metric Value Why it matters
Production versus test growth Production/tooling net +1,759 lines; tests/support net +2,629 lines Growth implements the reader and capture editor with lifecycle, compatibility, and browser coverage; documentation is excluded.
Configuration surface 0 new configuration keys or schema migrations The native editor exposes existing transcript settings through their current persistence owner.

Merge-risk options

Maintainer options:

  1. Decide the mitigation before merge
    Keep the unified archive reader and existing Settings write path, preserving saved-note access, source identities, and current authorization boundaries.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Technical review

Best possible solution:

Keep the unified archive reader and existing Settings write path, preserving saved-note access, source identities, and current authorization boundaries.

Do we have a high-confidence way to reproduce the issue?

Not applicable to the feature request. The prior large-summary defect has a source-backed regression fixture, but this read-only review did not execute tests.

Is this the best way to solve the issue?

Yes: the UI reuses the merged archive APIs and shared Settings coordinator, and the revised summary request preserves the established read contract.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 0a753eb92f6f.

Labels

Label justifications:

  • P2: This is a bounded meeting-archive usability improvement without an established urgent production regression.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The maintainer-authored PR is exempt from the external-contributor proof gate. Its body reports real Gateway/SQLite/Chromium reader, download, and capture-editor evidence; final summary compatibility is separately covered in source, while linked media and the pending dedicated runtime result could not be inspected here.

Evidence

What I checked:

  • Current main still needs the UI work: The fetched main revision retains the 200-item Meetings list and selector-only notes reader, without the proposed filtering, transcript pagination, downloads, or native capture editor. (ui/src/pages/meetings/meetings-page.ts:75, 0a753eb92f6f)
  • Published reader contract: The v2026.9.2 reader uses the original selector-only summary request. The release tag resolves to the supplied release commit; this UI feature is not present there. (ui/src/pages/meetings/meetings-page.ts:115, 3928bad9badf)
  • Prior finding resolved: The summary task now sends only selector, independently of the bounded speech request. Rendering and download controls can use the summary result when speech paging fails. This addresses the concrete blocker retained in the previous review projection. (ui/src/pages/meetings/meetings-page.ts:177, c8f0ee40a540)
  • Compatibility regression coverage: The added regression supplies saved notes above 1 MiB, rejects explicit page reads, and checks that notes remain visible and Markdown download remains available. Source inspection confirms the fixture matches the existing library’s separate legacy and page budgets; tests were not executed during this read-only review. (ui/src/pages/meetings/meetings-page.test.ts:64, c8f0ee40a540)
  • Settings preservation and authorization: Source edits retain untouched fields, reject replacement of the edited source, validate provider locators, and use the existing runtimeConfig.patchForm flow. The shared coordinator checks current config.set permission and fences autosave across reconnects; no new configuration key or storage schema is introduced. (ui/src/pages/config/meeting-capture.ts:205, c8f0ee40a540)
  • Archive implementation history: Current-main blame ties the legacy/page request distinction to the merged archive implementation. The supplied GitHub context confirms feat(transcripts): browse and export saved meeting archives #139875 merged this prerequisite while explicitly leaving the UI slice separate. Raw commit inspection records a parent, so no root-style introduction inference was used. (src/transcripts/library.ts:170, 3f123833e455)

Likely related people:

  • Peter Steinberger: Raw commit 3f12383 adds src/transcripts/library.ts:170 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 3f123833e455; files: src/transcripts/library.ts)

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (1 earlier review cycle)
  • reviewed 2026-09-06T12:12:34.913Z sha 1ef104a :: blocked before merge. :: [P1] Preserve summary access when paged reads exceed their byte limit

Load saved summaries through their existing selector-only read contract,
independently of bounded speech pages. Keep valid notes and exports available
when a paged read exceeds its limit, with shared access revocation and stale
response fencing across both requests.

Cover the oversized-summary regression, both read lifecycles, and browser
reload request contracts. Align the Communications E2E subtitle with the
existing meeting-capture settings copy.

Validation: 32 reader cases, 11 browser E2E cases, 3 Chromium layout cases,
UI types, changed-code checks, and independent P0-P2 review.
Refs: #130860, #140084
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Sep 6, 2026
@steipete
steipete merged commit 6ce5c1d into main Sep 6, 2026
208 checks passed
@steipete
steipete deleted the codex/130860-ui-publish-20260906 branch September 6, 2026 12:47
@steipete

steipete commented Sep 6, 2026

Copy link
Copy Markdown
Contributor Author

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Sep 7, 2026
…enclaw#140084)

* feat(control-ui): browse meeting notes and manage capture sources

Add a paginated Meetings library with stored notes, full-transcript search,
complete Markdown/JSONL downloads, and accessible mobile navigation. Keep
capture configuration in native Communications controls using the shared
provider metadata and Gateway configuration flow.

Separate route state, rendering, and capture editing from request ownership.
Fence asynchronous reads and exports to the active connection and selection,
clear denied content, preserve drafts, and keep feature copy lazy-loaded.
Retain existing capture IDs and reopening behavior.

Validation: focused UI/catalog tests, changed-code checks, UI build and
unchanged performance budgets, independent review, and isolated real
Gateway/SQLite/Chromium proof with complete native downloads.

Refs: openclaw#130860

* fix(control-ui): keep large saved meeting notes readable

Load saved summaries through their existing selector-only read contract,
independently of bounded speech pages. Keep valid notes and exports available
when a paged read exceeds its limit, with shared access revocation and stale
response fencing across both requests.

Cover the oversized-summary regression, both read lifecycles, and browser
reload request contracts. Align the Communications E2E subtitle with the
existing meeting-capture settings copy.

Validation: 32 reader cases, 11 browser E2E cases, 3 Chromium layout cases,
UI types, changed-code checks, and independent P0-P2 review.
Refs: openclaw#130860, openclaw#140084
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui docs Improvements or additions to documentation maintainer Maintainer-authored PR P2 Normal backlog priority with limited blast radius. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. scripts Repository scripts size: XL status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant