mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 07:47:29 +00:00
Closed
opened 2026-11-01 21:47:02 +00:00 by bsakaguchi
·
0 comments
No Branch/Tag specified
main
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/procedure-reference-stacked
codex/kuna-independent-retry
codex/byte-search-overlay-coverage
codex/open-failure-target-receipt
codex/kuna-xref-evidence
codex/ghidra-ambiguous-procedure-recovery
codex/function-source-bundle
codex/trace-function-integration-prototype
codex/snapshot-source-closure
codex/recorded-evidence-array-pages
codex/evidence-recovery-redesign
codex/trace-feature-address-scope
codex/call-discovery-scope
codex/ghidra-literal-candidate-evidence
codex/decompile-directory-independent-retry
codex/retry-provenance-base
codex/value-flow-capability-experiment
codex/ghidra-containing-instruction
cursor/readme-discord-button-ef9f
dependabot/github_actions/actions/setup-node-7.1.0
dependabot/github_actions/actions/upload-artifact-7.0.2
dependabot/npm_and_yarn/npm-minor-and-patch-d8d97ce6df
codex/kuna-1989
fix/8559-native-ui-fixture-ownership
fix/8555-go-verifier-mcp-ownership
codex/provider-capability-recovery
fix/8642-rizin-target-stdin
codex/ghidra-memory-effect-scope
codex/ghidra-annotation-entry-selector
codex/ghidra-readonly-recovery
codex/ghidra-regex-verifier-recovery
codex/evidence-discovery-view-guidance
fix/8545-bulk-append-overflow
fix/8428-navigation-refusal-alternatives
codex/address-context-recovery
codex/matching-member-limitations
codex/unknown-scope-contract
codex/evidence-view-guidance
feat/8373-native-trace-views
codex/ghidra-snapshot-verifier-binding
codex/elf-export-visibility
codex/evidence-view-recovery
codex/native-reference-cli-help
codex/provider-candidate-observation-scope
codex/kuna-session-verification
codex/ghidra-switch-lifetime-guidance
codex/pseudocode-paging-discovery
codex/clarify-evidence-view-support
codex/kuna-xrefs-selector-recovery
codex/context-capacity-recovery
codex/evidence-closure-large-links
codex/same-function-evidence-identity
codex/ghidra-verifier-inspected-jdk
codex/audit-guided-workflows
codex/crash-prompt-retained-dossiers
codex/analysis-view-error-recovery
codex/kuna-verifier-target-selection
codex/ghidra-selected-project-call-coverage
codex/docs-native-analysis-scope
codex/ghidra-java-socket-boundary
codex/ghidra-retained-snapshot-verifier
codex/ghidra-search-inventory-facts
fix/8284-zero-argument-parameter-bindings
fix/8198-ui-action-handler-offset
fix/8257-elf-entry-label-identity
fix/8304-deferred-output-schema-projection
fix/8277-call-path-computed-target-uncertainty
fix/pr-8089-conflicts
fix/ci-static-duplicate-export
dependabot/npm_and_yarn/lint-staged-17.6.0
dependabot/github_actions/actions/download-artifact-8.0.2
dependabot/npm_and_yarn/write-file-atomic-8.0.0
dependabot/npm_and_yarn/canonicalize-5.1.0
dependabot/github_actions/actions/cache/restore-6.1.0
dependabot/npm_and_yarn/toon-format/toon-4.4.0
dependabot/github_actions/actions/deploy-pages-5.0.1
codex/review-fixes-pr-2403
codex/review-fixes-pr-2400
codex/process-terminal-width
codex/test-brittleness-cleanup
verify/7167-browser-connect-macos
fix/7167-browser-connect
feat/native-matching-allowance-setting
feat/browser-scenario-dry-run
test/managed-caller-parameters-20261024
codex/parser-fortythird-boundaries
fix/6926-pinvoke-platform-decorations-20261023
fix/6889-har-body-encoding-20261023
fix/6888-sqlite-schema-budget-20261023
fix/dependency-security-gates-6708
cursor/evidence-overwrite-rebase-b4ac
feat/4057-verify-native-exports
fix/windows-acl-observer-overhead-20261022
cursor/erlang-beam-restack-4476
cursor/pe-certificate-review-bf32
fix/6116-javascript-application-fs-errors
fix/6061-unmapped-runtime-script-unknown
feat/browser-scenario-summary
fix/pe-certificates
codex/verify-3407
cursor/rebase-5699
cursor/rebase-5352
cursor/rebase-5600
cursor/fix-cli-schema-omission-10a8
codex/audit-hopper-shutdown-reasons-20261021
fix/demangle-swift-omitted-record
fix/nib-boolean-value-types
cursor/cancellation-partial-observation-a5ac
fix/ib-object-limit-reasons
fix/electron-fuse-limit-advice
fix/kuna-doctor-dangling-cache
fix/fixed-budget-refusal-advice
fix/js-ipc-listener-dedup
fix/js-return-member-provenance
fix/dmg-integrity-retry-advice
fix/ida-doctor-readiness
fix/kuna-version-probe-output-drain
fix/legacy-swift-runtime-name-matching
fix/dylib-lazy-load-commands
fix/browser-scenario-startup-cancel
fix/swift-nested-punycode-classification
fix/compare-unselected-scopes
fix/objc-method-budget-coverage
fix/dmg-mounted-root-observations
audit/ci-tests-20261019-round2
release/6.7.0
fix/wabt-cleanup-retry-resolution
fix/electron-fuse-elf-pe-architecture
fix/native-plist-descriptor-ownership
fix/kuna-caller-cleanup-ownership
experiment/atomic-codemode-20261016
review/first-contributor-3776
fix/call-resolution-full-read-cycles
fix/member-mutation-selection-repeat
experiment/atomic-re-tools-20261015
perf/member-mutation-lazy-origins
perf/static-network-mutation-index
fix/hopper-startup-lifecycle
audit/3050-windows-proof-20261015
feat/windows-window-capture-2183
audit/3049-windows-proof-20261015
audit/3735-macos-fixtures-20261015
fix/batch-decompile-null-pseudocode
fix/kuna-inventory-honors-jobs
experiment/browser-codemode-tool-design-20261015
fix/hopper-clean-runtime-argv
codex/review-2049-27f1b367
review-fixes/pr-2787-routing
fix/3360-scoped-this-emitters
fix/3367-replaced-global-effects
fix/3838-compact-any-value-items
test/hopper-download-probe-20261015
codex/windows-runtime-creation-red-green-20261015
codex/windows-readonly-root-red-green-20261015
codex/windows-root-share-red-green-20261015
codex/exp-1685-win-mcp-startup
codex/bug-sweep-20261015
investigate/2190-windows-package-phases
investigate/3543-macos-cli-deadline
perf/3281-reverse-tools-feedback-quality
fix/3406-hopper-doctor-fixture
fix/3341-wrapper-require-test-context
fix/3301-owned-uninstall-fixtures
fix/3164-compiler-input-ownership
fix/pcap-cleanup-stdout-newline-20261014
perf/interface-builder-summary
codex/review-fixes-pr-1977
fix/ghidra-effective-jvm-platform
fix/docs-turkish-rust-link-20261013
fix/main-maintenance-ci-20261010
fix/recover-binary-session-process-effects
codex/review-fixes-pr-2457
codex/ci-required-cancellation-gate
fix/main-format-baseline-20261013
fix/setup-preserve-entry-fields
cursor/restore-main-checks-1ffc
fix/ghidra-bridge-hashmap-import
codex/shared-ci-jadx-json-default-20261013
codex/shared-ci-ghidra-test-groups-20261013
codex/shared-ci-java-fixture-format-20261013
codex/fix-intrinsic-invocation-boundaries
test/release-preflight-reusable-jobs
test/js-parameter-provenance-expectation
fix/linux-hopper-verification-current
test/2419-ghidra-elf-probe-size
followup/pr-1544-native-ida
codex/fold-pr-2230-contribution
docs/readme-responsible-use
fix/issue-2064
fix/issue-2050
fix/issue-2053
fix/issue-1968
fix/issue-1945
experiment/codemode-bridge-20261011
fix/tool-effects-negative-wording-1904-20261012
fix/1842-electron-interop-provenance
feat/recover-javascript-multi-input
refactor/website-i18n-prep
fix/nativeaot-pe-virtual-extent
fix/browser-verifier-ci-hang
fix/pe-resources-input-selection
docs/beginner-friendly-guides
docs/beginner-setup-guide
fix/javascript-analysis-worker-1563
fix/1649-ghidra-duplicate-names
fix/javascript-export-keys-integration-1369
test/maintenance-boundary-contracts-20261011
review/javascript-export-keys-1369
review/process-live-progress-1483
test/javascript-1495-growth-ratio
fix/ci-escape-timing
docs/normalized-terminal-geometry-1450
release/6.3.0
archive/release-6.3.0-pr1381
release/6.2.0
fix/electron-preload-dynamic-override
fix/javascript-self-referential-bundler-edges
release/6.1.0
cursor/grok-client-cherry-pick-0b56
feat/signature-posture
feat/dyld-shared-cache
feat/artifact-integrity-policy
feat/pkg-inventory
release/6.0.0
chore/sync-release-5.0.0
release/5.0.0
cursor/cloud-agent-node-787e
fix/javascript-xhr-open-endpoints
review/pr-711-realpath-fallback-wording
cleanup/replay-confinement
codex/test-suite-performance
codex/issue-foundations
codex/address-open-issues-2026-07-20
agent/javascript-vite-rollup-esbuild-adapters
agent/process-cleanup
agent/triage-integration
agent/unknown-commands-registry
feat/mcp-identity-metadata
morlvps/issue_cleanup
codex/installer-redesign
morl/roadmap-investigation-core
morl/roadmap-investigation-docs
release-please--branches--main--components--rea
rea-agents-6.8.0
rea-agents-6.7.0
rea-agents-6.6.0
experiment/atomic-codemode-wait-runtime-20261016
rea-agents-6.5.0
rea-agents-6.4.0
rea-agents-6.3.0
rea-agents-6.2.0
rea-agents-6.1.0
rea-agents-6.0.0
rea-agents-5.0.0
rea-agents-4.1.0
rea-agents-4.0.1
rea-agents-4.0.0
rea-agents-3.2.1
rea-agents-3.2.0
rea-agents-3.1.0
rea-agents-3.0.0
rea-agents-2.7.0
rea-agents-2.6.0
rea-agents-2.5.1
rea-agents-2.5.0
rea-agents-2.4.0
rea-agents-2.3.0
rea-agents-2.2.0
rea-agents-2.1.0
rea-agents-2.0.0
rea-agents-1.7.0
rea-agents-1.6.0
rea-agents-1.5.0
rea-agents-1.4.0
rea-agents-1.3.0
rea-agents-1.2.0
rea-agents-1.1.0
rea-agents-1.0.0
rea-agents-0.5.0
rea-agents-0.4.0
rea-agents-0.3.0
rea-0.2.1
rea-0.2.0
Labels
Clear labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
Mirrored from GitHub Pull Request
question
roadmap
triage
No labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
question
roadmap
triage
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
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#7321
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/morluto/rea/pull/6376
Author: @morluto
Created: 10/22/2026
Status: ✅ Merged
Merged: 10/22/2026
Merged by: @morluto
Base:
main← Head:cursor/bridge-max-request-bytes-8c69📝 Commits (10+)
28cb952fix(reconstruction): dedupe residual unknown ids with uniqueSortedd143798feat(config): make the bridge request ceiling configurable82a2a4cfix(cutter): keep cleanup ownership when a sent command's reply is oversized8fb084cstyle: format the bridge request ceiling sourceseea805ffix(cutter): exclude the LF from the response frame budget6f64f4bfix(bridge): measure escaped JSON before allocating the request584a41bfix(config): derive the bridge request maximum from JSON expansion47a0283fix(bridge): size the Cutter frame deadline and send the measured Hopper payloadda3628efix(config): bound the bridge request maximum by the serialized string4d1d7c3fix(hopper): serialize a bridge request when it reaches the wire📊 Changes
43 files changed (+3390 additions, -286 deletions)
View changed files
📝
.agents/skills/reverse-engineer-anything/references/native-and-artifacts.md(+29 -0)📝
bridge/cutter/rea_bridge.py(+598 -95)📝
bridge/hopper_bridge.py(+91 -5)📝
docs/reverse-engineering-tools.md(+40 -9)📝
scripts/lib/test-projects.mjs(+1 -1)📝
src/application/Doctor.test.ts(+1 -0)📝
src/application/ReconstructionObligationCandidates.ts(+4 -4)📝
src/application/SetupRegistrationEnvironment.ts(+1 -0)➕
src/config/bridgeMaxRequestBytes.test.ts(+147 -0)➕
src/config/bridgeMaxRequestBytes.ts(+184 -0)📝
src/config/environment.ts(+2 -0)📝
src/config/parseConfig.ts(+8 -0)📝
src/config/types.ts(+3 -0)📝
src/contracts/cutterToolContracts.ts(+2 -2)📝
src/cutter/CutterBridgeClient.ts(+248 -145)➕
src/cutter/cutterAuthenticatedResponse.test.ts(+172 -0)➕
src/cutter/cutterAuthenticatedResponse.ts(+340 -0)➕
src/cutter/cutterBridgeMac.test.ts(+42 -0)➕
src/cutter/cutterBridgeMac.ts(+16 -0)📝
src/hopper/BridgeLauncher.ts(+21 -3)...and 23 more files
📄 Description
Summary
Part of #6176.
The Hopper and Cutter request payload ceiling was a hard-coded 16 MiB constant in both Python bridges and the TypeScript pre-dispatch check.
REA_BRIDGE_MAX_REQUEST_BYTESis now the single setting. Unset, the ceiling stays 16777216 bytes. A decimal integer from 7464 to 536870887 is accepted. Anything else isconfiguration_invalidand does not fall back to the default.Current
mainalso calls undefineduniqueBywhile merging residual unknown ids, so typecheck failed before this change. Those ids now use the existinguniqueSortedhelper, matching the adjacent string lists.Problem and expected behavior
Three copies of the 16 MiB request budget had to agree:
MAX_REQUEST_BYTESinbridge/hopper_bridge.py,MAX_FRAME_BYTESinbridge/cutter/rea_bridge.py, and the client check before dispatch. There was no runtime override.A caller can now raise or lower that ceiling with
REA_BRIDGE_MAX_REQUEST_BYTES. The payload budget still excludes the terminating LF, and an incomplete Hopper frame is stillIncomplete bridge request frame. An out-of-band bridge without the setting stays at 16777216 bytes. The client compares the bridge advertisement before a discovery status probe and before sending a command. A different ceiling is a mismatch only after the hello proves that descriptor is a live authenticated bridge. A stale descriptor is ignored, and that hello does not send a status request. Discovery fails when any such live ceiling differs, even if another live session matches. A command response discarded because it exceeds the ceiling after dispatch stays an unknown execution and setsoutput_truncated.Change and scope
src/config/bridgeMaxRequestBytes.tsowns the setting, using the same schema in startupparseConfigand doctorparseEnvironment. The floor, 7464 bytes, is the authenticated Cutter frame of Hopper's largest bounded symbol name (1024 U+0001 characters). The required Cutter recovery status, 64 receipts with an unknown path, is smaller than that floor. A status or command path that fits is kept. A path that does not fit is null, so the client does not reuse the descriptor path with the new generation. The session id, connection proof, and receipts remain. The maximum, 536870887, is one byte under Node's 536870888-character string ceiling so the framing LF still fits. The ceiling is the encoded payload. Escaped JSON is measured against it beforeJSON.stringify, so a U+0001 expansion is counted once and is not divided into the maximum again. A structured Cutter reply is admitted when that encoded payload fits. Numbers, booleans, null, and container punctuation use their JSON lengths, so a dense array is not rejected by a fixed per-value charge. Scalar values in a reply are encoded in bounded batches. A 100 MiB encoded ceiling is accepted.Hopper receives a caller-selected value as a bootstrap integer, which wins over the process environment. Cutter reads the environment that starts Cutter and publishes
max_request_byteson its descriptor. A missing advertisement means 16777216. Cutter response frames use the same ceiling and also exclude the terminating LF. The 25000 ms request deadline and the 256-candidate discovery budget do not follow this setting. Neither does the fixed cap of 8 Cutter connection threads.Setup keeps a caller-selected value in
SELECTED_REGISTRATION_SETTINGS. Oversize and mismatch text names the setting, effective value, source, default, floor, and maximum. Escaped request JSON is measured within the ceiling beforeJSON.stringify. The Cutter hello frame still must arrive within 1 second. The authenticated command frame is read at one second per mebibyte of the ceiling, and that read never waits longer than the 25 second client deadline. The bridge searches only the newly read bytes for the framing LF. Hopper serializes a request when it reaches the wire, so a call waiting in the FIFO does not retain a second encoded frame. Cutter hashes the HMAC prefix and the payload as separate updates on both the client and the bridge, so an exact-limit frame does not build one preimage string. The plugin measures and signs the response from bounded JSON pieces, then writes that frame in 64 KiB chunks. The client unescapes each socket chunk into one response string, checks the proof, and then parses that string. A hello that never sends its authenticated frame does not hold the accept loop. At most 8 connection threads run. A further accept is closed, and a failure to start a thread closes that socket without stopping the listener.completed_connectionis the longest prefix of accepted connections whose handlers have terminated. A mismatched descriptor counts only after that hello proof. A response dropped for the ceiling setsoutput_truncatedon the unknown execution.Follow the contribution scope. This configures an existing local bridge admission. It does not add a provider or a target execution, injection, mutation, or protection-recovery capability.
not applicable
Contract and boundary impact
src/config/bridgeMaxRequestBytes.tsowns the ceiling. Startup and doctor parse it before launch. The bridges apply it when they load.CutterBridgeClient.listSessionsowns whether an advertised ceiling is a live session.cutter_commanddocuments the setting.list_cutter_sessionsstates that the 256-candidate discovery budget is separate and still has no runtime override. Invalid values areconfiguration_invalid. A ceiling mismatch during discovery isresource_constraintwhen the hello proves a live authenticated bridge, including when another session matches. A stale descriptor is not that mismatch.max_request_bytes. Cutter descriptors gain the same optional field. Missing means 16777216, so an older bridge still matches a default client. Cutter responses share the ceiling and exclude the terminating LF. Hopper responses are unchanged. Both Python bridges accept only ASCII decimal digits.transport-response-missing) withoutput_truncatedtrue. Its message names the ceiling and says the command may have completed, Evidence records the omitted output, and receipt cleanup still waits. A frame that overflows before the command is sent is aresource_constraint. A response whose payload is exactly the ceiling, followed by LF, is accepted. A tight status or command reportscurrent_fileas null when the observed path does not fit, and the client does not replace that null with the descriptor path. A structured reply under the encoded ceiling is returned rather than markedoutput_truncated.completed_connectionadvances only through connections that have terminated.docs/public/product-catalog.json), package, or installation impact (CI generates and validates ignored catalogs andskills/; edit authored instructions in.agents/skills/reverse-engineer-anything/and never commit build outputs): authored skill text under.agents/skills/reverse-engineer-anything/references/native-and-artifacts.mdonly. No generated catalogs are committed.Expected effects (check known effects; use documentation-only on its own).
Unchecked items do not establish absence; leave uncertainties visible.
Evidence and regression coverage
output_truncated, names the setting, and Evidence records the omitted output; a U+0001 command whose escaped JSON exceeds the ceiling is refused beforeJSON.stringifyon both bridges; the authenticated Cutter read budget is 16 seconds at the default ceiling, 17 seconds at 17 MiB, and 25 seconds at the maximum; a queued Hopper request is not serialized until the active request leaves the wire; the small Cutter HMAC split-update check stays in the default suite, and the maximum-sized preimage is opt-in viaREA_BRIDGE_MAC_LIMIT_TEST=1; a status with a 4095-byte path and 64 receipts at a 7464-byte ceiling reportscurrent_fileas null and keeps the new generation; a command reply that does not fit keeps completion and generation and reports an oversized path as null; a short path is kept when a long version is what overflows; 2000 zeroes are admitted under an 8192-byte ceiling and 8000 zeroes are rejected; 40000 zeroes encode as a handful of bounded pieces and match compact JSON; a status does not complete an earlier connection that is still reading; a ninth connection is not accepted while the worker cap is lowered to 1, and the listener still serves after that worker exits; a failedThread.startcloses that socket, leaves the descriptor in place, and does not stick the completion watermark; a streamed socket frame matches the joined encoding for quotes, a backslash, a newline, and U+2028; the client decoder accepts the same escapes, a raw U+2028, and a long run of backslashes.Incomplete bridge request frame. Pythontests/fixtures/cutter_bridge_protocol_test.pypassed throughcutterBridgeProducer.test.tsone44d54056(31 tests). A mixed value encoded by the streamed writer matched the previous encoder byte for byte (34179 bytes) on an earlier commit; that encoder path is unchanged aside from scalar batching, which the new equality test covers.configuration_invalidand nameREA_BRIDGE_MAX_REQUEST_BYTES. Oversize and mismatch text names the effective value, source, default, floor, and maximum. A tight status message names the setting and says the path is unknown. A mismatched discovery names the setting and says no status request was sent to the mismatched session. An oversized command reply's Evidence hasoutput_truncated: trueand the omitted-output limitation.ca8dcc6cb, including construction of the output string. The retained encoder peaked at 345868 KiB RSS (0.781s elapsed, 0.513s user CPU). The streamed write peaked at 84016 KiB (1.841s elapsed, 1.834s user CPU). Both frames were 67109017 bytes and were not truncated. A 512 MiB frame was not measured. Agent tokens do not apply. The default suite does not hash the 512 MiB HMAC preimage. The 7 million zero timing from review was not re-measured; the regression locks piece count and JSON equality. The 16 MiB backslash scan timing was not re-measured; the decoder now stops at the first quote or backslash.For evidence-bearing changes:
Validation performed
On the tree committed as
0849b0452unless noted:npm run check:fast— passed (typecheck and lint).npm run test:focused -- tests/boundary/providers/cutterBridgeRequestLimit.test.ts— 10 passed.npm run test:focused -- tests/boundary/providers/CutterBridgeClient.test.ts— 30 passed onaa58c8939. The client source is unchanged in0849b0452.Earlier on this branch, before
aa58c8939:npm run format:checkpassed (5132 files);python3 tests/fixtures/cutter_bridge_protocol_test.pypassed (31 tests);npm run test:focusedfor the Cutter producer, null-identity, and client files passed 46 tests one44d54056. Those suites were not re-run for this discovery and truncation change.npm run test:local -- src/cutter/cutterBridgeMac.test.ts src/config/bridgeMaxRequestBytes.test.tspassed 17 with 1 skipped onfbd0868fe. The skipped test is the opt-in 512 MiB HMAC proof.npm run test:acceptance -- tests/acceptance/setup/registrationRuntimeEnvironmentCli.test.tspassed 15 with 1 skipped on an earlier registration commit.Real Hopper and Cutter applications were not available in this environment.
Compatibility, safety, and release
configuration_invalid. A missing health or descriptor field means that same default. A status or command path that does not fit is null rather than the descriptor path. A structured reply that fits the encoded ceiling is returned instead ofoutput_truncated. Discovery fails when a live authenticated ceiling mismatches. A stale descriptor does not. A command response discarded for the ceiling reportsoutput_truncated.completed_connectionno longer means "the status connection ordinal minus one".Author readiness
Human owner: @morluto
Before merge
type(scope): outcome.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.