DocsReference
#ADR 0011: public crates are cratefield-*, not factory0-*
Status: accepted, 2026-09-07. Supersedes the naming half of 0005.
#Context
ADR 0005 chose the factory0- prefix when this repository lived in the Factory Zero organisation. The repository is now Cratefield/harness and the product it is sold as is Cratefield; Factory Zero is the parent that owns the ventures, not the name a person types into cargo add.
The prefix survived the move for one reason: renaming a published crate is a breaking change for every consumer, and no rename is worth that on its own. That argument expires exactly once — before the first publish. Nothing is on crates.io yet, so the rename costs nothing today and costs every downstream Cargo.toml on any later day.
#Decision
- Public crates take the prefix
cratefield-; library paths follow ascratefield_*. The binary keeps its short namefz. - Private crates are unchanged: still
fz-*, still git dependencies, still inFactory-Zero/harness-private. They are Factory Zero's, not Cratefield's, and they are never published. Factory-Zero/authkeeps its ownfactory0-auth-*package names for the same reason: it is an unpublished Factory Zero service, not a Cratefield crate. It depends on the harness by the new names.- Everything else ADR 0005 decided stands: crates.io for public, git tags
<crate>-v<semver>for private, trusted publishing over OIDC.
#Consequences
- The 15 publishable crates are renamed in one commit, before any release. There is no compatibility shim and none is needed: no version of any
factory0-*crate ever existed on crates.io. - The
factory0-*names stay unclaimed. Squatting them defensively would mean publishing crates we do not intend to maintain, which is worse than the name being free.
Amended 2026-09-12. One
factory0-*crate did reach crates.io:factory0-auth-client, published by mistake while releasing the notifications module, which depends on it. The decision above draws the line in the right place but named the wrong side of it for this crate — the auth service is an unpublished Factory Zero backend, while the client library is something a Cratefield venture compiles in, and so is a Cratefield crate. It was renamedcratefield-auth-clientthe same day and thefactory0-auth-clientversions were yanked. The name cannot be released, which is the cost of the mistake; nothing depended on it, so nothing broke. The rest offactory0-auth-*stays unpublished as decided.
- Problem-type URIs (
https://factory0.ventures/problems/...), thefactory0.venturesdomains and the example venture namedfactory0are untouched. They are Factory Zero's, they are a wire contract, and they are not package names.
Amended 2026-10-05 (issue #777). The auth service is no longer a Factory Zero service. It runs as one branded instance per app, either self-hosted by the venture or operated by Cratefield on the app's own domain, so the reason given above for keeping its
factory0-auth-*names no longer holds. The unpublished service crates were renamedcratefield-auth-*(cratefield-auth-core,-magic-link,-meta,-oidc,-passkeys,-password,-worker,-fz), matchingcratefield-auth-client. None of them was ever published, so nothing downstream broke; they staypublish = false. The text above, and thefactory0-auth-*names in it, are kept as the historical record.
Mirrored from docs/adr/0011-crates-are-published-as-cratefield.md at b6f50cd. The harness is the source of truth: a correction goes there first.