Files
openapi/capabilities.yaml
T
zeekay 07dc493962 revert(openapi): keep tracker a distinct /v1/tracker — it's a per-org issue tracker, not analytics
Coordinator confirmed against cloud source (clients/tracker): tracker is a
Linear-style projects+issues tracker, NOT event/web-analytics. Revert the
tracker->analytics fold from the prior commit:

- git restore tracker/openapi.yaml (projects + issues, 4 routes, 8 schemas)
- remove the tracker: analytics collapsed entry; re-add tracker to the
  applications domain list as a normal spec.

Kept distinct as its own /v1/tracker — NOT folded into projects/team (that is
a separate flagged review item, not forced here). The other 6 collapses stay:
featuregate->featureflags, ads->marketing, cms->content, cron->tasks,
connectorruntime->automations, gojabase->goja.

merge.py green — back to 68 services, 1810 paths, 1000 schemas; hanzo.yaml +
CAPABILITIES.md regenerated.
2026-07-16 20:23:16 -07:00

103 lines
5.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# capabilities.yaml — the ONE registry of Hanzo public capabilities.
#
# This file is the single source of truth. merge.py READS it (there is no
# hand-kept GROUPS dict anymore) to build hanzo.yaml's x-tagGroups AND to
# generate CAPABILITIES.md. CAPABILITIES.md is a DERIVED artifact — never edit it
# by hand; edit this file and run `python3 merge.py`.
#
# One and one way, by construction:
# • every openapi/<name>/openapi.yaml MUST appear here exactly once, across
# domains ∪ core — merge.py FAILS the build on an orphan spec (dir with no
# entry), an unlisted spec, or a name in two entries. Orthogonality is a
# build invariant, not a hope.
# • a `collapsed` name MUST have NO spec dir (build fails if a dir reappears).
# • `internal` names are EXCLUDED from the master, x-tagGroups, SDKs and docs.
# • `pending`/`review`/domain names WITHOUT a dir are fine (not-yet-authored or
# future-fold); only a spec dir on disk is load-bearing for the invariant.
# • the route IS the identity: one capability = one name = one /v1/<name> = one
# <name>/openapi.yaml. No svc suffix, no singular/plural twins, no facade.
# • merge.py emits x-tagGroups from `domains`+`core` so Redoc/Scalar render the
# movements automatically. Docs + SDKs derive from hanzo.yaml — never hand-kept.
#
# version: the API path stays /v1 (the compatibility contract, immutable). The
# release/generation is V8 — info.version: 8.0.0 on hanzo.yaml + every spec.
edition: "V8 · Open Edition"
version: "8.0.0"
domains:
- id: identity
title: "Identity & Trust"
role: "who you are · what you may touch · where secrets live"
services: [iam, authz, kms, security, did, zt, guard]
- id: intelligence
title: "Intelligence"
role: "models · agents · evaluation — the mind of the cloud"
services: [ai, ml, engine, agents, evals, prompts, functions, exec, graph]
- id: data
title: "Data"
role: "the stores every capability writes to and reads from"
services: [storage, s3, base, db, kv, vector]
- id: streams
title: "Streams"
role: "messaging · durable tasks · async orchestration"
services: [pubsub, mq, stream, tasks, notify, automations, flow, auto]
- id: observability
title: "Observability"
role: "see everything — telemetry · analytics · usage"
services: [o11y, observe, analytics]
- id: commerce
title: "Commerce"
role: "the economy — meter · price · bill · reward"
services: [commerce, billing, pricing, plan, product, crm, referrals, affiliates, licensing]
- id: platform
title: "Platform"
role: "the cloud fabric — deploy · provision · route · host"
services: [cloud, platform, paas, provisioning, gateway, visor, edge, dns, registry, nexus, do]
- id: applications
title: "Applications"
role: "the user-facing surfaces built on all of the above"
services: [console, projects, app, git, templates, integrations, bot, chat, kb, search, websearch, world, authors, sites, tracker, framework]
# Core — governance that owns no single domain.
core: [admin, plugin]
# Internal — power the music, are not instruments. Excluded from /v1, SDKs, docs.
internal: [principal, goja, mpc, controlplane, metrics, audit]
# Collapsed — resolved duplicates / consolidations. merge.py asserts these have
# NO spec dir (they were removed), and records where the capability now lives.
collapsed:
eval: evals # pure dup — same /v1/evals
operative: bot + visor # computer-using-agent split: bot = the CUA (@hanzo/bot), visor = the VM it runs on
plans: plan # singular canonical
plugins: plugin
featuregate: featureflags # policy toggles → one feature-flags surface (Policy)
ads: marketing # ad surfaces fold into marketing
cms: content # content management = content
cron: tasks # scheduled jobs = durable tasks
connectorruntime: automations # connector runtime = the automations engine
gojabase: goja # internal goja JS-runtime lib, not a public service
# Not-yet-scored — LIVE surfaces missing a spec. Author these to complete the set.
pending: [team, wallets, treasury, usage, fleet]
# Braids under review — same concern, different names? A spec dir still exists
# (so it is GROUPED into a domain above and counts for the invariant); folding it
# away is a separate, verified decision — do NOT silently consolidate here (would
# lose capability). merge.py groups them; it does not fold them.
review:
app_vs_projects: "app (hanzo.app builds/deploys, grouped→applications) vs projects (buildable/deployable sites) — likely ONE concern; fold app→projects?"
do_is_a_provider: "do (DigitalOcean VPCs/LBs, grouped→platform) is a PROVIDER, not a capability — fold into provisioning/platform?"
s3_vs_storage: "s3 (/v1/s3/*, grouped→data) is the present object store; storage is the canonical rename target (no dir yet) — fold s3→storage once the dir is renamed?"
observe_vs_o11y: "observe (/v1/o11y/{logs,metrics,status} + /v1/settings, grouped→observability) is an o11y read-plane facet + a console settings facet — fold observe→o11y (+ console) once the routes migrate?"
workflow_cluster: "auto (Hanzo Auto engine) · automations (connector pieces) · flow — three workflow surfaces; decomplect to one?"
retrieval_cluster: "search vs kb (semantic) vs vector (store) — overlapping retrieval; is search distinct from kb?"