---
name: convention-naming
type: convention
description: >-
  The naming taxonomy for everything above the canon-artefact line — verticals,
  ventures, operators, Linear teams, projects, initiatives, documents and
  decision-log slugs. Each vertical, venture, A1 sub-account and team holds one
  registered lowercase stem, and every other name is composed from it: the stem
  registry, the form each layer takes, the case rule, the four-step test for
  naming something new, and the reconciliation list of live names that miss.
  Read before creating a venture, operator, team, project, initiative, document
  or log, and before deciding what an existing thing should be called. Companion
  to core-operating-model, which fixes the canon-artefact prefixes, and to
  convention-artefact-format, which rules how an artefact file is written and
  renamed; convention-linear maps this onto Linear titles. Absorbs the Slug
  naming section formerly carried by convention-decision-log.
license: CC BY-NC-SA 4.0
---

# Naming

`core-operating-model` fixes the prefixes for **canon artefacts** (`skill-`, `task-`, `routine-`, `agent-`, `operator-`, `convention-`, `standard-`, `core-`, `workflow-`, `playbook-`) and `convention-artefact-format` fixes how the file is written. Above that line — verticals, ventures, operators, Linear teams, projects, initiatives, documents, decision logs — there was no rule at all, so every name was decided at the moment the thing was created, by whoever created it.

The cost is not aesthetic. A name with no rule has to be **decided** every time something new appears, and a name that means two things produces Owner escalations: "the Apps team" and "the Apps portfolio" share a word and name different sets, which is what two separate strategy rulings existed to disentangle (APP-995, APP-882, both 2026-09-11). This convention turns naming from a decision into a lookup.

## The one idea — a registered stem

Each **vertical, venture, A1 sub-account and Linear team holds exactly one registered lowercase stem**, and every other name it owns is composed from that stem. The stem is registered here once, at the moment the thing is stood up, and never re-derived.

A stem is short, lowercase, and formed from the thing's own name with dots and spaces stripped: `bot.Trader` -> `bottrader`, `os.Dashboard` -> `osdashboard`, `os.Claude` -> `osclaude`. The composed name is the stem, a separator, then what the name is *for*.

Two separators, and they mean different stores:

* **A dot** composes a **Linear** name — a project, an initiative, a document, a log: `mbn.website`, `osclaude.log-decisions`, `bara.owner-session-agenda`.
* **A hyphen** composes a **skills-store** artefact: `operator-bara`, `convention-naming`.

This is `convention-linear`'s existing rule — *the dot is the tell: a dotted name is a Linear document, a hyphenated name is a skills-store artefact* (APP-534) — stated here as the general form rather than as a Linear-only observation. The one deliberate exception is the **hyphenated `a1-` stem** for A1 sub-account logs (`a1-firmup.log-decisions`), which predates this convention and is kept because it is load-bearing in live log titles.

**Registering the stem is part of standing the thing up, not a later tidy.** A live venture, team or log whose stem is missing from the registry below is invisible to anyone reading this convention to find out what something should be called — which is how the estate acquired four project dialects in the first place. (Worked cases, carried from the absorbed *Slug naming* section: `bottrader.log-decisions` stood up 2026-08-09 and listed the following day, APP-749; `osdashboard.log-decisions` stood up 2026-08-12 and listed the same day, APP-834.)

## The layers, and the form each takes

Top-down. Each layer names what it is, and what distinguishes it from the layer above.

| Layer | What it is | Form | Example |
| --- | --- | --- | --- |
| **Vertical** | A standing line of business with its own operator, mandate and KPI tree (`core-operating-model` Layer 3) | Proper name as written; stem registered below | BARA - bot.Trader |
| **Venture / bet** | One product, store or property inside a vertical or portfolio | `<family>.<Name>` where a family prefix exists, else the proper name | `app.Luna` - `keroma.store` |
| **Operator** | The Layer 3 profile that holds one or more mandates | `operator-<stem>` | `operator-bara` - `operator-bottrader` |
| **Linear team** | A **container** for issue keys and licensing, not a portfolio | Proper name; stem is the **team key lowercased** | Apps (`app`) - A1 (`a1`) - MBN (`mbn`) |
| **Project** | A body of work inside a team | `<stem>.<Name>`, optionally ` · <qualifier>` | `mbn.growth` - `a1.Firmup · Firmware updates` |
| **Initiative** | The outcome a vertical is driving | Proper sentence-case name, no stem | "os.Claude — harden & run the Claude delivery loop" |
| **Linear document** | A document filed to a project or initiative | `<stem>.<type>[.<qualifier>]` — stem first | `osclaude.log-decisions.2026-W37` - `bara.owner-session-agenda` |
| **Decision log** | The vertical's standing log | `<stem>.log-decisions`, weekly children `.YYYY-Www` | `mbn.log-decisions.2026-W40` |
| **Canon artefact** | A SKILL.md in the skills store | `<type-prefix>-<slug>`, hyphenated | `convention-naming` |

**A Linear team is a container, never a portfolio.** The team is where issue keys and licences live; the portfolio is the named set of bets an operator holds. They are allowed to differ, and they do — `bot.Trader`, `bot.Trader-B` and `keroma.store` all sit in the **Apps team** and none of them is an **Apps portfolio** bet (Owner rulings, 2026-09-11, APP-995 and APP-882). Any figure — capacity, allocation, membership — scoped to a team rather than to the named bets is wrong by the size of the difference. Write which one is meant; never let the shared word carry it.

## Case is ruled by meaning

* **A proper name keeps its own casing.** `os.Claude`, `bot.Trader`, `app.Luna`, `cOS.Build`, `a1.OS` — the segment after the stem is the thing's name, and a name is not lowercased to satisfy a pattern.
* **A common noun is lowercase.** `mbn.brand`, `mbn.website`, `mbn.growth`, `keroma.store`, `osclaude.vitals` — the segment after the stem describes a kind of work, not a name.
* **A stem is always lowercase**, whatever the casing of the thing it derives from.

This is why most live mismatches are **correct as they stand** rather than rename work: `app.fitness` (a common-noun bet) and `app.Luna` (a proper name) differ in case because they differ in kind, not because one is wrong.

## The stem registry

Observed live 2026-09-29 by `list_projects` (51 projects, both pages) and `list_teams` (5 teams). Add a stem here at the moment its venture, vertical or team is stood up.

**Verticals, ventures and families**

| Stem | Names | Live projects |
| --- | --- | --- |
| `osclaude` | os.Claude — the fleet's own operating system | `os.Claude`, `osclaude.vitals` |
| `osdashboard` | os.Dashboard | `os.Dashboard` |
| `cos` | careerOS | `cOS.Build`, `cOS.App`, `cOS.Content`, `cOS.Reporting`, `cOS.System` |
| `app` | the Apps accelerator's app bets | `app.fitness`, `app.fitness · Launch`, `app.Luna`, `app.AgentArt`, `app.Foundry`, `app.DS-Quality`, `app.GTD` |
| `gtd` | GTD | `gtd.Home`, `gtd.Health`, `gtd.Family`, `gtd.MBN`, `gtd.CareerOS`, `gtd.Configure`, `gtd.Build`, `gtd.Capture` |
| `bottrader` | bot.Trader — the trading vertical | `bot.Trader`, `bot.Trader-B` |
| `mbn` | the BARA relaunch vertical | `mbn.brand`, `mbn.website`, `mbn.growth` |
| `keroma` | keroma — second mandate under `operator-bara` | `keroma.store` |
| `a1` | the A1 practice (projects `a1.<SubAccount>`; **logs** hyphenated `a1-<sub-account>`) | `a1.OS`, `a1.Agents`, `a1.Brand`, `a1.Advisory`, `a1.Studio`, `a1.Muse`, `a1.Firmup`, `a1.Heroes`, `a1.MeirionPritchard`, `a1.assoc-one` |
| `build` | the cross-cutting build log | — |

**keroma takes its own log.** Two ventures under one operator do not share a log: `keroma.log-decisions` is separate from `mbn.log-decisions`, following the one-log-per-venture reading the `bot.Trader` / `bot.Trader-B` precedent already set (how/where ruling under APP-1099, recorded on `osclaude.log-decisions.2026-W37`, 2026-09-11; settles APP-1380's open question 2).

**Teams** — the stem is the team key lowercased: Apps -> `app`, A1 -> `a1`, MBN -> `mbn`, Pipeline -> `pipe`, Mr Pritchard -> `mrp`.

## Naming something new — four steps

1. **Which layer is it?** A vertical, a venture, a team, a project, an initiative, a document, a log, or a canon artefact. The table above distinguishes them. Most naming arguments are a layer question wearing a naming question's clothes.
2. **Whose stem does it sit under?** Look it up in the registry. If the thing *is* a new vertical, venture, sub-account or team, derive its stem — lowercase, dots and spaces stripped — and **register it here in the same action**.
3. **Compose the name.** Stem, then the separator its store takes (dot for Linear, hyphen for the skills store), then what it is for. Case by meaning: proper names keep their casing, common nouns are lowercase.
4. **Check the name means one thing.** If the composed name already names something else at another layer — the Apps team against the Apps portfolio — the name is not yet settled: qualify it, or take it to the Owner. Do not ship a name that resolves to two sets.

## Reconciliation — live names that miss the form

Nothing here is renamed by this convention. A rename is a canon operation with its own sequence (`convention-artefact-format`, *Renaming or deleting an artefact*), and a rename of a **live Linear name** is the Owner's, never a drain's.

| Live name | What it misses | Disposition |
| --- | --- | --- |
| `Decision Log` (Mr Pritchard / *Operations*) | no stem at all | **Owner's call** — would be `mrp.log-decisions` |
| `log.decisions` (a1.OS) | stem and type inverted | **Owner's call** — would be `a1-os.log-decisions` |
| `log.meirion-decisions` (a1.MeirionPritchard) | stem and type inverted | **Owner's call** — would be `a1-meirionpritchard.log-decisions` |
| `Bang Bang City · Site & collective` (A1) | no stem | **Owner's call** — would be `a1.BangBangCity · Site & collective` |
| `aledpritchard.com · Site & presence` (A1) | domain used as a stem | **Owner's call** — would be `a1.Aledpritchard · Site & presence` |
| `LinkedIn`, `Substack`, `Articles`, `Operations` (Mr Pritchard) | no stem | **Grandfather** — single-team, unambiguous in place |
| `Pitches`, `Network`, `Roles`, `Advisory` (Pipeline) | no stem | **Grandfather** — single-team, unambiguous in place |
| `app.GTD` against the `gtd.` family | one venture named in two dialects | **Owner's call** — collapse to one |
| `apps.cycle-goal.YYYY-Www` against the Apps team stem `app` | the live cycle-goal documents use `apps.`, the team key lowercased is `app` | **Owner's call** — grandfather `apps.` or rename the live documents; see below |
| `operator-bara` holding both BARA and keroma | operator named after one of its two mandates | **Owner's call** — recommendation on record: hold until keroma has a mandate, then `operator-retail` |
| `mbn` as the stem for the BARA vertical | stem is the legacy name, not the brand | **Owner's call** — recommendation on record: rename at relaunch |

**The `apps.` / `app.` collision is open and is flagged rather than resolved.** The 2026-09-11 ruling set a team-scoped document's stem as the team key lowercased (`app.`), and `convention-linear` records three live cycle-goal documents verified as `apps.cycle-goal.2026-W38`. Both cannot be right. Until the Owner rules, **read the live document title rather than composing one**, and do not rename.

## Quick checklist

* [ ] Do I know which **layer** this thing sits at?
* [ ] Is its **stem registered** above — and if the thing is new, did I register it in the same action?
* [ ] Dot for a Linear name, hyphen for a skills-store artefact?
* [ ] Case by meaning — proper name keeps its casing, common noun lowercase, stem always lowercase?
* [ ] Does the composed name resolve to exactly **one** set?
* [ ] If the name I want is on the reconciliation list, have I left it alone rather than renaming it?
