Skip to content

fix: keep native question cards out of the public API#110534

Merged
steipete merged 31 commits into
mainfrom
feat/ask-user-followups
Jul 18, 2026
Merged

fix: keep native question cards out of the public API#110534
steipete merged 31 commits into
mainfrom
feat/ask-user-followups

Conversation

@steipete

Copy link
Copy Markdown
Contributor

Related: #110372

What Problem This Solves

Resolves a problem where the merged native question-card slice leaves the shared OpenClawKit Periphery intersection red because an internal SwiftUI implementation was exported and its ignore annotations were themselves reported as findings.

Why This Change Was Made

Keep the unreleased question-card view, initializer, and SwiftUI body internal while preserving the public model and transport-event surfaces. Refresh the generated native localization source-line metadata after removing the annotations.

User Impact

No UI behavior changes. The shared package keeps a smaller public API and its dead-code scan can pass again.

Evidence

AI-assisted: yes. I understand and reviewed the two-file change.

steipete added 30 commits July 17, 2026 19:52
# Conflicts:
#	docs/.generated/plugin-sdk-api-baseline.sha256
# Conflicts:
#	ui/src/pages/chat/chat-view.ts
#	ui/src/pages/chat/components/chat-composer.ts
#	ui/src/pages/chat/components/chat-question-card.test.ts
#	ui/src/pages/chat/components/chat-question-card.ts
# Conflicts:
#	docs/.generated/plugin-sdk-api-baseline.sha256
…; reset terminal retention on replayed pending
# Conflicts:
#	apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatTransport.swift
#	apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatView.swift
#	docs/.generated/plugin-sdk-api-baseline.sha256
#	docs/platforms/mac/webchat.md
#	scripts/plugin-sdk-surface-report.mjs
# Conflicts:
#	ui/src/pages/chat/components/chat-composer.ts
# Conflicts:
#	apps/.i18n/native-source.json
#	apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatQuestionCard.swift
@openclaw-barnacle openclaw-barnacle Bot added size: XS maintainer Maintainer-authored PR labels Jul 18, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels Jul 18, 2026
@clawsweeper

clawsweeper Bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 18, 2026, 4:39 AM ET / 08:39 UTC.

Summary
The branch makes the shared native question-card SwiftUI view, initializer, and body internal, refreshes generated localization source locations, and aligns the macOS pairing-scope expectation with operator.questions.

PR surface: Other -1. Total -1 across 3 files.

Reproducibility: no. high-confidence end-to-end reproduction is attached. The source and prior linked failing intersection job identify the affected public-visibility/Periphery path, but the current PR body does not show the after-fix scan result.

Review metrics: none identified.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦪 silver shellfish
Patch quality: 🐚 platinum hermit
Result: blocked until real behavior proof is added.

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

Rank-up moves:

  • Attach redacted successful output from the exact shared-kit Periphery/intersection scan.
  • Confirm from release history that the removed public Swift API was not shipped, or document the compatibility path.

Proof guidance:

  • [P1] Needs real behavior proof before merge: The PR reports tests and generation but does not provide direct after-fix Periphery/shared-kit intersection output; attach redacted terminal or linked live output proving the prior scan failure is resolved before merge. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Risk before merge

  • [P1] Removing the public SwiftUI type and initializer is compatibility-sensitive unless maintainers confirm that no supported release exposed this API or choose an explicit deprecation path.
  • [P1] The intended dead-code-scan repair is not directly demonstrated by attached after-fix output, so a green focused unit-test claim does not yet prove the actual failure is resolved.

Maintainer options:

  1. Prove the API is unreleased (recommended)
    Before merge, confirm the public card was not reachable from a release tag and attach a redacted successful Periphery/shared-kit intersection output.
  2. Retain a supported public path
    If release history shows external consumers could rely on the exported type, preserve or deprecate that API through an explicit compatibility plan.

Next step before merge

  • [P1] A maintainer must confirm the release contract for the removed public Swift surface and evaluate direct after-fix scan evidence; no mechanical repair is identified.

Maintainer decision needed

  • Question: Was OpenClawQuestionCard ever included as a supported public API in a shipped OpenClaw release, or may this PR safely make it internal now?
  • Rationale: The patch intentionally removes public Swift API surface; release reachability determines whether this is a safe unreleased cleanup or needs a compatibility/deprecation plan.
  • Likely owner: steipete — The supplied merged-feature and follow-up commit history ties this person most directly to the original native card boundary and its intended visibility.
  • Options:
    • Confirm unreleased and narrow it (recommended): Verify no release tag exposed this question-card API, retain the internal-only change, and add direct scan evidence before merge.
    • Preserve a compatibility path: If a supported release exposed the type, keep or deprecate the public construction surface with an explicit migration plan.

Security
Cleared: The three-file diff changes Swift access control, an expectation, and generated source locations; it adds no dependency, workflow, secret, permission, or execution-path change.

Review details

Best possible solution:

Keep the card implementation internal if release history confirms it was never a supported public API, then attach a redacted successful shared-kit Periphery/intersection run showing the exact previous failure is gone.

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

No high-confidence end-to-end reproduction is attached. The source and prior linked failing intersection job identify the affected public-visibility/Periphery path, but the current PR body does not show the after-fix scan result.

Is this the best way to solve the issue?

Unclear. Making an unreleased implementation internal is the narrowest solution, but it is only the best fix after confirming the public API was not shipped and demonstrating the exact scan passes.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P3: This is a small internal API and scan-cleanup change with no reported user-visible regression.
  • merge-risk: 🚨 compatibility: The diff removes public Swift declarations, so release reachability must be established before assuming existing package consumers are unaffected.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🐚 platinum hermit.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR reports tests and generation but does not provide direct after-fix Periphery/shared-kit intersection output; attach redacted terminal or linked live output proving the prior scan failure is resolved before merge. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
Evidence reviewed

PR surface:

Other -1. Total -1 across 3 files.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 0 0 0 0
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 3 12 13 -1
Total 3 12 13 -1

What I checked:

Likely related people:

  • steipete: The merged native question-card slice and the subsequent visibility-narrowing follow-up are both attributed to this contributor in the supplied feature history. (role: feature introducer and recent area contributor; confidence: high; commits: 839d07e33865, a12985c52d99, 503ea394c30c; files: apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatQuestionCard.swift, apps/macos/Tests/OpenClawIPCTests/GatewayChannelConnectTests.swift)
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 (1 earlier review cycle)
  • reviewed 2026-07-18T07:46:32.904Z sha 4491d38 :: needs real behavior proof before merge. :: none

@openclaw-barnacle openclaw-barnacle Bot added the app: macos App: macos label Jul 18, 2026
@steipete
steipete merged commit 5057fd9 into main Jul 18, 2026
169 of 178 checks passed
@steipete
steipete deleted the feat/ask-user-followups branch July 18, 2026 09:27
@steipete

Copy link
Copy Markdown
Contributor Author

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 19, 2026
* feat(ask-user): follow-up harness slice

* feat(ask-user): follow-up channels slice

* feat(ask-user): follow-up native slice

* feat(ui): dock question panel above composer with stepper and compact stream summaries

* docs: refresh follow-up integration maps

* test(ui): align terminal summary proof

* fix(infra): echo declared option answers in terminal status when free-text is allowed

* fix(infra): keep reaction answering when display labels are formatter-adjusted

* fix(agents): settle plain-text claims only after question registration commits

* fix(agents,apps): commit-ordered claim persistence, claim-aware prompt delivery, non-blocking question refresh

* fix(harness,infra): reaction-appropriate question copy, caller presentations honored

* fix(native,infra,agents): local-expiry eviction, value-addressed reactions, reserve-before-request

* fix(infra,android): dual-mode question resolver for compact callbacks; reset terminal retention on replayed pending

* fix(harness,discord): claim-aware prompt delivery in run helper; escape finalization labels

* fix(macos): merge transient-content visibility with question cards after main sync

* fix: repair ask user follow-up CI

* test: update limited bootstrap scope expectation

* fix: retain shared question card API

* chore: refresh native i18n inventory

* fix: narrow shared question card visibility

* test: update macOS question scope expectations
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: macos App: macos maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. size: XS status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant