[PR #6304] [MERGED] feat(mcp): make MCP startup phase budgets configurable #7270

Closed
opened 2026-11-01 21:46:38 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/6304
Author: @morluto
Created: 10/22/2026
Status: ✅ Merged
Merged: 10/22/2026
Merged by: @morluto

Base: main ← Head: cursor/mcp-startup-budgets-d806


📝 Commits (3)

  • 9256f1d feat(mcp): make MCP startup phase budgets configurable
  • 40a302e fix(mcp): enforce the first-catalog budget while phases are pending
  • af924ca Merge origin/main into cursor/mcp-startup-budgets-d806

📊 Changes

18 files changed (+856 additions, -141 deletions)

View changed files

📝 docs/client-configuration.md (+13 -1)
📝 scripts/lib/mcp-startup-probe.d.mts (+8 -12)
📝 scripts/lib/mcp-startup-probe.mjs (+100 -43)
📝 scripts/verify-package-mcp.mjs (+2 -2)
📝 scripts/verify-package.mjs (+3 -3)
📝 src/application/Doctor.test.ts (+4 -0)
📝 src/application/SetupRegistrationEnvironment.ts (+4 -0)
📝 src/config/environment.ts (+10 -0)
➕ src/config/mcpStartupBudgets.test.ts (+117 -0)
➕ src/config/mcpStartupBudgets.ts (+216 -0)
📝 src/mcpDoctor.ts (+63 -10)
📝 src/mcpStartupPolicy.ts (+31 -18)
📝 src/setupEnvironment.test.ts (+14 -0)
📝 tests/acceptance/setup/registrationRuntimeEnvironmentCli.test.ts (+12 -0)
📝 tests/boundary/filesystem/clientConfigurationEnvironment.test.ts (+20 -0)
📝 tests/boundary/mcp/mcpDoctor.test.ts (+72 -5)
📝 tests/boundary/mcp/mcpStartupPolicy.test.ts (+162 -46)
📝 tests/fixtures/mcpStartupProbeChild.mjs (+5 -1)

📄 Description

Summary

Part of #6176. The MCP initialize, tools/list, first-catalog, and doctor phase budgets are now named settings. Unset behavior stays 15000, 5000, 20000, and 30000 ms. Codex's 30 second startup figure stays client guidance.

Problem and expected behavior

Those four phase budgets were fixed, and recovery said this release has no runtime override. Callers need named settings whose defaults are those constants. Invalid values must fail configuration and name the setting. They must not fall back to the default.

Unset behavior stays the current constants. A value from 1 to 2147483647 ms is the effective budget. Any other value fails startup, doctor, rea mcp doctor, and client-registration configuration and names the setting. Setup copies a caller-selected value through SELECTED_REGISTRATION_SETTINGS.

Recovery names the setting, the effective milliseconds, the source (default or setting), the default, the floor, the maximum, and how to change it. Doctor recovery still says Codex startup_timeout_sec of 30 seconds is client guidance and that REA does not enforce that figure as the doctor deadline.

REA_MCP_FIRST_CATALOG_BUDGET_MS bounds the whole initialize plus tools/list startup, including while either request is still pending. A value lower than a phase budget must stop that pending request. It must not wait until the longer phase timeout returns.

Change and scope

src/config/mcpStartupBudgets.ts owns the four settings. Startup (parseEnvironment / parseConfig) and doctor use that schema. rea mcp doctor resolves the same parser from its selected environment before it starts a child. An invalid setting returns an unhealthy check named for that setting and does not launch the child.

The packaged startup probe reads resolveMcpStartupProbePolicy from the environment it is given, so a selected value is not ignored. The probe's recovery sentence is duplicated in scripts/lib/mcp-startup-probe.mjs because that script cannot import the TypeScript module; a test requires the two sentences to be identical. A synthetic probe budget carries its own source, so a 200 ms test budget is source setting and still names the real default.

The probe measures one first-catalog deadline from the same instant as the phase durations. Each in-flight initialize or tools/list request uses the shorter of that phase's budget and the time still left. The recovery names that shorter bound. The deadline also rejects the probe when the SDK timeout has not started yet, and the existing close path stops the child. A completed run still fails when the measured total exceeds the first-catalog budget. The module profiler is unchanged: it has no first-catalog budget.

This branch includes current main, including REA_REGEX_WORKER_HEAP_REQUEST_MIB. Registration, environment parsing, and the related tests keep that setting together with the four phase budgets. Doctor timeout recovery still uses the phase budget, and it is attached only for an owned abort or an SDK request timeout.

The floor is 1 ms. The maximum is 2147483647 ms, the largest delay Node schedules exactly. A larger setTimeout or SDK timeout is clamped to 1 ms, so it is refused. Zero, negative, non-decimal, and out-of-range values are configuration_invalid.

codexStartupTimeoutSeconds (30), kimiStartupTimeoutMs (30000), toolOperationHeadroomMs (120000), and doctorStderrBytes (64 KiB) stay fixed. They are not settings.

Follow the contribution scope. This is configuration of existing MCP startup admissions. It does not add a provider or a capability that executes, injects, mutates, or recovers a target. Maintainer scope decision: not applicable. The product decision to make these ceilings settings is recorded in #6176.

Contract and boundary impact

  • Semantic owner and earliest changed stage: src/config/mcpStartupBudgets.ts parses the settings; parseEnvironment rejects them before provider startup. explicitSetupRegistrationEnvironment preserves a caller-selected value when setup writes a registration. runProductionMcpDoctor resolves them again before connecting. scripts/lib/mcp-startup-probe.mjs owns enforcement of those budgets on the packaged probe.
  • Contribution scope fit and linked maintainer decision: existing MCP startup budgets only; not applicable.
  • CLI and MCP/tool-catalog contract: no tool schema change. rea mcp doctor and the packaged startup probe name the effective budget, source, default, floor, and maximum. Invalid settings fail the doctor report before a child starts.
  • Provider, bridge, target-format, or platform compatibility: none. Codex's 30 second startup timeout is unchanged client guidance.
  • Evidence, artifact, provenance, or reconstruction contract: none.
  • Target selection, authority, upstream behavior, and cleanup details (if applicable): none.
  • Generated metadata (docs/public/product-catalog.json), package, or installation impact (CI generates and validates ignored catalogs and skills/; edit authored instructions in .agents/skills/reverse-engineer-anything/ and never commit build outputs): client-configuration docs name the four settings. No tool catalog text changed.

Expected effects (check known effects; use documentation-only on its own).
Unchecked items do not establish absence; leave uncertainties visible.

  • Read existing files or captured data.
  • Launch or attach to a process.
  • Inject instrumentation or run scripts/code.
  • Change process memory, registers, files, or configuration.
  • Contact network services.
  • Recover protected code or work around protections.
  • Documentation or usability only; no target interaction.
  • Not sure yet; investigation or maintainer guidance needed.

Evidence and regression coverage

  • Tests added or updated: parser and startup rejection, including every invalid setting named together; doctor and client-registration rejection; setup-host state includes 16000, 6000, 21000, and 31000 when set and omits the initialize key when unset; public Codex and Kimi setup writes those values and still omits REA_UNRELATED_MARKER. Probe timeouts of 200 ms and a 1 ms first-catalog budget name source setting and the real default. A hanging initialize with a 250 ms first-catalog budget and an 8000 ms initialize budget names the first-catalog setting and returns before that initialize budget. A child that finishes initialize and then hangs, with an 800 ms first-catalog budget and an 8000 ms tools/list budget, leaves the initialize marker and names the first-catalog setting. rea mcp doctor with REA_MCP_DOCTOR_DEADLINE_MS=2000 and no caller deadline fired at that budget. 0 for initialize and doctor returns unhealthy checks named for those settings and does not start the missing child. Codex's 30 second constant remains 30 after an initialize override.
  • Base reproduction or other evidence: on main the phase budgets are constants and recovery says there is no runtime override. Before this fix, the probe checked the first-catalog budget only after initialize and tools/list both returned, so a pending phase waited for its own longer timeout. The doctor hang with an explicit 60000 ms caller deadline still reports 60000 ms, now with source setting and default 30000 ms.
  • User-visible CLI/MCP output (if applicable): the default doctor recovery says The effective REA_MCP_DOCTOR_DEADLINE_MS value for the MCP doctor startup deadline is 30000 ms (source default; default 30000 ms, floor 1 ms, maximum 2147483647 ms). Set REA_MCP_DOCTOR_DEADLINE_MS in the environment that starts REA to a positive decimal integer from 1 to 2147483647, then restart REA. It then says Codex startup_timeout_sec of 30 seconds is client guidance. A selected 2000 ms deadline uses source setting and 2000 ms. A probe that exceeds the first-catalog budget names REA_MCP_FIRST_CATALOG_BUDGET_MS and the effective milliseconds.
  • Remaining proof gaps: the packaged verify-package workflow was not executed. The probe tests use the production probe against the fixture child. Windows was not executed. A budget above the default was checked through the parser, setup registration, and the 60000 ms doctor deadline, not by waiting out a full 30 second packaged startup.

For evidence-bearing changes:

  • Observed, derived, and inferred claims remain distinguishable.
  • Artifact identity, source provenance, and failed attempts remain preserved.
  • Unsupported, incomplete, unavailable, or uncertain outcomes remain visible.

Validation performed

  • After merging origin/main (af924ca4b): npm run check:fast — typecheck and lint passed (2 tasks, 4.235s).
  • npm run format:check — all matched files use the correct format.
  • npm run test:local -- src/config/mcpStartupBudgets.test.ts src/application/Doctor.test.ts src/setupEnvironment.test.ts — 90 passed.
  • npm run test:focused -- tests/boundary/mcp/mcpStartupPolicy.test.ts tests/boundary/mcp/mcpDoctor.test.ts tests/boundary/filesystem/clientConfigurationEnvironment.test.ts tests/acceptance/setup/registrationRuntimeEnvironmentCli.test.ts — 82 passed, 11 skipped. The pending tools/list first-catalog case completed in 808 ms. REA_MCP_DOCTOR_DEADLINE_MS=2000 completed in 1923 ms. Remote timeout prose did not receive doctor deadline guidance. Codex and Kimi setup preserved the phase budgets and REA_REGEX_WORKER_HEAP_REQUEST_MIB.

Compatibility, safety, and release

  • Breaking changes or migration steps: none for an unset environment. The four budgets remain 15000, 5000, 20000, and 30000 ms. User-facing text no longer says those phase budgets have no runtime override; it names the setting. Invalid values that were previously ignored, because the variables were unread, now fail configuration. An existing registration created before this fix does not gain an override until setup runs again with the setting present. Codex's 30 second startup timeout is unchanged. A selected first-catalog budget that is shorter than a phase budget now stops a pending probe request at the first-catalog deadline.
  • Real Hopper/Ghidra, browser, or OS coverage: not run. Doctor and probe behavior was measured on Linux Node 22 with the production doctor and the fixture MCP child.
  • Package or release metadata impact: none.
  • Security, privacy, process, or containment review: a longer budget only extends the existing doctor and probe timers. A shorter first-catalog budget now stops the packaged probe's child while initialize or tools/list is pending. It does not change tool-operation headroom, the doctor stderr cap, or client startup timeouts.

Author readiness

Human owner: @morluto

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.
Open in Web Open in Cursor 

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/6304 **Author:** [@morluto](https://github.com/morluto) **Created:** 10/22/2026 **Status:** ✅ Merged **Merged:** 10/22/2026 **Merged by:** [@morluto](https://github.com/morluto) **Base:** `main` ← **Head:** `cursor/mcp-startup-budgets-d806` --- ### 📝 Commits (3) - [`9256f1d`](https://github.com/morluto/rea/commit/9256f1d260e357054da79f7c29c4f342ae88579e) feat(mcp): make MCP startup phase budgets configurable - [`40a302e`](https://github.com/morluto/rea/commit/40a302e9c2b7efcc2168a2fe80c034c5e46a1e5a) fix(mcp): enforce the first-catalog budget while phases are pending - [`af924ca`](https://github.com/morluto/rea/commit/af924ca4b3f045a2cbdc652dfa79bda93fead654) Merge origin/main into cursor/mcp-startup-budgets-d806 ### 📊 Changes **18 files changed** (+856 additions, -141 deletions) <details> <summary>View changed files</summary> 📝 `docs/client-configuration.md` (+13 -1) 📝 `scripts/lib/mcp-startup-probe.d.mts` (+8 -12) 📝 `scripts/lib/mcp-startup-probe.mjs` (+100 -43) 📝 `scripts/verify-package-mcp.mjs` (+2 -2) 📝 `scripts/verify-package.mjs` (+3 -3) 📝 `src/application/Doctor.test.ts` (+4 -0) 📝 `src/application/SetupRegistrationEnvironment.ts` (+4 -0) 📝 `src/config/environment.ts` (+10 -0) ➕ `src/config/mcpStartupBudgets.test.ts` (+117 -0) ➕ `src/config/mcpStartupBudgets.ts` (+216 -0) 📝 `src/mcpDoctor.ts` (+63 -10) 📝 `src/mcpStartupPolicy.ts` (+31 -18) 📝 `src/setupEnvironment.test.ts` (+14 -0) 📝 `tests/acceptance/setup/registrationRuntimeEnvironmentCli.test.ts` (+12 -0) 📝 `tests/boundary/filesystem/clientConfigurationEnvironment.test.ts` (+20 -0) 📝 `tests/boundary/mcp/mcpDoctor.test.ts` (+72 -5) 📝 `tests/boundary/mcp/mcpStartupPolicy.test.ts` (+162 -46) 📝 `tests/fixtures/mcpStartupProbeChild.mjs` (+5 -1) </details> ### 📄 Description <!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## Summary Part of #6176. The MCP initialize, tools/list, first-catalog, and doctor phase budgets are now named settings. Unset behavior stays 15000, 5000, 20000, and 30000 ms. Codex's 30 second startup figure stays client guidance. ## Problem and expected behavior Those four phase budgets were fixed, and recovery said this release has no runtime override. Callers need named settings whose defaults are those constants. Invalid values must fail configuration and name the setting. They must not fall back to the default. Unset behavior stays the current constants. A value from 1 to 2147483647 ms is the effective budget. Any other value fails startup, doctor, `rea mcp doctor`, and client-registration configuration and names the setting. Setup copies a caller-selected value through `SELECTED_REGISTRATION_SETTINGS`. Recovery names the setting, the effective milliseconds, the source (`default` or `setting`), the default, the floor, the maximum, and how to change it. Doctor recovery still says Codex `startup_timeout_sec` of 30 seconds is client guidance and that REA does not enforce that figure as the doctor deadline. `REA_MCP_FIRST_CATALOG_BUDGET_MS` bounds the whole initialize plus tools/list startup, including while either request is still pending. A value lower than a phase budget must stop that pending request. It must not wait until the longer phase timeout returns. ## Change and scope `src/config/mcpStartupBudgets.ts` owns the four settings. Startup (`parseEnvironment` / `parseConfig`) and doctor use that schema. `rea mcp doctor` resolves the same parser from its selected environment before it starts a child. An invalid setting returns an unhealthy check named for that setting and does not launch the child. The packaged startup probe reads `resolveMcpStartupProbePolicy` from the environment it is given, so a selected value is not ignored. The probe's recovery sentence is duplicated in `scripts/lib/mcp-startup-probe.mjs` because that script cannot import the TypeScript module; a test requires the two sentences to be identical. A synthetic probe budget carries its own source, so a 200 ms test budget is `source setting` and still names the real default. The probe measures one first-catalog deadline from the same instant as the phase durations. Each in-flight initialize or tools/list request uses the shorter of that phase's budget and the time still left. The recovery names that shorter bound. The deadline also rejects the probe when the SDK timeout has not started yet, and the existing close path stops the child. A completed run still fails when the measured total exceeds the first-catalog budget. The module profiler is unchanged: it has no first-catalog budget. This branch includes current `main`, including `REA_REGEX_WORKER_HEAP_REQUEST_MIB`. Registration, environment parsing, and the related tests keep that setting together with the four phase budgets. Doctor timeout recovery still uses the phase budget, and it is attached only for an owned abort or an SDK request timeout. The floor is 1 ms. The maximum is 2147483647 ms, the largest delay Node schedules exactly. A larger `setTimeout` or SDK timeout is clamped to 1 ms, so it is refused. Zero, negative, non-decimal, and out-of-range values are `configuration_invalid`. `codexStartupTimeoutSeconds` (30), `kimiStartupTimeoutMs` (30000), `toolOperationHeadroomMs` (120000), and `doctorStderrBytes` (64 KiB) stay fixed. They are not settings. Follow the [contribution scope](https://github.com/morluto/rea/blob/main/CONTRIBUTING.md#contribution-scope). This is configuration of existing MCP startup admissions. It does not add a provider or a capability that executes, injects, mutates, or recovers a target. Maintainer scope decision: not applicable. The product decision to make these ceilings settings is recorded in #6176. ## Contract and boundary impact - Semantic owner and earliest changed stage: `src/config/mcpStartupBudgets.ts` parses the settings; `parseEnvironment` rejects them before provider startup. `explicitSetupRegistrationEnvironment` preserves a caller-selected value when setup writes a registration. `runProductionMcpDoctor` resolves them again before connecting. `scripts/lib/mcp-startup-probe.mjs` owns enforcement of those budgets on the packaged probe. - Contribution scope fit and linked maintainer decision: existing MCP startup budgets only; not applicable. - CLI and MCP/tool-catalog contract: no tool schema change. `rea mcp doctor` and the packaged startup probe name the effective budget, source, default, floor, and maximum. Invalid settings fail the doctor report before a child starts. - Provider, bridge, target-format, or platform compatibility: none. Codex's 30 second startup timeout is unchanged client guidance. - Evidence, artifact, provenance, or reconstruction contract: none. - Target selection, authority, upstream behavior, and cleanup details (if applicable): none. - Generated metadata (`docs/public/product-catalog.json`), package, or installation impact (CI generates and validates ignored catalogs and `skills/`; edit authored instructions in `.agents/skills/reverse-engineer-anything/` and never commit build outputs): client-configuration docs name the four settings. No tool catalog text changed. Expected effects (check known effects; use documentation-only on its own). Unchecked items do not establish absence; leave uncertainties visible. - [ ] Read existing files or captured data. - [ ] Launch or attach to a process. - [ ] Inject instrumentation or run scripts/code. - [ ] Change process memory, registers, files, or configuration. - [ ] Contact network services. - [ ] Recover protected code or work around protections. - [ ] Documentation or usability only; no target interaction. - [ ] Not sure yet; investigation or maintainer guidance needed. ## Evidence and regression coverage - Tests added or updated: parser and startup rejection, including every invalid setting named together; doctor and client-registration rejection; setup-host state includes `16000`, `6000`, `21000`, and `31000` when set and omits the initialize key when unset; public Codex and Kimi setup writes those values and still omits `REA_UNRELATED_MARKER`. Probe timeouts of 200 ms and a 1 ms first-catalog budget name `source setting` and the real default. A hanging initialize with a 250 ms first-catalog budget and an 8000 ms initialize budget names the first-catalog setting and returns before that initialize budget. A child that finishes initialize and then hangs, with an 800 ms first-catalog budget and an 8000 ms tools/list budget, leaves the initialize marker and names the first-catalog setting. `rea mcp doctor` with `REA_MCP_DOCTOR_DEADLINE_MS=2000` and no caller deadline fired at that budget. `0` for initialize and doctor returns unhealthy checks named for those settings and does not start the missing child. Codex's 30 second constant remains 30 after an initialize override. - Base reproduction or other evidence: on main the phase budgets are constants and recovery says there is no runtime override. Before this fix, the probe checked the first-catalog budget only after initialize and tools/list both returned, so a pending phase waited for its own longer timeout. The doctor hang with an explicit 60000 ms caller deadline still reports 60000 ms, now with `source setting` and `default 30000 ms`. - User-visible CLI/MCP output (if applicable): the default doctor recovery says `The effective REA_MCP_DOCTOR_DEADLINE_MS value for the MCP doctor startup deadline is 30000 ms (source default; default 30000 ms, floor 1 ms, maximum 2147483647 ms). Set REA_MCP_DOCTOR_DEADLINE_MS in the environment that starts REA to a positive decimal integer from 1 to 2147483647, then restart REA.` It then says Codex `startup_timeout_sec` of 30 seconds is client guidance. A selected 2000 ms deadline uses `source setting` and `2000 ms`. A probe that exceeds the first-catalog budget names `REA_MCP_FIRST_CATALOG_BUDGET_MS` and the effective milliseconds. - Remaining proof gaps: the packaged `verify-package` workflow was not executed. The probe tests use the production probe against the fixture child. Windows was not executed. A budget above the default was checked through the parser, setup registration, and the 60000 ms doctor deadline, not by waiting out a full 30 second packaged startup. For evidence-bearing changes: - [x] Observed, derived, and inferred claims remain distinguishable. - [x] Artifact identity, source provenance, and failed attempts remain preserved. - [x] Unsupported, incomplete, unavailable, or uncertain outcomes remain visible. ## Validation performed - After merging `origin/main` (`af924ca4b`): `npm run check:fast` — typecheck and lint passed (2 tasks, 4.235s). - `npm run format:check` — all matched files use the correct format. - `npm run test:local -- src/config/mcpStartupBudgets.test.ts src/application/Doctor.test.ts src/setupEnvironment.test.ts` — 90 passed. - `npm run test:focused -- tests/boundary/mcp/mcpStartupPolicy.test.ts tests/boundary/mcp/mcpDoctor.test.ts tests/boundary/filesystem/clientConfigurationEnvironment.test.ts tests/acceptance/setup/registrationRuntimeEnvironmentCli.test.ts` — 82 passed, 11 skipped. The pending tools/list first-catalog case completed in 808 ms. `REA_MCP_DOCTOR_DEADLINE_MS=2000` completed in 1923 ms. Remote timeout prose did not receive doctor deadline guidance. Codex and Kimi setup preserved the phase budgets and `REA_REGEX_WORKER_HEAP_REQUEST_MIB`. ## Compatibility, safety, and release - Breaking changes or migration steps: none for an unset environment. The four budgets remain 15000, 5000, 20000, and 30000 ms. User-facing text no longer says those phase budgets have no runtime override; it names the setting. Invalid values that were previously ignored, because the variables were unread, now fail configuration. An existing registration created before this fix does not gain an override until setup runs again with the setting present. Codex's 30 second startup timeout is unchanged. A selected first-catalog budget that is shorter than a phase budget now stops a pending probe request at the first-catalog deadline. - Real Hopper/Ghidra, browser, or OS coverage: not run. Doctor and probe behavior was measured on Linux Node 22 with the production doctor and the fixture MCP child. - Package or release metadata impact: none. - Security, privacy, process, or containment review: a longer budget only extends the existing doctor and probe timers. A shorter first-catalog budget now stops the packaged probe's child while initialize or tools/list is pending. It does not change tool-operation headroom, the doctor stderr cap, or client startup timeouts. ## Author readiness Human owner: @morluto - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge - [x] This PR addresses a concrete problem or an agreed enhancement. - [x] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. - [x] The PR has one focused outcome and the title follows `type(scope): outcome`. - [x] Related issue is linked, or the reason for not linking one is stated above. - [x] Tests cover changed observable behavior and meaningful failure paths. - [x] Owning docs, contracts, and generated metadata are updated where needed. - [x] User-visible CLI/MCP changes include representative output. - [x] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-d912cecc-68c2-58d9-95b2-4a200e86d806?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-d912cecc-68c2-58d9-95b2-4a200e86d806&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-11-01 21:46:38 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#7270
No description provided.