Files
hanzo.ai/hanzo.yml
zeekay a5b4a4835c site: say only what is kept: /referral on the real score, a copy gate, plain wording
/referral promised $25/$100/$500 credits, a 10% token kickback, a free week per
paid upgrade and a free Enterprise year; nothing in the cloud pays any of it
(the score is +1 signup, +20 referral that pays, +1 per 100K tokens, +10 star,
+1 follow). The page is the real rules and the same share card as the beta.
scripts/audit-copy.ts fails words that sell and marks of work not done; the
customer, proof, history and careers files, which move to the CMS, are listed
there until they do.

Claude-Session: https://claude.ai/code/session_017vrVus6PPBgP5YRzKV1iqW
2026-10-26 09:57:01 -07:00

63 lines
2.5 KiB
YAML

# Read by hanzoai/ci (.hanzo/workflows/cicd.yml). The site is a static export
# published by .hanzo/workflows/deploy.yml; there is no image and no operator
# deploy. Node and pnpm are pinned once, in package.json.
test:
- name: lint
run: |
corepack enable
pnpm install --frozen-lockfile
pnpm typecheck
pnpm lint
# Specs that read source: no build and no browser, so they fail on the commit.
- name: unit
run: |
corepack enable
pnpm install --frozen-lockfile
pnpm test:unit
# Runs against `out/`, the bytes that ship: a ratio lineHeight compiles to px
# and an unlinked page still lands in sitemap.xml, neither visible in source.
# On a push to main gates.yml runs them over the export it builds (deploy.yml
# runs only the backing scan before it publishes), so this run leaves them to
# it rather than running them twice.
# On a pull request gates.yml runs them: the specs the change reaches, or the
# whole suite on eight shards when it touches what every spec shares. Here
# they were the whole suite again on one runner at two workers, 30 minutes
# and more, behind a gates.yml run that had already answered.
- name: gates
run: |
if [ "$GITHUB_EVENT_NAME" = push ] && [ "$GITHUB_REF" = refs/heads/main ]; then
echo "gates: gates.yml runs them on this push"; exit 0
fi
if [ "$GITHUB_EVENT_NAME" = pull_request ]; then
echo "gates: gates.yml runs them on this pull request"; exit 0
fi
corepack enable
pnpm install --frozen-lockfile
pnpm build
# The runner image bakes browsers under /opt/playwright as root, so the
# job's own copy goes where the job may write.
export PLAYWRIGHT_BROWSERS_PATH="$PWD/.cache/ms-playwright"
pnpm exec playwright install chromium
pnpm gates
# hanzo-design.allow.json is a ratchet: a count over or under it fails.
- name: one design system
run: |
corepack enable
pnpm install --frozen-lockfile
pnpm lint:design
# The rest read tracked files only, so they report when an earlier step fails.
- name: tailwind floor
run: node scripts/tailwind-floor.mjs --check
- name: copy
run: |
corepack enable
node scripts/audit-copy.ts
- name: price literals
run: node scripts/audit-price-literals.mjs
- name: dead classes
run: node scripts/audit-dead-classes.mjs
- name: catalog answers
run: node scripts/audit-catalog.mjs
- name: model counts
run: node scripts/audit-model-counts.mjs