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
The E2E integration test (tests/integration/e2e_test.go) and the GitHub Actions workflows were last substantially updated before the 0.2.0 milestone features shipped. They do not cover or correctly reflect several things added since then. This issue tracks everything that needs catching up.
1. tests/integration/e2e_test.go
Missing coverage
PR indexing — no test exercises simili index --include-prs or verifies that qdrant.pr_collection is correctly populated when set.
pr-duplicate CLI — no test invokes simili pr-duplicate end-to-end; the mergeSearchResults helper and the LLM verdict path are only covered by command-level unit tests, not an integration run.
DuplicateCandidates config wiring — TestEndToEndPipeline constructs a config.Config directly and never calls applyDefaults(), so Transfer.DuplicateConfidenceThreshold is always 0 in this test path (the fallback in the step handles it, but it means the config default is untested end-to-end).
Dead code
MockStep struct is defined but never used. Either write a test that exercises it or remove it.
2. .github/workflows/e2e-test.yml
Go version drift
Steps that set up Go pin go-version: '1.23'. The module's go.mod requires Go 1.24. This means CI builds on a different toolchain than local dev. All go-version fields should be updated to '1.24' or switched to go-version-file: go.mod to auto-track the module.
Seeded E2E config is stale
The .github/simili.yaml written inside the test repo (step 2) and the inline index-cfg.yaml (step 5) are missing fields added in recent milestones:
The embedded triage workflow template (step 7) does not pass QDRANT_PR_COLLECTION as an env var, so PR-collection features are untested end-to-end.
Missing E2E scenarios
PR duplicate detection — no step creates a test PR, runs simili pr-duplicate, and asserts the output JSON structure.
--include-prs indexing — no step runs simili index --include-prs and verifies the PR collection is populated in Qdrant.
Related-but-not-duplicate detection — the Verify similarity detection step only greps for similar|duplicate|related|#1. It should also verify that when related issues exist but no high-confidence duplicate is found, a [!NOTE] block (not [!WARNING]) appears in the comment.
Qdrant PR collection cleanup — step 12 only deletes the issues collection (TEST_COLLECTION). Any PR collection created during the run (simili-e2e-prs-${{ github.run_id }} or similar) is never deleted.
3. .github/workflows/ci.yml
go-version: '1.23' across all three jobs (build, lint, vet) → should be '1.24' or go-version-file: go.mod.
golangci/golangci-lint-action@v4 → latest stable is v6; v4 no longer receives updates.
codecov/codecov-action@v4 → latest is v5.
4. .github/workflows/auto-close.yml
go-version: '1.23' → same drift as above.
Builds the CLI from source (go build -o simili-cli) rather than using the Docker action (uses: ./) like triage.yml. This means the auto-close workflow tests a freshly compiled binary but bypasses the Docker entrypoint entirely — entrypoint-level bugs would not be caught here.
5. .github/workflows/triage.yml
The bot_users config field (BotUsers []string) allows arbitrary bot usernames to be suppressed via YAML config, but the workflow's if: guard hard-codes only gh-simili-bot and github-actions[bot]. Custom bot_users entries set in simili.yaml have no effect at the workflow trigger level. Worth either documenting this limitation clearly or finding a way to surface it.
The pull_request trigger runs the generic process command. Now that pr-duplicate exists as a dedicated CLI command for PR duplicate detection, it is worth evaluating whether the PR triage path should route to pr-duplicate instead of (or alongside) process.
Suggested order of work
Fix Go version drift across all four workflow files — use go-version-file: go.mod.
Bump golangci-lint-action → v6 and codecov-action → v5 in ci.yml.
Update the seeded E2E configs to include duplicate_candidates and qdrant.pr_collection.
Add PR collection to the Qdrant cleanup step.
Remove or use the dead MockStep in e2e_test.go.
Add a PR-indexing + pr-duplicate E2E scenario (can be a new job or additional steps).
Tighten the Verify similarity detection assertion to cover the [!NOTE] related-issues block.
Raised during review of PR #100 (issue #56 hybrid reasoning step).
Context
The E2E integration test (
tests/integration/e2e_test.go) and the GitHub Actions workflows were last substantially updated before the 0.2.0 milestone features shipped. They do not cover or correctly reflect several things added since then. This issue tracks everything that needs catching up.1.
tests/integration/e2e_test.goMissing coverage
simili index --include-prsor verifies thatqdrant.pr_collectionis correctly populated when set.pr-duplicateCLI — no test invokessimili pr-duplicateend-to-end; themergeSearchResultshelper and the LLM verdict path are only covered by command-level unit tests, not an integration run.ctx.Metadata["related_issues"]is populated afterDuplicateDetector.Run, nor thatbuildDuplicateSectionproduces a[!NOTE]block when related issues exist but no duplicate is detected (added in PR feat(duplicate): hybrid reasoning step — typed related issues, configurable top-N, confidence fix (closes #56) #100 / issue Enhancement: Hybrid Reasoning Step for Similarity Confirmation #56).DuplicateCandidatesconfig wiring —TestEndToEndPipelineconstructs aconfig.Configdirectly and never callsapplyDefaults(), soTransfer.DuplicateConfidenceThresholdis always 0 in this test path (the fallback in the step handles it, but it means the config default is untested end-to-end).Dead code
MockStepstruct is defined but never used. Either write a test that exercises it or remove it.2.
.github/workflows/e2e-test.ymlGo version drift
go-version: '1.23'. The module'sgo.modrequires Go 1.24. This means CI builds on a different toolchain than local dev. Allgo-versionfields should be updated to'1.24'or switched togo-version-file: go.modto auto-track the module.Seeded E2E config is stale
The
.github/simili.yamlwritten inside the test repo (step 2) and the inlineindex-cfg.yaml(step 5) are missing fields added in recent milestones:defaults.duplicate_candidates(new in PR feat(duplicate): hybrid reasoning step — typed related issues, configurable top-N, confidence fix (closes #56) #100 / issue Enhancement: Hybrid Reasoning Step for Similarity Confirmation #56)qdrant.pr_collection(new in PR feat(index): PR indexing with dedicated collection + simili pr-duplicate CLI #97 / PR indexing)The embedded triage workflow template (step 7) does not pass
QDRANT_PR_COLLECTIONas an env var, so PR-collection features are untested end-to-end.Missing E2E scenarios
simili pr-duplicate, and asserts the output JSON structure.--include-prsindexing — no step runssimili index --include-prsand verifies the PR collection is populated in Qdrant.Verify similarity detectionstep only greps forsimilar|duplicate|related|#1. It should also verify that when related issues exist but no high-confidence duplicate is found, a[!NOTE]block (not[!WARNING]) appears in the comment.TEST_COLLECTION). Any PR collection created during the run (simili-e2e-prs-${{ github.run_id }}or similar) is never deleted.3.
.github/workflows/ci.ymlgo-version: '1.23'across all three jobs (build,lint,vet) → should be'1.24'orgo-version-file: go.mod.golangci/golangci-lint-action@v4→ latest stable is v6; v4 no longer receives updates.codecov/codecov-action@v4→ latest is v5.4.
.github/workflows/auto-close.ymlgo-version: '1.23'→ same drift as above.go build -o simili-cli) rather than using the Docker action (uses: ./) liketriage.yml. This means the auto-close workflow tests a freshly compiled binary but bypasses the Docker entrypoint entirely — entrypoint-level bugs would not be caught here.5.
.github/workflows/triage.ymlbot_usersconfig field (BotUsers []string) allows arbitrary bot usernames to be suppressed via YAML config, but the workflow'sif:guard hard-codes onlygh-simili-botandgithub-actions[bot]. Custombot_usersentries set insimili.yamlhave no effect at the workflow trigger level. Worth either documenting this limitation clearly or finding a way to surface it.pull_requesttrigger runs the genericprocesscommand. Now thatpr-duplicateexists as a dedicated CLI command for PR duplicate detection, it is worth evaluating whether the PR triage path should route topr-duplicateinstead of (or alongside)process.Suggested order of work
go-version-file: go.mod.golangci-lint-action→ v6 andcodecov-action→ v5 inci.yml.duplicate_candidatesandqdrant.pr_collection.MockStepine2e_test.go.pr-duplicateE2E scenario (can be a new job or additional steps).Verify similarity detectionassertion to cover the[!NOTE]related-issues block.Raised during review of PR #100 (issue #56 hybrid reasoning step).