Skip to content

feat: add TaskChef Next passive sidebar demo - #146

Open
favoyang wants to merge 81 commits into
mainfrom
codex/taskchef-next
Open

favoyang wants to merge 81 commits into
mainfrom
codex/taskchef-next

Conversation

@favoyang

@favoyang favoyang commented Oct 5, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Add TaskChef Next: a read-only local Codex chat board. SQLite supplies inventory and turn state; optional JSONL reads add selected-chat details. Database errors remain fatal.

  • Cache database records with persistent read-only connections and PRAGMA data_version. Check every five seconds while visible. No open read transaction is held between checks.

  • Keep Scheduled, Running, Waiting for input/review, and Done visible when empty, with short messages specific to each column. Interrupted/failed turns appear in Waiting with an Interrupted tag. Unknown states remain Unverified. Archived chats have a separate optional column.

  • Retain List code but hide List mode and Board/List controls. Render saved reply excerpts as safe Markdown and use compact calendar timestamps.

  • Add native structured settings for exec, CLI, and archived visibility. All default hidden. Restore the settings icon. An app-only MCP tool requests the installed local plugin page through the native OS Codex URL handler, using the same opener as Open chat. Unresolved locations and opener failures appear in notifications.

  • Exclude no-turn chats, subagents, Guardian reviews and recorded spawn children. Keep local Mark Done tied to the selected turn; a new turn resets its effect. No Reopen control.

  • Feature the first supported Markdown image from the full latest assistant reply above the card title. Lazy-load local PNG/JPEG/GIF/WebP up to 4 MiB via an app-only tool bound to the chat, turn, and saved URL. HTTPS images load in the sidebar with no referrer. Missing or failed covers are hidden; clicking opens Details.

  • Add a shared local notification center: bell/unread badge, five-second overlay toasts, newest 100 messages, All/Unread, Mark all read, and Clear all. First scan is quiet; per-turn watermarks prevent duplicate or cleared notifications from replaying. Completed ordinary-input turns and interruptions create unread notices; scheduled completions stay quiet. Mark Done confirmations are already read. Saved notices can open Details for chats later hidden by Settings. No daemon or OS notifications. Unarchiving an old terminal turn does not replay its notification.

  • Add editable storage and lookup diagrams, exports, and research docs. GitHub PR status and cloud chat support remain backlog work.

  • Group chats by saved Codex projects instead of raw working folders. Use SQLite projects/project_roots/threads.project_id, legacy desktop assignments/ID migration hints, and Git worktree pointers (including nested cwd). Preserve actual working folders in Details. Combine projectless/dated Codex folders into No project.

  • Replace the Project select with a searchable folder popover, selection check, keyboard navigation, and All projects/No project filters. Include saved projects without visible chats; no project creation controls.

Validation

  • Full Node suite: 385 tests passed before the final nested-worktree/missing-settings-target changes; all 27 affected server tests passed afterward. All 107 final UI tests passed. Remote CI runs the complete final suites.

  • Both TypeScript checks and UI builds passed; package creation and diff checks passed.

  • Fresh independent complete-branch review: CLEAN.

  • Browser QA with real local data verified board-only UI, Settings desktop-opening tool request, interrupted grouping/tag, and empty Scheduled, Running, Waiting and Done columns after project/date filtering. QA used isolated local settings and Done state.

  • Local preview 8.6.2-next.28 installed. Installed MCP probe reports healthy real data and cache reuse, native settings capability, and the expected settings link.

  • Notification browser QA exercised readiness/error messages, five-second toasts, Details navigation, Done confirmation overlay, unread controls, 1280px/420px layouts, and read synchronization between two views. Tests used synthetic chat fixtures with the real registered MCP tools and isolated local storage. The corrected test host reported no console errors on the final pass.

  • Installed package probe read 980 real local chat records with a quiet notification baseline and verified the installed settings tool resolves the correct preview marketplace. Screenshot evidence remains local.

  • Project picker comparison: all 38 saved local project names and paths match the Codex list_projects tool, with no differences.

  • Browser QA with real local chats verified search, selection/reset, No project filtering, keyboard selection and 1280px/420px layouts. The browser startup MutationObserver warning also reproduces in an empty iframe without TaskChef code; no additional errors appeared during picker interactions.

  • Installed Next.28 MCP probe reads real chats and returns all 38 saved projects. Local screenshot: /private/tmp/taskchef-next-project-picker.png.

Limits

  • Codex database schemas and local plugin-page links are internal and may change. SQLite reader requires a supported Node version documented in README.
  • Running follows the selected latest turn; Waiting is a queue rule, not semantic proof of a question.
  • Native host navigation from Settings still needs a user check. Computer use cannot control the Codex app. Browser QA verified the registered MCP tool reaches the injected native opener and failures enter the notification center. The installed tool target was verified; native page opening is not claimed.
  • Notifications reconcile only when a visible view polls. Reopening can detect the latest saved turn; intermediate unseen turns are not reconstructed.
  • Cloud inventory is not implemented. GitHub state uses authenticated read-only requests for registered latest-turn PRs; replies alone do not prove PR ownership.
  • This PR is ready for review, not merged. Existing sidebar instances may need to be reopened to load the preview.

Image QA: verified a missing real saved image path, then an isolated test cover through the same raster reader; final browser QA confirmed the real Jevfast SEO missing cover is hidden. Browser confirmed image-above-title layout, Details click, and no console errors on the successful-cover pass. No Codex database records were changed.

Project picker sorting

  • Add a sort icon beside Search projects, with a vertical divider. Cycle Most recent (default) → A–Z → Z–A.
  • Most recent uses the latest eligible chat activity per project, including Codex recency timestamps. Keep All projects first and No project last. Preserve search and selection.
  • Installed local preview 8.6.2-next.29.

Validation: both TypeScript checks, 107 UI tests, 21 scanner tests, MCP app build, real-data browser checks for all sort modes, search, selection, refresh and narrow sidebar layout. Fresh complete-branch independent review.

Notification bell

Replace the numbered badge with a 7px unread dot. The dot clears when notifications are read. The bell announces unread state to screen readers. Updated existing read/clear tests; 107 UI tests, TypeScript check, build and sidebar-width browser read/unread checks passed. Local preview 8.6.2-next.30.

TaskChef icon assets

  • Keep the rounded app/navbar and monochrome sidebar SVGs unchanged.
  • Add a clean square orange avatar SVG and 512px PNG, using the exact dark navbar artwork and colors. Add a transparent rounded PNG export.
  • Document the three uses and filenames in assets/README.md.
  • Replace the GitHub App logo with the square PNG and match the badge background to #F59E0B; visually verify the public page.

Validation: SVG parsing, exact SVG-to-PNG rendering, 512px dimensions, corner alpha checks, package dry-run inclusion, git diff --check, and independent branch review.

Avatar follow-up: enlarge the hat by 30%, preserve it inside a circle crop, and add named light/dark sidebar SVG exports matching existing MCP colors. Exact render/crop checks, package inclusion and fresh full-branch review passed. GitHub public page verified.

Scheduled chat rules update

  • Completed scheduled prompts return to Scheduled regardless of PR status.
  • Completed human prompts on scheduled chats return to Scheduled only when their latest-turn PRs are all merged; otherwise they wait.
  • Running and interrupted turns keep their expected priority. Running overrides an old manual Done mark.
  • Scope PR decisions to registered attachments referenced or successfully attached in the selected latest turn. Historical PRs no longer decide new turns.
  • Document the rules for chats without an active schedule.

Validation: 428 Node tests passed, no skips; independent full-branch review CLEAN. Read-only real-data probe confirmed four completed routine turns return to Scheduled. Installed preview 8.6.2-next.39.

GitHub settings and fetch scope

  • Native Settings → GitHub → Connect GitHub opens sign-in, repository access, and disconnect controls in a settings-only MCP App. Each view uses tools associated with its own resource.
  • Signed-out Done column links to the same controls. Manual Done remains available for chats without a latest-turn PR.
  • GitHub queries follow project/time filters and rendered-card visibility. All time is default; offscreen historical cards do not start requests. Details checks one selected chat on demand.
  • Check at most 25 uncached/expired PRs per five-second poll. Cache statuses for 60s; retain merged PRs until server restart/sign-in change. Board refresh respects the cache.

Validation: 429 Node tests, 120 UI tests, TypeScript, build, and independent review passed. Browser QA exercised sign-in/poll/disconnect with simulated GitHub responses and resource permission checks. Real GitHub sign-in was not changed. Preview 8.6.2-next.40 installed; existing desktop MCP process still needs reload to expose the new settings tools.

GitHub settings controls

GitHub settings follow-up

  • Remove the public client ID field; include the registered TaskChef App ID and preserve existing internal overrides.
  • Native GitHub action reads Connect GitHub when signed out and Manage GitHub when connected.
  • Simplify sign-in copy; show multi-organization installation guidance after connection. Repository access buttons now have visible borders.
  • All time is default. Initial inventory reads start no GitHub requests. Only viewport-intersecting rendered cards and selected Details start checks; empty searches and closing the board clear the visible-card scope.
  • Fix approval polling for a pending sign-in loaded while hidden. Restore Copy Task ID in read-only Details.
  • Document Codex's observed PR dot rules: green can mean CI passing or mergeable; yellow means other in-progress PRs, not specifically no CI. The official changelog confirms badge states, but publishes no color legend.
  • Keep the existing 60s memory cache pending a separate long-cache design discussion.

Validation: 430 Node tests and 124 UI tests; both TypeScript checks; MCP App build; full-branch independent review. Browser QA verified signed-out/connected controls, repository access border, All time, scrolling scope changes, empty-search scope clearing, and no console errors. GitHub sign-in simulation did not change real credentials. Preview 8.6.2-next.41 needs a desktop MCP runtime reload to expose backend changes.

Card PR icons and persistent cache

  • Move compact PR icons into the card stats line beside time. Hover/focus shows a clickable PR title, CI status and check time; unknown status has no card text.
  • Replace Active schedule text with a clock before PR icons. Read actual/nominal next run from the desktop scheduler database using short read-only queries.
  • Add a folder icon before the project name.
  • Save account-bound PR results to a restricted local non-secret cache shared under the existing lock. Keep settled results across MCP restarts. Check visible new turns/PRs, explicit Refresh/Details, and unresolved CI/mergeability after 60 seconds while visible.
  • Automatic sidebar visibility catch-up and Mark Done reuse the PR cache. Settled results need Refresh/Details to detect later GitHub changes.

Validation for this update

  • Full Node suite: 435 passed before final cache edge-case additions. Affected GitHub suite: 41 passed; MCP tool suite: 3 passed after additions.
  • UI suite: 130 passed. Both TypeScript checks and production MCP App build passed.
  • Browser: wide and 420px sidebar layouts, schedule tooltip, PR popup/link keyboard access, Escape dismissal; no new console errors. Screenshots use isolated sample cards.
  • Read-only live scan: all five active schedules supplied next-run times, with zero schedule-read errors.
  • Independent full-branch review CLEAN. Installed local preview 8.6.2-next.42; fresh installed MCP probe is healthy, with five saved next-run times and zero source mismatches.

Card PR popup
Schedule clock at sidebar width

Private PR status fix

  • Keep independently returned PR state when optional metadata or CI fails.
  • Read CI by head revision through REST check-runs and combined commit status, using existing read-only app permissions. The PR query no longer reads GraphQL commit objects.
  • Empty legacy status lists do not imply pending CI. Incomplete check-run pages remain unknown.
  • Regression tests cover partial GraphQL errors, read-only REST endpoints, and CI access failure.

Validation: 43 GitHub tests and 3 MCP tests passed; independent full-branch review CLEAN. Installed preview 8.6.2-next.43 matches source. Live checks verified merged status and CI in private repositories with existing permissions; inaccessible organization PRs remain unknown.

Unified card status popup

  • Share one popup across the card time, schedule clock, and PR icons.
  • Show available work duration, linked PR titles with numbers, known CI status, and next run on separate rows.
  • Omit unavailable rows, mergeability text, and check timestamps.
  • Keep keyboard access to PR links and Escape dismissal.
  • Include the preview screenshot in docs and the package.

Validation: 134 UI tests passed; dashboard and MCP App TypeScript checks and builds passed; package dry-run includes the screenshot; narrow and wide browser preview, PR-link keyboard focus, Escape dismissal, and console check verified.

CI cache verification: merged PRs with pending or unknown CI retry while visible; 49 GitHub and MCP tests passed.

The focusable status line includes a semantic PR-state description for screen-reader users.

Browser keyboard order verified: status line → time toggle → PR link; Escape closes and restores focus.

Closed PRs with settled CI keep their cached result when mergeability is unknown. Existing open/draft icon-readiness retries remain.

CI follow-up: avoid jsdom floating-layout work in the row/keyboard unit test. Real Mantine layout is checked in browser QA. All 134 UI tests pass locally in 13.55s; popup tests take 0.15s.

Compact status rows and repository access warnings

  • Add icons for duration, PR state, CI, schedule, and direct subagent count.
  • Put the PR number first; truncate long PR titles on one line.
  • Show a repository-access warning and GitHub App installation link for permission failures. NOT_FOUND uses “Cannot access”; network and rate limits do not claim access denial.
  • Preserve known PR state when CI access fails. Permission failures do not trigger the global rate-limit cooldown.
  • Limit concurrent CI lookups to five PRs per group.

Validation: 135 UI tests and 53 GitHub/MCP tests pass. Both TypeScript checks and builds pass. Browser preview checked at 1280px and 340px, including PR link focus, Escape, title truncation, access action, and console errors. Package dry-run includes the updated screenshot.

Codex-style PR glyphs

  • Draw local SVG icons on a 20px grid for open, draft, merged, closed, and CI states.
  • Use the curved merge branch, plain-open plus, and status dot replacing the lower-right node.
  • Share glyphs between cards and popup rows; preserve labels, colors, and access warnings.
  • Include a normal-size/enlarged comparison screenshot in docs and the package.

Validation: 135 UI tests, both TypeScript checks, and both production builds pass. Browser comparison covers all states; actual board and popup verified with no console errors. Package dry-run includes the screenshot. Independent complete-branch review CLEAN. Installed UI-only preview update; sidebar Refresh reloads the change.

Schedule clock direction

Mirror the schedule clock horizontally in the card and next-run popup row to match Codex. Both TypeScript checks and builds pass. Browser verification covers both clock locations with no console errors; the docs popup screenshot is updated. Installed UI-only preview update uses sidebar Refresh.

Running duration alignment

  • Removed the old 1px upward offset from the hourglass beside running durations.
  • Verified both short and long labels use the same centered alignment in the actual MCP app HTML fixture.
  • Passed dashboard and MCP app TypeScript checks and builds.

Card timestamp formats

  • Default card timestamps to compact relative ages: <1m, 1m, 2h, 5d, 1mo.
  • Add native Card display → Show calendar dates to restore local times, Yesterday, and short month dates.
  • Keep running hourglass durations and unified status popup unchanged.
  • Verified both formats and setting updates with unchanged board data in the actual MCP app HTML fixture. Passed 36 targeted UI tests, 3 MCP tests, both TypeScript checks, and both builds.

Repository access popup

  • Remove the duplicate warning icon beside the repository access message.
  • Frame that message and Grant access link with a border matching the PR warning color.
  • Passed both TypeScript checks, both builds, and 9 status icon tests. Browser popup check confirmed the border, single warning icon, retained link, and no console errors.

Chat search metadata

  • Rename the search control to Search chats.
  • Match project names, configured GitHub repositories, PR titles, and PR owner/repository names alongside existing titles and reply excerpts.
  • Preserve case-insensitive all-word matching and project/date filters; search uses loaded metadata and keeps existing visible-card refresh behavior. PR titles are searchable after GitHub loads them.
  • Passed the MCP TypeScript check, build, 28 UI tests, and actual MCP HTML browser checks for repository-only and mixed-field queries.

Text and popup alignment

  • Shorten the native calendar setting description to: Show calendar dates and local times instead of relative ages.
  • Reserve the standard empty icon column in the framed access message so its text aligns with the other popup rows.
  • Use Search Chats for both the search placeholder and accessible label.
  • Passed both TypeScript checks/builds, 37 UI tests, 3 MCP tests, and browser alignment verification (all four text rows have the same x coordinate; no console errors).

Card drag destinations

  • Every card can start dragging and uses a hand cursor. Highlight only valid destination columns.
  • Done and Scheduled queue moves remain limited to Waiting cards under the existing schedule and PR rules. Blocked Waiting drops show their rule without moving the card.
  • Cards from every column can drop into the visible Archived column to open Archive in Codex instructions. Archived visibility remains optional.
  • Passed 45 targeted UI tests, both TypeScript checks, both builds, and independent complete-branch review. Browser checks confirmed a Waiting-to-Done move and Running/Done-to-Archived instructions.
  • Installed the UI preview; sidebar right-click Refresh reloads these changes. The earlier Scheduled backend action still requires runtime restart.

Board loading, transitions, and notifications

  • Mark unread notifications read when they become visible in the open center, including scroll. Retry failed auto-read requests on later observation.
  • Keep rounded whole-column valid-drop highlights and add 8px padding between their borders and cards.
  • Slide cards between their previous and new positions on board updates, respecting reduced-motion preferences.
  • Show Loading… during the initial snapshot instead of empty queue text.
  • Handle native card image/link drag starts as card drags while preserving normal clicks.
  • Passed 52 targeted UI tests, both TypeScript checks and production builds, and independent complete-branch review. Browser checks verified initial loading, auto-read and dot clearing, padded highlight, and several frames of a card moving from Waiting to Done.
  • Installed the sidebar preview. Right-click TaskChef → Refresh reloads these UI changes without a runtime restart.

Waiting column, notifications, and detail proposal

  • Rename the board column to Waiting for review.
  • Open the notification center on hover; preserve keyboard and touch opening.
  • Add editable draw.io and PNG proposals for wide and narrow chat details. The redesign is proposed, not implemented.
  • Validation: 34 focused React tests, MCP app type check and build; browser hover/open/close checks and exported wireframe inspection.

Theme selector

  • Add Dark, Light, and System choices after Refresh; remember the selection in local storage.
  • Adapt board, cards, and notification colors; keep Dark as the default.
  • Stack the header at small widths so controls stay visible.
  • Validation: 29 app tests, MCP app type check/build, live theme change and reload persistence, narrow 320px header check, no browser console errors.

Appearance fix and revised design proposals

  • Fix host inline dark color-scheme overriding the selected Light appearance.
  • Propose separate DAY/NIGHT/SYSTEM controls and Default theme in a hover panel; no new panel implementation yet.
  • Revise detail wireframe: no reply heading/footer, Activity before PRs, once-per-repository access warning, latest-first PR proposal, four collapsed technical fields.
  • Compare current rendered web details with the passive sidebar data.
  • Validation: reproduced partial Light theme under an inline dark host, verified full Light after fix and reload; 29 app tests, MCP app type check/build, inspected both exported PNGs.

Approved Appearance panel

  • Replace the old selector with a palette icon and hover panel after Refresh.
  • Separate DAY/NIGHT/SYSTEM appearance from the Default visual theme; preserve existing appearance preferences and use a separate theme key.
  • Retain tap/keyboard opening, Escape/outside/hover closing, and a short grace period when crossing to the panel.
  • Anchor the panel below the icon, including narrow headers.
  • Validation: 31 focused tests, MCP app type check/build, browser hover-crossing, Night selection and reload persistence, 320px panel placement; independent complete-branch review clean.

Approved chat details redesign

  • Sidebar-only responsive detail layout; Activity above Pull requests, reply without extra heading or footer.

  • Details reads a bounded selected-rollout history tail (1,000 items, up to 25 owned PRs), newest occurrence first. Board classification still uses latest-turn PRs only.

  • Repository access alerts appear once; missing older PR warnings stay with the affected PR.

  • Technical details collapse to Chat ID, Turn ID, Source, and Last input. Copy and archive guidance are in the action menu.

  • Validation: 451 Node tests and 153 UI tests passed in the full run; affected scanner tests and 11 detail/icon UI tests rerun after review fixes; both typechecks and both builds passed. Browser verified wide and 390px drawer, scrolling, menu, technical fields, and archive guidance.

  • Review fixes: automatic covers are local-only; remote images remain click-only Markdown links. Unavailable PRs use ambiguous private-or-removed wording and an optional Check access link. Affected 33 Node and 34 UI tests plus both builds/typechecks passed after these fixes.

Light appearance and detail cache polish

  • Match the approved Light palette: pale gray board, white cards, subtle borders and shadow; keep navbar controls neutral.
  • Use the chat name as the Details title and compact historical PRs into single icon/number/title rows.
  • Keep historical GitHub results on disk without an expiry when Details opens or reopens. New URLs and explicit Refresh fetch data; visible current-board pending/unknown retries remain.
  • Show latest-turn time and recorded selected-history chat time; exclude idle time/subagents and report missing durations in the tooltip.
  • Token usage and cost remain a proposal, not part of this implementation.

Validation: full 453 Node and 154 UI tests passed; after the final cache-selection fix, the affected 30 UI tests passed. Both TypeScript checks and builds passed. Browser checks covered Light and Dark, wide and narrow Details, chat-name title, compact PR rows, neutral controls, and both time rows. Fresh full-branch independent review: CLEAN.

Duration wording correction

  • Running Details: “Worked for …”; finished Details: “Latest turn worked for …”; total: “Total chat worked for …”.
  • The existing duration calculation is unchanged. Recovery across earlier rollouts and token/cost accounting are research proposals, not shipped behavior.
  • Validation: 3 affected UI tests, MCP app TypeScript check and build, running/finished browser checks, and fresh full-branch independent review CLEAN.

Saved usage and detail typography

  • Use the same 14px font size for the detail title, Markdown body, and section headings.
  • Add independent latest-turn and chat-total token counts, with nested subagent usage assigned through root turn IDs. Keep later complete turns readable when earlier counters or files are missing.
  • Recover historical parent work durations across saved rollouts, deduplicate copied turns, and join selected SQLite durations. Read plain JSONL incrementally and decode cached zstd archives. Database failures remain fatal; accounting gaps are partial.
  • Estimate standard API-equivalent cost per saved model/call, including cache reads/writes and avoiding duplicate reasoning output. Ship a dated pricing table and refresh the official public Markdown table in the background weekly, with a persistent last-good cache. No API key. Missing prices or calls produce a partial subtotal.

Validation: final affected scanner/usage tests, full Node and UI suites, both TypeScript checks, both builds, wide and narrow browser checks for font size/overflow/usage visibility and console errors, and fresh complete-branch independent review. Read-only real-data probe exercised historical rollouts and descendants.

The local preview is updated; backend usage requires one Codex restart. The cost estimate uses current standard rates and does not represent subscription charges or historical/tier/tool fees.

Detail and popup polish

  • Use Total chat consistently and link the estimate explanation to OpenAI API pricing.
  • Explain incomplete token records and cost subtotals in tooltips.
  • Remove the detail action menu and copy controls; align Open chat on the project row while preserving Mark Done.
  • Remove CI text rows from card status popups while keeping PR state icons and links.

Validation: TypeScript checks, both UI builds, all 158 UI tests, browser checks at normal and 390px widths, and independent full-branch review.

Latest-turn card usage

  • Add compact K/M/B token counts, API-equivalent cost, and a Turn usage popup row.
  • Format each token breakdown category on its own line; identify reasoning as part of output.
  • Load optional usage in the background for visible cards only, reuse parsed logs/results, and clear stale card usage on a new turn.
  • Preserve incomplete-accounting markers and full-chat totals in Details.

Validation: 160 UI tests, 18 focused backend tests, TypeScript, both UI builds, normal/narrow browser checks, and full-branch independent review.

Persistent usage cache and incomplete-estimate notes

  • Replace incomplete token/cost labels with asterisks and a reason below the pricing note; preserve the marker on unpriced placeholders.
  • Persist aggregate usage in private, atomic cache files. Check turn ID, source metadata, linked sessions, durations, and prices before reuse.
  • Reuse unchanged accounting after an MCP restart without parsing source logs; rebuild damaged caches.
  • Keep updates during a running turn visible when source logs change.

Validation: 163 UI tests, 52 focused backend tests, TypeScript, both builds, wide/narrow browser checks, and independent full-branch review.

Unread chat indicators and numbered usage notes

  • Show blue card dots from Codex's local read-state file, using a single mapped identity/local host and omitting ambiguous state. TaskChef does not modify Codex read state.
  • Put numbered estimate/incomplete footnotes on Usage table labels; keep numeric cells uncluttered.
  • Document the read-state source and limitations. Cache paths and legacy web reuse remain discussion items.

Validation: 164 UI tests; 36 scanner/project tests; TypeScript checks; both UI builds; wide/narrow browser checks; clean independent branch review.

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