29 Commits
Author SHA1 Message Date
zeekayandHanzo Dev 23ad9f239c Workflows ask for the runner label that exists
One label per runner, spelled <os>-<arch>. The aliases these jobs named
were removed, and a job naming a label no runner carries waits instead of
failing.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-16 01:54:55 -07:00
zeekayandHanzo Dev 8679d48dde ci: tag releases as Zach Kelling
Release tags were made by the automation address as tagger instead of the owner.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-10 14:06:17 -07:00
zeekayandHanzo Dev 97a2b09085 Give every package one version
Two thousand and twenty-one packages carried more than one spec across this
estate — eslint alone in a hundred and four forms — and a package resolved twice
is two copies at run time, which is how react-hook-form came to report "two
different types with this name" from files nobody had edited. None do now.

The number lives in the catalog: a manifest names the package, the workspace
names the version. Where a manifest cannot reach a catalog it still carries the
one version, because the table is the source either way.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 02:37:59 -07:00
zeekayandHanzo Dev 0fd2aee5c5 State a version once
A version written into a manifest is written into every manifest that wants it,
which is how eslint came to exist in a hundred and four forms across this estate
and how a package came to resolve twice at run time. The catalog moves the number
out of the manifest: a manifest names the package, the workspace names the
version.

Four are held below their latest because the newer release cannot be used, and
the reason is recorded rather than the version alone: @noble/hashes 2 renamed
every subpath the web3 stack imports, @splinetool/runtime 2 depends on a package
that was never published, @dynamic-labs 5.4.1 the same, and react-resizable-panels
3 points its types condition at the bundle.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 02:37:59 -07:00
zeekayandHanzo Dev 0c99a1a7f5 One version per package, on the current release
Every dependency on a @hanzo/@luxfi/@zooai package names the same version across
the repo: a catalog entry where pnpm supports one, an exact pin where it does
not, and a range only where a peer genuinely means one.

pnpm itself is pinned too — the estate ran eighteen different versions, five of
them too old to read a catalog.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 02:37:59 -07:00
zeekayandHanzo Dev 17bd239f2a no utility engine
Tailwind 4 out — the engine import, the `@custom-variant`, and the `@theme
inline` wrapper. The tokens inside it were always plain custom properties and
are untouched; what goes is the thing that was reading them.

Every class attribute now reaches a converter rather than the document: Box for
an element, css for an icon, the component itself for anything from @hanzo/ui.
The body's ground moves into the sheet, since <body> sits outside the provider
and reads no classes.

The library's sheets are imported from the LAYOUT rather than @import-ed from
the app's CSS: a bare package specifier does not resolve in this pipeline and
the failure is silent — the whole file is dropped, so every token goes missing
and the page renders on browser defaults.

Also on the current toolchain: React 19.2.8, Next 16.3.3, TypeScript 7.
Measured at 390px and 1280px: 4/4 page-widths clean, nothing unread.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 02:37:59 -07:00
zeekay c8f558792b the face is Zen, and it ships from @hanzo/font
One family. Font stacks name Zen and fall back to the native faces, tokens
name the role rather than a face, and the packages that used to supply a
face now point at @hanzo/font.

Self-hosted @font-face blocks are removed rather than renamed: rewriting the
family in one would leave a src pointing at a file this repo no longer ships.
@hanzo/font carries the binaries and declares the faces, so the local copies
go with the declaration that used them.

Comments naming a face we no longer use are deleted, not reworded.
2026-09-01 08:26:29 -07:00
zeekayandHanzo Dev 310575d381 the corporate name is Lux Industries Inc
Lux Partners Limited is not the entity behind this work. Every place the
old name stood — copyright lines, site footers, brand config, legal and
compliance text — now names the company that actually holds it.

lux.fund is the exception and is not renamed to match: that site belongs
to Lux Assets Management LLC, a different company, and it says so.

Two kinds of line were left for a person rather than rewritten. A dated
news item recording that Lux Partners Limited was established in the Isle
of Man is a historical fact, and renaming it would falsify the record. And
a sentence asserting that the company is domiciled in the Isle of Man is a
claim about a jurisdiction, not a name — an Inc or an LLC is not an Isle
of Man company, so swapping the name there would assert something untrue.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-28 12:59:56 -07:00
zeekay 5acffc5bc2 track the name agents read, so a clone documents itself
LLM.md is the source and stays the source; CLAUDE.md is a symlink to it, so there is
one file and it cannot drift from itself. What changes is that the link is committed
rather than left for each checkout to recreate.

Left untracked, the doc was conditional on a step outside the repo: a fresh clone had
no CLAUDE.md, nothing loaded LLM.md, and an agent worked here having never read what
this repo already explains. 516 repos in the estate already track theirs; this is the
rest agreeing with them.
2026-08-20 16:14:58 -07:00
zeekayandHanzo Dev 014895d6a8 ci: the smoke rejected basePath apps for an asset that was present
A Next.js app served at /forum emits /forum/_next/... into index.html while the
image holds /_next/... — the prefix is added by the router, not by the layer. The
check resolved only the literal path, so it failed forum and help on assets that
were in the image all along, and it also asserted that a bare href="/forum" — a
navigation link, not a file — existed on disk.

Now: only references naming a file are checked, and each resolves either
directly or with the leading basePath segment stripped. A genuinely absent
chunk still fails, which was the point of the check.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-06 18:10:41 -07:00
zeekayandHanzo Dev fb3798e145 ci: build on our own runners — this workflow ran nowhere at all
publish.yml asked for `runs-on: ubuntu-latest`. The git-runner behind
git.hanzo.ai advertises ~28 labels and that is not one of them, so the job was
never picked up here — it is one of 44 jobs sitting in `waiting` for exactly
that label. On GitHub it was equally stuck, because the luxfi org has zero
registered runners. Addressed to a runner that exists in neither place, it was
not a build; it was a queue entry.

Also removed, both GitHub-only assumptions:
  - ghcr login via github.actor + secrets.GITHUB_TOKEN. On this forge
    GITHUB_TOKEN is minted by git.hanzo.ai and ghcr.io answers `denied: denied`.
    GHCR_USER/GHCR_TOKEN are luxfi org-level secrets here.
  - cache-from/to: type=gha, which addresses the GitHub Actions cache service.

The v1.x.x bump is untouched: feat/BREAKING/type! to minor, else patch, never
a major. What changes is that the tag push now goes to github.com rather than
to the forge — this repo is a pull-mirror here and refuses receive-pack, so the
old `|| echo "tag push skipped"` had been silently tagging nothing.

Adds the checks node's release.yml learned the hard way: smoke the image before
it is allowed to exist at the registry, prove the pushed manifest resolves, and
stamp revision/ref/source labels. The smoke checks what a static-server image
cannot check itself — index.html exists and every asset it references is really
in the layer — so a hollow build cannot serve a white page with a 200.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-06 17:51:12 -07:00
zeekayandHanzo Dev 38754ec341 route npm through pkg.hanzo.ai
point the registry at our verdaccio, which proxies and caches all of npm
alongside our own scoped packages. lockfiles are untouched: npm and pnpm
both honor .npmrc at fetch time, so no re-resolution is needed.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-04 16:51:13 -07:00
zeekayandHanzo Dev deb84f537b build: migrate tsconfig to TypeScript 7 (native compiler)
TypeScript 7 is the native Go compiler and removes `baseUrl` and
`moduleResolution: node|node10`. Both appear here, so `tsc` from TS7
refuses the config outright (TS5102 / TS5108) and cannot typecheck.

`paths` targets resolve relative to `baseUrl` when it is set and relative
to the tsconfig file otherwise. Every `baseUrl` folded here already
pointed at the config's own directory, so dropping it moves nothing and
the targets are left byte-identical. Where a baseUrl pointed elsewhere,
each affected target was rewritten as join(baseUrl, target).

`moduleResolution` was chosen from the declared `module`: commonjs ->
node16, esnext/preserve -> bundler. Configs whose `module` is unset or
exotic were left alone rather than guessed at.

The result is accepted by BOTH toolchains, so nothing has to upgrade
TypeScript in lockstep. Verified on hanzo/chat packages/api: tsc 5.9
779 -> 778 errors (no regression), and tsc 7.0.2 now runs the project
in 2s where it previously refused the config.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-27 14:18:49 -07:00
zeekayandGitHub c05d1283ba docs: add LICENSING.md pointer to canonical IP/licensing strategy (#1) 2026-05-15 17:33:25 -07:00
zeekay 521fc76e25 ci: cap at v1.x.x — no major bumps 2026-04-20 21:03:08 -07:00
zeekay 9fe2659dd3 ci: use GITHUB_TOKEN for tag push + persist-credentials 2026-04-20 21:00:27 -07:00
zeekay ceb21c4c50 ci: auto-bump semver tags on main push 2026-04-20 20:58:51 -07:00
zeekay 065289d6f0 ci: amd64-only first pass (arm64 later via native runners) 2026-04-19 01:09:40 -07:00
zeekay 0af2f69cf8 fix(docker): COPY . . before install so postinstall finds source config 2026-04-19 00:33:58 -07:00
zeekay 230f0d3d69 fix(docker): Next static export outputs to /app/out 2026-04-19 00:28:55 -07:00
zeekay 89a79bdb44 ci: standardize Vite 8 + ghcr.io/hanzoai/spa 2026-04-19 00:28:37 -07:00
zeekay b01d3386b3 build: hanzoai/spa static container 2026-04-18 23:38:16 -07:00
zeekay 4699a07649 chore: add BSD-3-Clause LICENSE 2026-02-14 05:26:20 -08:00
zeekay d0bf1621a7 docs: add LLM.md for AI assistant documentation 2025-12-24 18:10:38 -08:00
zeekay f752b7cc97 chore: force rebuild 2025-12-19 07:50:23 -08:00
zeekay f99c1f0acc fix: add basePath for GitHub Pages subdirectory deployment 2025-12-19 07:48:41 -08:00
zeekay 31a5569e47 Fix: remove pnpm version conflict in workflow 2025-12-19 07:21:55 -08:00
zeekay 2747c91582 Add GitHub Pages deployment workflow 2025-12-19 07:20:42 -08:00
zeekay fbc9126b8a Initial commit: Lux Forum landing site 2025-12-19 07:19:17 -08:00