5 Commits
Author SHA1 Message Date
zeekayandHanzo Dev 1b6d050877 go 1.26.8
One toolchain across the estate. The tree carried 1.26.0, .1, .3, .4 and .5
at once, so which compiler built a binary depended on which repo it came
from.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 23:57:34 -07:00
zeekayandHanzo Dev 8960c41072 fix: call the pipeline at the address it actually lives
hanzoai/ci keeps the reusable at .github/workflows/build.yml — the one path
both planes resolve, since github.com reads a reusable only from there and the
forge reads it too. The v1 tag moved with it, so a caller still naming
.hanzo/workflows/build.yml asks for a blob that is not in the tree:

  InsertRun: read hanzoai/ci@v1:.hanzo/workflows/build.yml: object does not exist

The caller itself stays at .hanzo/workflows/cicd.yml on purpose: github.com has
no runner for these labels, so a caller placed there could never be scheduled.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 01:14:31 -07:00
zeekay 1e81bc7b64 a window is a count and a unit, so 90d and all answer
The relative half of ParseWindow was a table of four spellings. A window nobody
had enumerated — 14d, 90d, all — was an unknown range and a 400, on the surface
an operator reads to see where money went. The stores behind these series keep
two years, so the door was refusing questions the data could answer.

Read the count off the label instead: any <N>h or <N>d resolves, day/week/month
still name the common ones, and all reaches back to Horizon, the retention those
stores keep. Every label the table admitted resolves to the very same window, so
the change only adds.

Past the horizon is still a refusal, by name, rather than a window served short:
on a series that carries money a quiet zero reads as "nothing was spent".
v0.1.1
2026-08-13 23:56:10 -07:00
zeekayandHanzo Dev 2381673958 ci: canonical pair — hanzo.yml + forge caller
github.com has no runner for hanzo-build-linux-amd64, so a caller under
.github/workflows is a gate that can never be scheduled. This is the ~7-line
caller on the plane that can (git.hanzo.ai git-runner fleet), pinned @v1.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-06 02:38:55 -07:00
zeekayandHanzo Dev 75b73f4b15 types: the fleet's shared value layer
A value belongs here when two or more services must agree on it exactly and
neither should inherit the other's machinery to do so. The package imports the
standard library only; go list -deps is 63, all stdlib.

Seeded with the metered-series window. Cloud and ai must resolve ?range/?start/
?end to the same [start, end) and the same bucket interval, and cloud reached
that 30-line rule through a package that carries 1925 dependencies.

Interval is a closed type. The bucket function is not bindable in the engines
that serve these series, so the interval reaches a query by interpolation;
ParseWindow yields Hour or Day and nothing else can be constructed through it.

ParseWindow is total: it returns a window or an error, never a zero window a
caller could read as a valid range. It also carries the resolved label, which
every call site previously re-derived.

Co-authored-by: Hanzo Dev <[email protected]>
v0.1.0
2026-07-26 19:04:56 -07:00