diff --git a/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx b/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx index ca955ca19..601349a67 100644 --- a/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx +++ b/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx @@ -122,6 +122,11 @@ function SelfHostingConfiguration() { description: "Private self-host only — illustrative fleet global default and per-repo overlay (deep-merge). Never commit real policy into these example paths.", }, + { + title: "shared.gittensory.yml", + description: + "Private self-host only — lowest-priority cross-repo house policy for an operator running many repos (#1959). Write a default once instead of copy-pasting it into every repo's file.", + }, ]} /> {" "} — catalog + fleet usage notes +
  • + + config/examples/README.md + {" "} + — the full private-config layout, precedence chain, and deep-merge semantics, including + the shared base layer +
  • Several gate-only fields are documented only in the full template comments — see below for diff --git a/config/examples/TEMPLATES.md b/config/examples/TEMPLATES.md index 292e08dca..fa7b8f107 100644 --- a/config/examples/TEMPLATES.md +++ b/config/examples/TEMPLATES.md @@ -12,6 +12,7 @@ mount (`GITTENSORY_REPO_CONFIG_DIR`). | [`gittensory.full.yml`](./gittensory.full.yml) | Exhaustive commented reference — every `gate:`, `settings:`, `review:`, and `features:` field | | [`global.gittensory.yml`](./global.gittensory.yml) | **Private only** — illustrative fleet-wide default for a self-host mount | | [`repo-override.gittensory.yml`](./repo-override.gittensory.yml) | **Private only** — per-repo overlay deep-merged over `global.gittensory.yml` | +| [`shared.gittensory.yml`](./shared.gittensory.yml) | **Private only** — lowest-priority cross-repo house policy for multi-repo operators (#1959) | Canonical copies of the minimal and full templates also live at the repo root as [`.gittensory.minimal.yml`](../../.gittensory.minimal.yml) and @@ -25,6 +26,7 @@ in sync with those files. | **Public** | `.gittensory.yml` or `.github/gittensory.yml` in git | Contributors | `wantedPaths`, test expectations, public review presentation | | **Private global** | `${GITTENSORY_REPO_CONFIG_DIR}/.gittensory.yml` | Operator only | Shared autonomy baseline, contributor caps, maintainer allowlists | | **Private per-repo** | `${GITTENSORY_REPO_CONFIG_DIR}/owner__repo/.gittensory.yml` | Operator only | Repo-specific CI context names, AI mode, overrides | +| **Private shared base** | `${GITTENSORY_REPO_CONFIG_DIR}/_shared/.gittensory.yml` | Operator only | Lowest-priority cross-repo house policy for an operator running many repos (#1959) — see [README's "Shared base layer" section](./README.md#shared-base-layer-multi-repo-operators-1959) | When **either** a private global or private per-repo file exists, the loader **never fetches** the public repo file for that review — mount private policy deliberately. See [README.md](./README.md) diff --git a/config/examples/gittensory.full.yml b/config/examples/gittensory.full.yml index f89e4d407..db42c3d60 100644 --- a/config/examples/gittensory.full.yml +++ b/config/examples/gittensory.full.yml @@ -16,6 +16,7 @@ # gittensory.full.yml — this file — every gate:/settings:/review:/features: field documented # global.gittensory.yml — private fleet global default (illustrative placeholders only) # repo-override.gittensory.yml — private per-repo overlay example +# shared.gittensory.yml — private cross-repo house policy, lowest-priority layer (#1959) # # ============================================================================ # .gittensory.yml — per-repo configuration for gittensory CI & gittensory review diff --git a/config/examples/gittensory.minimal.yml b/config/examples/gittensory.minimal.yml index ee3f55705..fb9dd556b 100644 --- a/config/examples/gittensory.minimal.yml +++ b/config/examples/gittensory.minimal.yml @@ -4,9 +4,11 @@ # # WHERE TO COPY (pick one): # PUBLIC REPO — repo root as `.gittensory.yml` (or `.github/gittensory.yml`). Contributors can read it. -# PRIVATE SELF-HOST — `${GITTENSORY_REPO_CONFIG_DIR}/.gittensory.yml` (global default) or -# `${GITTENSORY_REPO_CONFIG_DIR}/owner__repo/.gittensory.yml` (per-repo override). Never commit real -# policy here to a public repo — use the private mount for thresholds, allowlists, and autonomy. +# PRIVATE SELF-HOST — `${GITTENSORY_REPO_CONFIG_DIR}/.gittensory.yml` (global default), +# `${GITTENSORY_REPO_CONFIG_DIR}/owner__repo/.gittensory.yml` (per-repo override), or +# `${GITTENSORY_REPO_CONFIG_DIR}/_shared/.gittensory.yml` (lowest-priority cross-repo base, #1959). +# Never commit real policy here to a public repo — use the private mount for thresholds, +# allowlists, and autonomy. # # Canonical copy also lives at the repo root as `.gittensory.minimal.yml` (kept in sync by CI). # For every supported field, defaults, and allowed values see `gittensory.full.yml` or