conventions/programming_general/recursive_code_workspace.yaml
Natalie 59656b5b93 feat(conventions): apiVersion+semver versioning, run lint:yaml CLI, rename infra_manifest
Add document apiVersion (conventions/v1) + per-convention semver + updated date to
the schema and all seed conventions; manifest files carry their own apiVersion
(infra/v1). New ./run (symlink -> scripts/cli/run) with lint:yaml validating every
programming_*/<name>.yaml against the schema (name==filename, scope==dir). Rename
infra-manifest.yaml -> infra_manifest.yaml for name match. 4/4 valid.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 08:36:10 -04:00

32 lines
1.5 KiB
YAML

apiVersion: conventions/v1
version: 0.1.0
updated: "2026-06-29"
name: recursive_code_workspace
title: Recursive code workspace (~/Code @org tree)
scope: general
status: active
summary: ~/Code is a recursive tree of @org dirs, each holding many independent git repos; tools and agents resolve projects by walking it.
params:
- name: root
description: Workspace root to walk.
default: "~/Code"
appliesTo: ["~/Code/**"]
rules:
- id: orgs
level: must
text: >
Top-level @org dirs partition the workspace: @applications (apps/services you
operate), @projects (platforms incl. @cocottetech, @magic-civilization, @lilith),
@packages (shared libraries), @conventions (this repo), plus support buckets
@scripts / @docs / @forks / @external / @archives / @work.
- id: independent_repos
level: must
text: Each project under an @org is its own independent git repo. Never assume a single monorepo at the root.
rationale: Repos are cloned/forge-managed per-project; cross-repo coupling is HTTP/registry, not filesystem.
- id: per_project_infra
level: should
text: A deployable project owns its infra via a root .infra.yaml (see convention:infra-manifest). Shared infra (e.g. the managed PG cluster) is data-sourced, not owned per-project.
rationale: Catch-all shared infra repos (uvlava-style) are superseded by per-project ownership.
- id: support_buckets
level: may
text: Cross-cutting or transient items live in the support buckets, not inside project repos.