You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Stated mandate: "Everything needs to be config as code - every aspect should be able to be controlled globally / per repo, and never required other than our core engine/whatever base defaults should be needed to run bare necessities." Env vars should be reserved for true bootstrap concerns — not for feature enablement, which should be fully controllable through .gittensory.yml (global default + per-repo override).
Corrected state (2026-07-08 — supersedes the 2026-07-07 survey, which had a methodology gap)
A shared per-feature config-as-code resolver already exists and is already proven in production:src/review/feature-activation.ts — resolveConvergedFeature/convergedFeatureActive, keyed by CONVERGED_FEATURE_KEYS in packages/gittensory-engine/src/focus-manifest.ts. Shipped in #1555, refined in #2386 (a repo-controlled features.safety: false override downgrades to "no opinion" rather than an active force-off, since .gittensory.yml is repo-writable and lower-trust than the operator). Precedence: env kill-switch (off ⇒ always off) → per-repo features: override (true/false) → GITTENSORY_REVIEW_REPOS allowlist default (byte-identical to today when unset). rag, reputation, unifiedComment, and safety are ALL already fully wired through it — confirmed by reading their actual call sites in src/queue/processors.ts and src/services/ai-review.ts, not just their own isXEnabled() definitions (the earlier survey's mistake — it checked only the latter and missed that the former already route through the resolver). The 5 sub-issues originally filed for this (#4094-#4098) are closed as already-resolved.
Confirmed still-needed work, now well-defined instead of speculative:
Already fully correct, no issue needed:testGeneration, contentLane, and now rag/reputation/unifiedComment/safety.
Goal
Every remaining converged review feature migrated onto the existing feature-activation.ts resolver (or, for #4106/#4107, an explicit reasoned decision that env-var-only is correct for that one). GITTENSORY_REVIEW_REPOS + the individual flags become convenience defaults, not hard requirements, for every feature where per-repo config genuinely makes sense.
Any self-hoster can fully configure which review features run, per-repo, entirely through .gittensory.yml — no env var or redeploy required for feature enablement, using the ALREADY-PROVEN resolver rather than a new mechanism.
Effort
Epic — down from 15 to 10 active sub-issues after the 2026-07-08 correction; each independently shippable.
Motivation
Stated mandate: "Everything needs to be config as code - every aspect should be able to be controlled globally / per repo, and never required other than our core engine/whatever base defaults should be needed to run bare necessities." Env vars should be reserved for true bootstrap concerns — not for feature enablement, which should be fully controllable through
.gittensory.yml(global default + per-repo override).Corrected state (2026-07-08 — supersedes the 2026-07-07 survey, which had a methodology gap)
A shared per-feature config-as-code resolver already exists and is already proven in production:
src/review/feature-activation.ts—resolveConvergedFeature/convergedFeatureActive, keyed byCONVERGED_FEATURE_KEYSinpackages/gittensory-engine/src/focus-manifest.ts. Shipped in #1555, refined in #2386 (a repo-controlledfeatures.safety: falseoverride downgrades to "no opinion" rather than an active force-off, since.gittensory.ymlis repo-writable and lower-trust than the operator). Precedence: env kill-switch (off ⇒ always off) → per-repofeatures:override (true/false) →GITTENSORY_REVIEW_REPOSallowlist default (byte-identical to today when unset).rag,reputation,unifiedComment, andsafetyare ALL already fully wired through it — confirmed by reading their actual call sites insrc/queue/processors.tsandsrc/services/ai-review.ts, not just their ownisXEnabled()definitions (the earlier survey's mistake — it checked only the latter and missed that the former already route through the resolver). The 5 sub-issues originally filed for this (#4094-#4098) are closed as already-resolved.Confirmed still-needed work, now well-defined instead of speculative:
isXEnabled(env) && isConvergenceRepoAllowed(env, repo), zero config-as-code surface):grounding(Add config-as-code coverage for the grounding feature #4100 —feature-activation.ts's own header comment already flags this as deferred, "coupled to the merge/close disposition path"),selftune(Add config-as-code coverage for the selftune feature #4104),parityAudit(Add config-as-code coverage for the parityAudit feature #4105).inlineComments/fixHandoff(Upgrade inlineComments + fixHandoff from required-AND opt-in to full config-as-code substitutes #4099),reviewMemory(Investigate + close the config-as-code gap for reviewMemory #4101),impactMap(Investigate + close the config-as-code gap for impactMap #4102),cultureProfile(Investigate + close the config-as-code gap for cultureProfile #4103). All 5 need the same upgrade to the resolver's full precedence; Upgrade inlineComments + fixHandoff from required-AND opt-in to full config-as-code substitutes #4099 makes the namespace call (migrate intofeatures:vs. keep the existing top-level field names) that the other 4 should follow for consistency.ops/sweep_watchdog/pr_reconciliation(Investigate + design config-as-code for ops / sweep_watchdog / pr_reconciliation #4106 — background jobs, is per-repo framing even meaningful?),GITTENSORY_REVIEW_DRAFT(Investigate + design config-as-code for the GITTENSORY_REVIEW_DRAFT public draft-submission flow #4107 — public API surface, may be legitimate bare-necessity).GITTENSORY_REVIEW_TEST_GENERATIONdeclaration (chore: remove vestigial GITTENSORY_REVIEW_TEST_GENERATION env var declaration #4108) —testGenerationis already 100% config-driven (review.testGeneration, no env var involved at all), a genuinely-correct reference example alongsidecontentLane.Already fully correct, no issue needed:
testGeneration,contentLane, and nowrag/reputation/unifiedComment/safety.Goal
Every remaining converged review feature migrated onto the existing
feature-activation.tsresolver (or, for #4106/#4107, an explicit reasoned decision that env-var-only is correct for that one).GITTENSORY_REVIEW_REPOS+ the individual flags become convenience defaults, not hard requirements, for every feature where per-repo config genuinely makes sense.Sub-issues
Core: generic per-feature config-as-code resolver— closed, already existed (feature-activation.ts)Wire— closed, already wiredreview.features.ragWire— closed, already wiredreview.features.reputationWire— closed, already wiredreview.features.unifiedCommentWire— closed, already wiredreview.features.safetyinlineComments+fixHandofffrom required-AND opt-in to full config-as-code substitutes — shipped in feat(review): upgrade inlineComments + fixHandoff to full config-as-code substitutes #4116groundingonto the existing resolver — shipped in feat(review): migrate grounding onto the per-repo feature-activation resolver #4117Investigate + close the config-as-code gap for reviewMemory #4101 — Migrate— closed not-planned after investigationreviewMemoryonto the existing resolverInvestigate + close the config-as-code gap for impactMap #4102 — Migrate— closed not-planned after investigationimpactMaponto the existing resolverInvestigate + close the config-as-code gap for cultureProfile #4103 — Migrate— closed not-planned after investigationcultureProfileonto the existing resolverselftuneonto the existing resolver — shipped in feat(review): add per-repo review.selftune force-off for the auto-tune cron #4118Add config-as-code coverage for the parityAudit feature #4105 — Migrate— closed not-planned after investigationparityAuditonto the existing resolverInvestigate + design config-as-code for ops / sweep_watchdog / pr_reconciliation #4106 — Investigate + design config-as-code for— closed not-planned, env-var-only is correctops/sweep_watchdog/pr_reconciliationInvestigate + design config-as-code for the GITTENSORY_REVIEW_DRAFT public draft-submission flow #4107 — Investigate + design config-as-code for the— closed not-planned, legitimate bare-necessityGITTENSORY_REVIEW_DRAFTpublic draft-submission flowGITTENSORY_REVIEW_TEST_GENERATIONenv var declaration — shipped in chore(review): remove never-wired test-generation dead slice #4126Expected outcome
Any self-hoster can fully configure which review features run, per-repo, entirely through
.gittensory.yml— no env var or redeploy required for feature enablement, using the ALREADY-PROVEN resolver rather than a new mechanism.Effort
Epic — down from 15 to 10 active sub-issues after the 2026-07-08 correction; each independently shippable.