Files
makelore/.project-docs/30-worklog/tasks/20260907-input-context-menu-a7c31e.md

5.2 KiB

Task: Fix AI programming input context menu

Identity

  • Task ID: 20260907-input-context-menu-a7c31e
  • Mode: Feature
  • Branch: codex/20260907-input-context-menu-a7c31e-input-context-menu
  • Worktree: D:\Datas\OthersProjects.codex-worktrees\makelore\20260907-input-context-menu-a7c31e
  • Base commit: 8c13ae76db
  • Owner: codex
  • Status: Ready for Integration

Scope

  • Reproduce the AI Programming composer symptom where right-clicking editable text exposes no native editing menu.
  • Compare the current integrated primary-window wiring with completed task 20260819-context-menu-impl-c7d4a2e1 and reuse only behavior still compatible with the current window lifecycle.
  • Restore the smallest Main-owned native text-editing context-menu behavior and add focused regression coverage at the real window/event seam.
  • Verify that the AI Design design-chat-composer textarea shares the same primary Renderer seam, and extend the Electron regression to cover both Code and Design textarea controls without adding a duplicate listener.
  • Update user-facing documentation or Electron E2E coverage only where current behavior and the shared fixture require it.

Intent And Constraints

  • Electron Main owns desktop context-menu integration. Do not add Renderer, Preload, IPC, Host API, or direct clipboard access for this fix.
  • Use the primary window's webContents context-menu event and native editing roles when that remains the confirmed compatible seam.
  • Show a menu only for editable controls or an existing text selection; derive enabled actions from the actual Electron edit context.
  • Preserve Renderer-owned custom menus, Monaco behavior, the detached Agent Browser, existing application-menu behavior, Chinese-only UI, and the single light visual system.
  • Build a deterministic red-capable feedback loop for the reported input symptom before selecting a cause or changing production code.
  • Work only in the isolated task worktree; do not modify, adopt, clean, or merge the occupied root main worktree or any peer worktree.

Outcome

  • Confirmed the failure at the real Electron window seam: a renderer right-click produced no native menu because the primary webContents had zero context-menu listeners. The earlier implementation in task 20260819-context-menu-impl-c7d4a2e1 exists only on its isolated branch and was never integrated into the current main history.
  • Added a Main-owned text context-menu module that builds native Chinese cut, copy, paste, and selectAll roles from Electron's actual isEditable, selectionText, and editFlags context. Ordinary non-editable content still produces no menu.
  • Registered the listener once during primary-window creation without adding Renderer, Preload, IPC, Host API, or direct clipboard access.
  • Confirmed DesignConversationPane renders the AI Design composer as the ordinary <textarea id="design-chat-composer"> produced by the shared Textarea component inside that same primary Renderer. The window-level listener therefore covers both AI Code and AI Design without a second production listener.
  • Added five focused unit cases and an Electron E2E regression that dispatches real right-clicks on Code and Design textarea controls inside the primary Renderer window and observes two native menu popups with the expected editing actions.
  • Synchronized README.md with the restored desktop behavior and ownership boundary.

Verification

  • Red phase:
    • corepack pnpm exec playwright test tests/e2e/context-menu.spec.ts failed twice with popupCount: 0 before the production change.
    • A temporary targeted probe reported zero context-menu listeners on the primary webContents; the probe was removed before completion.
    • corepack pnpm exec vitest run tests/unit/context-menu.test.ts failed to resolve the absent Main module before implementation.
  • Green phase:
    • corepack pnpm exec vitest run tests/unit/context-menu.test.ts — 5 passed.
    • corepack pnpm exec playwright test tests/e2e/context-menu.spec.ts — 1 passed, covering both Code and Design textareas with two observed native popups.
    • corepack pnpm run typecheck — passed.
    • corepack pnpm exec eslint electron/main/context-menu.ts electron/main/index.ts tests/unit/context-menu.test.ts tests/e2e/context-menu.spec.ts — passed.
    • corepack pnpm run lint:check — passed with 5 pre-existing warnings in untouched files and no errors.
    • corepack pnpm run build:vite — passed for Renderer, Main, Preload, and release utility bundles; only existing chunk/dynamic-import warnings were reported.
    • corepack pnpm test — 226 test files passed; one unrelated real-process timing assertion in pi-agent-server-process-real.test.ts measured 2323ms against a 2000ms threshold. Its isolated rerun with corepack pnpm exec vitest run tests/unit/pi-agent-server-process-real.test.ts --maxWorkers=1 passed all 6 tests, so no unrelated timing code or threshold was changed.
    • git diff --check — passed.

Follow-ups

  • Integrate this ready branch through the project Integration Gate after the current owner of the root main worktree releases it.

Promotion Candidates

  • None recorded.