0019. The public domain is hephkit.dev
Status
Accepted. Date: 2026-11-10. Design: docs/superpowers/specs/2026-11-10-hephkit-dev-domain-design.md.
Context
Hephaestus is already open source: the repo is public, LICENSE is MIT and CONTRIBUTING.md exists. What it lacks is a front door. Its only address was heph.neoforgelabs.tech, which reads as a company’s internal infrastructure. That is wrong for the two things we now want from the kit’s address:
- A front door. Somewhere a stranger can land and decide whether to adopt the kit.
- A portfolio link. An address that stands on its own, not as a subdomain of a company site.
The name Hephaestus is crowded. At least six unrelated open-source projects use it, and hephaestus.dev is taken, so hephaestuskit.dev would still swim in the same pool. hephkit is different. It is unique across PyPI, npm, crates.io and every hephkit.* domain (checked 2026-11-10), and it is already what a user types: uv add hephkit.
The address is about to become expensive to change. hephkit.errors.TYPE_BASE_URL puts it in every problem+json body, and spec/heph-spec.md section 1.4 makes it a MUST. The hephkit 0.1 release publishes that value in a wheel on PyPI, after which changing it is a compatibility event instead of an edit. At the time of this decision the spec was still 0.2.0 Draft, and no conformance vector encodes the host; only the $id of conformance/schema/vector-file.schema.json does, so there was nothing to regenerate and no vector to correct from our own output.
Decision
The public host is hephkit.dev, at the apex with no www.
- The site is
https://hephkit.dev, error pages arehttps://hephkit.dev/errors/<code>, and the Phase 4 registry ishttps://hephkit.dev/r/*.json. spec/heph-spec.mdsection 1.4 now requirestypeto behttps://hephkit.dev/errors/<code>. The spec moves to0.3.0, a minor bump because a MUST changed.hephkit.errors.TYPE_BASE_URLis"https://hephkit.dev/errors/"and stays a module constant: the spec makes it normative, so it is not configurable. The schema$idmoves to the same host.- The repo keeps its name.
go/go.moddeclaresgithub.com/Neoforge-Labs/hephaestus/go, so renaming the repo would break that module path and everygo installline. Hephaestus remains the project’s name,hephkitis how it installs, andhephkit.devis where it lives. - External adopters are now an audience we address on purpose. The design’s reasoning for keeping the kit public and MIT-licensed was a clean sale; this decision adds that a stranger should be able to find the kit and use it. The non-goal that forbade it, “Courting external adopters”, was carried by the docs-site design (
docs/superpowers/specs/2026-11-05-docs-site-and-landing-page-design.md), not the parent design, and this decision reverses it there. The marketing it listed (no SEO campaign, no newsletter, no blog, no testimonials, no pricing) stays out of scope. Tone on the landing page is in scope, and the honest maturity table is not touched: every module staysexperimental.
Consequences
The old host is deleted rather than redirected. It never resolved, so there is nothing to redirect. tools/tests/test_no_stale_domain.py fails if it reappears in any repo file other than the documents about this move, which name it deliberately.
This had to land before the hephkit 0.1 wheel ships. Doing it afterwards would have put the old URL into problem bodies in the wild.
The domain registration and the Vercel project are outside the repo and are done by hand, with an apex A or ALIAS record, since an apex cannot be a CNAME. No deploy token enters the repo. Until the domain is live, the error URLs do not resolve; they are identifiers first and links second.
The cost is a mild mismatch between the Neoforge-Labs/hephaestus repo name and the hephkit.dev host, and hephkit means nothing to a newcomer until the page explains it. .dev is HSTS-preloaded, so HTTPS is mandatory on the site.