Commit Graph
3255 Commits
Author SHA1 Message Date
zeekay 900811aca4 WIP: open every docs path with the CLI
Install and bare hanzo on the landing, quickstart and coding guides; install,
hanzo login and the first command on product pages (generators); hanzo dev
--claude|--codex|--cursor|--agy and the own-account default in the coding
guides. Not built, not deployed.
2026-10-12 09:55:53 -07:00
zeekay 24f459d587 Give the esign, helpdesk and zen-dub pages style objects, not strings
Hanzo CI/CD / test (linux-amd64) (push) Skipped
Hanzo CI/CD / test (linux-arm64) (push) Skipped
Hanzo CI/CD / test-advisory (push) Skipped
Hanzo CI/CD / test-amd64 (push) Successful in 5m8s
Hanzo CI/CD / cicd (push) Successful in 30m34s
CI/CD / cicd (push) Successful in 35m48s
Once these pages compile they are rendered, and React refuses a string
style prop: the prerender of /docs/projects/hanzoai/esign stopped the
export. Each style attribute is now the object form of the same
declarations.
2026-10-12 06:47:02 -07:00
zeekay 8afdb7da83 Make the 13 ported project pages parse as MDX
Hanzo CI/CD / test (linux-amd64) (push) Skipped
Hanzo CI/CD / test (linux-arm64) (push) Skipped
Hanzo CI/CD / test-advisory (push) Skipped
Hanzo CI/CD / test-amd64 (push) Successful in 8m55s
Hanzo CI/CD / cicd (push) Failing after 24m44s
CI/CD / cicd (push) Failing after 33m45s
The build skips a page its MDX fails to compile and still exits 0, so the
s3, kv, ci, ml, datastore and nine more project pages were not on the site.
Void tags (img, source, br) are self-closed, unquoted attribute values quoted,
HTML comments written as MDX comments, a stray </div> and an unclosed
<details> dropped, and the lowercase {name} placeholders in datastore's JSX
spaced so the project loader's escape leaves them alone.
2026-10-12 01:03:35 -07:00
zeekay 500e8d1197 Guides for Claude Code, Codex, Cursor and Antigravity through hanzo code
Hanzo CI/CD / test (linux-amd64) (push) Skipped
Hanzo CI/CD / test (linux-arm64) (push) Skipped
Hanzo CI/CD / test-advisory (push) Skipped
Hanzo CI/CD / test-amd64 (push) Successful in 20m9s
Hanzo CI/CD / cicd (push) Successful in 54m8s
CI/CD / cicd (push) Successful in 1h14m26s
One page per tool: install, sign in, what the wrapper routes and what it does
not (Cursor and Antigravity keep their own backend and are neither routed nor
metered), how to read a session's usage and savings, and how to keep the tool's
own plan with --no-route. coding.mdx now lists all five agents.
2026-10-11 22:49:25 -07:00
zeekay 56bed2d117 Zen: zen-embedding-2, and whose model it is
Hanzo CI/CD / test (linux-amd64) (push) Skipped
Hanzo CI/CD / test (linux-arm64) (push) Skipped
Hanzo CI/CD / test-advisory (push) Skipped
Hanzo CI/CD / test-amd64 (push) Successful in 32m47s
Hanzo CI/CD / cicd (push) Successful in 48m1s
CI/CD / cicd (push) Successful in 1h20m51s
zen-embedding-2 serves on api.hanzo.ai: text in 768 dimensions, shorter
by `dimensions`, prefixes in the text, its own vector space. It is
EmbeddingGemma 2 by Google DeepMind (Apache-2.0), which the License &
attribution section names and zen.upstream keeps out of the rest.

Claude-Session: https://claude.ai/code/session_01SCPMGSQsLNF2YtHFL4bwyp
2026-10-08 22:24:10 -07:00
zeekay cd8f216ab9 Build the reference from cloud v8.5.647, which serves keys/{id}
Hanzo CI/CD / test (linux-amd64) (push) Skipped
Hanzo CI/CD / test (linux-arm64) (push) Skipped
Hanzo CI/CD / test-advisory (push) Skipped
Hanzo CI/CD / test-amd64 (push) Successful in 4m0s
Hanzo CI/CD / cicd (push) Failing after 7m35s
CI/CD / cicd (push) Failing after 11m40s
The API keys page teaches PATCH and DELETE /v1/account/keys/KEY_ID, and
the pinned document (ec340375a) has no /v1/account/keys/{id}, so the
endpoint guard stopped every publish since that page landed. Cloud
e2d5eae3c (v8.5.647) serves it.

That document states the key classes on the `type` field a caller sends
and reads back, two levels under the schema, and the key-type reader
walked six deep and stopped at the schema. It walks eight now, enough to
reach a field's own sentence.

It also serves `train`, which files under Intelligence beside `ml`.
2026-10-05 02:18:44 -07:00
zeekay 2e28c2ebdc Draw every code block in the Hanzo code theme
Hanzo CI/CD / test (linux-amd64) (push) Skipped
Hanzo CI/CD / test (linux-arm64) (push) Skipped
Hanzo CI/CD / test-advisory (push) Skipped
Hanzo CI/CD / test-amd64 (push) Successful in 11m54s
Hanzo CI/CD / cicd (push) Failing after 9m5s
CI/CD / cicd (push) Failing after 21m3s
The theme is codeTheme from @hanzo/ui/core: Dracula on dark, GitHub
Light on light, the one every Hanzo surface draws. lib/shiki.ts and each
app's source.config.ts import it rather than naming a theme, so vesper
and github-dark are gone. @hanzo/ui moves to 8.27.83, the first release
that carries it.

A block's code area paints the theme's own ground and ink from the pre
shiki wrote, #282a36 in the dark, rather than the site's panel.

The docs home drew its hero and its eight domain snippets as plain text,
and so did the models page's fallback request. The hero highlights its
three doors in a server part (components/hero.tsx); the snippets and the
fallback are Example props in the MDX. No highlighter reaches the
browser.
2026-10-04 23:41:47 -07:00
zeekay 42a9666f68 API keys: who edits a key, and what a limited key cannot do 2026-10-04 22:21:39 -07:00
zeekay 853a4d1981 API keys: many keys, each its own permissions, budget, rate and expiry
A person holds as many keys as they like and creating one never touches
another. Document the new shape of /v1/account/keys (PATCH to edit,
DELETE /{id} to revoke one), the product/read permission entries and
read-only keys, budgets, rates and expiry, what an org admin sees, and
the corrected CSRF address and cache window.
2026-10-04 21:26:42 -07:00
zooqueenandHanzo Dev 0bd96670e3 Document kai-1, the build /v1/decisions serves
Hanzo CI/CD / test (linux-amd64) (push) Skipped
Hanzo CI/CD / test (linux-arm64) (push) Skipped
Hanzo CI/CD / test-advisory (push) Skipped
Hanzo CI/CD / test-amd64 (push) Successful in 16m4s
Hanzo CI/CD / cicd (push) Successful in 14m45s
CI/CD / cicd (push) Successful in 30m54s
models/kai: the results are kai-1's on the frozen harness, with
calibration error beside accuracy, the device the runs were measured
on, where Kai is behind, and the cardinality suite. The held-out
comparison named stage a5 only; kai-1 has not been run on held-out
rows, and the page says so. The architecture is described as built:
a factorized two-tower reader with a cross-attention head, and a
retrieval dual encoder above 160 options; score is a choice over the
levels, not an ordinal link. The paper link pointed at no public page.

decisions: 1 to 100 questions; a question and its state read 1,024
tokens together; checkpoint kai-1 and the routing fields v0.3.14 sends;
a noul's confidence; unrounded probabilities; Jev at $0.042 per million
input tokens; the errors with v0.3.14's statuses and messages.

guides/migrate/jev: the same limits; an over-long state is refused, not
truncated; options read to 512 tokens; Kai counts the request's text
once; kai-1's figures and an answer from its runtime; no latency until
one of the served build is published; Jev through Hanzo can answer 503
upstream_unavailable.

Cookbook: the recipes call api.hanzo.ai with a key, and the answers
they quote are kai-1's. models/index: Kai is served by API only.

Co-authored-by: Hanzo Dev <[email protected]>
2026-10-04 14:14:31 -07:00
zooqueenandHanzo Dev 7f3cde43cd Say Enso routes, Kai decides, Zen reasons, in that order
Zen's verb is reasons, not generates or writes, and the trio reads in the
order a request meets it. The docs hero, the Models section's description,
its role table and its sidebar order, and the cookbook now say so, and the
Zen page drops "generative" from what the family is.

Co-authored-by: Hanzo Dev <[email protected]>
2026-10-04 13:49:57 -07:00
zooqueenandHanzo Dev 65e563d218 Lead the docs landing with Enso, Kai, Zen and the whole catalogue
The landing opened on a pill and the CLI install; the three model families
and the catalogue they sit in were four screens down. They now follow the
headline: Enso routes, Kai decides, Zen reasons, each with its docs page
and its hanzo.ai page, and beneath them one full-width banner with the
model count, the maker count and a link to /docs/models.

The three cards are one row when three fit at 220px and one column
otherwise, never two and an orphan: the track floor is a third of the row
above 692px and the whole row below it, so the width alone picks.

Nothing on them is typed. gen-pricing-page already reads GET /v1/models for
the rates; it now also records the distinct ids, the distinct makers and
Kai's rate under `catalogue` in openapi-specs/pricing.json, and keeps the
committed copy when the catalogue does not answer. The count is floored to
the hundred so it stays true between builds, and the two "Over 400 models"
lines on the page read the same figure.

Co-authored-by: Hanzo Dev <[email protected]>
2026-10-04 13:49:57 -07:00
zooqueenandHanzo Dev 177618d7a0 Dev on hanzo.ai: runs, templates, projects, your own machines, and what is paid
One page for Hanzo Dev in the browser, first in the Dev section: the composer's
choices, Templates (filters, the sheet, the copy published at <project>.hanzo.app,
a failed build's reason with Publish again and Fix it with Dev), Machines (install,
hanzo login, hanzo beat free, hanzo link for a shared shell paid from the balance,
and runs only on a machine whose runner claims them), and what needs a plan or credit.

Co-authored-by: Hanzo Dev <[email protected]>
2026-10-04 10:17:22 -07:00
zooqueenandHanzo Dev 777d789c93 Hold the docs tests to the checkout CI makes: studio/ skipped, a minute per test
Hanzo CI/CD / test (linux-amd64) (push) Skipped
Hanzo CI/CD / test (linux-arm64) (push) Skipped
Hanzo CI/CD / test-advisory (push) Skipped
Hanzo CI/CD / test-amd64 (push) Successful in 7m17s
Hanzo CI/CD / cicd (push) Successful in 27m37s
CI/CD / cicd (push) Successful in 34m59s
On the forge runner the checkout carries the hanzo-docs/studio-docs submodule,
whose pages name its own /api/ paths, so no-api-prefix.test skips studio/ as it
skips the projects/ mirror. The runner's sandbox parses the API document slower
than vitest's 5s default, so the docs project allows a minute per test.

Co-authored-by: Hanzo Dev <[email protected]>
2026-10-04 09:31:33 -07:00
zooqueenandHanzo Dev 92728e4e43 Say the confidential-computing workloads are compatible with HIPAA, GDPR and SOC 2
hanzoai/ci's certclaims check refuses a framework named beside a certificate word
(attestation, here) unless the line says compatible with, compliant with or built to.

Co-authored-by: Hanzo Dev <[email protected]>
2026-10-04 09:11:00 -07:00
zooqueenandHanzo Dev 6f959d609f Take out the guest key snippet: api.hanzo.ai refuses the key and lists no zen-free
420b65d80 put a curl call on the landing hero, /docs, /docs/quickstart and
/docs/api-keys that sends `Authorization: Bearer guest_temp_key` with model
`zen-free`. /v1/chat/completions answers that key 401, and /v1/models lists no
`zen-free`. apps/docs/scripts/quickstart.test.ts refuses a first-call page that
names a model the catalogue does not list, so the docs test failed on it.

Co-authored-by: Hanzo Dev <[email protected]>
2026-10-04 09:10:19 -07:00
zooqueenandHanzo Dev 420b65d80a feat(docs): provide instant developer guest API key curl snippet
Co-authored-by: Hanzo Dev <[email protected]>
2026-10-01 13:46:58 -07:00
zeekay 3b77105813 The docs read /v1/models rates from its per-million keys and say that pricing.prompt and completion are per token. 2026-09-30 14:55:49 -07:00
zeekay d4e0db1673 feat(analytics): docs send through @hanzo/event and the tag manager; the GA4, Pixel, Insights and analytics scripts leave every layout; the one consent banner 2026-09-30 07:15:43 -07:00
zeekay 07d81d0dcf File environment under Intelligence, beside agent 2026-09-30 06:53:49 -07:00
zeekay f1d620130c Make the docs CTA "Try Hanzo", to hanzo.ai/login
Every conversion CTA reads "Try Hanzo" and goes to sign-in; payment comes
after it. The landing's close now does that in place of "Choose plan".

It no longer fires plan_clicked: it is not a plan choice, and the page view
and the $click that <Hanzo> autocaptures already record it. That leaves the
EVENTS re-export in @hanzo/docs-analytics with no caller, so it goes too.
2026-09-30 02:38:21 -07:00
zeekay a38d96c672 Load no vendor tag on docs.hanzo.ai
GA4 and the Meta Pixel went into the root layout's <head> and into
@hanzo/docs-analytics, loaded on every page before any consent was asked,
beside a second and third Hanzo stream with their own keys. A vendor tag
loads only through the @hanzo/event tag manager, after consent, so both go,
and the docs report on the one @hanzo/event stream again.

This reverts 81733ecc4a and 6f0e2b2533.
2026-09-30 02:38:17 -07:00
zeekay 33320dc6cf Render the reference from cloud ec340375a, the customer contract without the operator's operations 2026-09-30 02:23:01 -07:00
zeekay 393cdf091f Zen 6 and Zen 6 Flash answer now; Zen 5.8 retires
The lineup changed: Zen 6 is the 27B in zenlm/zen6, Zen 6 Flash its
ternary build in zenlm/zen6-flash, Zen 5.8 retires into Zen 6, and
zen6-coder is no longer published or served.

The Zen page's generations, weights table, downloads and fine print
say so, with every Zen 6 figure from the cards' own configs. The
landing's model list, the loop cookbook and the NeMo migration name
zen6 and zen6-flash.
2026-09-30 02:03:31 -07:00
zooqueenandHanzo Dev 6f0e2b2533 feat(analytics): add GA4 (G-15XZEQ6G9S), Meta Pixel, Hanzo Analytics, and Hanzo Insights with route-change tracking
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-30 01:13:41 -07:00
zeekay d1a1d9300f Leave operator runbooks out of the ported project docs 2026-09-30 00:41:22 -07:00
zeekay bb38ff54ad Send docs visitors to hanzo.ai, not hanzo.id, and count the plan click
The landing's "Sign up free" opened hanzo.id/signup, and "Sign in" opened
/login, whose authorize step sent the reader to hanzo.id too. No surface
sends a visitor there. Sign-in is hanzo.ai/login now (the /login address is
a redirect rule), sign-out clears the session in this browser instead of
carrying the reader to the issuer's end-session page, and the conversion
CTA reads "Choose plan" and opens hanzo.ai/pricing.

The click fires plan_clicked {source: 'docs'} on the client that counts the
page views, named from the @hanzo/events catalog that @hanzo/docs-analytics
now re-exports.

The ingest key comes from @hanzo/event's keyring, resolved from the page's
host, rather than a KMS value inlined at build. docs.hanzo.ai resolves the
hanzo org's key, the one the rest of the funnel reports under, and a sibling
docs site on a host no brand claims reports nothing rather than filing its
visitors under hanzo. The deploy resolves the same key, asks /v1/event
whether it names a project, and greps the export for it.
2026-09-29 21:44:35 -07:00
zeekay 8e7e92d634 Tell Zen one way, in Zen's names
The Zen page called zen6 a 27B dense model and led with no reason to
pick Zen; the models index listed Zen 7 as "upcoming" and HIP-0904 as
"dense, coder and ternary checkpoints"; examples called zen5 and one
called zen5-coder-32b-instruct, which the gateway does not serve.

Zen is now told as the gateway serves it: Zen 7 in research preview
with Request access, Zen 6 the new Zen architecture (zen6,
zen6-coder), Zen 5.8 the one before, Zen 5 earlier. It leads with its
two jobs, agentic coding on your own machine and marketing work, and
names Zoo Labs Foundation, a 501(c)(3) non-profit, as its maker.
Examples call zen6.

Upstream base models appear only in the Architecture value and the
License & attribution section, both data-upstream. check-zen reads
every Zen page in pre-build and fails the build on a name from
zen.upstream anywhere else.
2026-09-29 21:36:37 -07:00
zeekay ad888ecc50 Serve search and chat at /v1, gate any /api path
Claude-Session: https://claude.ai/code/session_011i2AG9nwpiKUCVxAdDzYuU
2026-09-29 19:40:17 -07:00
zeekay 94f2e84332 ZAP: the local router, and how to pair the browser
The router is embedded in every process that speaks ZAP and one is
elected; the browser joins over a paired loopback WebSocket. This page is
the how-to: pair, list the nodes, embed, where the files live. The design
is HIP-0069.

Claude-Session: https://claude.ai/code/session_01Dc8DXc3fEQCRHUa6XWK4Ku
2026-09-29 14:00:57 -07:00
Hanzo Dev 24a2755cc3 The docs send customers to platform.hanzo.ai, the console they sign in to
console.hanzo.ai is Hanzo's staff console now, signed into the admin org
only, so every page that told a reader to mint a key, connect an account
or open a dashboard there names platform.hanzo.ai instead. The Console
page says where the console lives and that console.hanzo.ai and
admin.hanzo.ai are staff consoles, and no longer says the console is
embedded in the cloud binary.
2026-09-29 12:26:53 -07:00
zeekay 47b17262e9 docs: The Jev guide says a Kai call spends about 400 ms outside the model, and 835 ms in it for five typed questions. 2026-09-28 11:28:54 -07:00
zeekay 259e849bd1 docs: Kai is live on /v1/decisions, and a Jev migration guide sends one request both ways with each side's measured price, accuracy and speed. 2026-09-28 11:27:10 -07:00
zeekay 5283c03b25 docs: /v1/decisions serves Kai a7 at $0.021 per million input tokens, and says which errors the gateway answers first. 2026-09-28 07:27:24 -07:00
zeekayandHanzo Dev 235a0c7d87 docs: /v1/decisions is live on api.hanzo.ai, serving kai (stage a5) and Jev.
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-27 18:35:13 -07:00
zeekayandHanzo Dev 11c1cc3e4c Release and update docs name @hanzo/bot in npm and npx commands
RELEASING told maintainers to dist-tag, view and `npx -y` npm `bot`,
someone else's package; running the npx line executes it. The update page
checked `npm view bot version`. Both now name @hanzo/bot.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-27 18:04:46 -07:00
zeekay 0c69c0a93a Level a callout's text with its icon, and drop empty table headers
MDX leaves newline strings between the blocks inside a blockquote.
flow() set each one as an empty text block, and the column's gap still
spaced it, so a callout's first line sat 8px under its icon.  Drop
whitespace-only strings there.

A key/value table written as `| | |` has a header row of empty cells;
it drew as a blank grey band above every operation page's address
table.  Thead now renders nothing when no cell holds text.

Claude-Session: https://claude.ai/code/session_01HuMDfgFssPUptYUzgZ6Cp8
2026-09-27 17:23:50 -07:00
zeekayandHanzo Dev 00aae8beec The bot installs as @hanzo/bot: npm's bot is someone else's package
Every install, update and removal line said bot@latest or -g bot, which on npm
is an unrelated third-party package. @hanzo/bot is ours and ships the bot and
hanzo-bot commands.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-27 16:06:03 -07:00
zeekayandHanzo Dev 4e6e00755c docs: Kai is the model every recipe and program calls, with its real stage a5 answers and calibration, and the held-out results where Laya leads.
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-27 16:02:47 -07:00
zeekay 1186dc6ffa Build the docs without Tailwind, Radix or base-ui
Nothing apps/docs renders names a utility class, a Radix primitive or a
base-ui part any more, so the build stops carrying them.  global.css is
plain CSS: the faces, the ground, the color-scheme the code tokens read
through light-dark(), and the shell footer.  postcss.config.mjs goes
with the Tailwind plugin, and the app drops tailwindcss and its postcss
plugin and animate plugin, tailwind-merge, class-variance-authority,
every @radix-ui package, @hanzo/docs-base-ui, @hanzo/docs-ui and
lucide-react.

The MDX pipeline drops twoslash, the auto type table and ts2js, which
existed to emit base-ui and Radix parts and which no page uses, and the
graph view's d3 and force-graph go with the graph.  base-ui's shiki
stylesheet no longer answers .t_dark; the docs were its only reason to.

The framework packages stay: each still has consumers among the other
apps and examples.

Claude-Session: https://claude.ai/code/session_01HuMDfgFssPUptYUzgZ6Cp8
2026-09-27 15:33:28 -07:00
zeekay 0d7c74917d Draw the app's own pages with @hanzo/gui
What was left of Tailwind and base-ui in apps/docs was the pages around
the docs: the front page, the hero and product sections on /docs, the
catalogs, search, feedback, the 404, the blog and the sign-in screens.
Each is a gui part on the theme now, and the app source carries no
utility class, no Radix and no base-ui import.

The front page follows the reader's theme instead of forcing a dark
subtree, and its API Reference card pointed at /reference, which is not
a route; it goes to /docs/openapi.  Search is one gui dialog opened
from the rail or with Cmd-K, over the same static index, with the jump
and the ask-an-agent rows it had.  The feedback control sends a
docs.feedback event on the one telemetry stream; it used to hand the
reader's answer to a stub that logged it to their own console.

The blog sits in the docs shell on the same page frame, and a post no
longer prints its title twice.  The registry build, the fork's preview
components, the unused AI-search dialogs, the API page and the tree's
icon plugin go: nothing rendered them, and the icons were an SVG tree
serialised into every page.

Claude-Session: https://claude.ai/code/session_01HuMDfgFssPUptYUzgZ6Cp8
2026-09-27 15:23:16 -07:00
zandClaude Opus 5.5 5af1e60dfb Decisions gets its page, and Kai says what it computes and how it measured
/docs/decisions is the endpoint: POST api.hanzo.ai/v1/decisions on the
Decisions API wire, the three question types each with a request and an
answer, the response field by field, Kai or Jev by model id, and every error
with the runtime's own message. It is a page now, so its redirect goes.

/docs/models/kai: a multilingual encoder that scores each option alone, so
option order does not move the answer, noul is label-symmetric and score is
ordinal; pure Rust on hanzo-ml. The frozen-harness result for stage a5 (macro
0.851 over 11 suites against Laya 0.702 and Jev 0.770, best in 8 of 12, behind
Jev on jailbreak and MASSIVE and Laya on typed decisions and email spam) with
its link. The runtime serves the baseline as laya, laya-multilingual and
laya-agent, and kai is Kai: the agent program and the cookbook name the ids it
serves.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 15:13:45 -07:00
zeekay 0bc191f749 Draw page bodies with @hanzo/gui
A page body was Tailwind's typography plugin reaching into compiled MDX
by selector, around base-ui's Callout, Cards, Tabs, Steps and code
blocks.  Every markdown element and every part the content names is a
gui element now, chosen by tag through components/mdx.tsx.  Blocks are
spaced by the body's gap rather than their own margins, so a list in a
callout or a table in a tab keeps its own rhythm, and tables keep the
browser's table layout so columns line up.

Code tokens carry color: light-dark(...) straight from shiki, so the
theme class picks the palette through color-scheme and no stylesheet
has to know which theme is on.  remark-steps' marked divs become the
Steps parts, and a link to another page carries that page's title and
description instead of mounting a hover card per link.

Content no longer imports the framework's parts: the generators stop
writing the imports and the second "# title", 49 authored pages drop
theirs, and ported and studio pages reach the same parts through the
aliases they already used.

RELEASE.md says how a publish actually fires today: the forge mirror
does not pull on its own and a push queues no run, so sync and dispatch.

Claude-Session: https://claude.ai/code/session_01HuMDfgFssPUptYUzgZ6Cp8
2026-09-27 15:05:11 -07:00
zeekay f11eb49dc2 Draw the docs chrome with @hanzo/gui
The rail, the tree, the bar, the outline and the page header were
Fumadocs' base-ui layout: Tailwind utilities over a CSS grid, with the
width decisions made twice, once in classes and once in a JS media
query.  They are gui stacks on theme tokens now, with every breakpoint a
media prop, so a phone hydrates the markup the export wrote.  Atomic
rules ship as hoisted <style> tags and <html> carries t_dark, so a page
is styled before any script runs.

The theme has one authority, the t_dark/t_light class that gui's
NextThemeProvider writes before paint; <Hanzo> follows it and the
Tailwind dark variant answers it.  The corner dock that covered content
on phones is gone; theme and help sit at the foot of the rail.

A body's leading "# heading" is dropped at compile time, since the
header already prints the frontmatter title: /docs/sdks and
/docs/openapi said their names twice.  The /docs hero stops printing a
second title.

The rail narrows by tree path, so an operation page opens the reference
it belongs to, and the drawer carries the top nav a phone had no way to
reach.

LLM.md carries the four-phase plan and the inventory it is measured by.

Claude-Session: https://claude.ai/code/session_01HuMDfgFssPUptYUzgZ6Cp8
2026-09-27 14:15:45 -07:00
zeekayandHanzo Dev 4526190653 A filled docs button kept the page's light text, so the label disappeared.
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-27 12:34:48 -07:00
zeekayandHanzo Dev da72bf0527 A summary that stops inside its description's first sentence prints that sentence whole
GET /v1/ai/memory/recall's comment has no full stop, so zipdoc cut its
summary at the end of the first line: the CLI row and the API index read
"Recall recent/relevant memories for context injection; with q it". The
loader now prints the description's first sentence when the summary is a
strict prefix of it, and early() names a line that ends on no stop while its
paragraph goes on; the whole-document test reads every printed summary
against its description.

A lead name whose first word would be one letter (iCloud, eBay, gRPC,
OAuth2Client) stays whole instead of reading "I cloud", so the rules name it.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 07:33:20 -07:00
zeekayandHanzo Dev 781e5e64e2 The browser suite reads the device-code row and the sandbox entries cell whole
/docs/cli/iam must carry `Answers "what am I approving?" for a pending device
code.` and no row ending on a quotation; the read-sandbox-file page must carry
the `entries` sentence through ".." excluded (ls -1A).

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 07:03:43 -07:00
zeekayandHanzo Dev 8cc675870d A lone capital after a dash closes a range, so "A–M." ends the sentence
Counting a dash as the space an abbreviation may follow ("the value—e.g. a
count") also made the M of "A–M" an initial, and the tax profile's `fatca` cell
ran on into a second sentence: "FATCA is the FATCA exemption code, A–M.
Entities only." After a dash only a named abbreviation or an initialism
(U.S.) continues the sentence. Over every summary and description, the first
sentences that differ from the version red reviewed are now only the six it
asked for: four quotations, and two colon lead-ins that end with a full stop.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 07:01:36 -07:00
zeekayandHanzo Dev 9196110388 A line that stops at a quotation its sentence goes on after fails one shared rule, read against the whole document and every tool
english.ts states it once as early(line, text): a first sentence ending at a
quotation's own "?" or full stop, while its paragraph goes on in lower case or
after a dash. The API reference reads it over all of the document's prose, so
tag and document descriptions (CLI group lines, product blurbs) are held too,
and the MCP reference over every published tool's own line.

Tests pin the four texts it once cut, as the document carries them: books ask,
deploy session userinfo, iam oauth device info and sandbox entries. With the
quotation rule taken out of firstSentence, three tests fail and name all seven
places. A brand the loader keeps is English to the rules too, since both read
one BRANDS list.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 06:59:19 -07:00
zeekayandHanzo Dev 586e9d7177 The reference is built from cloud 1e34b9e, which drops marketing calendar publish and says what ask by POST answers
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 01:36:24 -07:00