Render the cards and charts inline instead of treating them as optional - #33
Merged
profunctor merged 2 commits intoAug 20, 2026
Merged
Conversation
The public-safety grep bans "token" because it normally means a credential. The Shopee title-search guidance added in joomcode#31 used it in the linguistic sense ("search short tokens"), which tripped the check on nine lines across two skills and left main red. Reworded to "terms", which reads better for search guidance anyway. No behaviour change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Every skill that specifies visuals guarded them behind "when the client can render inline visuals" and named no mechanism. Nothing in the Claude app matches that phrase, so the skill silently took the markdown fallback and the seller never saw a card or a chart — the visuals were effectively dead in the surface most people use. The thirteen skills that specify visuals now render them every time the data supports them, as a self-contained panel: an artifact where the client renders artifacts, an inline widget where it renders widgets. Cards first, then charts, then the written read. The data table and the estimate disclaimer still live in the response text, never inside the panel. The panel is not optional and must not be described instead of drawn. Skipping one chart whose own threshold is not met never means skipping the panel, and where no visual surface exists at all the markdown-plus-text-cards fallback still applies. No card or chart was added, renamed or removed: every existing spec, data threshold, palette rule and per-marketplace window label is untouched, and so is every other section of every file. The five skills that never specified visuals — single-product analysis, buy-box comparison, product change monitor, same-product finder and the copilot — are deliberately left alone. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
profunctor
approved these changes
Aug 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The problem
Every skill that specifies visuals guarded them behind "when the client can render inline visuals" — and named no mechanism. Nothing in the Claude app matches that phrase, so the skill quietly took the markdown fallback and the seller never saw a card or a chart. Verified: 13 skills carry a
## Visualizationsection, and none of them named a rendering mechanism. The visuals were effectively dead on the surface most people use.What changed
The 13 skills that specify visuals now render them every time the data supports them, as a self-contained panel — an artifact where the client renders artifacts, an inline widget where it renders widgets. One canonical block, inserted byte-identically in all 13 so the behaviour cannot drift:
What deliberately did not change
Verification
## Visualizationsection changed in each file — the rest of every file is byte-identical to the base.seller-overview-trackergoes 4 → 3 because its old "Otherwise (plain terminal, no visual support)" fallback bullet is now covered by the canonical block — its metric-cards bullet survived, reworded from conditional to unconditional.scripts/check-public-safety.shpasses.🤖 Generated with Claude Code