Decisions

ADR-071: Product name — Weft

> **Superseded in part by [ADR-091](./091-rename-weft-to-crank.md).** §1 (product name = Weft) is replaced — the product is now **Crank**. Every other section of this ADR — the company-vs-product split, the…

#071

ADR-071: Product name — Weft

Status: Accepted (superseded in part by ADR-091 — product name is now Crank) Date: 2026-04-23 Related: ADR-065 (persona-aware IA + niceties), ADR-067 (playbooks unified primitive), ADR-068 (playbook runtime architecture), ADR-070 (playbook UI contract), ADR-091 (renames product from Weft to Crank)

Superseded in part by ADR-091. §1 (product name = Weft) is replaced — the product is now Crank. Every other section of this ADR — the company-vs-product split, the naming-criterion framework, the weaving metaphor used as engineering vocabulary, the revocability principle — stands unchanged. The metaphor catalogue (loom, shuttle, warp, weft thread) is preserved as internal architectural shorthand; only the public-facing product name changed. This file is retained for historical record and is not edited in place.

Decision (one sentence)

Weft is the product name for Gyrum's SaaS factory. Gyrum (the company) owns the umbrella brand; Weft is the thing customers install, engineers ship, and operators run.

Context

Three months of ADRs have been written without a product name. The thing we are building has been called, at various times and by various people:

  • "the SaaS factory" (pitch-deck phrasing, used in investor prose)
  • "the platform" (engineering prose — ADR-054, ADR-058)
  • "dark-factory" (the monorepo name, leaking into docs)
  • "Gyrum" (collapsing company and product into one word)
  • "the orchestration layer" (when the speaker means the runtime)

Each of those is correct in its register and wrong in every other register. A new engineer reading the ADR index cannot tell whether "the platform" in ADR-058 and "Gyrum" in the README are the same thing. A prospective customer looking at weft.gyrum.ai and gyrum.ai/orchestration cannot tell which surface is canonical. Every screen and every surface has to re-establish what it is, because the shared name does not exist.

This ADR settles it.

Why not just call it "Gyrum"?

Because Gyrum is the company. It has — or will have — a hiring page, an investor deck, a research arm (ai-research), an engineering blog, and press about what the company believes. None of those are "the product". Collapsing company into product is the Vercel → Next.js mistake in reverse: it makes the product sound like a division of one company rather than the one thing the company sells, and it makes the company sound like a product when it tries to hire platform engineers or accept research collaborators.

Anthropic (company) → Claude (product). Vercel (company) → Next.js (product). Google (company) → Workspace (product). The pattern is well-worn; we adopt it.

Why not just call it "Dark Factory"?

"Dark factory" is the right industry metaphor — a lights-out manufacturing plant, fully automated, runs without humans on the shop floor. It names precisely what the platform does (turn specifications into working SaaS products with minimal human intervention). It is the correct internal and industry-critic term and will keep being used in prose.

It is not a viable product name in 2026:

  • Crowded. StrongDM, Spotify, and Cursor all use "dark factory" or "lights-out SaaS factory" in their 2026 marketing copy. A domain audit on darkfactory.* turned up parked domains under three active owners and a German industrial-automation consultancy at dunklefabrik.de.
  • Generic. "Dark factory SaaS" returns ~40k results in 2026 and is drifting toward the fate of "AI platform" — a phrase every company claims, therefore a phrase no company owns.
  • Undifferentiated. If a prospect asks "which dark factory?", the answer has to be another name. At that point the first name was never the product name.

Dark Factory stays as the metaphor (we describe what Weft does as "running a dark factory"), stays as the monorepo name (no rename, no git-history pain), and stops being used as the product identifier.

Why not "Jacquard"?

The Jacquard loom (Joseph Marie Jacquard, 1804) is the first programmable machine — punch cards encoded the weave pattern, a mechanical reader pulled threads into position, the loom wove the pattern without a human intervening. It is, unarguably, the right ancestor for a playbook-driven automation platform. Early prose in the ai-research repo uses "Jacquard" informally.

jacquard.com is an active AI-SaaS competitor. Rebranded from Phrasee in 2023; enterprise content generation; well-funded; current marketing language uses the exact "programmable content at scale" positioning that a Gyrum product would also use. Direct collision. Domain is held. Brand is established. Using Jacquard as our product name is lethal in a comparison search and actively hostile in any SEO context.

The metaphor stays (we credit Jacquard's punch cards when explaining playbooks — see §4 below), the name is abandoned.

Decision

1. Name

Weft.

  • Full form: "Gyrum Weft" in prose where umbrella-identification matters (investor docs, press, the first sentence of a README).
  • Short form: "Weft" in daily use (UI chrome, engineer prose, Slack, the second sentence onward).
  • Possessive: "Weft's runtime", not "the Weft runtime" (shorter, reads as a product not an object).

Pronunciation: /wɛft/ — rhymes with left. One syllable. No silent letters, no ambiguous spelling (unlike "gyrum", which /ˈdʒaɪrəm/-or-/ˈɡɪrəm/ even our own team disagrees about).

2. The metaphor

Weft, in weaving, is the horizontal thread — the thread the shuttle carries back and forth across the vertical warp threads, one pass at a time. The warp is the fixed skeleton of the fabric; the weft is what makes it a fabric rather than a fringe. Every pass of the shuttle lays down one more line of weft; the pattern (encoded on the Jacquard punch cards) tells the shuttle which warp threads to go over and which to go under; the accumulated passes are the fabric.

The metaphor maps cleanly onto the ADR-067 / ADR-068 architecture. This is not decoration. Every architectural component has a role on the loom; future architecture decisions can and should ask "what role does this play on the loom?" and get a well-defined answer.

2.1 Loom-metaphor mapping

Weaving concept Weft architectural component Source ADR
Loom (the machine) The Weft platform itself — the running ai-research instance, the frontend, the database, the queue ADR-068 (runtime architecture)
Warp threads (vertical skeleton) The stable infrastructure: catalog, persona IA, project registry, runbooks ADR-059 (project-first IA), ADR-060 (catalog-driven infra), ADR-064 (gyrum-catalog + hex arch), ADR-065 (persona IA)
Punch cards (the pattern) Playbooks — YAML front-matter + Markdown body, one pattern per card, one stack of cards per product ADR-067
Punch-card reader The playbook runtime's parser + validator — reads the YAML, resolves references, hands each step to its executor ADR-068 §3
Shuttle (carries weft thread through warp) Step executors — one shuttle per step kind (shell, ssh, claude, http, pipeline, experiment, prompt, prompt_secret, approval, subplaybook) ADR-068 §3
One shuttle pass One playbook_run — one complete execution of a playbook, from pending to completed / failed / cancelled ADR-068 §2
Selvedge (finished edge of fabric) The run report — the terminal-state envelope with outputs, events, timing, and the ADR-066 microvisualisations ADR-068 §2, ADR-066, ADR-070 §1
Operator at the loom Human or agent who answers awaiting_input prompts, approves destructive steps, cancels a misbehaving run ADR-068 §2, ADR-070 §1
Finished fabric The SaaS products Weft produces — the sites and services the pattern was woven into existence to create (the whole point)

The mapping has structural value beyond naming. When a future ADR proposes, say, a "playbook-composition" primitive — subplaybooks calling subplaybooks — we can ask: is this the shuttle carrying two weft threads at once, or is it a second loom feeding the first? The metaphor constrains vocabulary and forces specificity.

2.2 Why the metaphor is load-bearing, not decorative

Three concrete uses:

  1. Onboarding explains itself. A new engineer reading the ADR index can read ADR-067 → ADR-068 → ADR-070 → this one and walk away with a picture: pattern → reader → shuttle → fabric. The picture survives compression; the picture does not need the ADRs to be re-read every week.

  2. Vocabulary is shared across the stack. The runtime talks about "runs"; the frontend talks about "reports"; prose talks about "patterns". Now they all share loom, pattern, shuttle, pass, fabric, selvedge. A bug report that says "the selvedge is missing timestamps on failed runs" is unambiguous in a way that "the report renderer dropped a field" is not.

  3. The metaphor predicts. When we have to decide whether step-level cancellation should abort mid-step or let the step finish, the metaphor asks: can a shuttle be stopped mid-pass? The answer (yes, but you get a broken thread, and the next pass has to re-thread) maps to the on-restart behaviour in ADR-068 §2 — which is why that section requires operator confirmation rather than automatic resume.

3. Why "Weft" won over alternatives

A domain audit and competitor sweep on 2026-04-23 looked at every candidate that survived a first filter. The short list:

Candidate Root metaphor Failure mode Fatal?
Dark Factory lights-out plant generic, crowded, undifferentiated (see §Context) yes — as a product name
Jacquard programmable loom jacquard.com is an active AI-SaaS competitor; direct collision yes
Umbra shadow / dark umbra.com is an active satellite-imagery company (well-funded, heavy press footprint); tech-trademark conflict yes
Penumbra shadow edge penumbra.com is a NYSE-listed medical-device company; search and trademark both collide yes
Nocturne nighttime Chopin connotation overwhelms tech connotation; also a Figma plugin + a Sony product line yes (weak, but real)
Loom the weaving machine loom.com is Atlassian's video company (bought 2023, actively marketed); direct collision yes
Warp the vertical thread warp.dev is an active AI terminal company (YC, heavy marketing spend); direct collision yes
Shuttle the thread-carrier shuttle.rs is an active Rust-backend-hosting company; direct collision in dev-tools space yes
Heddle loom part that lifts warp threads obscure — most readers have never heard the word; pronunciation unclear no, but unusable
Weft the horizontal thread no tech-company collision on the word; short, pronounceable, distinctive; weft.gyrum.ai available as canonical subdomain (see §7) — winner —

The remaining filter: the name had to (a) extend the loom metaphor already justified by the Jacquard / punch-card framing in ADR-067, (b) be pronounceable in one syllable on first reading, (c) have an available .dev or .ai domain in April 2026, (d) return zero active tech-company collisions on a combined Google + GitHub + Crunchbase sweep. Weft cleared all four. Nothing else did.

4. Positioning

4.1 Tagline

Recommended: "Weft — the SaaS factory that weaves itself."

The recommended tagline owns the metaphor (weaves), names the category (SaaS factory), and carries the autonomy claim (itself) without overclaiming ("weaves itself" is literally what the Jacquard loom does — a human doesn't throw the shuttle; the machine does). Short enough for a homepage hero, long enough to read as a promise.

Alternative: "Playbooks in. Products out."

Blunt, engineer-facing, reads as a functional spec. Good for the engineering-blog subtitle or a Hacker News comment. Loses the metaphor; gains legibility. Recommend as the secondary tagline on the docs landing page where the audience is engineers rather than buyers.

Alternative: "Gyrum Weft — automation that runs in the dark."

Keeps the dark-factory reference alive (it is the correct industry framing and worth nodding to), adds the umbrella brand, reads as slightly more enterprise. Recommend as the tagline for investor and press materials where "Gyrum" is the recognised entity and the dark-factory framing is the category-signalling anchor.

4.2 Brand voice

Three adjectives, ranked:

  1. Craft — Weft is a weaving word. The brand reads as something made carefully, patterns held deliberately, fabric inspected before it leaves the loom. Not "move fast and break things".
  2. Automation — the loom weaves itself; the factory runs in the dark; the engineer watches the patterns, not the threads.
  3. Quiet confidence — weaving is not loud. The best looms are the ones you hear steady in the background. Copy that shouts gets rejected; copy that over-promises gets rejected. (This matches the ADR-065 niceties principle: calm by default, loud only when actionable.)

Not: cute, playful, disruptive, revolutionary, "reimagining".

5. Rename targets — future work, not this PR

This ADR does not execute the rename. It enumerates the targets so future PRs (one per repo, prose-only) can land them incrementally.

5.1 Priority 1 — customer-facing prose

The surfaces a prospect, user, or customer encounters first. These should migrate in the first rename wave (one follow-up PR per repo).

Surface Today After rename
ai-frontend/src/routes/+page.svelte — homepage <title> "Gyrum" "Weft — Gyrum's SaaS factory"
ai-frontend/src/routes/+layout.svelte — nav brand "Gyrum" "Gyrum Weft" (full form in chrome)
Docs page titles — first H1 of every page under docs/ that names the product varies Weft (prose only; filenames unchanged)
Landing-page copy — hero headline, subhead, CTA "The SaaS factory" / "Gyrum" "Weft" / "Gyrum Weft"
README.md first paragraph — every public repo (ai-frontend, ai-research, dark-factory, gyrum-catalog, gyrum-playbook-runtime if extracted) varies First-sentence pattern: "X is part of Weft, Gyrum's SaaS factory."
Install guide headings — docs/getting-started/, docs/install/ "Install the platform" / "Install Gyrum" "Install Weft"
Public tagline — homepage hero (none canonical) "Weft — the SaaS factory that weaves itself." (§4.1)
OpenGraph / social meta — og:title, twitter:title on every public page "Gyrum" "Weft — Gyrum's SaaS factory"
Email sender name — transactional mail from the platform "Gyrum Platform" "Weft" (from-address on gyrum.ai until a standalone domain is acquired — see §7)

5.2 Priority 2 — engineer-facing prose

The surfaces engineers (ours and third-party) read when figuring out how the system is put together. Second rename wave; lower urgency, but still prose-only.

Surface Today After rename
ADR titles — prose inside ADRs that references "the platform" "the platform" "Weft" (ADR IDs and filenames unchanged)
CLAUDE.md first paragraphs — every repo's AI-context file varies First-sentence pattern: "This repo is part of Weft (Gyrum's SaaS factory)."
Docstring first-lines — every exported symbol whose doc comment names the product "the platform" / "Gyrum" "Weft" (only where the product is explicitly named; most docstrings don't need to change)
go doc package comments — top-of-package commentary for public packages varies "Part of Weft." prefix where the package is product-specific
Engineering blog posts — once the blog launches N/A Use "Weft" and "Gyrum Weft" per §4.1
Conference talks / slide decks — when we give them varies Product name: Weft. Company name: Gyrum.

5.3 Explicitly NOT renamed

These stay as-is. Renaming them would break imports, git history, CI configuration, or operator muscle memory, and the cost is not worth the consistency gain.

  • Repo names. dark-factory, ai-frontend, ai-research, gyrum-catalog, gyrum-hiphip, and everything else stays. GitHub URL stability matters more than naming purity. New repos (e.g. a future gyrum-playbook-runtime per ADR-068's extraction path) may use the new naming, but old repos stay.
  • Go module paths. gyrum.ai/orchestration, gyrum.ai/catalog, and similar module paths stay. Changing them would break every go get and every downstream import.
  • Go module gyrum-hiphip. Stays. Internal codename; the puzzle-piece-naming convention works for us.
  • File paths. docs/decisions/071-product-name-weft.md stays; we do not retrofit weft/ into directory structures.
  • Internal variable names. gyrumClient, platformConfig, darkFactoryRoot — no rename. The compiler does not care; code-review mental load is real.
  • Database table names and column names. playbook_runs, playbook_run_steps, kpi_snapshots — unchanged. A rename here means a migration; a migration here means downtime or careful dual-write. Not worth it for naming consistency.
  • Environment variables. GYRUM_DATABASE_URL, GYRUM_METRICS_BEARER — unchanged. Operators have them memorised.
  • CLI names. gyrum-start-work, gyrum-complete-pr, gyrum-review-pr, and all other gyrum-* devtools stay. These are company-level tooling (they work across every gyrum project including ones that are not part of Weft), so the company prefix is correct.
  • Git history. Obviously. No git filter-branch.

6. Brand relationship

Two brands, one umbrella. The separation is explicit and load-bearing.

Brand Scope Primary domain Tone Content owners
Gyrum.ai The company. Hiring, investor comms, research, press, company-wide identity, the research arm (ai-research), the long-form essays and conference talks that speak for the company rather than the product. gyrum.ai Institutional. "Gyrum believes…" Founders, press, hiring
Gyrum.io Owned, under-used. gyrum.io Parked — 301 redirect to gyrum.ai for now. Future option: reserve for a second product, or for the research arm's standalone blog if it outgrows gyrum.ai/research. Reserved
Weft The product. Landing page, docs, changelog, engineer blog posts about the product, customer-support prose, the UI chrome, the email-sender identity, the status page. weft.gyrum.ai (canonical — see §7) Craft + automation + quiet confidence (§4.2) Product, engineering

Analogous patterns in the market:

  • Anthropic → Claude. Anthropic publishes research, hires, talks to regulators. Claude has a product page, a pricing page, a changelog. The separation is clean and the company does not confuse the two.
  • Vercel → Next.js. Vercel is the hosting company; Next.js is the framework. Vercel employs the Next.js team; they are not the same brand. A Next.js release is not a Vercel release.
  • Google → Workspace. Workspace has its own identity (workspace.google.com), its own pricing, its own UI chrome. Google is the umbrella.

We follow the same split. The cost is ~two landing pages to maintain; the benefit is that the company can change its product strategy without rebranding, and the product can grow a second version without rebranding the company.

7. Domain strategy

Canonical URL: weft.gyrum.ai (subdomain of the company domain, already owned).

Standalone weft.* domains are squatter-heavy — weft.com, weft.ai, weft.io, weft.dev, weft.works, weft.so etc are all either actively owned by real companies or parked by domain squatters. DNS sniffs can be misleading for parked-with-no-DNS domains; only the registrar is authoritative.

Decision: defer standalone domain purchase. weft.gyrum.ai is the canonical product URL for now. Anthropic launched Claude at claude.anthropic.com before owning claude.ai; GitLab lives at about.gitlab.com; Google Workspace at workspace.google.com. A subdomain is a completely valid launch URL.

Revisit the standalone purchase when:

  • Revenue or funding justifies a $50-$5,000 squatter negotiation
  • Branded email (@weft.something) becomes load-bearing
  • A genuinely available standalone appears at a normal price (~$20-50/year) — check weft.today, weft.systems, weft.industries, etc via Cloudflare's registrar search (authoritative — not DNS)

Don't let perfect domain hunting block product progress.

8. Consequences — honest

8.1 Costs

  • Search friction. "Weft" is not a known product in April
    1. A prospect Googling for a "SaaS factory" will not find us by name until SEO catches up. Mitigation: every public surface pairs "Weft" with "Gyrum's SaaS factory" in the first sentence (the §5.1 rename pattern exists for this reason); "Gyrum" is the bridge while "Weft" gains its own search footprint.
  • Rename work. §5 enumerates the surfaces. Conservatively ~6 repos × ~3 surfaces each = ~18 follow-up PRs over the next ~two weeks. Each PR is prose-only, small, and review-light.
  • Two brands to maintain. A Gyrum landing page and a Weft landing page, each with their own copy, their own changelog, their own social cards. Real cost; we judge the clarity gain worth it.
  • "Weft" is an obscure word. Many readers will not know it means "horizontal weaving thread" on first encounter. The metaphor is explained in docs and in the tagline; we accept that a fraction of users never learn the metaphor and that is fine (they don't need to, any more than Next.js users need to understand the "next" reference).

8.2 Benefits

  • Internal clarity. No more "the platform" / "the SaaS factory" / "Gyrum" / "dark factory" naming wobble. Every ADR after this one uses "Weft" for the product and "Gyrum" for the company; every engineer onboarded after today sees a single consistent name.
  • Metaphor vocabulary. §2.1's loom-mapping unlocks shared vocabulary across the stack. Bug reports, feature requests, architectural sketches, and diagrams can all use pattern / shuttle / pass / fabric / selvedge with shared meaning.
  • Brand separation. The company can change its product strategy without rebranding; the product can grow a second version (a Weft 2, a Weft Cloud, a Weft Enterprise) without confusing the company identity.
  • Competitive positioning. "Weft" is distinctive in search, trademark, and domain. No known active tech-company collisions as of the 2026-04-23 audit.

8.3 Risks, and what we'd do about each

Risk Likelihood Mitigation
A competitor launches a product named "Weft" in the next 12 months low — April 2026 audit found none If it happens, evaluate their traction. A pre-revenue competitor does not force a rename; a funded competitor does. Worst case: rename is ~6 repos × ~3 surfaces of prose (the §5 list).
The metaphor doesn't land — readers find "weft" too obscure moderate Re-review at 90 days (§9). If engagement metrics on the landing page show the name is a bottleneck (high bounce, low "SaaS factory" conversion), consider pairing "Weft" permanently with "Gyrum's SaaS factory" in all external copy rather than renaming. Keep the short form for chrome where context is established.
Internal slip — engineers keep saying "the platform" high in the first month The §5 rename PRs are prose-only and fast; landing them over two weeks retrains usage. No enforcement beyond that; muscle memory fades.
A genuinely-available standalone weft.* appears at a normal price plausible Acquire it via Cloudflare Registrar, 301-redirect to weft.gyrum.ai initially, migrate canonical on the next brand-guide pass. No ADR change required.
Trademark filing reveals a prior registration moderate Run a USPTO TESS + EUIPO search before any future standalone-domain purchase. If a prior registration exists in software/SaaS class, re-open this ADR.

9. Review cadence

Re-review this ADR on 2026-07-23 (90 days from acceptance).

The re-review asks one question: is "Weft" a name that has landed? Concretely:

  • Is the product called Weft in internal Slack, in PR descriptions, in standups? (If we're still saying "the platform", the name hasn't landed.)
  • Is weft.gyrum.ai driving organic traffic? (If the landing page sees zero non-direct visitors, SEO hasn't caught.)
  • Has any customer, prospect, or external engineer used the name unprompted? (If not, the name is internal-only — which might be fine, but needs acknowledging.)
  • Has a competitor named Weft emerged? (Unlikely but possible.)

If the re-review concludes the name has clearly not landed, we accept the cost of a rename. The §5.3 "explicitly NOT renamed" list is the ceiling on that cost — repo names, module paths, and env vars stay regardless; only the prose surfaces would change. That ceiling is the reason this ADR is not reckless: the cost of being wrong is ~18 follow-up PRs of prose, not a migration.

If the re-review concludes the name has landed (even partially), the cadence continues: no further review unless a material event (competitor collision, trademark challenge, major product repositioning) forces one.

10. Related work — immediate follow-ups

Out of scope for this ADR, listed here so future-us can track:

  • PR-N+1: Stand up weft.gyrum.ai — DNS + TLS + a holding page that reads "Weft — the SaaS factory that weaves itself. Coming soon. A Gyrum product." with a subscribe form.
  • PR-N+2: Run USPTO TESS and EUIPO trademark searches for "Weft" in software/SaaS classes (IC 009, IC 042). File if clear.
  • PR-N+3..N+18: The §5.1 and §5.2 rename PRs, one repo at a time, prose-only, small.
  • PR-N+19: Brand guide — logo, wordmark, colour palette, typography. Builds on the ADR-062 design-system foundation; applies the §4.2 voice.
  • PR-N+20: weft.gyrum.ai landing page proper — replaces the holding page; uses the recommended §4.1 tagline; links to weft.gyrum.ai/docs and to gyrum.ai for the company-level surface.

References

  • ADR-065: Platform UI adopts persona-aware routes + a niceties framework
  • ADR-067: Playbooks as a unified primitive
  • ADR-068: Playbook runtime architecture
  • ADR-070: Playbook UI contract
  • ADR-066: Microvisualisations — sparklines + timeline strips (referenced indirectly via §2.1's "selvedge" → run report mapping)
  • ADR-062: Design system + component strategy (referenced for §4.2 brand voice continuity and §5.1 rename targets)
  • ADR-059: Project-first IA (referenced for §2.1 "warp threads" mapping)
  • Session context (2026-04-23): the naming conversation that triggered this ADR — the "dark factory" crowding audit, the jacquard.com competitor discovery, and the domain sweep that found the standalone weft.* space squatter-heavy (amended 2026-04-23 after Cloudflare-registrar confirmation).