[PR #2736] [MERGED] feat: add FreeBuff agent support for REA setup #5353

Closed
opened 2026-10-31 01:05:58 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/2736
Author: @0xLLVEL
Created: 10/13/2026
Status: ✅ Merged
Merged: 10/25/2026
Merged by: @morluto

Base: main ← Head: feat/add-freebuff-agent-support


📝 Commits (10+)

  • 4799644 feat: add FreeBuff agent support for REA setup
  • 783f0fe fix(freebuff): detect FreeBuff from its profile directory, not shared .agents
  • 6092f6d fix(setup): require product evidence for FreeBuff discovery
  • 19271a4 fix(uninstall): retain unverified shared client configuration
  • 871757e fix(clients): preserve scoped removal evidence
  • e27c32e fix(doctor): omit undefined selectedClientIds under exactOptionalPropertyTypes
  • 93d7d83 fix(update): separate ownership evidence from product applicability
  • b3cde64 test(dotnet): split oversized operand extent diagnostics describe
  • b4ce737 fix(update): preserve ZCode's disabled shared registration during maintenance
  • 9862ad1 fix(doctor): let explicit client selection authorize the config read

📊 Changes

133 files changed (+2098 additions, -389 deletions)

View changed files

📝 .agents/skills/reverse-engineer-anything/references/connection-and-recovery.md (+1 -1)
📝 docs/client-configuration.md (+22 -0)
📝 docs/client-verification.md (+5 -0)
📝 docs/installation.md (+3 -0)
📝 src/adb/AdbProvider.ts (+3 -5)
📝 src/apktool/ApktoolProvider.ts (+3 -5)
📝 src/application/BinaryTargetResolver.ts (+6 -6)
📝 src/application/BrowserObservationService.test.ts (+5 -3)
📝 src/application/ClientRegistration.ts (+17 -0)
📝 src/application/ClientRegistrationStatus.ts (+62 -8)
📝 src/application/DirectAnalysis.ts (+4 -2)
📝 src/application/Doctor.ts (+6 -3)
📝 src/application/EnhancedTools.objcClasses.test.ts (+1 -1)
📝 src/application/Setup.fixture.ts (+1 -2)
📝 src/application/SetupHost.ts (+6 -2)
📝 src/application/SupportedClients.ts (+99 -9)
📝 src/application/Uninstall.ts (+366 -73)
📝 src/application/UpdateMaintenance.ts (+12 -0)
📝 src/application/analysisView/AnalysisViewService.test.ts (+3 -5)
📝 src/application/android/AndroidAnalysisPort.ts (+1 -1)

...and 80 more files

📄 Description

Register FreeBuff Desktop as a supported setup client. FreeBuff loads MCP servers from ~/.agents/mcp.json (mcpServers) and personal skills from ~/.agents/skills, so its registration shares storage with ZCode's user-scope fallback.

Summary

Closes #3243.

Problem and expected behavior

FreeBuff Desktop was missing from the supported-client inventory, so rea setup, rea doctor, rea uninstall, and rea update ignored it: there was no supported way to register REA for FreeBuff, and no way to detect, repair, or remove that registration.

The shared storage is what makes the naive version wrong. ~/.agents/mcp.json is also created by REA's own skill installs and is ZCode's user-scope fallback, so its existence cannot prove that FreeBuff is installed. Treating it as FreeBuff's config unconditionally would add a phantom client to rea doctor, let rea setup --all-detected write it, and let uninstall act on another product's file.

Change and scope

  • New freebuff client definition: ~/.agents/mcp.json for the server entry, ~/.agents/skills for the personal skill, and ~/.config/freebuff-desktop as the product-specific discovery and marker path.
  • Applicability and ownership are now separate facts. clientEvidencePaths prefers a client's discoveryPaths, so shared storage never proves a product is installed; new clientOwnershipEvidencePaths and clientSharedRegistrationPaths describe storage a client shares with another product.
  • Uninstall carries that boundary. Applicability comes from product-specific discovery; when it is unproven, shared storage is retained instead of blocking unrelated removals, while a readable file with a recognizable REA-owned row is still removed. A probe failure other than absence stays unresolved instead of being read as absence.
  • Uninstall treats one registration as one decision, not one filename as one decision. ~/.agents/mcp.json resolves to its owner (FreeBuff) and is inspected and edited once; ZCode's fallback view reports that same removal instead of finding the row already absent. Two clients that each declare the same path as their own configuration (OpenCode pointed at FreeBuff's file through OPENCODE_CONFIG) write different tables, so each keeps its own removal. A discovery path that is a dangling link is no longer installation evidence, matching setup and doctor, so a leftover profile link cannot turn an unrelated shared file into a blocking failure.
  • Setup preserves a shared row's enable: false rather than silently re-enabling a row it does not own, and doctor reports that preserved disable as a manual conflict instead of pointing at a setup run that cannot repair it.
  • selectedClientIds is threaded through doctor and the registration status path, so an explicit --client freebuff is honored without a profile marker.
  • Docs: client configuration, the installation table, the supported-client skill reference, and a client-verification note that FreeBuff loading is unverified with an installed client.

Not included: no change to FreeBuff itself, to the MCP transport, or to provider behavior.

Contract and boundary impact

  • Semantic owner and earliest changed stage: src/application/SupportedClients.ts owns the client inventory and its applicability/ownership paths; the earliest changed stage is setup, doctor, and uninstall discovery.
  • Contribution scope fit: MCP client registration only. No target execution, injection, mutation, or protection recovery; the scope decision is not applicable beyond the documented registration contract.
  • CLI contract: rea setup --client freebuff and rea doctor --client freebuff are accepted; --all-detected selects FreeBuff only with product-specific evidence; uninstall retains unverified shared storage instead of failing globally.
  • Provider, bridge, target-format, or platform compatibility: none.
  • Evidence, artifact, provenance, or reconstruction contract: none.
  • Generated metadata: no generated catalog is committed; the supported-client table derives from the same definition.

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: tests/boundary/filesystem/freebuffClientConfiguration.test.ts (new), clientLifecycle.test.ts, setupClientConfigCleanupOwnership.test.ts, clientRegistrationStatus.test.ts, zcodeClientConfiguration.test.ts, tests/process-global/updateMaintenance.test.ts.
  • Base reproduction: not run against upstream/main. The new file exercises the shared-storage boundaries directly (phantom detection, unverified applicability, owned-row removal, unresolved probes); running it on main is not possible without the client definition it covers.
  • User-visible CLI/MCP output: rea setup --client freebuff writes mcpServers.rea into ~/.agents/mcp.json; rea doctor reports FreeBuff only when ~/.config/freebuff-desktop exists.
  • Remaining proof gaps: no installed FreeBuff client was launched, so neither MCP loading nor personal skill discovery is verified; docs/client-verification.md records that. The original validation below ran on Windows x64; the merge-resolution validation below adds macOS coverage.

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

Latest review fixes (macOS arm64, Node.js v24.22.1, npm 11.16.0):

  • Doctor follows product-profile link targets while retaining entry-presence checks for configuration ownership. Explicit client selection still forces inspection.
  • ZCode's shared-file fallback attaches only to the matching registration table. Uninstall projects outcomes using both the owning client and path, so OpenCode's separate table cannot change ZCode's reported result.
  • All three new regression cases fail against the pre-fix source: the dangling profile appears installed, and the mixed owned/foreign table cases produce the wrong ZCode actions or summary. All pass with the fixes.
  • npm run check:fast — pass. Seven focused lifecycle, registration, cleanup, FreeBuff/ZCode, and maintenance files — 217 passed; the final two changed test files were rerun — 50 passed.
  • The dangling-link test uses a real macOS symlink and is skipped on Windows. No installed FreeBuff client was launched.

Latest merge-resolution validation (macOS arm64, Node.js v24.22.1, npm 11.16.0), merging main at 4ed33efb0:

  • Moved the shared enable: false preservation rule into main's current registration writer and reused it for doctor remediation. Kept main's client-specific activation rules, configuration-error details, and skill-discovery results.
  • npm run check:fast — pass.
  • npm run test:focused over FreeBuff/ZCode configuration, cleanup ownership, client lifecycle, registration status/ownership, and update maintenance — 214 passed across 7 files.
  • Additional focused coverage for layered environments, Codex client policy, and the Codex policy CLI lifecycle — 25 passed, 2 skipped across 3 files.
  • npm run docs:check — pass.
  • Installed FreeBuff loading remains unverified. Linux and Windows were not rerun for this merge resolution.

Earlier branch validation:

On 0d776df76 (merge of upstream/main at 2c3dd946d), Windows x64, Node.js v26.12.0:

  • npm run check:fast (typecheck + lint) — 2 tasks, 0 errors
  • npm run format:check — 4,999 files, clean
  • npm run test:focused over setupClientConfigCleanupOwnership (32), freebuffClientConfiguration (15), zcodeClientConfiguration (27 passed, 1 skipped) — green. The four new uninstall regressions (one shared removal reported to both clients, per-client rows when OpenCode owns the same file, a dangling profile link, and the unresolved-probe fail-closed case) all fail on the pre-fix source and pass here.
  • clientLifecycle + clientRegistrationStatus — 77 passed, 4 skipped, 9 failed. The same 9 tests fail on the unmodified merge commit in this worktree: five cannot create symlinks (EPERM: operation not permitted, symlink) on this Windows account, and four path-sensitive assertions compare POSIX-style paths. Host failures, not regressions.
  • npm run docs:check — pass
  • Real FreeBuff client, macOS, Linux, and a native permission-denied symlink run — not run. The dangling-link and unresolved-probe scenarios are fixture-simulated through the injected filesystem.

Compatibility, safety, and release

  • Breaking changes or migration steps: none. The client is additive, and the shared-storage rules apply only to clients that declare sharedRegistration.
  • Real client coverage: none; Windows and macOS filesystem/boundary coverage, plus the macOS Codex policy CLI lifecycle test.
  • Package or release metadata impact: none. freebuff ships with the first release containing this PR and is absent from published packages until then, as noted in docs/client-configuration.md.
  • Security, privacy, process, or containment review: no credentials or network behavior. Uninstall retains shared storage it cannot attribute to REA instead of deleting it.

Author readiness

Human owner: @0xLLVEL

  • 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.

🔄 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/2736 **Author:** [@0xLLVEL](https://github.com/0xLLVEL) **Created:** 10/13/2026 **Status:** ✅ Merged **Merged:** 10/25/2026 **Merged by:** [@morluto](https://github.com/morluto) **Base:** `main` ← **Head:** `feat/add-freebuff-agent-support` --- ### 📝 Commits (10+) - [`4799644`](https://github.com/morluto/rea/commit/4799644098dee9c66b94f7227409286d8cdf1e28) feat: add FreeBuff agent support for REA setup - [`783f0fe`](https://github.com/morluto/rea/commit/783f0fe45eb99a1d8af6a053aa09dbe98689dbc1) fix(freebuff): detect FreeBuff from its profile directory, not shared .agents - [`6092f6d`](https://github.com/morluto/rea/commit/6092f6da7eaa78956a9e3987cd9185e5020b7f07) fix(setup): require product evidence for FreeBuff discovery - [`19271a4`](https://github.com/morluto/rea/commit/19271a49e0eb5fa8578fe77be5ad905ba40cd0db) fix(uninstall): retain unverified shared client configuration - [`871757e`](https://github.com/morluto/rea/commit/871757e31c99b035ed2b02aa22d1c4d1e97c1526) fix(clients): preserve scoped removal evidence - [`e27c32e`](https://github.com/morluto/rea/commit/e27c32e68bda62299d2a10c7761b621b0080e6dc) fix(doctor): omit undefined selectedClientIds under exactOptionalPropertyTypes - [`93d7d83`](https://github.com/morluto/rea/commit/93d7d837fa678a95ecfb480af5c5178a79246b2e) fix(update): separate ownership evidence from product applicability - [`b3cde64`](https://github.com/morluto/rea/commit/b3cde6438a0a23ee277ad90ebf06594a62fb0f89) test(dotnet): split oversized operand extent diagnostics describe - [`b4ce737`](https://github.com/morluto/rea/commit/b4ce737ba4085fbf8b8c36462930c3b8ee85b885) fix(update): preserve ZCode's disabled shared registration during maintenance - [`9862ad1`](https://github.com/morluto/rea/commit/9862ad1e78218f5d472363889c3349c22f8fe52d) fix(doctor): let explicit client selection authorize the config read ### 📊 Changes **133 files changed** (+2098 additions, -389 deletions) <details> <summary>View changed files</summary> 📝 `.agents/skills/reverse-engineer-anything/references/connection-and-recovery.md` (+1 -1) 📝 `docs/client-configuration.md` (+22 -0) 📝 `docs/client-verification.md` (+5 -0) 📝 `docs/installation.md` (+3 -0) 📝 `src/adb/AdbProvider.ts` (+3 -5) 📝 `src/apktool/ApktoolProvider.ts` (+3 -5) 📝 `src/application/BinaryTargetResolver.ts` (+6 -6) 📝 `src/application/BrowserObservationService.test.ts` (+5 -3) 📝 `src/application/ClientRegistration.ts` (+17 -0) 📝 `src/application/ClientRegistrationStatus.ts` (+62 -8) 📝 `src/application/DirectAnalysis.ts` (+4 -2) 📝 `src/application/Doctor.ts` (+6 -3) 📝 `src/application/EnhancedTools.objcClasses.test.ts` (+1 -1) 📝 `src/application/Setup.fixture.ts` (+1 -2) 📝 `src/application/SetupHost.ts` (+6 -2) 📝 `src/application/SupportedClients.ts` (+99 -9) 📝 `src/application/Uninstall.ts` (+366 -73) 📝 `src/application/UpdateMaintenance.ts` (+12 -0) 📝 `src/application/analysisView/AnalysisViewService.test.ts` (+3 -5) 📝 `src/application/android/AndroidAnalysisPort.ts` (+1 -1) _...and 80 more files_ </details> ### 📄 Description Register FreeBuff Desktop as a supported setup client. FreeBuff loads MCP servers from `~/.agents/mcp.json` (`mcpServers`) and personal skills from `~/.agents/skills`, so its registration shares storage with ZCode's user-scope fallback. ## Summary Closes #3243. ## Problem and expected behavior FreeBuff Desktop was missing from the supported-client inventory, so `rea setup`, `rea doctor`, `rea uninstall`, and `rea update` ignored it: there was no supported way to register REA for FreeBuff, and no way to detect, repair, or remove that registration. The shared storage is what makes the naive version wrong. `~/.agents/mcp.json` is also created by REA's own skill installs and is ZCode's user-scope fallback, so its existence cannot prove that FreeBuff is installed. Treating it as FreeBuff's config unconditionally would add a phantom client to `rea doctor`, let `rea setup --all-detected` write it, and let uninstall act on another product's file. ## Change and scope - New `freebuff` client definition: `~/.agents/mcp.json` for the server entry, `~/.agents/skills` for the personal skill, and `~/.config/freebuff-desktop` as the product-specific discovery and marker path. - Applicability and ownership are now separate facts. `clientEvidencePaths` prefers a client's `discoveryPaths`, so shared storage never proves a product is installed; new `clientOwnershipEvidencePaths` and `clientSharedRegistrationPaths` describe storage a client shares with another product. - Uninstall carries that boundary. Applicability comes from product-specific discovery; when it is unproven, shared storage is retained instead of blocking unrelated removals, while a readable file with a recognizable REA-owned row is still removed. A probe failure other than absence stays unresolved instead of being read as absence. - Uninstall treats one registration as one decision, not one filename as one decision. `~/.agents/mcp.json` resolves to its owner (FreeBuff) and is inspected and edited once; ZCode's fallback view reports that same removal instead of finding the row already absent. Two clients that each declare the same path as their own configuration (OpenCode pointed at FreeBuff's file through `OPENCODE_CONFIG`) write different tables, so each keeps its own removal. A discovery path that is a dangling link is no longer installation evidence, matching setup and doctor, so a leftover profile link cannot turn an unrelated shared file into a blocking failure. - Setup preserves a shared row's `enable: false` rather than silently re-enabling a row it does not own, and doctor reports that preserved disable as a manual conflict instead of pointing at a setup run that cannot repair it. - `selectedClientIds` is threaded through doctor and the registration status path, so an explicit `--client freebuff` is honored without a profile marker. - Docs: client configuration, the installation table, the supported-client skill reference, and a `client-verification` note that FreeBuff loading is unverified with an installed client. Not included: no change to FreeBuff itself, to the MCP transport, or to provider behavior. ## Contract and boundary impact - Semantic owner and earliest changed stage: `src/application/SupportedClients.ts` owns the client inventory and its applicability/ownership paths; the earliest changed stage is setup, doctor, and uninstall discovery. - Contribution scope fit: MCP client registration only. No target execution, injection, mutation, or protection recovery; the scope decision is not applicable beyond the documented registration contract. - CLI contract: `rea setup --client freebuff` and `rea doctor --client freebuff` are accepted; `--all-detected` selects FreeBuff only with product-specific evidence; uninstall retains unverified shared storage instead of failing globally. - Provider, bridge, target-format, or platform compatibility: none. - Evidence, artifact, provenance, or reconstruction contract: none. - Generated metadata: no generated catalog is committed; the supported-client table derives from the same definition. 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. - [x] 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: `tests/boundary/filesystem/freebuffClientConfiguration.test.ts` (new), `clientLifecycle.test.ts`, `setupClientConfigCleanupOwnership.test.ts`, `clientRegistrationStatus.test.ts`, `zcodeClientConfiguration.test.ts`, `tests/process-global/updateMaintenance.test.ts`. - Base reproduction: not run against `upstream/main`. The new file exercises the shared-storage boundaries directly (phantom detection, unverified applicability, owned-row removal, unresolved probes); running it on main is not possible without the client definition it covers. - User-visible CLI/MCP output: `rea setup --client freebuff` writes `mcpServers.rea` into `~/.agents/mcp.json`; `rea doctor` reports FreeBuff only when `~/.config/freebuff-desktop` exists. - Remaining proof gaps: no installed FreeBuff client was launched, so neither MCP loading nor personal skill discovery is verified; `docs/client-verification.md` records that. The original validation below ran on Windows x64; the merge-resolution validation below adds macOS coverage. 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 Latest review fixes (macOS arm64, Node.js v24.22.1, npm 11.16.0): - Doctor follows product-profile link targets while retaining entry-presence checks for configuration ownership. Explicit client selection still forces inspection. - ZCode's shared-file fallback attaches only to the matching registration table. Uninstall projects outcomes using both the owning client and path, so OpenCode's separate table cannot change ZCode's reported result. - All three new regression cases fail against the pre-fix source: the dangling profile appears installed, and the mixed owned/foreign table cases produce the wrong ZCode actions or summary. All pass with the fixes. - `npm run check:fast` — pass. Seven focused lifecycle, registration, cleanup, FreeBuff/ZCode, and maintenance files — 217 passed; the final two changed test files were rerun — 50 passed. - The dangling-link test uses a real macOS symlink and is skipped on Windows. No installed FreeBuff client was launched. Latest merge-resolution validation (macOS arm64, Node.js v24.22.1, npm 11.16.0), merging `main` at `4ed33efb0`: - Moved the shared `enable: false` preservation rule into main's current registration writer and reused it for doctor remediation. Kept main's client-specific activation rules, configuration-error details, and skill-discovery results. - `npm run check:fast` — pass. - `npm run test:focused` over FreeBuff/ZCode configuration, cleanup ownership, client lifecycle, registration status/ownership, and update maintenance — 214 passed across 7 files. - Additional focused coverage for layered environments, Codex client policy, and the Codex policy CLI lifecycle — 25 passed, 2 skipped across 3 files. - `npm run docs:check` — pass. - Installed FreeBuff loading remains unverified. Linux and Windows were not rerun for this merge resolution. Earlier branch validation: On `0d776df76` (merge of `upstream/main` at `2c3dd946d`), Windows x64, Node.js v26.12.0: - `npm run check:fast` (typecheck + lint) — 2 tasks, 0 errors - `npm run format:check` — 4,999 files, clean - `npm run test:focused` over `setupClientConfigCleanupOwnership` (32), `freebuffClientConfiguration` (15), `zcodeClientConfiguration` (27 passed, 1 skipped) — green. The four new uninstall regressions (one shared removal reported to both clients, per-client rows when OpenCode owns the same file, a dangling profile link, and the unresolved-probe fail-closed case) all fail on the pre-fix source and pass here. - `clientLifecycle` + `clientRegistrationStatus` — 77 passed, 4 skipped, 9 failed. The same 9 tests fail on the unmodified merge commit in this worktree: five cannot create symlinks (`EPERM: operation not permitted, symlink`) on this Windows account, and four path-sensitive assertions compare POSIX-style paths. Host failures, not regressions. - `npm run docs:check` — pass - Real FreeBuff client, macOS, Linux, and a native permission-denied symlink run — not run. The dangling-link and unresolved-probe scenarios are fixture-simulated through the injected filesystem. ## Compatibility, safety, and release - Breaking changes or migration steps: none. The client is additive, and the shared-storage rules apply only to clients that declare `sharedRegistration`. - Real client coverage: none; Windows and macOS filesystem/boundary coverage, plus the macOS Codex policy CLI lifecycle test. - Package or release metadata impact: none. `freebuff` ships with the first release containing this PR and is absent from published packages until then, as noted in `docs/client-configuration.md`. - Security, privacy, process, or containment review: no credentials or network behavior. Uninstall retains shared storage it cannot attribute to REA instead of deleting it. ## Author readiness Human owner: @0xLLVEL - [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. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-31 01:05:58 +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#5353
No description provided.