The glyph is the assistant's now and the header says the name instead, so a
reader meets one shape in one corner rather than the same shape in two places
meaning two things: ask here, go home there.
Same five paths @hanzogui/shell draws, so the corner and the chrome cannot
drift into two silhouettes.
Co-authored-by: Hanzo Dev <[email protected]>
Rollout needs numbers, and the obvious way to get them is the defect this
codebase already has a scar from: a second client posting to /v1/event counted
every pageview twice.
A script tag cannot share the page's @hanzo/event client -- that client is a
module the app holds, with no global -- so coordination is not available. What
is available is not overlapping: three events named for the widget, emitted by
nothing else. No shared transport, no reconciliation, and a double count is not
expressible rather than merely avoided.
Same door, key and opt-out as the recordings, so a reader who declined
measurement is not measured here either.
Co-authored-by: Hanzo Dev <[email protected]>
hanzo.app grew the Help and preferences panes into its own copy after this
package took its snapshot, so the two disagreed within the hour -- which is the
argument for hanzo.app consuming the package rather than carrying the file.
Synced. The panel now shows Appearance, Language and Help beside the
contextual action, which is the structure the README already described.
Co-authored-by: Hanzo Dev <[email protected]>
One name per thing, in the repo that owns the thing, so the apps, the docs and a
customer's site are not each deciding what to call it.
Two rules carry the weight. A visitor never sees the word Hanzo: the product name
belongs to the docs, the package and the deployment setting, and the panel says
Controls so it reads as part of whatever site it is on. And permission REPLACES
the contextual slot rather than adding to it, so an editor never sees both
Suggest an edit and Edit page.
Report a problem is deliberately absent. It is the same lane as Suggest an edit
wearing a narrower hat, and two doors for one intent means the reports land in
the wrong queue about half the time. Help is one door out to support and docs.
Admin stays a different surface. Organization and project configuration, security,
billing and members are not in here.
Co-authored-by: Hanzo Dev <[email protected]>
Lifted from hanzo.app/public/edit.js, unchanged. It was already the thing every
surface needs: dependency-free vanilla JS in a shadow root, so it renders the
same on a Next export, a Vite app and a Django-served React app, and neither
side can restyle the other by accident. It reads its configuration from the
page's own meta tags, so a static export can configure it. It floats in the
corner, or docks into a slot the host names and watches for that slot to appear
rather than querying once, because a framework mounts it after the script runs.
BASE is the origin the script was served from, so the backend follows the host
and there is nothing to configure: served from api.hanzo.ai it calls
api.hanzo.ai.
Edit and suggest are the panes that exist. Appearance, language and help are
renders into the same panel, not widgets of their own.
Co-authored-by: Hanzo Dev <[email protected]>