Add inspectable plugin mention context - #1870
Conversation
f918b2d to
8283c85
Compare
…nspectable-plugin-mentions-thr_p9qmfkggwm
…r_p9qmfkggwm' into bb/inspectable-plugin-mentions-thr_p9qmfkggwm
…r_p9qmfkggwm' into bb/inspectable-plugin-mentions-thr_p9qmfkggwm
…r_p9qmfkggwm' into bb/inspectable-plugin-mentions-thr_p9qmfkggwm
…r_p9qmfkggwm' into bb/inspectable-mentions-refresh-thr_p9qmfkggwm # Conflicts: # packages/templates/src/generated/plugin-sdk-dts.generated.ts
…nspectable-plugin-mentions-integration-thr_p9qmfkggwm # Conflicts: # packages/templates/src/generated/plugin-sdk-dts.generated.ts
…nspectable-plugin-mentions-integration-thr_p9qmfkggwm
|
🚨 SLOP COP 🚨 · I am SlopCop. I am reviewing this pull request for security, code quality, performance, architecture, and end-to-end behavior. I will post one final review after the parallel checks and independent verification finish. |
There was a problem hiding this comment.
🚨 SLOP COP 🚨 · review
Plain English summary
This PR lets a plugin mention show a short preview. It also opens a detail panel with text, comments, metadata, and images. The design is useful, but five issues remain.
Findings
- High — The new Fetch Metadata check blocks a configured cross-site app. It returns 403 before the trusted-origin check. This can break API calls and browser WebSockets.
- Medium — The new prompt fields cross the host daemon command boundary. The protocol version remains at 135, so enrolled machines may not update.
- Medium — The inspector hides valid provider data. Image results can lose required metadata, comments without images do not appear, and some descriptions disappear.
- Medium — New public preview members do not use the required
experimental_prefix. This exposes unaudited stable SDK names. - Low — The inspector casts its HTTP response without runtime validation. A null or malformed result can leave an incomplete dialog.
Architecture
The app, server, and SDK use separate inspection result types. These types already disagree about the comments field. A shared runtime schema can remove this drift and validate the HTTP boundary.
Security and performance
I reproduced the configured-origin 403 with a direct guard probe. The raster validation and React text render paths did not produce a retained injection finding. The final verifier removed performance claims that did not have a measured failure.
Validation
- I reviewed head
afe0376da5b0c4c490aed827e2aece06c8bf38fdagainst merge baseeb7c3993de6434df9e05d94f290ffcdad53675f3. git diff --checkpassed.- The focused inspector test passed all five tests.
- Specialist checks passed 17 server tests, 113 app tests, 11 domain tests, and four SDK tests.
- Exact-head GitHub CI passed all app, server, package, integration, and smoke checks.
- The local dev server did not start after its SDK build. The repository also lacks an inspectable mention fixture. I could not complete the live browser path.
- Five parallel specialist reviews and one GPT-5.6 verification gate produced these findings.
I left a line comment for each finding. I used a review comment only. I did not approve the pull request or request changes.
…r_p9qmfkggwm' into bb/inspectable-plugin-mentions-integration-thr_p9qmfkggwm # Conflicts: # packages/plugin-sdk/bundled-types/bb-plugin-sdk-app.d.ts # packages/plugin-sdk/bundled-types/bb-plugin-sdk-provider-bridge.d.ts # packages/plugin-sdk/bundled-types/bb-plugin-sdk-testing.d.ts # packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts # packages/templates/src/generated/plugin-sdk-dts.generated.ts
Summary
The hook is generic enough for Browser selections, files, comments, Figma nodes, and database records. Browser capture and selection behavior remains plugin-owned.
Safety
falseornullVisual evidence
The before/after composer comparison uses the same 16-item Team members fixture,
Inspectable mention visual QAroute, 1280×900 desktop dev-app window, device scale, and matching crop. Before is the exact parent headdd66e0893; every after capture is from exact final headf740d15e7. Images and overlays were allowed to finish loading and animating before capture.Dense composer: before
State: the parent layer renders all 16 plugin mentions as ordinary pills. They do not expose preview or inspector interaction.
Dense composer: after
Action: keyboard-focus the first inspectable mention.
Result: one opaque BB tooltip opens above that pill with the complete captured selector, role, bounds, nearby controls, and tab-revision context. The other 15 pills remain unchanged.
Settled inspector
Action: click the mention, or focus it and press Space.
Result: the inspector opens with its decoded 1800×1400 screenshot and description fully rendered. There is no ghost, loading shell, or partially rendered second modal.
Expanded preview: desktop
Action: click the screenshot in the inspector.
Result: the full image opens at 1280×900. The close button is flush with the displayed image's top-right corner: its top equals the image top and its right edge equals the image right edge.
Expanded preview: narrow
Result at 768×900: the image scales without clipping, and the close button remains flush with the same top-right corner.
Validation
x=165.57, y=81, width=948.85, height=737.99; the 36px close control had the same top and right edgex=38.40, y=181.20, width=691.20, height=537.59; the 36px close control again had the same top and right edgegit diff --checkpassedDepends on the Browser runtime foundation PR and supersedes the inspectable-mention portion of #1643.
BB-Thread-ID: thr_p9qmfkggwm