Skip to content

fix: Tier-1 verified bug sweep (create-app, svelte, react/vue, mcp, context) - #347

Merged
vamgan merged 5 commits into
mainfrom
claude/tier1-bug-sweep
Jun 28, 2026
Merged

vamgan merged 5 commits into
mainfrom
claude/tier1-bug-sweep

Conversation

@vamgan

@vamgan vamgan commented Jun 28, 2026

Copy link
Copy Markdown
Collaborator

Summary

Fixes a cluster of verified, shipped bugs found by auditing the monorepo against @askable-ui/core. Each was confirmed against source before fixing; every fix ships with tests. These are the highest-leverage items because several break real consumers on npm install or silently lose data.

Fixes

🔴 @askable-ui/create-app — published-tarball breakage

  • scaffold.js hardcoded ASKABLE_VERSION = '0.14.0' while the repo is 0.15.0, pinning a stale release into every scaffolded app. Now derived from the package's own version, so it can never drift.
  • files[] omitted template-solid even though the directory exists and --template solid is offered → the Solid template was excluded from the published npm tarball and broke on install. Added.
  • description now lists SolidJS; --help usage derives its template list from TEMPLATES (can't go stale).
  • Release-integrity guard: new tests assert (a) the scaffold version equals the package version and (b) every offered template directory is present in files[] — so this whole class of "ships broken" bug can't recur.

🔴 @askable-ui/svelte — silent data loss

  • Askable5.svelte (Svelte 5 runes) dropped the scope prop and data-askable-scope attribute that the Svelte 4 component has, silently breaking scoped annotations for runes consumers. Restored + regression tests.

🟡 @askable-ui/react + @askable-ui/vue — un-nameable public types

  • react exported useAskableNotificationSource but none of its types; added them.
  • Both packages' region/text-selection capture result types reference Askable{Region,TextSelection}Capture{Selection,State}, but consumers couldn't name them — re-exported from core in both. (Note: Vue's components use defineComponent with inline props and have no AskableProps/AskableInspectorProps interfaces to export, unlike Solid — intentionally not invented here.)
  • Both: re-export AskableTabVisibility (used by AskableTabSourceSnapshot).

🔴 @askable-ui/mcp — privacy-gate exemption

  • requireRedacted was enforced only in the server tools, not in createAskableMcpPageBridge — the page bridge had no privacy gate and forwarded packets with privacy.redacted === false. Added requireRedacted to the bridge options and gated all three request types before forwarding. (A per-field sanitizer hook is deferred as a separate additive enhancement.)

🟡 @askable-ui/context — guard/schema divergence

  • isWebContextPacket only checked typeof === 'string' for capture.mode/provenance.method and ignored capture.gesture, so it accepted packets the published JSON Schema rejects. Enum sets are now read from webContextPacketSchema so guard and schema cannot diverge. Adds the package's first test suite.

Test plan

  • npm run build --workspaces — clean across all 12 packages
  • create-app node --test — 6/6 (incl. integrity guards)
  • context 12/12 · mcp 38/38 · react 203/203 · vue 105/105 · svelte 41/41
  • CI typecheck-and-build + static/quality green

🤖 Generated with Claude Code


Generated by Claude Code

claude added 5 commits June 28, 2026 01:44
…add release-integrity guards

- scaffold.js read version from package.json instead of hardcoded 0.14.0 (was pinning a stale release into every scaffolded app)
- add template-solid to files[] so --template solid works on published installs
- description now lists SolidJS; --help usage derives template list from TEMPLATES
- tests assert version parity and that every offered template ships in files[]
Askable5.svelte dropped the scope prop and data-askable-scope attribute that
the Svelte 4 component has, silently breaking scoped annotations for any
consumer on the runes component. Restores parity and adds regression tests.
- react: re-export notification-source types (Options/Result, AskableNotification,
  AskableNotificationSeverity) — the hook was exported but its types were not
- react & vue: re-export the region/text-selection capture Selection/State types
  that the capture result types reference but consumers could not name
- react & vue: re-export AskableTabVisibility (used by AskableTabSourceSnapshot)
…th schema

The guard only checked typeof === 'string' for capture.mode and provenance.method
and ignored capture.gesture entirely, so it could accept packets the published
schema rejects. Enum sets are now read from webContextPacketSchema so guard and
schema cannot diverge. Adds the package's first test suite (12 tests).
… tools

createAskableMcpPageBridge forwarded packets with privacy.redacted=false even
when the server tools would block them — the bridge had no privacy gate at all.
Adds requireRedacted to AskableMcpPageBridgeOptions and blocks unredacted packets
across all three request types before forwarding, matching the server behavior.
@vercel

vercel Bot commented Jun 28, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
askable Ready Ready Preview, Comment Jun 28, 2026 1:52am

@pkg-pr-new

pkg-pr-new Bot commented Jun 28, 2026

Copy link
Copy Markdown

Open in StackBlitz

@askable-ui/angular

npm i https://pkg.pr.new/@askable-ui/angular@347

@askable-ui/context

npm i https://pkg.pr.new/@askable-ui/context@347

@askable-ui/core

npm i https://pkg.pr.new/@askable-ui/core@347

@askable-ui/create-app

npm i https://pkg.pr.new/@askable-ui/create-app@347

@askable-ui/mcp

npm i https://pkg.pr.new/@askable-ui/mcp@347

@askable-ui/qwik

npm i https://pkg.pr.new/@askable-ui/qwik@347

@askable-ui/react

npm i https://pkg.pr.new/@askable-ui/react@347

@askable-ui/react-native

npm i https://pkg.pr.new/@askable-ui/react-native@347

@askable-ui/solid

npm i https://pkg.pr.new/@askable-ui/solid@347

@askable-ui/svelte

npm i https://pkg.pr.new/@askable-ui/svelte@347

@askable-ui/vue

npm i https://pkg.pr.new/@askable-ui/vue@347

@askable-ui/web-component

npm i https://pkg.pr.new/@askable-ui/web-component@347

commit: ae937cb

@vamgan
vamgan merged commit 07b72f8 into main Jun 28, 2026
9 checks passed
@vamgan
vamgan deleted the claude/tier1-bug-sweep branch June 28, 2026 01:57

This branch was successfully deployed

1 active deployment
Preview — ae937cb8 Deployed Jun 28, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants