Context
Part of the review-stack architecture audit (parent epic — dead-code dimension). A dedicated sub-audit
scanned all ~99 boolean/enum fields in RepositorySettings; two have distinctly-declared, fully
settable values that no read site ever branches on (not self-documented as inert, unlike a separate
batch of already-known no-ops listed below).
High-confidence findings — need a decision (wire the behavior, or remove the dead value)
AutonomyLevel — "suggest" and "propose" values (src/types.ts:1258). Doc comment claims
they "surface guidance/concrete proposals without executing" — distinct from "observe". Fully
settable via API (src/api/routes.ts:758), .gittensory.yml
(packages/gittensory-engine/src/focus-manifest.ts:1759), and DB round-trip. But every read site only
distinguishes "auto"/"auto_with_approval" from everything else —
isActingAutonomyLevel() (src/settings/autonomy.ts:30) and autonomyRequiresApproval() (:44) are
the only two predicates ever used, and nothing anywhere does === "suggest" or === "propose".
Setting autonomy: { merge: "suggest" } is behaviorally identical to leaving it unset.
checkRunDetailLevel — "deep" value (src/types.ts:684). DB parsing
(src/db/repositories.ts:7311-7314) explicitly preserves "deep" as distinct from "standard". But
both read sites — buildCheckRunAnnotations and formatCheckRunOutput
(src/rules/advisory.ts:347,432) — only branch on detailLevel === "minimal"; "standard" and
"deep" produce byte-identical output.
Batch — already self-documented as intentionally inert (lower priority, but adds config-surface noise)
gateCheckMode ("back-compat display only" — tracked in the separate config-surface-reduction issue,
don't duplicate work there), copycatGateMode ("CURRENTLY INERT... no detection engine reads it yet"),
firstTimeContributorGrace ("RESERVED... no runtime effect today"), autoProjectMilestoneMatch: "auto"
("behaves identically to suggest until #3185"), reviewCheckMode: "visible" ("behaves identically to
required"), qualityGateMode: "block" (downgraded to advisory at two separate layers),
ScreenshotTableGateAction: "advisory" ("a real no-op by construction"). Each of these was a deliberate,
documented choice at the time — worth a batch decision (wire them for real, or remove the unused values)
rather than individual issues.
This issue needs a decision before code changes
For each item: either (a) wire the documented-but-unimplemented behavior for real, or (b) remove the
dead enum value/branch and update the doc comment to say so. Pick per-item based on whether the feature
is still wanted — do not assume "remove" is always right.
Acceptance criteria
Context
Part of the review-stack architecture audit (parent epic — dead-code dimension). A dedicated sub-audit
scanned all ~99 boolean/enum fields in
RepositorySettings; two have distinctly-declared, fullysettable values that no read site ever branches on (not self-documented as inert, unlike a separate
batch of already-known no-ops listed below).
High-confidence findings — need a decision (wire the behavior, or remove the dead value)
AutonomyLevel—"suggest"and"propose"values (src/types.ts:1258). Doc comment claimsthey "surface guidance/concrete proposals without executing" — distinct from
"observe". Fullysettable via API (
src/api/routes.ts:758),.gittensory.yml(
packages/gittensory-engine/src/focus-manifest.ts:1759), and DB round-trip. But every read site onlydistinguishes
"auto"/"auto_with_approval"from everything else —isActingAutonomyLevel()(src/settings/autonomy.ts:30) andautonomyRequiresApproval()(:44) arethe only two predicates ever used, and nothing anywhere does
=== "suggest"or=== "propose".Setting
autonomy: { merge: "suggest" }is behaviorally identical to leaving it unset.checkRunDetailLevel—"deep"value (src/types.ts:684). DB parsing(
src/db/repositories.ts:7311-7314) explicitly preserves"deep"as distinct from"standard". Butboth read sites —
buildCheckRunAnnotationsandformatCheckRunOutput(
src/rules/advisory.ts:347,432) — only branch ondetailLevel === "minimal";"standard"and"deep"produce byte-identical output.Batch — already self-documented as intentionally inert (lower priority, but adds config-surface noise)
gateCheckMode("back-compat display only" — tracked in the separate config-surface-reduction issue,don't duplicate work there),
copycatGateMode("CURRENTLY INERT... no detection engine reads it yet"),firstTimeContributorGrace("RESERVED... no runtime effect today"),autoProjectMilestoneMatch: "auto"("behaves identically to suggest until #3185"),
reviewCheckMode: "visible"("behaves identically torequired"),
qualityGateMode: "block"(downgraded to advisory at two separate layers),ScreenshotTableGateAction: "advisory"("a real no-op by construction"). Each of these was a deliberate,documented choice at the time — worth a batch decision (wire them for real, or remove the unused values)
rather than individual issues.
This issue needs a decision before code changes
For each item: either (a) wire the documented-but-unimplemented behavior for real, or (b) remove the
dead enum value/branch and update the doc comment to say so. Pick per-item based on whether the feature
is still wanted — do not assume "remove" is always right.
Acceptance criteria
AutonomyLevel.suggest/.proposeandcheckRunDetailLevel.deepeither wired to real distinctbehavior with a regression test, or removed with doc comments updated.
surface either way.