feat(slides): add object-scoped text editing primitives#835
Conversation
|
Codex review: passed. Reviewed June 18, 2026, 2:38 AM ET / 06:38 UTC. Summary Reproducibility: yes. Source inspection of current main reproduces the linked command-surface gap, and exact-head inspection shows the PR now adds the missing commands and object-scoped replacement path. Review metrics: 2 noteworthy metrics.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land this branch manually only after CI is green and a maintainer live-smokes style, link, bullets, and object-scoped replacement on a small Google Slides deck. Do we have a high-confidence way to reproduce the issue? Yes. Source inspection of current main reproduces the linked command-surface gap, and exact-head inspection shows the PR now adds the missing commands and object-scoped replacement path. Is this the best way to solve the issue? Yes, with manual merge gating. The repaired implementation is a narrow additive v1 that preserves the existing unscoped default while adding focused object/range-scoped primitives. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against fa3fa1638b5a. Label changesLabel changes:
Label justifications:
Evidence reviewedWhat I checked:
Likely related people:
What the crustacean ranks mean
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 autofix |
|
🦞🧹
This is fix-only; I will not merge this PR. Re-review progress:
|
13c73f9 to
ddca19d
Compare
|
🦞🔧 Repair: kept the fix on this contributor branch instead of opening a replacement PR. Current state: exact-head review queued immediately; GitHub checks and the review verdict gate final merge. Automerge progress:
|
|
@clawsweeper autofix Accepted review finding: object-scoped replace-text only scans top-level slide PageElements. A text shape nested under PageElement.Group.Children has a valid object ID but is reported as not found. Traverse group children recursively when resolving the target shape, add grouped-shape regression coverage, and preserve the existing text-index repair. |
|
🦞👀 Command router queued. I will update this comment with the next step. |
|
🦞🔧 Repair: kept the fix on this contributor branch instead of opening a replacement PR. Current state: exact-head review queued immediately; GitHub checks and the review verdict gate final merge. Automerge progress:
|
|
@clawsweeper autofix Accepted review finding: object-scoped replace-text computes absolute Slides text indexes from Presentations.Get, but BatchUpdate does not bind the write to that presentation revision. A concurrent edit can shift those indexes and make the batch alter the wrong text. Set BatchUpdatePresentationRequest.WriteControl.RequiredRevisionId from pres.RevisionId when available, capture/assert the request write control in regression coverage, and preserve the existing text-index and grouped-shape fixes. |
|
🦞👀 Command router queued. I will update this comment with the next step. |
|
🦞🔧 Repair: kept the fix on this contributor branch instead of opening a replacement PR. Current state: exact-head review queued immediately; GitHub checks and the review verdict gate final merge. Automerge progress:
|
|
🦞🔧 Repair: kept the fix on this contributor branch instead of opening a replacement PR. Current state: exact-head review queued immediately; GitHub checks and the review verdict gate final merge. Automerge progress:
|
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
c24ed95 to
b28530b
Compare
|
@clawsweeper autofix Accepted review findings in the conflict rewrite:
Add regression coverage that the unscoped command still emits the existing deck-wide ReplaceAllText request. |
|
🦞👀 Command router queued. I will update this comment with the next step. |
|
🦞🔧 Repair: kept the fix on this contributor branch instead of opening a replacement PR. Current state: exact-head review queued immediately; GitHub checks and the review verdict gate final merge. Automerge progress:
|
|
@clawsweeper stop Maintainer has completed the rewrite, live provider validation, local CI, and autoreview. Stop active repair/re-review automation so the reviewed exact head can be restored and landed. |
|
🦞✅ I added |
d8c9c9c to
b28530b
Compare
|
Landed as Maintainer validation:
Thanks @sebsnyk for the issue and command-shape guidance. |
|
ClawSweeper 🐠 automerge status ClawSweeper took another look; no safe branch change was available on this pass. Executor outcome: no planned fix actions. Worker actions:
Nothing moved downstream from this pass: no branch update, replacement PR, merge, or re-review. fish notes: reasoning high; reviewed against b28530b. Automerge progress:
|
Summary
slides style-textfor exact UTF-16 ranges with bold/italic/underline set or clear, font, size, and colorslides linkfor applying or clearing links andslides bulletsfor enabling or removing paragraph bulletsslides locate's exact API-index mapping and revision controlreplace-textinvocation to select--object, repeatable--page, or deliberate deck-wide--allCloses #823.
Breaking change
Unscoped
slides replace-text <deck> <find> <replacement>is rejected before auth/API access. Existing scripts that intentionally replace across the entire deck must add--all.Verification
make ci--allDocs
docs/slides-text-editing.mdThanks @sebsnyk for the report.