No description
Find a file
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
programming_gd feat(conventions): seed central workspace+coding conventions repo 2026-06-29 08:19:39 -04:00
programming_general feat(conventions): apiVersion+semver versioning, run lint:yaml CLI, rename infra_manifest 2026-06-29 08:36:10 -04:00
programming_py feat(conventions): seed central workspace+coding conventions repo 2026-06-29 08:19:39 -04:00
programming_rust feat(conventions): seed central workspace+coding conventions repo 2026-06-29 08:19:39 -04:00
programming_swift feat(conventions): seed central workspace+coding conventions repo 2026-06-29 08:19:39 -04:00
programming_ts feat(conventions): apiVersion+semver versioning, run lint:yaml CLI, rename infra_manifest 2026-06-29 08:36:10 -04:00
scripts/cli feat(conventions): apiVersion+semver versioning, run lint:yaml CLI, rename infra_manifest 2026-06-29 08:36:10 -04:00
convention.yaml.schema feat(conventions): apiVersion+semver versioning, run lint:yaml CLI, rename infra_manifest 2026-06-29 08:36:10 -04:00
README.md feat(conventions): apiVersion+semver versioning, run lint:yaml CLI, rename infra_manifest 2026-06-29 08:36:10 -04:00
run feat(conventions): apiVersion+semver versioning, run lint:yaml CLI, rename infra_manifest 2026-06-29 08:36:10 -04:00

@conventions

Single source of truth for workspace + coding conventions, shared by every project under ~/Code (and known to global agentic config, so any agent in any repo can resolve them).

Layout

@conventions/
├── convention.yaml.schema          # meta-schema every convention validates against
├── programming_general/<name>.yaml # language-agnostic conventions
├── programming_ts/<name>.yaml      # TypeScript
├── programming_swift/<name>.yaml   # Swift
├── programming_py/<name>.yaml      # Python
├── programming_rust/<name>.yaml    # Rust
└── programming_gd/<name>.yaml      # GDScript

A convention

A <name>.yaml is metadata + rules, and may:

  • accept params — referenced as convention:<name>(<args>), e.g. convention:recursive_code_workspace(~/Code);
  • define a manifest via providesFile — a file (e.g. .infra.yaml) every conforming project must contain, with a nested JSON Schema for its contents.

Validate a convention file against convention.yaml.schema; validate a project's manifest against the convention's providesFile.schema.

How agents use it

Global config points agents here. An agent resolves convention:<name> by reading programming_<scope>/<name>.yaml, applies its rules, and (for providesFile conventions) reads/writes the project's manifest to that schema. Conventions are data, not prose — tooling (a future infra-apply, linters, scaffolders) can consume them directly.

Seed conventions

  • programming_general/recursive_code_workspace.yaml — the ~/Code @org layout.
  • programming_general/infra_manifest.yaml — per-project .infra.yaml.

Lint

./run lint:yaml validates every convention against convention.yaml.schema (name==filename, scope==dir, semver). run is a symlink to scripts/cli/run.