Skip to content

feat(review): register e2eTests as the sixth converged-feature key #4190

Description

@JSONbored

Part of #4189.

Context

Every review feature in gittensory is toggled the same way: a deployment-wide GITTENSORY_REVIEW_* env kill-switch, overridable per repo via .gittensory.yml, falling back to a default when unset. The converged-feature registry (rag/reputation/unifiedComment/safety/grounding) already implements this precedence in one place:

  • CONVERGED_FEATURE_KEYSpackages/gittensory-engine/src/focus-manifest.ts:194-195 — currently ["rag", "reputation", "unifiedComment", "safety", "grounding"] as const, re-exported through src/signals/focus-manifest.ts.
  • FocusManifestFeaturesConfig (focus-manifest.ts:200), parseFeaturesConfig (focus-manifest.ts:1320), and featuresConfigToJson (focus-manifest.ts:1337) all key off CONVERGED_FEATURE_KEYS automatically — adding an entry to the array is the only schema change needed on the parsing side.
  • FEATURE_GLOBAL_FLAGsrc/review/feature-activation.ts:31-37 — maps each key to its env-flag-checking function (isRagEnabled, isGroundingEnabled, etc.).
  • The public schema doc already has a worked example of this exact block at .gittensory.yml.example:1034-1046.
  • The self-host private-config examples (config/examples/global.gittensory.yml, config/examples/repo-override.gittensory.yml) currently only show gate:/settings: blocks — no features: example yet.

This issue is pure schema/wiring — no behavior change, no LLM call, no rendering. It unblocks every other sub-issue.

Requirements

  • Add "e2eTests" to CONVERGED_FEATURE_KEYS in packages/gittensory-engine/src/focus-manifest.ts:194.
  • Add a new isE2eTestGenerationEnabled(env) function (same shape as isRagEnabled/isGroundingEnabled) checking a new GITTENSORY_REVIEW_E2E_TESTS env var, and register it in FEATURE_GLOBAL_FLAG in src/review/feature-activation.ts:31-37.
  • Use a symmetric override (no asymmetric force-on-only floor like safety, no force-off-only ceiling like grounding) — code generation has no reason to be forced on or capped, unlike security-hardening (safety) or full-file-fetching (grounding).
  • Add e2eTests: true to the commented example features: block in .gittensory.yml.example:1034-1046, and update the block's explanatory comment to mention it.
  • Add a features: block (with e2eTests) to both config/examples/global.gittensory.yml and config/examples/repo-override.gittensory.yml, consistent with how those files already show gate:/settings: overrides deep-merging per src/selfhost/private-config.ts.
  • Add a unit test asserting CONVERGED_FEATURE_KEYS includes "e2eTests" and that resolveConvergedFeature/convergedFeatureActive handle it with the same precedence as every other key (see test/unit/feature-activation.test.ts, which already iterates CONVERGED_FEATURE_KEYS generically).

Deliverables

  • e2eTests present in CONVERGED_FEATURE_KEYS and flowing through FocusManifestFeaturesConfig/parseFeaturesConfig/featuresConfigToJson with no other code change required.
  • GITTENSORY_REVIEW_E2E_TESTS env kill-switch wired into FEATURE_GLOBAL_FLAG.
  • .gittensory.yml.example and both self-host config examples document the new key.
  • Passing unit test coverage for the new key's precedence (env off ⇒ false; per-repo true/false; allowlist default when unset).

Expected outcome

A self-host operator (or the public schema reader) can toggle features.e2eTests globally and per-repo using the exact same mental model as every other converged feature, with zero new precedence rules to learn. No visible behavior changes yet — this is pure plumbing.

Resources / examples

  • src/review/feature-activation.ts (existing FEATURE_GLOBAL_FLAG map + resolveConvergedFeature/convergedFeatureActive)
  • packages/gittensory-engine/src/focus-manifest.ts:194-200, 1320-1344
  • .gittensory.yml.example:1034-1046 (the exact block to extend)
  • config/examples/global.gittensory.yml, config/examples/repo-override.gittensory.yml
  • test/unit/feature-activation.test.ts (existing generic-over-CONVERGED_FEATURE_KEYS test pattern)

Effort

S — additive schema change, no new runtime logic.

Metadata

Metadata

Assignees

Labels

maintainer-onlyOwner-only work — yields no Gittensor points.orbGittensory Orb related - maintainer self-hosting analytics.roadmapOn the Wave-2 agent-layer roadmap board (project 9)

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions