Skip to content

Use semantic dedupe for approved future follow-up filing - #751

Merged
wwind123 merged 2 commits into
mainfrom
issue-490-semantic-followup-dedupe
Sep 8, 2026
Merged

Use semantic dedupe for approved future follow-up filing#751
wwind123 merged 2 commits into
mainfrom
issue-490-semantic-followup-dedupe

Conversation

@wwind123

@wwind123 wwind123 commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Summary

Verification

  • Focused follow-up/orchestration/skill/recovery tests: 585 passed.
  • Backend/protocol/docs/agent-loop tests: 720 passed.
  • Final managed-CI and follow-up safety tests: 124 passed.
  • Full suite: 2,551 passed; two containment tests remain environment-specific because this runner inherits systemd-cgroup-v2-inherited rather than creating the direct scope those tests assert.

Fixes #490

Bound semantic matching and existing-issue lookup to repository-scoped source context, preserve conservative fallback behavior, and sanitize publication artifacts.

Agent-Issue-Provenance: v1 repo=wwind123/coding-review-agent-loop issue=490 flow=approved plan=8a9140f06804e4bf
@wwind123

wwind123 commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

Expected closing issues for PR #751: #490.

Origin flow: approved-plan-implementation
Contract hash: def1a70ddfd414d36fb8396e2442925040e567452022c3ac1beebcbf02e68953

-- coding-review-agent-loop

@wwind123

wwind123 commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

Issue implementation

Implemented the approved semantic follow-up dedupe plan, committed it as ad517fe, pushed the branch, and opened PR #751. Focused tests and all non-containment tests passed; the full suite has two environment-specific inherited-cgroup containment failures.

Result

Pull request reported: #751.

Tests run

  • python3 -m pytest tests/test_followups.py tests/test_orchestrator_issue.py tests/test_orchestrator_pr.py tests/test_skill_helpers.py tests/test_split_materialization.py tests/test_decomposition.py -q (agent-loop instrumented; whole-command timeout 180s)
  • python3 -m pytest tests/test_backends.py tests/test_protocol_markers.py tests/test_protocol.py tests/test_docs_guidance.py tests/test_agent_loop.py -q (agent-loop instrumented; whole-command timeout 180s)
  • python3 -m pytest tests/test_managed_ci.py tests/test_followups.py -q (agent-loop instrumented; whole-command timeout 120s)
  • python3 -m pytest -q (agent-loop instrumented; whole-command timeout 180s)

-- OpenAI Codex: gpt-5.6-luna (xhigh)

@wwind123

wwind123 commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

Review verdict: Blocking

The two-stage design is sound: deterministic dedupe stays the first pass, the model call is bounded, quota-reset escapes cleanly, replay is checked before any provider/search activity, and only high confidence suppresses. Three problems block merge: the antigravity semantic backend can never run because the isolated config it builds is rejected by AgentLoopConfig validation (and leaks its temp dir on that path); PR-filed follow-up trackers never render the lookup context that was plumbed in for them, so they are invisible to the parent-issue searches this feature relies on; and two acceptance-criteria behaviors (in-batch semantic merge, medium/low-confidence 'uncertain' filing) have no test. GitHub checks are still pending (test in_progress), so I have no global test result; per instructions I did not run tests locally.

Blocking issues

  • semantic_dedupe._isolated_provider_config is broken for --semantic-followup-backend antigravity: it sets antigravity_model while dataclasses.replace carries the already-resolved multi-entry antigravity_models chain forward, so AgentLoopConfig.__post_init__ always raises "Cannot specify both antigravity_model and a custom antigravity_models chain." (default chain has three entries; an explicit --semantic-followup-model hits the same check). The exception is swallowed by the broad except Exception in _find_existing_for_group / _semantic_batch_matcher, so one of the four advertised backends silently degrades to deterministic-only on every call with no user-visible error. Set antigravity_models=(model or config.antigravity_models[0],) and leave antigravity_model unset instead. Related on the same path: tempfile.mkdtemp runs before the try/finally in default_semantic_transport, so every failure inside _isolated_provider_config leaks the temp directory — move the mkdtemp inside the protected region or clean it up on the raise path.
  • followups._followup_issue_body accepts the new source_context parameter but never renders it, while _plan_followup_issue_body emits a - Lookup context: ... line. As a result PR-review-filed trackers record only "...approved review on PR #" and contain no parent issue number or plan identity. _search_followup_trackers narrows primarily with "#<parent>" "follow-up" queries and _candidate_context_matches looks for #<number> in the candidate text, so a tracker filed from PR review cannot be found by a later plan-stage run on the same parent issue, nor by a later PR on that issue — only the bounded topic-term fallback query can reach it. Render source_context.render() in _followup_issue_body as the plan body does (or drop the parameter and state the asymmetry deliberately).
  • Two acceptance-criteria behaviors introduced here are untested. (a) In-batch semantic merge: nothing exercises reconcile_approved_followups(..., semantic_matcher=...) or _semantic_batch_matcher, so the group-N identity round-trip through parse_semantic_match and back into existing_index is unverified, as is the requirement that only high confidence merges. (b) The medium/low-confidence path: no test covers status == "uncertain", i.e. that the item is still filed, that the body gains the sanitized "Possible duplicate" section, and that the summary reports it as filed-and-uncertain rather than reused. Add a focused test for each in tests/test_followups.py.

Same-PR follow-ups

  • helpers/skill_runner.py uses inspect.signature(_publish_approved_followups) at call time to decide whether to pass source_context. That adapter exists only to keep two test doubles in tests/test_skill_helpers.py (fake_publish at ~line 1839 and ~line 1884) working with the old signature. Update those doubles to accept **kwargs / source_context and delete the runtime introspection from production code.
  • helpers/skill_runner._publish_pr_followups builds a FollowupSourceContext with related_pr_numbers only and no parent_issue_numbers, so the skill-mode flow loses the parent-issue query that is the primary narrowing signal for the plan-to-PR case this PR is meant to fix. Thread the issue number through from the caller if it is available there.
  • SemanticDedupeMatcher.match records usage with outcome="succeeded" and sets validation_status = "validated" before parse_semantic_match runs, so a provider response that fails contract validation is still counted as a validated success. Record the result after parsing, or mark it invalid when parsing raises.
  • In reconcile_approved_followups, the semantic branch accepts both a group-N string (1-based) and a bare int (treated as 0-based) for duplicate_of. The int form is unreachable through parse_semantic_match (batch candidate identities are strings, so an int fails the allowed-ids check) and the two indexing conventions in adjacent lines are easy to misread. Drop the int branch or make the indexing consistent and document it.
  • _create_approved_followup_issues, _create_plan_approved_followup_issues, and _format_created_followup_issue_summary in followups.py now have no callers; the first and third are still imported (unused) at orchestrator.py:343 and :349. Remove the dead functions and imports.
  • _format_publication_summary is always given the heading "Created approved-review future follow-up issues for PR #N:" / "Created approved-plan future follow-up issues:", including when every group was reused and nothing was created. Similarly _publish_plan_approved_followups labels the reused URLs under "Filed future follow-up issues:". Adjust the wording so a reuse-only publication does not claim issues were filed.

-- Anthropic Claude: claude-opus-5 (medium)

@wwind123

wwind123 commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

Review verdict: Blocking

Blocking review: GitHub PR checks are currently pending (test in progress). The semantic deduplication design is well-structured and handles existing tracker reuse, but there are several blocking correctness and documentation issues: parent issues are not excluded from the candidate search in PR review mode (risking suppression of future follow-ups against the very issue being closed), build_semantic_prompt candidate budgeting overflows prompt_char_limit and blindly slices the prompt (dropping up to 75% of candidates), _format_plan_approval_summary_with_followups produces contradictory reconciliation counts and misreports reused trackers as newly filed, user-facing CLI flags are missing from README.md, and in-batch semantic deduplication lacks test coverage.

Blocking issues

  • In src/coding_review_agent_loop/followups.py, _search_followup_trackers defines excluded_numbers as only {source_context.source_number} when source_context.source_kind == 'plan'. In PR mode (source_kind == 'pr'), parent_issue_numbers is not excluded. When searching for open follow-ups via repo:OWNER/REPO is:issue is:open "#{parent}" "follow-up", the PR's open parent issue can be returned. If the parent issue was itself created as a follow-up or contains follow-up headings, it matches _looks_like_followup_tracker and can be matched deterministically or semantically as a duplicate. This marks the follow-up as reused against the parent issue, so no new issue is filed; when the PR merges and closes the parent issue, the unfiled follow-up is lost. excluded_numbers must include *source_context.parent_issue_numbers.
  • In src/coding_review_agent_loop/semantic_dedupe.py, build_semantic_prompt calculates candidate_budget = max(256, prompt_char_limit // len(candidates)) without accounting for prompt instructions, source context, or proposed text (~3,300 chars overhead), and allocates candidate_budget // 3 for title plus candidate_budget for body per candidate (summing to ~1.33x candidate budget per candidate). With batches near the default candidate cap (50), the rendered prompt exceeds 20,000 characters before [:prompt_char_limit] slices it at 12,000 characters. This hard string slice cuts off mid-line and drops the majority of candidates from the prompt text while parse_semantic_match still validates against all candidates in allowed_ids. Candidate budgeting should fit within the remaining budget after prefix overhead and avoid slicing across candidate entries.
  • In src/coding_review_agent_loop/followups.py, when filing_enabled is true in _format_plan_approval_summary_with_followups, reused existing tracker URLs are included in issue_urls and incorrectly listed under Filed future follow-up issues:. Additionally, publication_details (which already contains the publication items, status, and its own Reconciliation: line) is inserted, followed by an unconditional duplicate Reconciliation: line that computes filed count using len(reconciliation.selected_groups). This creates contradictory summary lines whenever follow-ups are reused or cap-skipped (e.g. publication_details reporting 0 filed, 1 reused while the appended line reports 1 filed, 0 skipped by cap).
  • PR Use semantic dedupe for approved future follow-up filing #751 adds user-facing CLI flags (--semantic-followup-dedupe, --no-semantic-followup-dedupe, --semantic-followup-backend, --semantic-followup-model, --semantic-followup-timeout-seconds, --semantic-followup-max-calls, --semantic-followup-max-candidates, --semantic-followup-prompt-char-limit) in src/coding_review_agent_loop/cli.py and documents them in docs/local_agent_loop.md, but does not update README.md. Missing documentation for newly added user-facing flags must be updated in README.md.
  • Issue Use semantic dedupe for approved future follow-up issue filing #490 acceptance criteria explicitly require: 'In-batch follow-up reconciliation can merge semantically equivalent items even when wording differs substantially.' While tests/test_followups.py tests cross-stage existing issue reuse, there is no test verifying that in-batch reconciliation (_semantic_batch_matcher / reconcile_approved_followups) merges semantically equivalent items in a batch when deterministic keys and similarity thresholds do not match.

Same-PR follow-ups

  • Remove dead code in src/coding_review_agent_loop/followups.py: _create_plan_approved_followup_issues (lines 997-1020), _create_approved_followup_issues (lines 1293-1313), and _format_created_followup_issue_summary (lines 1315-1350) are unused after refactoring to _publish_issue_followup_groups.
  • Remove unused imports _create_approved_followup_issues and _format_created_followup_issue_summary from src/coding_review_agent_loop/orchestrator.py.

-- Google Antigravity: Gemini 3.8 Flash (High)

@wwind123

wwind123 commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

PR review round 1 reconciliation: settled reviewers: Claude, Antigravity. Finalization continues after reconciliation.

@wwind123

wwind123 commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

Coder follow-up

Implemented and pushed fixes for all Claude and Antigravity review items on the existing PR branch in commit 786a81c.

Addressed items

  • item-1: Blocking issue from Anthropic Claude: claude-opus-5 (medium), round 1: semantic_dedupe._isolated_provider_config is broken for `--semantic-followup-backend antigravit...
    • Resolution: Fixed Antigravity isolated configuration to use a single antigravity_models entry with antigravity_model unset, and protected temporary-directory cleanup on configuration failures.
  • item-2: Blocking issue from Anthropic Claude: claude-opus-5 (medium), round 1: followups._followup_issue_body accepts the new source_context parameter but never renders it,...
    • Resolution: Rendered FollowupSourceContext lookup context into PR-review issue bodies so parent issue and plan/PR identity remain searchable.
  • item-3: Blocking issue from Anthropic Claude: claude-opus-5 (medium), round 1: Two acceptance-criteria behaviors introduced here are untested. (a) In-batch semantic merge: noth...
    • Resolution: Added focused tests for high-confidence in-batch semantic merging and medium-confidence filing with a possible-duplicate note.
  • item-4: Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: helpers/skill_runner.py uses inspect.signature(_publish_approved_followups) at call time to d...
    • Resolution: Removed runtime signature introspection and updated the skill test publisher double to accept keyword context.
  • item-5: Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: helpers/skill_runner._publish_pr_followups builds a FollowupSourceContext with `related_pr_nu...
    • Resolution: Threaded the linked parent issue from skill-mode PR metadata into FollowupSourceContext.
  • item-6: Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: SemanticDedupeMatcher.match records usage with outcome="succeeded" and sets `validation_statu...
    • Resolution: Changed semantic usage records to become validated only after parsing, and to record invalid_output on contract-validation failure.
  • item-7: Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: In reconcile_approved_followups, the semantic branch accepts both a group-N string (1-based)...
    • Resolution: Removed the unreachable bare-integer batch identity branch; batch reconciliation now uses one-based group-N identities.
  • item-8: Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: _create_approved_followup_issues, _create_plan_approved_followup_issues, and `_format_created...
    • Resolution: Removed the unused follow-up issue creation and summary helpers and their orchestrator imports.
  • item-9: Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: _format_publication_summary is always given the heading "Created approved-review future follow-...
    • Resolution: Adjusted publication headings so reuse-only results do not claim newly created issues.
  • item-10: Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: In [src/coding_review_agent_loop/followups.py](file:///tmp/coding-review-agent-loop/wwind123-co...
    • Resolution: Excluded both the source PR/plan and all parent issue numbers from existing-tracker search results.
  • item-11: Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: In [src/coding_review_agent_loop/semantic_dedupe.py](file:///tmp/coding-review-agent-loop/wwind...
    • Resolution: Reworked prompt budgeting to reserve instruction overhead, pack complete candidate entries, and avoid final hard slicing.
  • item-12: Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: In [src/coding_review_agent_loop/followups.py](file:///tmp/coding-review-agent-loop/wwind123-co...
    • Resolution: Separated filed URLs from reused URLs in plan summaries and removed the duplicate reconciliation line.
  • item-13: Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: PR Use semantic dedupe for approved future follow-up filing #751 adds user-facing CLI flags (--semantic-followup-dedupe, --no-semantic-followup-dedupe...
    • Resolution: Documented the semantic follow-up dedupe flags and bounds in README.md.
  • item-14: Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: Issue Use semantic dedupe for approved future follow-up issue filing #490 acceptance criteria explicitly require: 'In-batch follow-up reconciliation can merge s...
    • Resolution: Added regression coverage proving semantically different wording can merge during in-batch reconciliation.
  • item-15: Same-PR follow-up from Google Antigravity: Gemini 3.8 Flash (High), round 1: Remove dead code in [src/coding_review_agent_loop/followups.py](file:///tmp/coding-review-agent...
    • Resolution: Removed the dead follow-up creation and formatting functions from followups.py.
  • item-16: Same-PR follow-up from Google Antigravity: Gemini 3.8 Flash (High), round 1: Remove unused imports _create_approved_followup_issues and `_format_created_followup_issue_summ...
    • Resolution: Removed the corresponding unused imports from orchestrator.py.

Remaining items

  • None.

Tests run

  • python3 -m pytest tests/test_followups.py tests/test_skill_helpers.py -q
  • python3 -m pytest tests/test_followups.py tests/test_orchestrator_pr.py -q
  • python3 -m pytest tests/test_followups.py tests/test_orchestrator_issue.py tests/test_orchestrator_pr.py tests/test_skill_helpers.py tests/test_split_materialization.py tests/test_decomposition.py -q
  • python3 -m pytest tests/test_followups.py tests/test_antigravity.py tests/test_usage.py -q

-- OpenAI Codex: gpt-5.6-luna (xhigh)

@wwind123

wwind123 commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

Review verdict: Approved

All sixteen carried items are addressed at 786a81c and each has a regression test. Verified directly: the antigravity isolated config now replaces the model chain instead of setting the legacy single-model field, and mkdtemp is cleaned up on the raise path; prompt packing now reserves the instruction/source/proposed prefix first and renders every candidate inside its own budget with a hard assertion instead of a post-render slice (checked the arithmetic for the 50-candidate/12000-char worst case, which now fits); PR-filed bodies render the lookup context; parent issue numbers are excluded from tracker search; usage records are only marked validated after the strict-JSON parse succeeds and are marked invalid_output otherwise; the unreachable int identity branch, the dead creation/summary helpers and their orchestrator imports are gone; reuse-only publications no longer claim issues were filed and the contradictory duplicate Reconciliation line is removed; the inspect-based signature shim is replaced by a real parent_issue_number parameter threaded from cmd_run_pr_round; and README.md now documents the new flags. New tests cover the in-batch group-N merge, the medium-confidence uncertain filing path, the parent-issue exclusion, prompt budgeting, the antigravity config, and invalid-output usage accounting. GitHub checks are still pending (test in_progress), so I have no global test result for this head; per the review instructions I did not run tests locally, and my verification is by source inspection.

Prior unresolved item dispositions

  • [item-1] Blocking issue from Anthropic Claude: claude-opus-5 (medium), round 1: semantic_dedupe._isolated_provider_config is broken for `--semantic-followup-backend antigravit... -> resolved
  • [item-2] Blocking issue from Anthropic Claude: claude-opus-5 (medium), round 1: followups._followup_issue_body accepts the new source_context parameter but never renders it,... -> resolved
  • [item-3] Blocking issue from Anthropic Claude: claude-opus-5 (medium), round 1: Two acceptance-criteria behaviors introduced here are untested. (a) In-batch semantic merge: noth... -> resolved
  • [item-4] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: helpers/skill_runner.py uses inspect.signature(_publish_approved_followups) at call time to d... -> resolved
  • [item-5] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: helpers/skill_runner._publish_pr_followups builds a FollowupSourceContext with `related_pr_nu... -> resolved
  • [item-6] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: SemanticDedupeMatcher.match records usage with outcome="succeeded" and sets `validation_statu... -> resolved
  • [item-7] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: In reconcile_approved_followups, the semantic branch accepts both a group-N string (1-based)... -> resolved
  • [item-8] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: _create_approved_followup_issues, _create_plan_approved_followup_issues, and `_format_created... -> resolved
  • [item-9] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: _format_publication_summary is always given the heading "Created approved-review future follow-... -> resolved
  • [item-10] Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: In [src/coding_review_agent_loop/followups.py](file:///tmp/coding-review-agent-loop/wwind123-co... -> resolved
  • [item-11] Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: In [src/coding_review_agent_loop/semantic_dedupe.py](file:///tmp/coding-review-agent-loop/wwind... -> resolved
  • [item-12] Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: In [src/coding_review_agent_loop/followups.py](file:///tmp/coding-review-agent-loop/wwind123-co... -> resolved
  • [item-13] Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: PR Use semantic dedupe for approved future follow-up filing #751 adds user-facing CLI flags (--semantic-followup-dedupe, --no-semantic-followup-dedupe... -> resolved
  • [item-14] Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: Issue Use semantic dedupe for approved future follow-up issue filing #490 acceptance criteria explicitly require: 'In-batch follow-up reconciliation can merge s... -> resolved
  • [item-15] Same-PR follow-up from Google Antigravity: Gemini 3.8 Flash (High), round 1: Remove dead code in [src/coding_review_agent_loop/followups.py](file:///tmp/coding-review-agent... -> resolved
  • [item-16] Same-PR follow-up from Google Antigravity: Gemini 3.8 Flash (High), round 1: Remove unused imports _create_approved_followup_issues and `_format_created_followup_issue_summ... -> resolved

-- Anthropic Claude: claude-opus-5 (medium)

@wwind123

wwind123 commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

Review verdict: Approved

All round 1 blocking and same-PR review items (item-1 through item-16) have been resolved with thorough implementation fixes and comprehensive test coverage. GitHub CI checks are currently pending (test check in progress).

Prior unresolved item dispositions

  • [item-1] Blocking issue from Anthropic Claude: claude-opus-5 (medium), round 1: semantic_dedupe._isolated_provider_config is broken for `--semantic-followup-backend antigravit... -> resolved
  • [item-2] Blocking issue from Anthropic Claude: claude-opus-5 (medium), round 1: followups._followup_issue_body accepts the new source_context parameter but never renders it,... -> resolved
  • [item-3] Blocking issue from Anthropic Claude: claude-opus-5 (medium), round 1: Two acceptance-criteria behaviors introduced here are untested. (a) In-batch semantic merge: noth... -> resolved
  • [item-4] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: helpers/skill_runner.py uses inspect.signature(_publish_approved_followups) at call time to d... -> resolved
  • [item-5] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: helpers/skill_runner._publish_pr_followups builds a FollowupSourceContext with `related_pr_nu... -> resolved
  • [item-6] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: SemanticDedupeMatcher.match records usage with outcome="succeeded" and sets `validation_statu... -> resolved
  • [item-7] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: In reconcile_approved_followups, the semantic branch accepts both a group-N string (1-based)... -> resolved
  • [item-8] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: _create_approved_followup_issues, _create_plan_approved_followup_issues, and `_format_created... -> resolved
  • [item-9] Same-PR follow-up from Anthropic Claude: claude-opus-5 (medium), round 1: _format_publication_summary is always given the heading "Created approved-review future follow-... -> resolved
  • [item-10] Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: In [src/coding_review_agent_loop/followups.py](file:///tmp/coding-review-agent-loop/wwind123-co... -> resolved
  • [item-11] Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: In [src/coding_review_agent_loop/semantic_dedupe.py](file:///tmp/coding-review-agent-loop/wwind... -> resolved
  • [item-12] Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: In [src/coding_review_agent_loop/followups.py](file:///tmp/coding-review-agent-loop/wwind123-co... -> resolved
  • [item-13] Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: PR Use semantic dedupe for approved future follow-up filing #751 adds user-facing CLI flags (--semantic-followup-dedupe, --no-semantic-followup-dedupe... -> resolved
  • [item-14] Blocking issue from Google Antigravity: Gemini 3.8 Flash (High), round 1: Issue Use semantic dedupe for approved future follow-up issue filing #490 acceptance criteria explicitly require: 'In-batch follow-up reconciliation can merge s... -> resolved
  • [item-15] Same-PR follow-up from Google Antigravity: Gemini 3.8 Flash (High), round 1: Remove dead code in [src/coding_review_agent_loop/followups.py](file:///tmp/coding-review-agent... -> resolved
  • [item-16] Same-PR follow-up from Google Antigravity: Gemini 3.8 Flash (High), round 1: Remove unused imports _create_approved_followup_issues and `_format_created_followup_issue_summ... -> resolved

-- Google Antigravity: Gemini 3.8 Flash (High)

@wwind123

wwind123 commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

PR review round 2 reconciliation: settled reviewers: Claude, Antigravity. Finalization continues after reconciliation.

@wwind123

wwind123 commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

Reviewers approved PR #751; watching GitHub checks in the foreground. No coder or reviewer agents will run while checks remain pending.

-- coding-review-agent-loop

@wwind123
wwind123 merged commit b919819 into main Sep 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Use semantic dedupe for approved future follow-up issue filing

1 participant