Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Repository Naming and Types

QEP-3: Repository Naming and Types

QEP3
TitleRepository Naming and Types
Authormmcky
StatusAccepted
Typestandard
Created2026-07-10
DiscussionQuantEcon/qeps#7

Summary

This QEP makes the QuantEcon organization’s repository namespace a decided standard and defines:

The team manual’s repository-conventions page remains the operational how-to and will follow this QEP.

Motivation

QuantEcon’s repository namespace has drifted: of roughly 245 non-archived repositories, only about 40% follow a documented naming convention. Placement questions are re-litigated project by project; teaching events — the organization’s largest family, at ~55 repositories — use at least eight naming styles (imf_2024, 2026-nyu-course, workshop.africa-july2023); load-bearing conventions such as the .{lang} suffix for translated lectures are written down nowhere; and the open lecture-rename proposals (meta#333, meta#334) have no policy to cite. A naming standard defined once for the whole organization makes placement decidable, renames routine, and the conventions that tooling already depends on citable.

Proposal

1. Naming grammar

  1. Repository names are lowercase and use only characters that need no shift key: dashes, not underscores; no capitals. (Names that are load-bearing elsewhere are exempt — see §3.)

  2. A dash prefix encodes the repository’s type: {type}-{name} (e.g. lecture-dp, status-translations, workspace-lectures). Types are drawn from the registry in §2.

  3. A dot suffix encodes a variant or companion of the same content: {repo}.{variant}. Established variants:

    SuffixMeaningExample
    .notebooksnotebook companion of a lecture serieslecture-dp.notebooks
    .companionpublic companion site of a book; the base names the work, which may span several volume repositoriesbook-networks.companion, book-dp.companion (for book-dp1, book-dp2)
    .{lang}translated edition (lowercase IETF tag)lecture-python-programming.zh-cn, lecture-python-programming.fa
    .{ecosystem}edition or package built for a named ecosystem; a published package keeps the ecosystem’s own suffix and casing (§3)QuantEcon.py, QuantEcon.jl, quantecon-theme.mystmd, myst-markdown.nvim

    The .{lang} suffix is machine-consumed: action-translation locates translated editions by this pattern, so any change to it must be coordinated with that tooling.

  4. Dots are reserved for variant suffixes; a type prefix always takes a dash. The dotted type forms that predate this QEP (project.{name}, audit.{yyyy}-{mm}.{topic}, benchmark.{topic}) are non-compliant and are renamed under §5, with any genuine variant moving to the dot: benchmark.translate-zh-cnbenchmark-translate.zh-cn.

  5. Name tokens pass the reversal test: choose tokens so the name reads as natural English when expanded — singular inside compounds (compliance-lecture-style → “lecture-style compliance”), plural for whole-domain tokens (status-translations). This settles singular/plural choices mechanically.

2. Type registry

Content — the organization’s published material, maintained indefinitely.

PrefixMeaningVisibilityLifecycle
lecture-{topic}official lecture series (+ .notebooks, .{lang} variants)publicliving
book-{name}textbook project (+ .companion site)privateliving
quantecon-book-{name}companion software package for a bookpublicliving

Teaching

PrefixMeaningVisibilityLifecycle
workshop-{yyyy}-{mm}-{name}workshop, summer school, or tutorialpublic (typically)frozen and archived after the event
course-{yyyy}-{mm}-{name}semester or short coursepublic (typically)frozen and archived after the course
conference-{yyyy}-{mm}-{name}conference or meeting materialspublic (typically)frozen and archived after the event

The date is the event’s start month (workshop-2022-07-africa, course-2026-01-nyu), the pattern audit-* uses: a family sorts chronologically, and an archival sweep is a prefix match.

Operations — the repositories through which the organization plans and runs its own work. Six types, each named for what the repository does: project-* decides, workspace-* operates, status-* measures, reporter-* narrates, task-* executes, compliance-* assesses — never for how it runs or what starts it (task-backups, not workflow-backups or cron-backups). action-* joins this table as the shared automation building block; its name follows §3.

PrefixMeaningVisibilityLifecycle
project-{name}planning and decision home for an initiative or program: roadmap, decision register, research, reports; no production code (may carry a minimal command bench — see boundary rules)privategoal-scoped — lives and dies with its goal (initiatives end; programs run long)
workspace-{collection}cross-repo operating bench for a repo family: manifest + runner, humans executing across the set; never vendors contentprivatefleet-scoped — persists as long as the family, and outlives every project that passes through it
status-{domain}machine-updated dashboard of facts about a domain: collector + versioned data + Pages sitepublic (typically)domain-scoped — outlives any project
reporter-{name}read-only automation that observes org or web state and writes reports, digests or dashboard-adjacent narrative; needs read scopes (plus issue/PR comment) onlyeitherongoing
task-{name}automation with write access to org resources, executing recurring org chores (backups, archival sweeps); the machinery that does a chore, not a task tracker — work tracking stays in GitHub Projectseitherongoing
compliance-{domain}standing record of a domain’s conformance with a named standard: rubric + runbook, findings and scores re-measured in place per pass; versioned history seeded from each absorbed auditpublic (typically)standard-scoped — durable while the standard is enforced
action-{name}reusable GitHub Action consumed by other repos via uses:publicongoing

Boundary rules:

Supporting

PrefixMeaningVisibilityLifecycle
test-{name}test double or CI target for tooling, pilot-scoped or standing (test-cli is a standing target for cli)eitherpilot-scoped doubles are archived when the pilot ends; a standing target lives as long as the tooling it tests
template-{name}template repositorypublicliving
tool-{name}internal, unpublished tooling — scripts and benches that are not installable and not meant to be; a tool published to an ecosystem takes its package name instead (§3)eitherliving
contractor-{name}payment artifacts for an individual RA/contractorprivateper engagement
audit-{yyyy}-{mm}-{topic}dated point-in-time auditpublic (typically)frozen once published; archived once absorbed into a compliance-* ledger (see boundary rules)
benchmark-{topic}benchmark dataset / evaluation harnesspublicliving

3. Exemptions — names that are load-bearing elsewhere

4. Reserved names

Singletons with an org-wide role, outside the prefix system: meta, qeps, dashboard, manual, actions, lectures, skills, cli, website, grant-admin, grant-fundraising, admin, vault, governance, projects, .github. New singletons should be rare and need a stronger reason than a new prefix would.

5. Migration and archival policy

Alternatives considered

Adoption

Acceptance fixes the grammar, registry, exemptions, and migration policy above as the QuantEcon standard. On acceptance:

The sequenced execution checklist belongs in a tracking issue, not in this document, so completing, reordering, or dropping a step never requires amending the standard.