308 Commits
Author SHA1 Message Date
zeekay 5d0e4515c5 Publish the train from CI when main names a version npm lacks
.github/workflows/publish.yml runs on every push to main on a cluster
runner. When @hanzo/gui's version on disk is ahead of npm's latest it
installs, builds, checks, lints and typechecks, reads NPM_TOKEN from KMS
the way hanzoai/i18n does (masked), and publishes the train with
`release.ts --republish --ci`, the one script that rewrites workspace:*.
Any other push answers "not ahead" in seconds; a dispatch at the served
version finishes a train that stopped part way.

It replaces publish-gui-all.yml, which never ran, with the npm-token
action and publish-gui-surface.mjs, a second publisher that covered
only the @hanzogui/* closure.

typecheck.sh called `tsgo`, which is not installed, so every typecheck
died on "command not found". TypeScript 7 ships as `tsc`.

Claude-Session: https://claude.ai/code/session_01BLLMyBFSvAfCt7ZGqYuiEz
2026-10-22 12:12:18 -07:00
zeekayandHanzo Dev e87d0068c8 Refuse to publish a tarball that names a local path
workspace:, link: and file: resolve only inside the monorepo that
declares them, so any of the three in a published manifest is a
consumer install that dies. The rewrite handled workspace: alone, and
it trusted the manifest it had just written — but npm pack runs
prepack and prepare, which are free to rewrite package.json again.

Cover all three protocols and read the manifest back out of the
archive before pushing it. A version is immutable once it lands:
@hanzogui/[email protected] still carries eleven of these and no publish can
repair it.


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-17 01:15:16 -07:00
zeekayandHanzo Dev fd796e3eb4 Emit CommonJS for every package
The CJS pass ran only where a manifest named a require entry, so an
ESM-only package could drift into the tree and a package marked
commonjs could carry ESM files. Now every package gets all three emits
from tsgo; a .cjs.ts sibling answers for the one file that needs
import.meta, and the CommonJS output is parsed as a script so a module
that cannot load there fails the build by name.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-04 21:07:03 -07:00
zeekayandHanzo Dev d5e94b61d7 Rename the host-bind serve script off a named platform
serve:railway just binds 0.0.0.0 (any container host, not a Railway
particular); call it serve:host and update the CI wrapper's three
call sites to match. The health-check comment drops the same
name-drop. RAILWAY_DEPLOYMENT_ID in setup.server.ts is Railway's own
env var and stays — it's the actual boot-time production guard.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-04 02:11:54 -07:00
zeekay 77e8398deb Build every package with the TypeScript compiler alone
Babel and esbuild were never here for TypeScript. Babel carried the static
optimizing compiler and one plugin that appended extensions to esbuild's
emitted imports; source now names its own extensions and the compiler rewrites
them on emit. A sixty-line runner replaces the tool: an ESM emit with
declarations, a CommonJS emit where a manifest states a require entry, and a
native emit where a .native sibling takes its sibling's name. The compiler
packages keep Babel as their own substrate; nothing else runs over the code.
Eighteen packages still carry type errors the previous tool never checked.
2026-09-03 17:14:57 -07:00
zeekay e1018739f1 Publish the umbrella too, whichever name it wears
The alias step looked up meta['hanzogui'], and the umbrella is NAMED
@hanzo/gui in the tree — so it matched neither that lookup nor the
@hanzogui/* target filter, and published nothing. Every primitive went to the
registry at 8.3.1 while the one package consumers actually depend on stayed
behind, which is the worst shape of all: @hanzo/[email protected] resolved to nothing,
so a pin on it failed outright rather than quietly serving the old code.

Take it by either name, and say so loudly when neither is there — a publish
that silently omits the umbrella looks exactly like one that succeeded.
2026-08-28 15:50:32 -07:00
zooqueen 7d00280456 the formatter was failing on files nobody wrote
gui's whole CI lane has been red since Aug 5 and the cause was `oxfmt --check`
inside `bun run lint`, which the `Test` step reaches about eighty seconds in.
Nine authored files had drifted from the format — mechanical, no behaviour — and
two more were machine-written.

Those two are the real finding. The generated per-app gui config moved from
`.hanzogui/` to `.gui/` and `.gitignore` did not follow it, so every app's
generated config sat untracked-but-unignored. The formatter checks what git does
not ignore, so a gate that exists to keep AUTHORED code consistent was failing on
an esbuild bundle. `.gui` is ignored now, beside the old name.

`bun run check` and `bun run lint` both exit 0.
2026-08-14 01:48:09 -07:00
zooqueen bb9e016cee ci: restore the gui-surface publisher the history convergence dropped 2026-08-13 21:07:56 -07:00
zeekayandHanzo Dev 48bae90f96 typecheck: the compiler's status is the verdict, not the word "error"
The gate read its own result out of the compiler's prose — `grep -q "error"`
over the captured output — which passes anything that fails without writing
that word. A missing compiler is exactly that: the shell answers `tsgo: command
not found`, the grep misses, and the script prints "Type check passed" having
typechecked nothing. Proven both ways on this tree with tsgo off PATH: the old
script exits 0, this one exits 127.

Diagnostics now stream as they are produced instead of arriving in one block
after the run.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-04 18:05:48 -07:00
zeekayandHanzo Dev 4500755948 fix(release): push HEAD, not head — git refnames are case-sensitive
Co-authored-by: Hanzo Dev <[email protected]>
2026-08-04 02:20:05 -07:00
zeekayandHanzo Dev 1efe7bcc0c style: oxfmt the release --only tag expression
Co-authored-by: Hanzo Dev <[email protected]>
2026-08-04 02:17:41 -07:00
zeekayandHanzo Dev 1b983215d8 feat(release): --only ships one package's patch without moving the fleet
Co-authored-by: Hanzo Dev <[email protected]>
2026-08-04 01:51:24 -07:00
zeekayandHanzo Dev e95582dd5d fix(scripts): point the reference check at pkgs, the directory code/ became
Co-authored-by: Hanzo Dev <[email protected]>
2026-08-04 01:07:43 -07:00
zeekayandHanzo Dev 0c3a498d7b fix(scripts): point the exports check at pkgs, the directory code/ became
Co-authored-by: Hanzo Dev <[email protected]>
2026-08-04 01:05:43 -07:00
zeekayandHanzo Dev 164489660a fix(shell): style the tenant chrome in tokens, not Tailwind it never had
Co-authored-by: Hanzo Dev <[email protected]>
2026-08-03 21:14:24 -07:00
zeekayandHanzo Dev 5a5724f20e build: typecheck on TypeScript 7 (tsgo), keep tsc for declaration emit
The config was written for a compiler that no longer accepts it: `module: System`,
`moduleResolution: node10`, `baseUrl` and `downlevelIteration` are all removed in
TypeScript 7, and non-relative `paths` targets now need a leading './'. tsgo
reported 692 config errors across ~115 project tsconfigs before this; it reports
zero after.

Measured, not assumed. On apps/kitchen-sink the two compilers agree exactly —
2321 errors at identical file:line:code — and tsgo runs it in 6.0s against tsc's
34.1s. The one diagnostic tsc lacks is TS2882 (side-effect import with no type
declaration), which apps/gui.hanzo.ai/css-modules.d.ts now answers for '*.css'
and for '@docsearch/css', whose specifier carries no extension for the wildcard
to match.

The change is also not the cause of this repo's standing type errors: the same
project reports 2335 errors under the old System/node10 settings and 2321 under
these, so the migration removes fourteen and adds none. Those ~2321 pre-existing
TS2322 errors are a separate problem — committed types/ has drifted from src/ —
and are unrelated to which compiler runs.

Emit is untouched: hanzogui-build still calls the TypeScript API for .d.ts.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-03 18:02:09 -07:00
zeekayandHanzo Dev 907cf6bbea style: oxfmt the repo
Co-authored-by: Hanzo Dev <[email protected]>
2026-08-02 10:43:58 -07:00
zeekayandHanzo Dev 38a546e67c restore @hanzo_network packages and team app dropped by the transplant
The transplant rebuilt the tree on upstream tamagui and carried our own
packages forward by hand, which silently lost seven @hanzo_network/*
packages and apps/team — 735 files with no other home in the workspace.
They are back at the tip of the old lineage's content.

pkgs/ai is NOT restored: @hanzo/ai is published from hanzo-js/ai, so a
copy here would be the duplicate we are trying to avoid.
templates/expo-router is NOT restored: apps/starters/expo-router already
declares that exact package name upstream.

Also fixes a rebrand defect: the blanket tamagui->hanzogui rule rewrote
upstream's GitHub path into github.com/hanzogui/hanzogui, a repo that has
never existed, and it shipped in repository.url for every published
package. The transform now maps the remote to hanzoai/gui and repairs a
tree already branded wrong, so a future sync cannot reintroduce it.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-30 19:53:12 -07:00
zeekayandHanzo Dev 69c6e860d7 transplant onto tamagui v2.6.0, brand as a re-runnable transform
This repo could never sync. There was NO merge-base with tamagui — 372 commits
here against 15,791 there, unrelated histories — because it began as a
copy-paste rebrand with a flattened layout. Every "sync" since was a hand
re-application that drifted, which is why the tree sat on 7.3.1 while upstream
shipped fixes we then rediscovered by hand.

This commit's PARENT IS TAMAGUI. A future sync is `git merge tama/main` then
`node scripts/rebrand.mjs` — a real merge, because the history is now shared.

174 packages: 166 upstream, our 8 restored (chrome, shell, telemetry, recipes,
get, font-geist-{sans,mono}, @hanzo/booker), bento-get gained. 170/170 build.

Our patches to files UPSTREAM ALSO OWNS are carried, which the package-level
delta missed and which was where the value actually was:
  - useMedia's server snapshot (`initState ?? getMedia()`). Upstream still
    returns undefined there, so every Tamagui Dialog kills a prerender — the
    exact crash hanzo.app spent a day on.
  - data-slot on web host nodes, absent upstream entirely.
Both applied ONTO upstream's newer files (it rewrote useMedia +150/-63 and
createComponent +160/-55), marked `PATCH (ours, carried across the transplant)`.

Seven traps are encoded in scripts/rebrand.mjs, each found by a gate:
skip itself and lockfiles; special-case the double-branded names in BOTH scoped
and bare form; map path strings, not just paths; drop a level for the flattened
group; check disk rather than a stale index.

Rust build artifacts are NOT committed. An earlier draft of this commit swept
apps/desktop/src-tauri/target/debug in via `git add -A` — 3,859 files including
a 272MB .a, over GitHub's 100MB cap, so the push could never have landed. They
are gitignored now.

Co-Authored-By: Hanzo Dev <[email protected]>
2026-07-30 18:25:06 -07:00
natew 3f86c5ecc4 fix(release): retry failed publish batches
Agentbus-Session: m1813
2026-07-28 10:59:29 -10:00
natew 14e33777e3 fix(release): batch passkey publishes
Agentbus-Session: m1813
2026-07-28 10:58:42 -10:00
natew c4638bebb7 fix(release): reuse publish artifacts and refresh passkey challenges
Agentbus-Session: m1785
2026-07-28 10:24:42 -10:00
natew 74103bdeee fix: normalize npm package metadata
Agentbus-Session: m090
2026-07-22 19:36:10 -10:00
natew 9235d644a8 fix(release): authenticate before publishing chunks 2026-07-20 18:07:09 -10:00
natew df7444b8a3 fix(release): publish npm workspaces in throttled chunks 2026-07-20 17:51:55 -10:00
natew 2d2f51ea26 fix: require npm auth for local releases 2026-07-20 14:49:24 -10:00
natew 4cc23823e7 fix(release): reuse passkey approval across packages
Agentbus-Session: ab-mrr29x1f-51747
2026-07-18 19:39:32 -10:00
natew 1d21f1d5d5 ci: publish explicit releases with npm oidc
Agentbus-Session: ab-mrr29x1f-51747
2026-07-18 15:59:41 -10:00
natew eda78d2b38 fix(release): allow npm passkey authentication
Agentbus-Session: ab-mrr29x1f-51747
2026-07-18 15:24:47 -10:00
Nate WienertandGitHub c5d843b4a8 chore(release): add beta/prerelease dist-tag path so prereleases never publish to latest (#4066)
Agentbus-Session: ab-mr2q8mh7-34714
2026-07-02 07:21:33 -10:00
natew 6d859917cc v2.0.0 2026-05-22 20:02:54 -10:00
natew 8119492be7 chore: add otp entry to releases 2026-05-21 13:35:44 -10:00
natew 9fd86b20d3 handle major release from rc 2026-03-31 11:31:34 -10:00
natew 438c621758 v2.0.0-rc.29 2026-03-19 19:40:04 -10:00
natew 8646f94a4e fix post release check 2026-03-19 18:20:47 -10:00
natew b826784d6d feat!: rename @tamagui/lucide-icons to @tamagui/lucide-icons-2
BREAKING CHANGE: @tamagui/lucide-icons renamed to @tamagui/lucide-icons-2
due to npm registry metadata limit (100MB, 1400+ versions). Update imports:
  - import { X } from '@tamagui/lucide-icons'
  + import { X } from '@tamagui/lucide-icons-2'

Also disables skipPublishIfUnchanged on all leaf packages to avoid
version mismatches where deps point to unpublished versions.
2026-03-19 18:17:20 -10:00
natew bf25e9a3f5 v2.0.0-rc.27 2026-03-19 17:53:55 -10:00
natew 656adde9cf fix: revert peerDeps back to deps, use skipPublishIfUnchanged for release optimization
peerDeps with "*" caused bun to install non-canary versions during canary
releases. Move font-size, font-inter, font-silkscreen, core etc back to
regular dependencies. Add "skipPublishIfUnchanged": true field to leaf
packages (fonts, icons) and update release script to use that instead of
the dependency-graph heuristic.
2026-03-19 16:44:11 -10:00
natew c454b2435e improve canary skip publish detection 2026-03-18 11:48:46 -10:00
natew 59a4755666 improve canary skip publish detection 2026-03-18 11:48:32 -10:00
natew 82ac3e46f8 chore: allow leaf packages to avoid publish 2026-03-18 11:39:36 -10:00
natew b04127783a chore: add unpublish-old-canaries script, fix native-ci build 2026-03-18 11:38:57 -10:00
Geoffrey SechterandNate Wienert 0658a83eac chore: add script to prune 306 old pre-release tags
Targets: v1.0.0-alpha.* (69), v1.0.0-beta.* (17), v1.0.1-beta.* (207), v0.2.0-alpha.* (3), canary* (10). Does NOT touch stable releases or v2.0.0-rc.* tags.
2026-03-11 08:02:47 +00:00
natew 245ad18c65 fix: close delay respected after safePolygon exit, add content→gap→trigger test 2026-03-04 14:36:47 -10:00
natew 2ce9ce4b6b add release --into 2026-03-04 05:48:38 -10:00
natew 8d4868ee4a fix release undocumented 2026-02-20 12:10:11 -10:00
natew d10d5e0898 chore: format release script 2026-02-18 21:10:20 -10:00
natew 13db32ec02 feat(cli): add --skip-all and --undocumented flags to release script 2026-02-18 21:08:30 -10:00
natew 7c9545a7ce canary2.0.0-rc.14-1771325841778 2026-02-17 00:59:23 -10:00
natew f7ef129cea chore(core): refactor font logic to fix specificity issues and re-enable flattening on text 2026-02-17 00:09:56 -10:00