RoJLD/repo-template

GitHub: RoJLD/repo-template

Stars: 0 | Forks: 0

# Repo template — Robin's opinionated project skeleton A battle-tested project structure extracted from real Robin Denis projects (`Tools/hmm_studio`, `Experiment.Crypto.2026S1.RobinDenis`, `gitnexus`, `plane`). Not "the Gemini-best-practices checklist" — it's what actually worked across multiple solo / collaborative projects from 2024 through 2026. ## Philosophy **Compose, don't copy.** A prototype shouldn't carry CODEOWNERS + SECURITY.md ceremony ; a published OSS library needs them. A web service needs Docker + start scripts ; a pure library doesn't. The template ships two orthogonal dials : - **Tier (1 / 2 / 3)** — linear discipline maturity (how much process / governance / paperwork). - **Addons** — orthogonal capability packs you mix and match (`ml`, `web`, `academic`, `devcontainer`, `supply-chain`, `infra`). A real project picks a tier **and** zero-or-more addons. To make this ergonomic, the most common combinations are pre-baked as named **recipes**. project = tier (1|2|3) + addons[*] ## Tiers — discipline dial | Tier | When to use | What it adds | |---|---|---| | **1 — Prototype** | Throwaway experiment, < 1 week lifespan | README, .gitignore, src/, tests/, LICENSE — no CHANGELOG, ADRs, specs, validation, notes | | **2 — Tool** (default) | Solo project that might grow, private repo | + CHANGELOG, ADRs, specs, roadmap, `validation/`, `notes/`, CONTRIBUTING | | **3 — OSS** | Public-facing, multiple contributors | + CODE_OF_CONDUCT, SECURITY, CODEOWNERS, CITATION.cff | Tiers are **monotonic** : tier 3 ⊃ tier 2 ⊃ tier 1. ## Addons — capability dial | Addon | When to add | What it adds | |---|---|---| | **`ml`** | Notebooks, gallery, reproducible experiments | `notebooks/`, `examples/`, `binder/` (mybinder.org config), Jupyter deps in `pyproject.toml [dev]` | | **`web`** | Service with UI / API / DB | `Dockerfile`, `docker-compose.yml`, `start.ps1` / `start.bat`, `stop.ps1` / `stop.bat`, `.dockerignore` | | **`academic`** | Doc site + paper citations | `mkdocs.yml` (material theme), `docs/papers/`, `CITATION.cff`, GH Action to deploy to gh-pages | | **`devcontainer`** | Zero-friction collaborator onboarding (Codespaces / VS Code Remote) | `.devcontainer/devcontainer.json` + Dockerfile + postCreate script | | **`supply-chain`** | OSS hygiene : SBOM + dep updates + scorecard | SBOM workflow (CycloneDX), Dependabot config, OpenSSF Scorecard workflow | | **`infra`** | Project ships Terraform / k8s / CloudFormation | Checkov IaC-scan workflow, `infra/` layout, `.gitignore.infra` | | **`code-intel`** | Project pair-programmed with Claude / Cursor, wants a code graph | GitNexus MCP wiring : ADR, `AGENTS.md` + `CLAUDE.md` blocks, `make reindex` target, `.gitnexus/` ignored, domain + policy templates | Addons are **independent** — adding `web` doesn't force `devcontainer`, adding `ml` doesn't force `academic`. They merge non-destructively onto the tier skeleton. ## Recipes — pre-baked combinations The 8 most common project profiles are pre-named in `recipes/*.json` so you don't have to remember the combo : | Recipe | Tier | Addons | Example | |---|---|---|---| | `prototype` | 1 | — | Throwaway experiment | | `private-tool` | 2 | — | Default solo tool | | `ai-pair-programming` | 2 | `code-intel`, `devcontainer` | Solo project optimised for Claude pair-programming | | `ml-research` | 2 | `ml`, `academic`, `code-intel` | hmm_studio core, crypto experiments | | `web-service` | 2 | `web`, `devcontainer` | gitnexus, hmm_studio web layer | | `oss-library` | 3 | `supply-chain` | plane-like public libraries | | `academic-library` | 3 | `academic`, `supply-chain` | Citable Python package | | `full-stack-research` | 3 | `ml`, `academic`, `web`, `devcontainer`, `supply-chain`, `code-intel` | hmm_studio (magnum opus) | | `cloud-deployment` | 2 | `web`, `devcontainer`, `infra`, `supply-chain` | SaaS shipped with Terraform | See [recipes/README.md](recipes/README.md) for the full table. ## Decision tree Is this a one-shot script / experiment ? ├── YES → recipe: prototype └── NO ↓ Will external people see this code ? ├── NO ↓ │ ├── notebooks / models / experiments → ml-research │ ├── web service / UI / API → web-service │ ├── cloud-hosted with IaC → cloud-deployment │ └── everything else → private-tool │ └── YES ↓ ├── library on PyPI → oss-library ├── citable academic library → academic-library └── full research project (notebooks + UI) → full-stack-research When in doubt : start with `private-tool` and add addons as needs emerge. ## How to use # Discover what's available .\bootstrap.ps1 -List # One-shot with a recipe (the easy path) .\bootstrap.ps1 ` -Name "my-engine" -Title "My Engine" ` -Description "HMM toolkit." ` -Recipe "ml-research" # Or compose manually .\bootstrap.ps1 ` -Name "my-lib" -Title "My Lib" ` -Description "Public lib." ` -Tier 3 -Addons "supply-chain,academic" # Audit an existing project against what it claims to be .\validate.ps1 -Path "..\my-engine" # (auto-loads .repo-template-answers.json — no need to re-state the recipe) # Add a capability to an existing project later .\add-addon.ps1 -Path "..\my-tool" -Addons "code-intel" See [BOOTSTRAP.md](BOOTSTRAP.md) for the manual walkthrough and the placeholder cheat sheet. ## Three scripts, one workflow | Script | Role | Inspired by | |---|---|---| | `bootstrap.ps1` | Create a new project from a recipe or tier+addons | cookiecutter / copier | | `validate.ps1` | Audit an existing project ; numbered checks (RT001 / ML002 / ...) | scientific-python's sp-repo-review | | `add-addon.ps1` | Add capability packs to an already-bootstrapped project | Nx generators | Bootstrap writes `.repo-template-answers.json` to every project (copier convention). `validate.ps1` reads it to know what to check ; `add-addon.ps1` reads + updates it. ## What's in the box repo-template/ ├── README.md # This file — philosophy + tiers + addons + recipes ├── BOOTSTRAP.md # Concrete "create new project" guide ├── PATTERNS.md # Field guide — when to apply each pattern ├── bootstrap.ps1 # Create a new project ├── validate.ps1 # Audit an existing project (numbered checks) ├── add-addon.ps1 # Add a capability pack to an existing project ├── template/ # Tier-1+2 base skeleton (incl. AGENTS.md / CLAUDE.md / GEMINI.md / CODEX.md) ├── tier-3-additions/ # Layered on top when -Tier 3 ├── addons/ │ ├── ml/ # Notebooks + Binder gallery │ ├── web/ # Docker compose + start/stop scripts │ ├── academic/ # mkdocs + papers + GH Pages deploy │ ├── devcontainer/ # VS Code / Codespaces dev environment │ ├── supply-chain/ # SBOM + Dependabot + OpenSSF Scorecard │ ├── infra/ # Checkov IaC scanning + infra/ layout │ └── code-intel/ # GitNexus MCP wiring (ADR + AGENTS/CLAUDE blocks + reindex) ├── recipes/ # Pre-baked tier+addon JSON profiles └── .github/workflows/ # CI : matrix bootstrap test for every recipe ## Lineage — what fed this template | Source project | Patterns contributed | |---|---| | `Tools/hmm_studio` | ADR with revisit-if, dated specs (`YYYY-MM-DD-phase-X-name`), roadmap as living strategic doc, `validation/` separate from `tests/`, CHANGELOG Keep-a-Changelog, CITATION.cff, ml + academic addons | | `Experiment.Crypto.2026S1.RobinDenis` | `notes/` gitignored cahier de laboratoire, `experiments/`, `configs/`, Makefile one-liners, ml addon | | `gitnexus` | INVENTORY.md (codebase overview for AI agents), ROADMAP.md at root, web addon (Docker compose + start scripts) | | `plane` | Tier-3 OSS additions : CODEOWNERS, CODE_OF_CONDUCT, SECURITY, CONTRIBUTING | | **All four** | `AGENTS.md` + `CLAUDE.md` AI agent context | ## Why this beats a flat checklist The original Gemini "best practices" list dumped everything into one pile : SBOM, IaC scanning, DevContainers, CODE_OF_CONDUCT, ADRs, specs, CITATION, validation, notes... Done at the start, that's 20 files of ceremony before line 1 of real code — and most of them don't apply to *your* project. The composable model says : tiers handle process maturity (1/2/3), addons handle domain (web / ml / academic / IaC). Pick what fits.
标签:Libemu