diff --git a/.gittensory.yml.example b/.gittensory.yml.example
index f4257cb726..1ed0adcf27 100644
--- a/.gittensory.yml.example
+++ b/.gittensory.yml.example
@@ -48,18 +48,21 @@
# ----------------------------------------------------------------------------
# 1. FOCUS / GUARDRAILS (focus manifest)
# ----------------------------------------------------------------------------
-# Declares the repo's work areas and off-limits paths. These feed deterministic
-# findings (e.g. manifest_blocked_path, manifest_missing_tests) and — when
-# `gate.manifestPolicy: block` is set below — can become enforceable blockers.
+# Declares the repo's work areas and off-limits paths. wantedPaths/blockedPaths feed advisory-only
+# guidance findings; testExpectations/linkedIssuePolicy feed manifest_missing_tests and
+# manifest_linked_issue_required, which — when `gate.manifestPolicy: block` is set below — can become
+# enforceable blockers. Hard path HOLDS are a separate mechanism: settings.hardGuardrailGlobs, below.
# Work areas the maintainer wants. PRs touching these are preferred/encouraged.
# Glob list. Default: [] (no preference).
wantedPaths:
- "src/**"
-# Paths off-limits to contributors. Touching one yields a manifest_blocked_path
-# finding (enforceable when `gate.manifestPolicy: block`).
-# Glob list. Default: [] (nothing blocked).
+# Paths off-limits to contributors — CONTRIBUTOR-FACING GUIDANCE ONLY. Touching one surfaces in
+# onboarding guidance and gittensory's own risk-reason commentary; it never blocks, holds, or produces
+# a gate finding, even under gate.manifestPolicy: block. The only mechanism that actually holds a PR
+# for a touched path is settings.hardGuardrailGlobs, below.
+# Glob list. Default: [] (nothing listed).
blockedPaths:
- "vendor/**"
- ".github/workflows/**"
@@ -660,9 +663,11 @@ settings:
# of this setting. Bool. Default: false.
closeOwnerAuthors: false
- # Hard manual-review path guardrails are config-as-code only. Omit or use [] for no path guardrails;
- # set concrete globs when otherwise-mergeable PRs touching those paths must be held for a person.
- # This never falls back to hidden engine path defaults.
+ # Hard manual-review path guardrails are config-as-code only. Configured globs are ADDED to a fixed
+ # set of built-in invariant guardrails (config-as-code files, CI workflows/scripts, and core
+ # engine-decision paths — see DEFAULT_HARD_GUARDRAIL_GLOBS in src/review/guardrail-config.ts) that
+ # always apply and can never be disabled from here. Omit or use [] to rely on just those built-in
+ # invariants, with no repo-specific additions.
hardGuardrailGlobs: []
# Require a linked issue on every PR (dashboard equivalent of the toggle that
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 092d349cc1..ca955ca197 100644
--- a/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx
+++ b/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx
@@ -84,9 +84,11 @@ function SelfHostingConfiguration() {
same fields — so a value written under both gate.duplicates and{" "}
settings.duplicates resolves to whatever gate.duplicates says. One
exception to the whole precedence chain: hard path guardrails (
- settings.hardGuardrailGlobs) are config-as-code only — omitted or empty means
- no path guardrails, never a hidden engine fallback, regardless of what the database row or
- defaults would otherwise imply.
+ settings.hardGuardrailGlobs) are config-as-code only — a configured list ADDS
+ repo-specific globs on top of a fixed set of built-in invariant guardrails (config-as-code
+ files, CI workflows/scripts, and core engine-decision paths) that always apply and can never
+ be disabled. Omitted or empty means only those built-in invariants hold, regardless of what
+ the database row or defaults would otherwise imply.
This page covers the environment layer and the shape of the config file. For the full field diff --git a/apps/gittensory-ui/src/routes/docs.tuning.tsx b/apps/gittensory-ui/src/routes/docs.tuning.tsx index 95e70ff981..a503943a56 100644 --- a/apps/gittensory-ui/src/routes/docs.tuning.tsx +++ b/apps/gittensory-ui/src/routes/docs.tuning.tsx @@ -85,9 +85,10 @@ function Tuning() {
- Path holds are explicit config-as-code only: omitted or empty{" "}
- settings.hardGuardrailGlobs means no path guardrails, not a hidden engine
- fallback.
+ Path holds are explicit config-as-code only: a configured{" "}
+ settings.hardGuardrailGlobs ADDS repo-specific globs on top of a fixed set of
+ built-in invariant guardrails that always apply and can never be disabled. Omitted or empty
+ means only those built-in invariants hold.
The friendly gate: block in .gittensory.yml is a typed alias for
diff --git a/config/examples/gittensory.full.yml b/config/examples/gittensory.full.yml
index 2ec0a3a93e..023f45b320 100644
--- a/config/examples/gittensory.full.yml
+++ b/config/examples/gittensory.full.yml
@@ -61,18 +61,21 @@
# ----------------------------------------------------------------------------
# 1. FOCUS / GUARDRAILS (focus manifest)
# ----------------------------------------------------------------------------
-# Declares the repo's work areas and off-limits paths. These feed deterministic
-# findings (e.g. manifest_blocked_path, manifest_missing_tests) and — when
-# `gate.manifestPolicy: block` is set below — can become enforceable blockers.
+# Declares the repo's work areas and off-limits paths. wantedPaths/blockedPaths feed advisory-only
+# guidance findings; testExpectations/linkedIssuePolicy feed manifest_missing_tests and
+# manifest_linked_issue_required, which — when `gate.manifestPolicy: block` is set below — can become
+# enforceable blockers. Hard path HOLDS are a separate mechanism: settings.hardGuardrailGlobs, below.
# Work areas the maintainer wants. PRs touching these are preferred/encouraged.
# Glob list. Default: [] (no preference).
wantedPaths:
- "src/**"
-# Paths off-limits to contributors. Touching one yields a manifest_blocked_path
-# finding (enforceable when `gate.manifestPolicy: block`).
-# Glob list. Default: [] (nothing blocked).
+# Paths off-limits to contributors — CONTRIBUTOR-FACING GUIDANCE ONLY. Touching one surfaces in
+# onboarding guidance and gittensory's own risk-reason commentary; it never blocks, holds, or produces
+# a gate finding, even under gate.manifestPolicy: block. The only mechanism that actually holds a PR
+# for a touched path is settings.hardGuardrailGlobs, below.
+# Glob list. Default: [] (nothing listed).
blockedPaths:
- "vendor/**"
- ".github/workflows/**"
@@ -673,9 +676,11 @@ settings:
# of this setting. Bool. Default: false.
closeOwnerAuthors: false
- # Hard manual-review path guardrails are config-as-code only. Omit or use [] for no path guardrails;
- # set concrete globs when otherwise-mergeable PRs touching those paths must be held for a person.
- # This never falls back to hidden engine path defaults.
+ # Hard manual-review path guardrails are config-as-code only. Configured globs are ADDED to a fixed
+ # set of built-in invariant guardrails (config-as-code files, CI workflows/scripts, and core
+ # engine-decision paths — see DEFAULT_HARD_GUARDRAIL_GLOBS in src/review/guardrail-config.ts) that
+ # always apply and can never be disabled from here. Omit or use [] to rely on just those built-in
+ # invariants, with no repo-specific additions.
hardGuardrailGlobs: []
# Require a linked issue on every PR (dashboard equivalent of the toggle that