Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 0 additions & 15 deletions .gittensory.yml.example
Original file line number Diff line number Diff line change
Expand Up @@ -484,15 +484,6 @@ review:
# (CI green, gate passing, mergeable-clean, valid linked issue). SURFACE ONLY — never changes the decision.
# auto_merge_summary: false

# Boundary-safe test-generation advisory (#1972, kill-switch config slice #2189). Bool | null. Default:
# null/false — byte-identical (no boundary scan runs at all). Requires the operator's
# GITTENSORY_REVIEW_TEST_GENERATION flag to be on AND this toggle. When both are on, a diff that touches a
# small, precise set of boundary-condition patterns (off-by-one array/index bounds, null/undefined branches,
# empty-collection checks) with NO test evidence anywhere in the PR gets an advisory finding plus a
# LOCAL-execution test-generation action spec (criteria/hints for your OWN agent to scaffold tests with —
# gittensory never writes or runs test code).
# test_generation: false

# Deterministic label suggestions (#2045). Each rule SUGGESTS a non-scoring label when a PR matches ALL of the
# `when` criteria it sets (at least one is required): when_paths (any changed path matches a glob), title_contains,
# description_contains (both case-insensitive). Suggestions are advisory; they are auto-applied only when the repo's
Expand Down Expand Up @@ -913,12 +904,6 @@ settings:
# # fallback for whatever it omits. Only takes effect when inline_comments is already on. Bool or null.
# # Default: null/false.
# finding_categories: false
# # When true, a diff touching a small, precise set of boundary-condition patterns (off-by-one array/index
# # bounds, null/undefined branches, empty-collection checks) with no test evidence in the PR gets an
# # advisory finding plus a LOCAL-execution test-generation action spec (criteria/hints only -- never
# # generated test code; your own agent scaffolds it). Also requires the operator flag
# # GITTENSORY_REVIEW_TEST_GENERATION. Bool or null. Default: null/false (byte-identical).
# test_generation: false
# # How strictly a linked issue must actually be SATISFIED by the PR (distinct from linkedIssuePolicy,
# # which only checks a link EXISTS). off = not evaluated; advisory = surface a finding; block = can
# # become a hard blocker (confirmed-contributor-gated). This is the config knob only — parsed and
Expand Down
1 change: 0 additions & 1 deletion apps/gittensory-ui/src/routes/docs.privacy-security.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ GITTENSORY_REVIEW_REPUTATION="true" # submitter-reputation spend co
GITTENSORY_REVIEW_UNIFIED_COMMENT="true" # one in-place unified PR comment
GITTENSORY_REVIEW_ENRICHMENT="true" # external analyzer registry (REES) findings
GITTENSORY_REVIEW_INLINE_COMMENTS="true" # diff-anchored inline PR review comments
GITTENSORY_REVIEW_TEST_GENERATION="true" # boundary-safe test-gen action spec (contributor-run)
GITTENSORY_REVIEW_FIX_HANDOFF="true" # machine-readable fix-handoff block (contributor-run)
GITTENSORY_REVIEW_PLANNER="true" # @gittensory plan on-demand implementation plan
GITTENSORY_REVIEW_SCREENSHOTS="true" # before/after visual capture for UI changes
Expand Down
6 changes: 0 additions & 6 deletions apps/gittensory-ui/src/routes/docs.tuning.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -183,12 +183,6 @@ function Tuning() {
<code>GITTENSORY_REVIEW_INLINE_COMMENTS</code> — posts AI-review findings as inline
diff-anchored PR review comments instead of (or alongside) the summary comment. Per-PR.
</li>
<li>
<code>GITTENSORY_REVIEW_TEST_GENERATION</code> — offers a boundary-safe local-write action
spec alongside a missing-test-evidence finding, describing what test cases should exist
for the repo's detected framework; the contributor's own agent scaffolds and runs the
tests locally. Per-PR.
</li>
<li>
<code>GITTENSORY_REVIEW_FIX_HANDOFF</code> — renders a review finding as a structured,
machine-readable "apply this fix" block for the contributor's own local agent to consume —
Expand Down
15 changes: 0 additions & 15 deletions config/examples/gittensory.full.yml
Original file line number Diff line number Diff line change
Expand Up @@ -497,15 +497,6 @@ review:
# (CI green, gate passing, mergeable-clean, valid linked issue). SURFACE ONLY — never changes the decision.
# auto_merge_summary: false

# Boundary-safe test-generation advisory (#1972, kill-switch config slice #2189). Bool | null. Default:
# null/false — byte-identical (no boundary scan runs at all). Requires the operator's
# GITTENSORY_REVIEW_TEST_GENERATION flag to be on AND this toggle. When both are on, a diff that touches a
# small, precise set of boundary-condition patterns (off-by-one array/index bounds, null/undefined branches,
# empty-collection checks) with NO test evidence anywhere in the PR gets an advisory finding plus a
# LOCAL-execution test-generation action spec (criteria/hints for your OWN agent to scaffold tests with —
# gittensory never writes or runs test code).
# test_generation: false

# Deterministic label suggestions (#2045). Each rule SUGGESTS a non-scoring label when a PR matches ALL of the
# `when` criteria it sets (at least one is required): when_paths (any changed path matches a glob), title_contains,
# description_contains (both case-insensitive). Suggestions are advisory; they are auto-applied only when the repo's
Expand Down Expand Up @@ -926,12 +917,6 @@ settings:
# # fallback for whatever it omits. Only takes effect when inline_comments is already on. Bool or null.
# # Default: null/false.
# finding_categories: false
# # When true, a diff touching a small, precise set of boundary-condition patterns (off-by-one array/index
# # bounds, null/undefined branches, empty-collection checks) with no test evidence in the PR gets an
# # advisory finding plus a LOCAL-execution test-generation action spec (criteria/hints only -- never
# # generated test code; your own agent scaffolds it). Also requires the operator flag
# # GITTENSORY_REVIEW_TEST_GENERATION. Bool or null. Default: null/false (byte-identical).
# test_generation: false
# # How strictly a linked issue must actually be SATISFIED by the PR (distinct from linkedIssuePolicy,
# # which only checks a link EXISTS). off = not evaluated; advisory = surface a finding; block = can
# # become a hard blocker (confirmed-contributor-gated). This is the config knob only — parsed and
Expand Down
23 changes: 3 additions & 20 deletions packages/gittensory-engine/src/focus-manifest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,17 +430,6 @@ export type FocusManifestReviewConfig = {
* source, same display-only (never touches the AI prompt) shape. null/false (default, absent) = no chip =
* byte-identical behavior. (#1955) */
effortScore: boolean | null;
/** `review.test_generation` (#1972, kill-switch config slice #2189): when true, a diff that touches a small,
* precise set of boundary-condition patterns (off-by-one array/index bounds, null/undefined branches,
* empty-collection checks — see `src/signals/boundary-test-generation.ts`) with NO test evidence anywhere in
* the PR gets an additional advisory finding plus a boundary-safe LOCAL-execution
* `gittensory_generate_tests` action spec (criteria/hints only, never generated test code — see
* `src/mcp/local-write-tools.ts`'s `buildTestGenSpec`). Also gated by the operator's
* `GITTENSORY_REVIEW_TEST_GENERATION` kill-switch (`src/review/test-generation.ts`'s
* `isTestGenerationEnabled`) — the caller ANDs both. Purely additive and deterministic; it never changes what
* `missingTestEvidence` already does. null/false (default, absent) ⇒ byte-identical behavior — no boundary
* scan runs and no spec is ever built. */
testGeneration: boolean | null;
/** `review.impact_map` (#2184, config slice of #1971): when true, gates BOTH the deterministic impact-map
* computation (`computeImpactMap`, `src/review/impact-map.ts`) and its rendering as a compact section in
* the unified review comment (#2185) / additive AI-review grounding context (#2186). Deterministic/display
Expand Down Expand Up @@ -887,7 +876,7 @@ const EMPTY_MANIFEST: FocusManifest = {
publicNotes: [],
gate: { ...EMPTY_GATE_CONFIG },
settings: {},
review: { present: false, footerText: null, note: null, fields: {}, enrichmentAnalyzers: {}, profile: null, tone: null, securityFocus: null, inlineComments: null, fixHandoff: null, autoMergeSummary: null, suggestions: null, changedFilesSummary: null, effortScore: null, testGeneration: null, impactMap: null, cultureProfile: null, selftune: null, reviewMemory: null, findingCategories: null, inlineCommentsPerCategory: null, minFindingSeverity: null, maxFindings: { ...EMPTY_MAX_FINDINGS_CONFIG }, commentVerbosity: null, pathInstructions: [], instructions: null, excludePaths: [], pathFilters: [], preMergeChecks: [], autoReview: { ...EMPTY_AUTO_REVIEW_CONFIG }, labelingRules: [], aiModel: { ...EMPTY_SELF_HOST_AI_MODEL_CONFIG }, visual: { ...EMPTY_VISUAL_CONFIG }, linkedIssueSatisfaction: null, sharedConfigSource: null },
review: { present: false, footerText: null, note: null, fields: {}, enrichmentAnalyzers: {}, profile: null, tone: null, securityFocus: null, inlineComments: null, fixHandoff: null, autoMergeSummary: null, suggestions: null, changedFilesSummary: null, effortScore: null, impactMap: null, cultureProfile: null, selftune: null, reviewMemory: null, findingCategories: null, inlineCommentsPerCategory: null, minFindingSeverity: null, maxFindings: { ...EMPTY_MAX_FINDINGS_CONFIG }, commentVerbosity: null, pathInstructions: [], instructions: null, excludePaths: [], pathFilters: [], preMergeChecks: [], autoReview: { ...EMPTY_AUTO_REVIEW_CONFIG }, labelingRules: [], aiModel: { ...EMPTY_SELF_HOST_AI_MODEL_CONFIG }, visual: { ...EMPTY_VISUAL_CONFIG }, linkedIssueSatisfaction: null, sharedConfigSource: null },
features: { ...EMPTY_FEATURES_CONFIG },
contentLane: { ...EMPTY_CONTENT_LANE_CONFIG },
repoDocGeneration: { ...EMPTY_REPO_DOC_GENERATION_CONFIG },
Expand Down Expand Up @@ -917,7 +906,7 @@ function emptyManifest(source: FocusManifestSource, warnings: string[] = []): Fo
warnings,
gate: { ...EMPTY_GATE_CONFIG },
settings: {},
review: { present: false, footerText: null, note: null, fields: {}, enrichmentAnalyzers: {}, profile: null, tone: null, securityFocus: null, inlineComments: null, fixHandoff: null, autoMergeSummary: null, suggestions: null, changedFilesSummary: null, effortScore: null, testGeneration: null, impactMap: null, cultureProfile: null, selftune: null, reviewMemory: null, findingCategories: null, inlineCommentsPerCategory: null, minFindingSeverity: null, maxFindings: { ...EMPTY_MAX_FINDINGS_CONFIG }, commentVerbosity: null, pathInstructions: [], instructions: null, excludePaths: [], pathFilters: [], preMergeChecks: [], autoReview: { ...EMPTY_AUTO_REVIEW_CONFIG }, labelingRules: [], aiModel: { ...EMPTY_SELF_HOST_AI_MODEL_CONFIG }, visual: { ...EMPTY_VISUAL_CONFIG }, linkedIssueSatisfaction: null, sharedConfigSource: null },
review: { present: false, footerText: null, note: null, fields: {}, enrichmentAnalyzers: {}, profile: null, tone: null, securityFocus: null, inlineComments: null, fixHandoff: null, autoMergeSummary: null, suggestions: null, changedFilesSummary: null, effortScore: null, impactMap: null, cultureProfile: null, selftune: null, reviewMemory: null, findingCategories: null, inlineCommentsPerCategory: null, minFindingSeverity: null, maxFindings: { ...EMPTY_MAX_FINDINGS_CONFIG }, commentVerbosity: null, pathInstructions: [], instructions: null, excludePaths: [], pathFilters: [], preMergeChecks: [], autoReview: { ...EMPTY_AUTO_REVIEW_CONFIG }, labelingRules: [], aiModel: { ...EMPTY_SELF_HOST_AI_MODEL_CONFIG }, visual: { ...EMPTY_VISUAL_CONFIG }, linkedIssueSatisfaction: null, sharedConfigSource: null },
features: { ...EMPTY_FEATURES_CONFIG },
contentLane: { ...EMPTY_CONTENT_LANE_CONFIG },
repoDocGeneration: { ...EMPTY_REPO_DOC_GENERATION_CONFIG },
Expand Down Expand Up @@ -1921,7 +1910,7 @@ function parsePublicSafeText(value: JsonValue | undefined, field: string, warnin
* throws; invalid/unsafe values are dropped with warnings.
*/
function parseReviewConfig(value: JsonValue | undefined, warnings: string[]): FocusManifestReviewConfig {
const empty: FocusManifestReviewConfig = { present: false, footerText: null, note: null, fields: {}, enrichmentAnalyzers: {}, profile: null, tone: null, securityFocus: null, inlineComments: null, fixHandoff: null, autoMergeSummary: null, suggestions: null, changedFilesSummary: null, effortScore: null, testGeneration: null, impactMap: null, cultureProfile: null, selftune: null, reviewMemory: null, findingCategories: null, inlineCommentsPerCategory: null, minFindingSeverity: null, maxFindings: { ...EMPTY_MAX_FINDINGS_CONFIG }, commentVerbosity: null, pathInstructions: [], instructions: null, excludePaths: [], pathFilters: [], preMergeChecks: [], autoReview: { ...EMPTY_AUTO_REVIEW_CONFIG }, labelingRules: [], aiModel: { ...EMPTY_SELF_HOST_AI_MODEL_CONFIG }, visual: { ...EMPTY_VISUAL_CONFIG }, linkedIssueSatisfaction: null, sharedConfigSource: null };
const empty: FocusManifestReviewConfig = { present: false, footerText: null, note: null, fields: {}, enrichmentAnalyzers: {}, profile: null, tone: null, securityFocus: null, inlineComments: null, fixHandoff: null, autoMergeSummary: null, suggestions: null, changedFilesSummary: null, effortScore: null, impactMap: null, cultureProfile: null, selftune: null, reviewMemory: null, findingCategories: null, inlineCommentsPerCategory: null, minFindingSeverity: null, maxFindings: { ...EMPTY_MAX_FINDINGS_CONFIG }, commentVerbosity: null, pathInstructions: [], instructions: null, excludePaths: [], pathFilters: [], preMergeChecks: [], autoReview: { ...EMPTY_AUTO_REVIEW_CONFIG }, labelingRules: [], aiModel: { ...EMPTY_SELF_HOST_AI_MODEL_CONFIG }, visual: { ...EMPTY_VISUAL_CONFIG }, linkedIssueSatisfaction: null, sharedConfigSource: null };
if (value === undefined || value === null) return empty;
if (typeof value !== "object" || Array.isArray(value)) {
warnings.push(`Manifest field "review" must be a mapping; ignoring it.`);
Expand Down Expand Up @@ -1963,7 +1952,6 @@ function parseReviewConfig(value: JsonValue | undefined, warnings: string[]): Fo
const suggestions = normalizeOptionalBoolean(r.suggestions, "review.suggestions", warnings);
const changedFilesSummary = normalizeOptionalBoolean(r.changed_files_summary, "review.changed_files_summary", warnings);
const effortScore = normalizeOptionalBoolean(r.effort_score, "review.effort_score", warnings);
const testGeneration = normalizeOptionalBoolean(r.test_generation, "review.test_generation", warnings);
const impactMap = normalizeOptionalBoolean(r.impact_map, "review.impact_map", warnings);
const cultureProfile = normalizeOptionalBoolean(r.culture_profile, "review.culture_profile", warnings);
const selftune = normalizeOptionalBoolean(r.selftune, "review.selftune", warnings);
Expand Down Expand Up @@ -2005,7 +1993,6 @@ function parseReviewConfig(value: JsonValue | undefined, warnings: string[]): Fo
suggestions !== null ||
changedFilesSummary !== null ||
effortScore !== null ||
testGeneration !== null ||
impactMap !== null ||
cultureProfile !== null ||
selftune !== null ||
Expand Down Expand Up @@ -2034,7 +2021,6 @@ function parseReviewConfig(value: JsonValue | undefined, warnings: string[]): Fo
aiModel,
visual,
linkedIssueSatisfaction,
testGeneration,
enrichmentAnalyzers,
profile,
tone,
Expand Down Expand Up @@ -2139,7 +2125,6 @@ function computeReviewConfigPresent(review: Omit<FocusManifestReviewConfig, "pre
review.suggestions !== null ||
review.changedFilesSummary !== null ||
review.effortScore !== null ||
review.testGeneration !== null ||
review.impactMap !== null ||
review.cultureProfile !== null ||
review.selftune !== null ||
Expand Down Expand Up @@ -2184,7 +2169,6 @@ export function overlayReviewConfig(
suggestions: pickOverlayNullable(override.suggestions, base.suggestions),
changedFilesSummary: pickOverlayNullable(override.changedFilesSummary, base.changedFilesSummary),
effortScore: pickOverlayNullable(override.effortScore, base.effortScore),
testGeneration: pickOverlayNullable(override.testGeneration, base.testGeneration),
impactMap: pickOverlayNullable(override.impactMap, base.impactMap),
cultureProfile: pickOverlayNullable(override.cultureProfile, base.cultureProfile),
selftune: pickOverlayNullable(override.selftune, base.selftune),
Expand Down Expand Up @@ -2674,7 +2658,6 @@ export function reviewConfigToJson(review: FocusManifestReviewConfig): JsonValue
if (review.suggestions !== null) out.suggestions = review.suggestions;
if (review.changedFilesSummary !== null) out.changed_files_summary = review.changedFilesSummary;
if (review.effortScore !== null) out.effort_score = review.effortScore;
if (review.testGeneration !== null) out.test_generation = review.testGeneration;
if (review.impactMap !== null) out.impact_map = review.impactMap;
if (review.cultureProfile !== null) out.culture_profile = review.cultureProfile;
if (review.selftune !== null) out.selftune = review.selftune;
Expand Down
6 changes: 0 additions & 6 deletions src/env.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -192,12 +192,6 @@ declare global {
* inline comments on specific changed lines, layered on top of the decision summary. Default OFF —
* unset/false keeps the review path byte-identical (the model is never asked for inline findings). */
GITTENSORY_REVIEW_INLINE_COMMENTS?: string;
/** Boundary-safe test generation (#2189, config slice of #1972): when truthy (AND the repo's `.gittensory.yml`
* sets `review.test_generation: true`), a missing-test-evidence finding is ALSO accompanied by a
* `gittensory_generate_tests` local-write action spec — criteria/content supplied by gittensory, execution
* on the contributor's own machine (no source upload, no server-side write). Default OFF — unset/false
* keeps the review path byte-identical (no spec is ever built). */
GITTENSORY_REVIEW_TEST_GENERATION?: string;
/** Fix-handoff blocks (#2176, config slice of #1962): when truthy (AND the repo is in GITTENSORY_REVIEW_REPOS
* AND the repo's `.gittensory.yml` sets `review.fixHandoff: true`), a review finding is ALSO rendered as a
* structured, machine-readable "apply this fix" block (src/review/fix-handoff-render.ts) for the
Expand Down
25 changes: 0 additions & 25 deletions src/review/test-generation.ts

This file was deleted.

Loading
Loading