[PR #5647] [MERGED] fix(doctor): reject unusable Kuna caches and invalid native settings #7010

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

📋 Pull Request Information

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

Base: main ← Head: cursor/doctor-readiness-4f30


📝 Commits (8)

  • 8129597 fix(kuna): reject dangling cache roots in doctor
  • 0ca5bc2 fix(doctor): admit the same settings native analysis rejects
  • 40e7f8c fix(doctor): report an invalid log level from doctor
  • 3e4c2b2 fix(doctor): require log-level failures in every scope
  • e7a2434 fix(kuna): strip only the platform cache separator
  • f2b3cd3 fix(doctor): fail every provider on an invalid Hopper timeout
  • 2ed26ac style(doctor): format the Hopper timeout regression
  • 504ccbb fix(doctor): fail client scopes on MCP startup errors

📊 Changes

15 files changed (+719 additions, -38 deletions)

View changed files

📝 docs/installation.md (+7 -0)
📝 scripts/rea.mjs (+24 -1)
📝 src/application/Doctor.test.ts (+268 -1)
📝 src/application/Doctor.ts (+12 -0)
📝 src/application/DoctorDiagnostics.ts (+39 -0)
📝 src/application/DoctorScope.ts (+27 -0)
📝 src/cli.ts (+6 -2)
📝 src/config.test.ts (+23 -0)
📝 src/config/parseConfig.ts (+25 -6)
📝 src/kuna/KunaDoctor.ts (+57 -14)
📝 src/logger.ts (+12 -0)
📝 tests/boundary/cli/cliLogLevelConfiguration.test.ts (+50 -11)
📝 tests/boundary/cli/doctorHopperDiscovery.test.ts (+69 -0)
📝 tests/boundary/providers/kuna/kunaDoctor.test.ts (+95 -2)
📝 tests/boundary/providers/kuna/kunaSetupReadiness.test.ts (+5 -1)

📄 Description

Summary

Fixes #5454, #5554, and #5105.

Scoped rea doctor could report a selected engine healthy when shared native configuration was invalid, and Kuna doctor could report a dangling cache root as creatable and available. Readiness now uses the same environment admission as native commands, and a cache path is creatable only when no directory entry occupies its name.

Problem and expected behavior

rea doctor --provider hopper stayed successful for REA_ANALYSIS_PROVIDER=Hopper and REA_GHIDRA_STARTUP_TIMEOUT_MS=abc, while analyze and search-bytes failed with configuration_invalid. rea doctor --provider ghidra could likewise succeed with REA_HOPPER_STARTUP_TIMEOUT_MS=abc, because that setting had its own check and the check was required only for Hopper. A Kuna cache root that is a dangling symlink, including one written with a trailing separator, was reported ready because stat follows the link and ENOENT was treated as absence. Setup's ready-provider list already required passing checks, but the inspection still published available: true.

An invalid REA_LOG_LEVEL was rejected in the executable dispatcher before doctor ran, so the readiness check never reached rea doctor --json. After that path reached doctor, a client-only or skill scope could still report healthy because the failure was included only when a provider was selected. That client cannot start REA: the dispatcher rejects every other command, and MCP startup rejects the same setting.

Doctor should fail the selected engine and name the rejected setting. An invalid REA_LOG_LEVEL should also fail client and skill scopes. Every other parseConfig failure, including REA_GHIDRA_STARTUP_TIMEOUT_MS and REA_HOPPER_STARTUP_TIMEOUT_MS, should fail a selected client because MCP startup rejects it. A skill-only scope leaves those other settings informational. An invalid REA_HOPPER_STARTUP_TIMEOUT_MS should fail every selected provider. A dangling cache link should fail the cache check, clear availability, and leave the installation check and caller-selected registration settings in place. A resolving link and a missing path under a writable parent stay ready. On Darwin and Linux, a trailing \ is part of the configured cache path. REA_JEB_MCP_TIMEOUT_MS remains outside native admission. Commands other than doctor still stop before execution when the log level is invalid.

Change and scope

parseConfig and doctor share nativeAnalysisConfigurationError. Rejected settings become runtime-configuration:<setting> checks. They fail the full audit. An explicit provider scope includes every rejected native setting. REA_LOG_LEVEL also fails client and skill scopes. A selected client includes every other native admission failure, because MCP startup rejects it. A skill-only scope leaves those other settings informational. REA_HOPPER_STARTUP_TIMEOUT_MS keeps its existing hopper-startup-timeout check, and that check is required for every selected provider.

The dispatcher lets doctor continue after an invalid REA_LOG_LEVEL so that check is in the public JSON report. Every other command keeps the existing stderr rejection.

Kuna cache inspection strips the selected platform's terminal separator before lstat, so a dangling link is not mistaken for a missing path. On Darwin and Linux that separator is /. available follows the cache check.

Contribution scope: ordinary readiness fixes inside existing doctor and Kuna cache diagnosis. No new provider, target execution, injection, mutation, or protection recovery. Maintainer scope decision: not applicable.

Already fixed on main and not included: #5561, #5559, and #5604 (dd0015aaf); #5568 (7b2087e44).

Contract and boundary impact

  • Semantic owner and earliest changed stage: parseConfig owns native environment admission; PROCESS_START_CONFIGURATION_SETTINGS owns which of those settings block process start; the executable dispatcher owns the log-level exception for doctor; KunaDoctor owns cache-root classification. Earliest stage is setup or provider admission, before a provider session.
  • Contribution scope fit and linked maintainer decision: bugfix within existing doctor and Kuna readiness. Not applicable.
  • CLI and MCP/tool-catalog contract: rea doctor JSON gains runtime-configuration:<setting> checks when native admission fails, including an invalid REA_LOG_LEVEL. That log-level check is required in every explicit scope. A selected client also requires every other native admission failure and hopper-startup-timeout. hopper-startup-timeout remains required for every selected provider. Exit status follows healthy. Other commands keep the plain stderr rejection for an invalid log level. No new command or tool.
  • Provider, bridge, target-format, or platform compatibility: Kuna cache diagnosis changes for dangling links, trailing platform separators, and POSIX paths that end in \. Other providers are unchanged. No engine protocol change.
  • Evidence, artifact, provenance, or reconstruction contract: none.
  • Target selection, authority, upstream behavior, and cleanup details: doctor remains read-only. It does not create the cache or repair the link.
  • Generated metadata (docs/public/product-catalog.json), package, or installation impact: docs/installation.md states that an invalid REA_LOG_LEVEL fails every doctor scope, and that other MCP startup failures fail a selected client and every selected provider. CI generates and validates ignored catalogs and skills/.

Expected effects (check known effects; use documentation-only on its own).

  • 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: src/application/Doctor.test.ts, src/config.test.ts, tests/boundary/cli/doctorHopperDiscovery.test.ts, tests/boundary/cli/cliLogLevelConfiguration.test.ts, tests/boundary/providers/kuna/kunaDoctor.test.ts, tests/boundary/providers/kuna/kunaSetupReadiness.test.ts.

  • Base reproduction or other evidence: source inspection of stat/ENOENT, of doctor versus parseConfig, of scripts/rea.mjs exiting before doctor when REA_LOG_LEVEL is invalid, of the scope partition that omitted process-start failures when no provider was selected, and of hopper-startup-timeout being required only when Hopper itself was selected. The historical CLI timings in #5454 and #5554 were not re-run on a real Hopper or Kuna engine.

  • User-visible CLI/MCP output: focused CLI doctor with REA_ANALYSIS_PROVIDER=Hopper and REA_GHIDRA_STARTUP_TIMEOUT_MS=abc exited 1 and included both runtime-configuration checks in scope_checks. REA_JEB_MCP_TIMEOUT_MS=abc added no such check. rea --json doctor --provider hopper and rea --json doctor --client codex with REA_LOG_LEVEL=loud and INFO exited 1 with an empty stderr and runtime-configuration:REA_LOG_LEVEL in scope_checks. rea --json doctor --client codex with REA_GHIDRA_STARTUP_TIMEOUT_MS=abc exited 1 and included that check in scope_checks with providers: []. rea --help with an invalid log level still prints the stderr configuration error and no stdout.

  • Remaining proof gaps: no real Hopper, Ghidra, IDA, or Kuna engine. Windows cache links were not run (kunaDoctor tests skip win32). The non-Hopper timeout regression uses a scripted Ghidra inspection.

  • 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

  • npm run test:local -- src/application/Doctor.test.ts src/config.test.ts src/application/Doctor.lifecycle.test.ts — 129 passed.
  • npm run test:focused -- tests/boundary/providers/kuna/kunaDoctor.test.ts tests/boundary/providers/kuna/kunaSetupReadiness.test.ts tests/boundary/cli/doctorHopperDiscovery.test.ts — 16 passed.
  • npm run test:focused -- tests/boundary/cli/cliLogLevelConfiguration.test.ts tests/boundary/cli/dispatcher.test.ts tests/boundary/cli/doctorHopperDiscovery.test.ts — 8 passed.
  • npm run test:focused -- src/application/Doctor.test.ts tests/boundary/cli/cliLogLevelConfiguration.test.ts tests/boundary/providers/kuna/kunaDoctor.test.ts — 72 passed.
  • npm run test:focused -- src/application/Doctor.test.ts tests/boundary/cli/doctorHopperDiscovery.test.ts — 64 passed on df9a78014.
  • npm run test:local -- src/ida/IdaOperationFailures.test.ts — 33 passed on 91dc38c64.
  • npm run check:fast — passed on df9a78014.
  • npx oxfmt --check . — passed on df9a78014.
  • npx tsc --noEmit — passed on an earlier revision; check:fast typechecked this revision.

Compatibility, safety, and release

  • Breaking changes or migration steps: rea doctor with an invalid REA_LOG_LEVEL now returns the doctor report instead of the dispatcher's stderr line, and that failure makes client and skill scopes unhealthy. A selected client is also unhealthy for every other setting MCP startup rejects. An invalid REA_HOPPER_STARTUP_TIMEOUT_MS fails every selected provider and a selected client. Other commands are unchanged. Callers who treated a dangling Kuna cache, a POSIX cache path ending in \, or an invalid native setting as healthy now get a failing doctor result.
  • Real Hopper/Ghidra, browser, or OS coverage: not run. Linux scripted CLI and filesystem fixtures only.
  • Package or release metadata impact: none.
  • Security, privacy, process, or containment review: read-only diagnosis. No new process launch. Rejected setting values are not copied into the check detail; the parser constraint is.

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/5647 **Author:** [@morluto](https://github.com/morluto) **Created:** 10/20/2026 **Status:** ✅ Merged **Merged:** 10/20/2026 **Merged by:** [@morluto](https://github.com/morluto) **Base:** `main` ← **Head:** `cursor/doctor-readiness-4f30` --- ### 📝 Commits (8) - [`8129597`](https://github.com/morluto/rea/commit/8129597b9f92d0b84579373071abc4771e60d398) fix(kuna): reject dangling cache roots in doctor - [`0ca5bc2`](https://github.com/morluto/rea/commit/0ca5bc29d4813a7f471c49925b3cc2cb46f1739c) fix(doctor): admit the same settings native analysis rejects - [`40e7f8c`](https://github.com/morluto/rea/commit/40e7f8c2a8f24e7df25fc8698862bfe62d2d3060) fix(doctor): report an invalid log level from doctor - [`3e4c2b2`](https://github.com/morluto/rea/commit/3e4c2b2321ba1171aefc39fa873c982635eb2e5a) fix(doctor): require log-level failures in every scope - [`e7a2434`](https://github.com/morluto/rea/commit/e7a2434c27dda1673130dcd151036e7a2a8f74da) fix(kuna): strip only the platform cache separator - [`f2b3cd3`](https://github.com/morluto/rea/commit/f2b3cd3bc0cda57ef108af425000333ce2ef20e6) fix(doctor): fail every provider on an invalid Hopper timeout - [`2ed26ac`](https://github.com/morluto/rea/commit/2ed26ac4a881519ff664af3c2e8102b4855e56a7) style(doctor): format the Hopper timeout regression - [`504ccbb`](https://github.com/morluto/rea/commit/504ccbb13d317b516f071ac837ade98034fbb9f3) fix(doctor): fail client scopes on MCP startup errors ### 📊 Changes **15 files changed** (+719 additions, -38 deletions) <details> <summary>View changed files</summary> 📝 `docs/installation.md` (+7 -0) 📝 `scripts/rea.mjs` (+24 -1) 📝 `src/application/Doctor.test.ts` (+268 -1) 📝 `src/application/Doctor.ts` (+12 -0) 📝 `src/application/DoctorDiagnostics.ts` (+39 -0) 📝 `src/application/DoctorScope.ts` (+27 -0) 📝 `src/cli.ts` (+6 -2) 📝 `src/config.test.ts` (+23 -0) 📝 `src/config/parseConfig.ts` (+25 -6) 📝 `src/kuna/KunaDoctor.ts` (+57 -14) 📝 `src/logger.ts` (+12 -0) 📝 `tests/boundary/cli/cliLogLevelConfiguration.test.ts` (+50 -11) 📝 `tests/boundary/cli/doctorHopperDiscovery.test.ts` (+69 -0) 📝 `tests/boundary/providers/kuna/kunaDoctor.test.ts` (+95 -2) 📝 `tests/boundary/providers/kuna/kunaSetupReadiness.test.ts` (+5 -1) </details> ### 📄 Description <!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## Summary Fixes #5454, #5554, and #5105. Scoped `rea doctor` could report a selected engine healthy when shared native configuration was invalid, and Kuna doctor could report a dangling cache root as creatable and available. Readiness now uses the same environment admission as native commands, and a cache path is creatable only when no directory entry occupies its name. ## Problem and expected behavior `rea doctor --provider hopper` stayed successful for `REA_ANALYSIS_PROVIDER=Hopper` and `REA_GHIDRA_STARTUP_TIMEOUT_MS=abc`, while `analyze` and `search-bytes` failed with `configuration_invalid`. `rea doctor --provider ghidra` could likewise succeed with `REA_HOPPER_STARTUP_TIMEOUT_MS=abc`, because that setting had its own check and the check was required only for Hopper. A Kuna cache root that is a dangling symlink, including one written with a trailing separator, was reported ready because `stat` follows the link and `ENOENT` was treated as absence. Setup's ready-provider list already required passing checks, but the inspection still published `available: true`. An invalid `REA_LOG_LEVEL` was rejected in the executable dispatcher before doctor ran, so the readiness check never reached `rea doctor --json`. After that path reached doctor, a client-only or skill scope could still report healthy because the failure was included only when a provider was selected. That client cannot start REA: the dispatcher rejects every other command, and MCP startup rejects the same setting. Doctor should fail the selected engine and name the rejected setting. An invalid `REA_LOG_LEVEL` should also fail client and skill scopes. Every other `parseConfig` failure, including `REA_GHIDRA_STARTUP_TIMEOUT_MS` and `REA_HOPPER_STARTUP_TIMEOUT_MS`, should fail a selected client because MCP startup rejects it. A skill-only scope leaves those other settings informational. An invalid `REA_HOPPER_STARTUP_TIMEOUT_MS` should fail every selected provider. A dangling cache link should fail the cache check, clear availability, and leave the installation check and caller-selected registration settings in place. A resolving link and a missing path under a writable parent stay ready. On Darwin and Linux, a trailing `\` is part of the configured cache path. `REA_JEB_MCP_TIMEOUT_MS` remains outside native admission. Commands other than doctor still stop before execution when the log level is invalid. ## Change and scope `parseConfig` and doctor share `nativeAnalysisConfigurationError`. Rejected settings become `runtime-configuration:<setting>` checks. They fail the full audit. An explicit provider scope includes every rejected native setting. `REA_LOG_LEVEL` also fails client and skill scopes. A selected client includes every other native admission failure, because MCP startup rejects it. A skill-only scope leaves those other settings informational. `REA_HOPPER_STARTUP_TIMEOUT_MS` keeps its existing `hopper-startup-timeout` check, and that check is required for every selected provider. The dispatcher lets `doctor` continue after an invalid `REA_LOG_LEVEL` so that check is in the public JSON report. Every other command keeps the existing stderr rejection. Kuna cache inspection strips the selected platform's terminal separator before `lstat`, so a dangling link is not mistaken for a missing path. On Darwin and Linux that separator is `/`. `available` follows the cache check. Contribution scope: ordinary readiness fixes inside existing doctor and Kuna cache diagnosis. No new provider, target execution, injection, mutation, or protection recovery. Maintainer scope decision: not applicable. Already fixed on main and not included: #5561, #5559, and #5604 (`dd0015aaf`); #5568 (`7b2087e44`). ## Contract and boundary impact - Semantic owner and earliest changed stage: `parseConfig` owns native environment admission; `PROCESS_START_CONFIGURATION_SETTINGS` owns which of those settings block process start; the executable dispatcher owns the log-level exception for doctor; `KunaDoctor` owns cache-root classification. Earliest stage is setup or provider admission, before a provider session. - Contribution scope fit and linked maintainer decision: bugfix within existing doctor and Kuna readiness. Not applicable. - CLI and MCP/tool-catalog contract: `rea doctor` JSON gains `runtime-configuration:<setting>` checks when native admission fails, including an invalid `REA_LOG_LEVEL`. That log-level check is required in every explicit scope. A selected client also requires every other native admission failure and `hopper-startup-timeout`. `hopper-startup-timeout` remains required for every selected provider. Exit status follows `healthy`. Other commands keep the plain stderr rejection for an invalid log level. No new command or tool. - Provider, bridge, target-format, or platform compatibility: Kuna cache diagnosis changes for dangling links, trailing platform separators, and POSIX paths that end in `\`. Other providers are unchanged. No engine protocol change. - Evidence, artifact, provenance, or reconstruction contract: none. - Target selection, authority, upstream behavior, and cleanup details: doctor remains read-only. It does not create the cache or repair the link. - Generated metadata (`docs/public/product-catalog.json`), package, or installation impact: `docs/installation.md` states that an invalid `REA_LOG_LEVEL` fails every doctor scope, and that other MCP startup failures fail a selected client and every selected provider. CI generates and validates ignored catalogs and `skills/`. Expected effects (check known effects; use documentation-only on its own). - [x] 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: `src/application/Doctor.test.ts`, `src/config.test.ts`, `tests/boundary/cli/doctorHopperDiscovery.test.ts`, `tests/boundary/cli/cliLogLevelConfiguration.test.ts`, `tests/boundary/providers/kuna/kunaDoctor.test.ts`, `tests/boundary/providers/kuna/kunaSetupReadiness.test.ts`. - Base reproduction or other evidence: source inspection of `stat`/`ENOENT`, of doctor versus `parseConfig`, of `scripts/rea.mjs` exiting before doctor when `REA_LOG_LEVEL` is invalid, of the scope partition that omitted process-start failures when no provider was selected, and of `hopper-startup-timeout` being required only when Hopper itself was selected. The historical CLI timings in #5454 and #5554 were not re-run on a real Hopper or Kuna engine. - User-visible CLI/MCP output: focused CLI doctor with `REA_ANALYSIS_PROVIDER=Hopper` and `REA_GHIDRA_STARTUP_TIMEOUT_MS=abc` exited 1 and included both `runtime-configuration` checks in `scope_checks`. `REA_JEB_MCP_TIMEOUT_MS=abc` added no such check. `rea --json doctor --provider hopper` and `rea --json doctor --client codex` with `REA_LOG_LEVEL=loud` and `INFO` exited 1 with an empty stderr and `runtime-configuration:REA_LOG_LEVEL` in `scope_checks`. `rea --json doctor --client codex` with `REA_GHIDRA_STARTUP_TIMEOUT_MS=abc` exited 1 and included that check in `scope_checks` with `providers: []`. `rea --help` with an invalid log level still prints the stderr configuration error and no stdout. - Remaining proof gaps: no real Hopper, Ghidra, IDA, or Kuna engine. Windows cache links were not run (`kunaDoctor` tests skip win32). The non-Hopper timeout regression uses a scripted Ghidra inspection. - [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 - `npm run test:local -- src/application/Doctor.test.ts src/config.test.ts src/application/Doctor.lifecycle.test.ts` — 129 passed. - `npm run test:focused -- tests/boundary/providers/kuna/kunaDoctor.test.ts tests/boundary/providers/kuna/kunaSetupReadiness.test.ts tests/boundary/cli/doctorHopperDiscovery.test.ts` — 16 passed. - `npm run test:focused -- tests/boundary/cli/cliLogLevelConfiguration.test.ts tests/boundary/cli/dispatcher.test.ts tests/boundary/cli/doctorHopperDiscovery.test.ts` — 8 passed. - `npm run test:focused -- src/application/Doctor.test.ts tests/boundary/cli/cliLogLevelConfiguration.test.ts tests/boundary/providers/kuna/kunaDoctor.test.ts` — 72 passed. - `npm run test:focused -- src/application/Doctor.test.ts tests/boundary/cli/doctorHopperDiscovery.test.ts` — 64 passed on `df9a78014`. - `npm run test:local -- src/ida/IdaOperationFailures.test.ts` — 33 passed on `91dc38c64`. - `npm run check:fast` — passed on `df9a78014`. - `npx oxfmt --check .` — passed on `df9a78014`. - `npx tsc --noEmit` — passed on an earlier revision; `check:fast` typechecked this revision. ## Compatibility, safety, and release - Breaking changes or migration steps: `rea doctor` with an invalid `REA_LOG_LEVEL` now returns the doctor report instead of the dispatcher's stderr line, and that failure makes client and skill scopes unhealthy. A selected client is also unhealthy for every other setting MCP startup rejects. An invalid `REA_HOPPER_STARTUP_TIMEOUT_MS` fails every selected provider and a selected client. Other commands are unchanged. Callers who treated a dangling Kuna cache, a POSIX cache path ending in `\`, or an invalid native setting as healthy now get a failing doctor result. - Real Hopper/Ghidra, browser, or OS coverage: not run. Linux scripted CLI and filesystem fixtures only. - Package or release metadata impact: none. - Security, privacy, process, or containment review: read-only diagnosis. No new process launch. Rejected setting values are not copied into the check detail; the parser constraint is. ## 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-f78dfee1-da7e-510b-b638-e11cad194f30?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-f78dfee1-da7e-510b-b638-e11cad194f30&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:44:41 +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#7010
No description provided.