| name | define-scope |
| description | Define a new **scope** — a stable reference frame (service, domain, surface, cross-cutting concern) that the vault cares about for years rather than the duration of a narrative arc. Use this when the user says things like "we need a scope for X", "add a scope", "register the billing service", "document this as a domain we care about". Scopes are flat (no hierarchy), they don't have arcs' narrative lifecycle, and they retire rather than close. Don't create a scope lightly — scope proliferation is a smell. If it's a short-lived effort, use `open-arc` instead.
|
Define scope
You are defining a scope in the knowledge-iop vault. Scopes are
the vault's stable reference frames — the named areas the vault
cares about for years. A service (billing), a domain
(observability), a surface (public-api), a cross-cutting concern
(reliability).
Before defining — check you actually want a scope
- Invoke
vault-search with type: scope and keywords from the
proposed name. Check for existing scopes that overlap.
- Check the four gotchas below; if any applies, redirect:
| If the thing you're about to define is... | Do this instead |
|---|
| A short-lived effort (weeks–quarters) | open-arc |
| A sub-area of an existing scope | Extend the scope's body, don't create a child |
| A dependency you don't control | Add to upstream_deps: on an existing scope |
| A specific topic being discussed now | discuss and see what survives |
Scopes should accumulate slowly. If the vault gains a new scope
every week, something is miscategorized.
Frontmatter shape
---
id: <short-slug>
type: scope
status: active
established: <YYYY-MM-DD>
retired: null
owners: [<person>, ...]
repos: [<repo-ref>, ...]
services: [<service-name>, ...]
upstream_deps: [<dep>, ...]
related_scopes: [<scope-id>, ...]
tags: [<tag>, ...]
author: <person>
created: <YYYY-MM-DD>
---
id: is a plain slug, not dated — scopes don't carry creation dates
in their id because they're meant to outlast any given moment.
Choose carefully; renaming is expensive.
repos: is the grounding hook — the scope exists in part because
real code lives in real repos. If you can't name repos, ask whether
this is truly a scope or just a conversation topic.
Filename
Write to scopes/<id>.md.
Body — the living description
A scope's body is a living description that gets amended (not
superseded) as the scope evolves. Cover:
- What this scope is. One paragraph that a newcomer could use
to decide whether a question or artifact belongs here.
- What it contains. Systems, services, repos, docs — the
concrete territory.
- What it doesn't. Adjacent things that might confuse. Name
them and link to their scopes.
- Interfaces. How this scope relates to others — upstream
dependencies, downstream consumers, handoffs.
- Ownership and health. Who owns what. Where to find runbooks
or oncall info (or note their absence).
- Norms. Anything specific about how work happens in this
scope that a visitor should know (review norms, deploy cadence,
SLA expectations).
Scopes are flat. auth is not a sub-scope of security. Use
related_scopes: to note the adjacency, but don't encode a tree.
Drafting workflow
- Search; confirm no existing scope covers this.
- Ask the user to name owners and repos. Push back on empty owner
lists — an unowned scope is a smell.
- Propose frontmatter + body as a diff.
- Write on approval.
- Commit:
git add scopes/<id>.md && git commit -m "Scope: <id>".
Amending a scope
Scope bodies are living. When the scope grows, shrinks, or shifts:
- Edit the file directly.
- Commit with a clear message:
git commit -m "Scope <id>: <what changed>".
Do not supersede a scope unless its identity genuinely changed
(e.g. a rename from one slug to another).
Retiring a scope
When a scope is no longer relevant:
- Update frontmatter:
status: retired, retired: <today>.
- Add a closing paragraph at the bottom of the body: when, why,
what took its place (if anything).
- Commit.
Retired scopes stay in the vault. Grep still finds them. History
is honest.
Do not
- Do not nest scopes. The flat list is the point.
- Do not create a scope you don't plan to maintain. Unowned
scopes rot fastest.
- Do not supersede a scope to rename it casually. Think about
whether the old id is load-bearing for references elsewhere
first.