Skip to content

fix(media-core): detect MIME from encoded URL extensions#102649

Closed
VectorPeak wants to merge 10 commits into
openclaw:mainfrom
VectorPeak:fix/media-core-encoded-url-extension
Closed

fix(media-core): detect MIME from encoded URL extensions#102649
VectorPeak wants to merge 10 commits into
openclaw:mainfrom
VectorPeak:fix/media-core-encoded-url-extension

Conversation

@VectorPeak

@VectorPeak VectorPeak commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Fixes encoded HTTP(S) media URLs such as render%2Emp4 being treated as unknown by the media-core MIME fallback.

What Problem This Solves

new URL(...).pathname keeps percent-encoded filename bytes. On current main, getFileExtension() passes that pathname directly to path.extname(), so URLs such as render%2Emp4 and clip%2Ewebm do not expose a recognized extension.

This is reachable outside Discord. The capability CLI accepts a remote media path and passes it as filePath / mediaUrl to describeImageFile(). That enters runMediaUnderstandingFile() and buildFileContext(), where mimeTypeFromFilePath(remoteRef) determines the attachment MediaType. Without this fix, an encoded video URL requested through the image capability falls back to image/*; with the fix it remains video/mp4.

Why This Change Was Made

The URL branch now:

  • extracts only the final pathname component, including preserving an empty final component for URLs ending in /;
  • keeps encoded / and \ bytes (%2F / %5C) literal while decoding the rest of the filename, so object-key data cannot become a path boundary;
  • uses path.posix.extname() for URL filename parsing, making URL semantics independent of the host OS;
  • falls back to the raw final component when that component contains malformed percent encoding.

Local filesystem path behavior is unchanged. The change does not decode the full pathname, parse Content-Disposition, or infer a MIME type when encoded data appears after an otherwise valid extension.

User Impact

Supported encoded URL filenames now follow the same MIME fallback as their decoded equivalents:

https://cdn.example.com/render%2Emp4?download=1#preview -> video/mp4
https://cdn.example.com/render%2Em%70%34                -> video/mp4
https://cdn.example.com/render%2EMP4                   -> video/mp4
https://cdn.example.com/clip%2Ewebm                    -> video/webm

Encoded separators remain filename data rather than becoming path separators:

https://cdn.example.com/archive%2Fclip%2Emp4 -> video/mp4
https://cdn.example.com/archive%5Cclip%2Emp4 -> video/mp4
https://cdn.example.com/render.mp4%2Fpreview -> undefined
https://cdn.example.com/render.mp4%5Cpreview -> undefined

Evidence

Active non-Discord call chain:

openclaw capability CLI remote media input
  -> src/cli/capability-cli.ts describeImageFile({ filePath, mediaUrl })
  -> runMediaUnderstandingFile()
  -> buildFileContext()
  -> mimeTypeFromFilePath(remoteRef)
  -> normalizeMediaAttachments({ MediaType })
  -> runCapability({ ctx, media })

The evidence covers adjacent product layers without depending on network or provider execution:

  • The capability CLI test runs the registered capability image describe command with https://cdn.example.com/clip%2Emp4?download=1#preview and verifies that the real CLI entry preserves it as both filePath and mediaUrl.
  • The media-understanding runtime test starts at describeImageFile() and executes the real runMediaUnderstandingFile() / buildFileContext() path. normalizeMediaAttachments() and provider execution are mocked boundaries; the test verifies that the computed MediaType: video/mp4 is passed into normalization and the capability context.

Direct helper contract tests additionally verify that %2F / %5C remain literal extension content, malformed final encoding falls back to the raw filename, and a trailing slash leaves the final URL component empty.

Focused helper proof after the fix:

render%2Emp4?download=1#preview -> video/mp4
bad%ZZ/render%2Emp4             -> video/mp4
archive%2Fclip%2Emp4            -> video/mp4
archive%5Cclip%2Emp4            -> video/mp4
render.mp4%2Fpreview            -> undefined
render.mp4%5Cpreview            -> undefined
bad%E0%A4%A%2Emp4               -> undefined
render%2Emp4/                   -> undefined

Validation

node scripts/run-vitest.mjs run packages/media-core/src/mime.test.ts
Test Files  1 passed (1)
Tests       116 passed (116)

node scripts/run-vitest.mjs run src/media-understanding/runtime.test.ts
Test Files  1 passed (1)
Tests       21 passed (21)

node scripts/run-vitest.mjs run src/cli/capability-cli.test.ts
Test Files  1 passed (1)
Tests       106 passed (106)

node_modules/.bin/oxfmt --check \
  packages/media-core/src/mime.ts \
  packages/media-core/src/mime.test.ts \
  src/media-understanding/runtime.test.ts \
  src/cli/capability-cli.test.ts
All matched files use the correct format.

git diff --check
passed

Exact-head CI for e6368176 completed with no failures, including successful Real behavior proof runs.

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
@clawsweeper

clawsweeper Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 9, 2026, 9:19 AM ET / 13:19 UTC.

Summary
The PR changes media-core's HTTP(S) URL extension parser to decode the final pathname segment before MIME lookup and adds encoded URL extension regression tests.

PR surface: Source +7, Tests +18. Total +25 across 2 files.

Reproducibility: yes. at source level: current main passes URL.pathname directly to path.extname, and a focused Node URL/path probe shows percent-encoded extension dots remain encoded and do not map to .mp4. An active non-Discord product path remains unproven.

Review metrics: 1 noteworthy metric.

  • Public MIME helper behavior: 1 exported helper path changed. getFileExtension feeds mimeTypeFromFilePath and detectMime through plugin-sdk media surfaces, so maintainers should review the compatibility contract before merge.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🐚 platinum hermit
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P2] Add or cite an active non-Discord call-chain reproduction for encoded URL filename MIME fallback.
  • [P2] Clarify the intended %2F/%5C separator semantics for the exported helper before merge.

Risk before merge

  • [P1] The PR changes exported media MIME helper behavior for existing plugin and core callers that currently classify encoded URL filename extensions as unknown.
  • [P1] The concrete Discord symptom is already fixed by fix(discord): split encoded video URLs from captions #101815, so maintainers still need to decide whether helper-level proof plus reachable non-Discord callers is enough for a shared public-helper change.
  • [P1] The intended %2F/%5C separator semantics remain compatibility-sensitive because the PR decodes the final URL segment before path.extname on an exported helper.

Maintainer options:

  1. Prove the shared helper path first (recommended)
    Before merge, require a non-Discord reproduction or maintainer-accepted contract note showing the public media-mime behavior change is intended for existing plugin/core callers.
  2. Accept the broader fallback change
    Maintainers may intentionally accept that encoded URL filename extensions now classify where they were previously unknown, relying on focused tests and exact-head CI.
  3. Pause if no shared repro appears
    If the only concrete symptom remains the already-merged Discord case, pause or close this PR rather than landing speculative public-helper behavior.

Next step before merge

  • [P2] A member assignee already set proof and contract criteria, so the remaining action is maintainer acceptance or rejection rather than a mechanical ClawSweeper repair.

Maintainer decision needed

  • Question: Is helper-level terminal proof plus reachable non-Discord callers sufficient to land this exported media-core MIME fallback change, or should merge wait for an active non-Discord user-path reproduction?
  • Rationale: The code now addresses the earlier whole-path decoding defect, but the remaining blocker is maintainer confidence in changing a public shared MIME helper beyond the already-fixed Discord case.
  • Likely owner: vincentkoc — vincentkoc is the current assignee, introduced the shared media MIME surface, and already stated the proof and separator-contract criteria for this PR.
  • Options:
    • Require active shared repro (recommended): Keep this PR open but not mergeable until the author shows a concrete non-Discord call chain or user path where encoded URL filename MIME fallback currently fails.
    • Accept helper-level proof: Treat the media-core helper behavior as its own bug contract and allow the PR to proceed with exact-head CI and ordinary review gates.
    • Close or narrow owner-locally: If no non-Discord repro exists, leave the shared helper unchanged and rely on owner-local fixes such as the merged Discord repair.

Security
Cleared: The diff only changes URL filename extension parsing and focused tests; it does not touch dependencies, workflows, secrets, permissions, package resolution, install scripts, or downloaded code execution paths.

Review details

Best possible solution:

Settle the shared media-core contract with maintainer-visible non-Discord call-chain evidence, then either land this focused helper fix with agreed separator semantics or leave the shared helper unchanged and rely on owner-local fixes like #101815.

Do we have a high-confidence way to reproduce the issue?

Yes at source level: current main passes URL.pathname directly to path.extname, and a focused Node URL/path probe shows percent-encoded extension dots remain encoded and do not map to .mp4. An active non-Discord product path remains unproven.

Is this the best way to solve the issue?

Unclear as a merge decision: final-segment decoding is the narrow plausible helper shape, but maintainer feedback says the shared media-core fix still needs active non-Discord repro and separator-contract acceptance.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 3fd52514e35f.

Label changes

Label justifications:

  • P2: This is a normal-priority shared MIME fallback bugfix with limited blast radius and no evidence of outage, data loss, setup blocker, or security impact.
  • merge-risk: 🚨 compatibility: The PR changes exported media MIME helper behavior for existing plugin and core callers that pass encoded HTTP(S) URL filenames.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body includes after-fix terminal output from the actual media-core helpers plus focused validation output; no contributor action is needed for proof.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix terminal output from the actual media-core helpers plus focused validation output; no contributor action is needed for proof.
Evidence reviewed

PR surface:

Source +7, Tests +18. Total +25 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 8 1 +7
Tests 1 18 0 +18
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 26 1 +25

What I checked:

  • Repository policy read: Root AGENTS.md was read fully; no packages-scoped AGENTS.md exists, so the review applied the root policy requiring whole-path PR review, caller/sibling checks, proof review, and best-fix judgment. (AGENTS.md:1, 3fd52514e35f)
  • Current main behavior: Current main passes HTTP(S) URL pathnames directly to path.extname, so percent-encoded extension dots remain encoded before extension lookup. (packages/media-core/src/mime.ts:145, 3fd52514e35f)
  • Source-level reproduction: A focused Node URL/path probe showed render.mp4 yields .mp4 while render%2Emp4 and clip%2Ewebm have no raw extension under current pathname parsing. (3fd52514e35f)
  • PR implementation: The PR diff extracts the final URL pathname segment, decodes that segment, falls back on malformed percent encoding, and then applies path.extname. (packages/media-core/src/mime.ts:147, 043c74484cf9)
  • PR coverage: The PR adds detectMime and mimeTypeFromFilePath regression cases for encoded dots, encoded extension characters, uppercase encoded extensions, malformed earlier segments, encoded slash filenames, and encoded suffixes after extensions. (packages/media-core/src/mime.test.ts:154, 043c74484cf9)
  • Public helper surface: media-mime and the deprecated broad media-runtime barrel export the changed MIME helpers, and docs list media-mime as the narrow plugin MIME helper surface. (src/plugin-sdk/media-mime.ts:3, 3fd52514e35f)

Likely related people:

  • vincentkoc: Vincent Koc introduced the shared media MIME helper/export surface in the release commit and is the current assignee who set the proof and contract criteria for this PR. (role: introduced shared helper and current reviewer; confidence: high; commits: e085fa1a3ffd; files: packages/media-core/src/mime.ts, packages/media-core/src/mime.test.ts, src/plugin-sdk/media-mime.ts)
  • steipete: steipete merged the current-line media-core import PR and the related Discord encoded-video URL fix, and is credited as co-author on the Discord final-filename decoding refactor. (role: merger and adjacent refactor co-author; confidence: medium; commits: e84a0dde175e, 2cb482dd40ad; files: packages/media-core/src/mime.ts, src/plugin-sdk/media-mime.ts, extensions/discord/src/media-detection.ts)
  • VectorPeak: VectorPeak authored the merged Discord encoded-video URL fix that shares this PR's encoded-dot mechanism, so they are relevant beyond being the current PR author. (role: adjacent behavior contributor; confidence: medium; commits: 2cb482dd40ad; files: extensions/discord/src/media-detection.ts, extensions/discord/src/media-detection.test.ts, extensions/discord/src/outbound-adapter.test.ts)
  • velanir-ai-manager: Current git blame for getFileExtension points to the merged MSTeams/media-core import commit authored by velanir-ai-manager, though the behavior ownership appears shared with the media-core reviewers. (role: current-line author; confidence: medium; commits: e84a0dde175e; files: packages/media-core/src/mime.ts, packages/media-core/src/mime.test.ts, src/plugin-sdk/media-mime.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (5 earlier review cycles)
  • reviewed 2026-07-09T10:26:15.397Z sha 927146d :: needs real behavior proof before merge. :: [P2] Decode only the URL filename
  • reviewed 2026-07-09T10:42:47.748Z sha bf83aff :: needs real behavior proof before merge. :: [P2] Decode only the URL filename
  • reviewed 2026-07-09T11:04:21.010Z sha 7dbcceb :: needs maintainer review before merge. :: none
  • reviewed 2026-07-09T11:21:39.931Z sha 5bde183 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-09T12:10:44.146Z sha 54f63f5 :: needs maintainer review before merge. :: none

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. labels Jul 9, 2026
VectorPeak and others added 2 commits July 9, 2026 18:31
Decode only the final HTTP(S) URL pathname segment before extension lookup so malformed earlier segments do not block encoded filename extensions.

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
@VectorPeak

Copy link
Copy Markdown
Contributor Author

Updated the branch and PR evidence for ClawSweeper's P1/P2 asks:

  • media-core now decodes only the final HTTP(S) URL pathname segment before extension lookup.
  • Added regression coverage for malformed earlier URL segments and encoded separator/suffix behavior.
  • Added after-fix terminal proof in the PR body showing both mimeTypeFromFilePath and detectMime returning expected MIME results for encoded URL examples.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Lock in final-segment URL filename decoding behavior for uppercase encoded extensions, encoded slash filenames, and encoded separator suffixes.

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
@VectorPeak

Copy link
Copy Markdown
Contributor Author

Added the extra URL filename edge coverage from the patch audit:

  • uppercase encoded extension: render%2EMP4 -> video/mp4
  • encoded slash before an encoded extension: archive%2Fclip%2Emp4 -> video/mp4
  • encoded backslash suffix after an extension: render.mp4%5Cpreview -> undefined
  • PR body now includes the updated after-fix helper output and 111 passed focused test result.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@vincentkoc vincentkoc self-assigned this Jul 9, 2026
@vincentkoc

Copy link
Copy Markdown
Member

This is not landable as written. The underlying %2E mechanism is real, but decoding the entire URL pathname is the wrong shared contract:

  • malformed encoding in an earlier segment prevents decoding a valid final filename, for example https://cdn.example/bad%ZZ/render%2Emp4;
  • decoded %2F or %5C can change path-segment semantics before path.extname() runs;
  • the malformed-input test keeps a raw .mp4 suffix, so it does not exercise the failure above;
  • no active shared caller failure is shown beyond the Discord case already fixed owner-locally by fix(discord): split encoded video URLs from captions #101815.

A viable shared fix needs an active non-Discord repro, final-component-only decoding that preserves encoded separators, and edge coverage for malformed earlier/final escapes, encoded separators, queries/fragments, and POSIX/Windows behavior. This also needs to clear the batch's non-triviality bar rather than landing as an eight-line speculative public-helper change.

@VectorPeak

Copy link
Copy Markdown
Contributor Author

@vincentkoc Thanks. I will try it.

@VectorPeak

Copy link
Copy Markdown
Contributor Author

@vincentkoc Thanks for the review. I’ll take another look at the real call chain for this media-core fallback.

If I can’t find enough real call-chain evidence to show that this is reachable and useful in practice, I’ll close the PR rather than keep pushing a weak case.

Thanks again for the detailed feedback.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 9, 2026
@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Jul 9, 2026
VectorPeak and others added 2 commits July 9, 2026 20:51
Preserve encoded slash and backslash bytes while decoding URL filename extensions, and cover the active media-understanding runtime classification path for encoded video URLs.

Co-authored-by: Vincent Koc <[email protected]>
Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
@VectorPeak

Copy link
Copy Markdown
Contributor Author

@vincentkoc I followed up on each point from your review on the latest head (33ad80db):

  • Active non-Discord runtime proof: src/media-understanding/runtime.test.ts now exercises buildFileContext() with an encoded remote video URL and verifies that the real runtime attachment becomes MediaType: "video/mp4" instead of falling back to image/*. This path is reached by the CLI remote-media flow: describeImageFile() -> runMediaUnderstandingFile() -> buildFileContext() -> mimeTypeFromFilePath() -> normalizeMediaAttachments() -> runCapability().
  • Final-component-only decoding: only the last URL pathname component is decoded, so malformed escapes in earlier segments no longer block a valid encoded filename.
  • Separator semantics: %2F and %5C are protected before decoding and remain literal encoded filename content; they cannot become path separators before extension lookup.
  • POSIX/Windows consistency: URL extension lookup now uses path.posix.extname(), so URL pathname semantics do not depend on the host OS.
  • Edge coverage: malformed earlier and final escapes, encoded separators, query/fragment handling, uppercase encoded extensions, and encoded suffixes after an extension are covered.

Validation on this exact head:

  • packages/media-core/src/mime.test.ts: 112 passed
  • src/media-understanding/runtime.test.ts: 21 passed
  • formatter check and git diff --check: passed
  • exact-head CI: all completed with no failures, including Real behavior proof

Could you please take another look? If this active runtime call-chain evidence still does not meet the bar for a shared helper change, I will close the PR as previously promised rather than expand the patch further.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@openclaw-barnacle openclaw-barnacle Bot added cli CLI command changes size: S and removed size: XS labels Jul 10, 2026
@VectorPeak

Copy link
Copy Markdown
Contributor Author

@vincentkoc Follow-up on the latest head (e6368176) after an independent multi-agent audit:

  • The audit caught and fixed a potential trailing-slash regression: the code now slices strictly after the final / instead of using path.posix.basename(), so render%2Emp4/ has an empty final component and remains unclassified.
  • Direct getFileExtension() contract tests now prove that %2F / %5C remain literal extension content, rather than only asserting the eventual MIME lookup result.
  • The non-Discord evidence is now split into two explicit adjacent layers: the real registered CLI command preserves the encoded URL as filePath and mediaUrl, and the media-understanding runtime computes and forwards MediaType: video/mp4 through buildFileContext().
  • Malformed earlier/final escapes, encoded separators, query/fragment handling, encoded suffixes, trailing slashes, and host-independent URL extension semantics are covered without expanding the production surface.

Validation on this exact head:

  • media-core MIME tests: 116 passed
  • media-understanding runtime tests: 21 passed
  • capability CLI tests: 106 passed
  • formatter and git diff --check: passed
  • exact-head CI: completed with no failures; Real behavior proof succeeded

Could you please re-review this version? If the paired CLI-entry and runtime-classification proof still does not meet the bar for an active shared caller, I will close the PR rather than broaden the patch further.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@steipete

Copy link
Copy Markdown
Contributor

Fixed and landed via #103410 as 120385a.

GitHub rejected the maintainer rebase/push because the generated createCommitOnBranch payload exceeded its 45 MB limit, even though Allow edits by maintainers was already enabled. I therefore recreated the patch on a maintainer branch, added the broader URL/path regression coverage, and preserved @VectorPeak's Co-authored-by credit.

The replacement passed 246 focused tests, the changed gate, exact-head CI, and a real loopback before/after check. Thank you, @VectorPeak, for finding and fixing this.

Closing this original PR as superseded by the landed replacement.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli CLI command changes merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants