chore(lsp-pilot): retire the LSP pilot after Shell NO-GO (#839, #845) - #1110
Conversation
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Warning Review limit reached
Next review available in: 55 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (38)
📝 WalkthroughWalkthroughDocumentation and evaluation datasets for the LSP pilot are updated to repin the holdout/dev corpus to real merged PRs stratified by navigation intensity, mark synthetic baseline/candidate runs as retired/emptied, add a Go/No-Go decision section (NO-GO for Shell), and flag the existing report as superseded. ChangesLSP Pilot Corpus Repin and Decision
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related issues
Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request updates the LSP pilot evaluation setup by repinning the evaluation corpus from synthetic seed data to 20 real merged pull requests from the repository, stratified by navigation intensity. It updates the documentation in docs/lsp-pilot-report.md, docs/lsp-pilot.md, and evals/lsp-pilot/README.md to reflect this change, replaces synthetic smoke cases in evals/lsp-pilot/dev/cases.jsonl with real ones, and retires the synthetic baseline and candidate runs in baseline-lsp-off.jsonl, agent-lsp.jsonl, and serena.jsonl to empty. There are no review comments, so I have no feedback to provide.
There was a problem hiding this comment.
Pull request overview
Repins the LSP pilot’s held-out comparative corpus to real, merged PRs (pinned by head_sha/headRefOid) and retires the prior synthetic baseline and seed run captures, updating documentation to reflect the new corpus composition and the “empty pending real capture” status.
Changes:
- Replace
evals/lsp-pilot/holdout/cases.jsonlwith 20 real merged PR cases stratified by navigation intensity. - Update
evals/lsp-pilot/dev/cases.jsonlsmoke cases to real PRs and retire synthetic seed artifacts by emptying the baseline and prior candidate run JSONLs. - Update LSP pilot docs/README/report to describe the repinned corpus and mark the old synthetic report as superseded.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| evals/lsp-pilot/holdout/cases.jsonl | Replaces synthetic seed cases with 20 real merged PR pins and updated tags/strata. |
| evals/lsp-pilot/dev/cases.jsonl | Updates proposer-visible smoke cases to real PR pins. |
| evals/lsp-pilot/holdout/baseline-lsp-off.jsonl | Empties the synthetic baseline artifact now that the corpus has been repinned. |
| evals/lsp-pilot/runs/agent-lsp.jsonl | Retires the synthetic candidate run capture by emptying it. |
| evals/lsp-pilot/runs/serena.jsonl | Retires the synthetic candidate run capture by emptying it. |
| evals/lsp-pilot/README.md | Updates corpus/baseline documentation to reflect the repin and retirement-to-empty status. |
| docs/lsp-pilot.md | Updates initiative narrative to reference the repinned real-PR corpus. |
| docs/lsp-pilot-report.md | Adds a superseded banner to indicate the report body reflects the old synthetic seed run. |
Dev-Lead — review-changes (applied)Changes committed and pushed. |
Superseded by automated re-review at
|
Update — pilot run complete, NO-GO decision folded in (commit d0ae64f)Ran the real comparison over the repinned 20-PR corpus (live A/B,
NO-GO for Shell/bash-language-server — the ≥2× token clause fails decisively on both the exploratory and production-tier runs; high-nav is a wash at ~1.0×. Cold-start passes. Decision is scoped to this one language/server; the door is explicitly left open for TypeScript/Python/Go, and the measurement harness stays in-repo (dormant) for a per-language re-pilot. Production wiring is inert (no This PR now covers the full closeout: repin corpus → run → record decision. Merging it satisfies #845. |
Superseded by automated re-review at
|
d0ae64f to
1928486
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/lsp-pilot-report.md`:
- Around line 4-10: The disclaimer block in the markdown contains an empty
blockquote line and an extra blank line that trigger markdownlint. Update the
report text so the quoted warning in docs/lsp-pilot-report.md has no blank
quoted line and the surrounding spacing is tightened, keeping the same content
while making the markdownlint checks pass.
In `@evals/lsp-pilot/README.md`:
- Around line 70-80: Clarify the lifecycle wording for baseline-lsp-off.jsonl so
it is unambiguous whether the baseline is currently empty or already the active
frozen control. Update the README section around the “immutable LSP-off
baseline” heading and the references to the A/B runner script so the status,
current state, and any future first real capture are described consistently
without implying both “retired to empty” and “already committed/frozen” at the
same time.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 868fb38b-14ee-4dd8-a33b-17708fa11b0d
📒 Files selected for processing (8)
docs/lsp-pilot-report.mddocs/lsp-pilot.mdevals/lsp-pilot/README.mdevals/lsp-pilot/dev/cases.jsonlevals/lsp-pilot/holdout/baseline-lsp-off.jsonlevals/lsp-pilot/holdout/cases.jsonlevals/lsp-pilot/runs/agent-lsp.jsonlevals/lsp-pilot/runs/serena.jsonl
💤 Files with no reviewable changes (3)
- evals/lsp-pilot/runs/serena.jsonl
- evals/lsp-pilot/holdout/baseline-lsp-off.jsonl
- evals/lsp-pilot/runs/agent-lsp.jsonl
|
@coderabbitai resolve |
Dev-Lead — review-changes (applied)Changes committed and pushed. |
✅ Action performedComments resolved and changes approved. |
Dev-Lead — waiting on PR blockers (intent: review-changes)PR: #1110 |
|
Note @don-petry I reviewed this PR and no code changes were needed, but it still has blocking checks or reviews (failing or cancelled checks, or changes-requested reviews), so I cannot mark it done yet. I'll re-check automatically. |
The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
336474d to
2deecfe
Compare
Automated review — human attention neededThis PR has been through 3 automated review cycles since the last approval or escalation (cap: 3) without converging. Further automated review has been paused to avoid infinite loops. Please take a look manually, or close this PR if it's no longer needed. To re-engage the automated cascade with a fresh cycle budget, either remove the Posted by the donpetry-bot PR-review cascade. |
|
@donpetry-bot I'm on it — starting a fresh review now. Results will appear in a few minutes. |
donpetry-bot
left a comment
There was a problem hiding this comment.
Automated review — APPROVED ✓
Risk: MEDIUM
Reviewed commit: 5aa1845875074db680613b73333f4335fac30ea8
Review mode: triage-approved (single reviewer)
Summary
Retires the LSP review pilot (epic #839) after the Shell NO-GO recorded on #845. Net -4,497 lines across 38 files: 27 pilot-dedicated files deleted (evals/lsp-pilot/, scripts/lsp_pilot_.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, lsp-pilot-run.yml workflow, docs, all LSP tests) and 11 shared files surgically stripped of pilot hooks (engine.sh, review-one-pr.sh, token-metrics.sh, pr-review.yml, lint.yml, test-dev-lead.yml, both review prompts, two test files). All strips restore exact pre-pilot behavior.
Linked issue analysis
No closing keywords, by design — #839 is the epic and #845 is the go/no-go story. The NO-GO decision (bash-language-server / Shell, door left open for other languages) is recorded on #845 with metric evidence from two independent live A/B runs over the 20-PR real corpus (agg nav-token ratio 1.26x / 1.05x — no reduction, failing the pilot's success metric). This retirement is the owner-directed follow-through on that decision. Note: #845's decision record cites docs/lsp-pilot.md §7, which this PR deletes; the evidence tables are duplicated in the #845 comment itself, so the record survives in the issue as intended ("knowledge preserved in the issues, not the tree").
Findings
No blocking findings.
Verification performed:
- Grepped the full tree at head SHA for
lsp_pilot|LSP_PILOT|lsp-pilot|lsp-verification|_lsp_pilot|lpe_variant|mcp/lsp.json— zero dangling references outside deleted files.token-metrics.shcorrectly retains its non-pilot core (emit_token_record) with onlyemit_verification_recordremoved. - engine.sh strip restores unconditional
--output-format jsonand directparse_engine_usage claude "$final_stdout"— byte-equivalent to pre-pilot behavior for all consumers. - pr-review.yml removes the
lsp_pilot_variantworkflow_call input: verified no remaining in-repo caller passes it (the forwarding trigger stub lsp-pilot-run.yml is deleted in this same PR), and the pilot was opt-in with consumer repos never setting it. - Workflow changes are pure removals of opt-in steps/env — no new actions, permissions, or triggers introduced.
- Test deletions are all pilot-scoped; the
ack-test-deletionlabel is present. Remaining edits to test_holdout_guard.bats and test_mcp_connectivity_check.bats only drop/replace pilot fixtures; the guard mechanism tests remain intact. - Delta since last reviewed SHA (dd3c6f3): only a merge of main bringing in the unrelated tests/test_push_protection.bats — PR content unchanged.
Non-blocking notes:
- The PR body still describes the earlier repin phase; the 2026-07-09 repurpose comment documents the retire scope. Consider updating the body before merge for a clean squash-commit message.
- Prior review cycles 1–3 posted fix-requested verdicts with empty findings sections (a template artifact, not real issues), which is why the cascade failed to converge — nothing substantive was outstanding.
- Secret-scan MCP tool unavailable this run; gitleaks CI check is green and the diff is ~pure deletion (7 added lines, all restored pre-pilot code or fixture renames).
CI status
All required checks green at 5aa1845: shellcheck, ShellCheck, bats, unit-tests, unit, Lint, CodeQL (actions + python), SonarCloud Quality Gate passed (0 new issues), Secret scan (gitleaks), agent-shield, holdout-guard, validate-fixtures, gh-aw-compile, all guard/permission/stub-structure checks. CodeRabbit: APPROVED (2 earlier minor comments resolved). Skipped jobs are ecosystem-conditional (npm/pip/cargo audits) — expected.
Reviewed automatically by the PR-review agent (single-reviewer mode: fable 5). Reply if you need a human review.
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…#1110) The LSP language-server pilot is a decided NO-GO for Shell/bash-language-server (#845; two live A/B runs: sonnet 1.26x / opus 1.05x nav-token ratio, well under the >=2x bar). Remove the ~3,800 LOC pilot footprint rather than carry it dormant. Removed (27 dedicated files): evals/lsp-pilot/*, scripts/lsp_pilot_*.sh, setup-lsp-pilot.sh, lib/lsp-verification.sh, .github/mcp/lsp.json, .github/workflows/lsp-pilot-run.yml, docs/lsp-pilot*.md, all tests/**/*lsp*. Surgically stripped the LSP hooks from 11 shared production files, preserving the Context7/general-MCP mechanism (REVIEW_MCP_CONFIG/REVIEW_MCP_ALLOWED_TOOLS, epic #676/#681) untouched: - review-one-pr.sh: drop lsp-verification source + apply_lsp_verification (deep + audit) + the LSP_PILOT_ENABLED emit block/trap - engine.sh: drop _lsp_pilot_active + the stream-json capture branches; the non-pilot path reverts to --output-format json parsed directly (unchanged) - token-metrics.sh: drop emit_verification_record + emit_lsp_coldstart_record (dead; no callers outside the deleted files) - prompts/deep-review.md + security-audit.md: drop the lsp_verification annotation block (dead instruction weight on every production review) - pr-review.yml: drop lsp_pilot_variant input + LSP_PILOT_ENABLED env + the LSP cache/setup steps - lint.yml / test-dev-lead.yml: drop registrations of the deleted lsp tests - stub-claude fixture + test_holdout_guard.bats + test_mcp_connectivity_check.bats: drop LSP-only cases (generic behavior stays covered) The reusable harness + per-language restart recipe + the Shell corpus are pinned in #1124 (rebuild ref f882266); the decision + numbers are on #845. A future per-language re-pilot (Python #1125 / TS-JS #1126) cherry-picks from that ref. Validation: orphan grep empty; shellcheck clean; YAML parses; Context7 plumbing intact; holdout-guard + mcp-connectivity + engine/token-metrics bats green. Co-authored-by: donpetry-bot <{}+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
What & why
Repins the LSP pilot's frozen comparative corpus (
evals/lsp-pilot/holdout/cases.jsonl) from synthetic seed PRs to 20 real merged PRs from this repo, pinned by their trueheadRefOid. This is the "swap in the real pilot PR set" step the corpus README always anticipated, and it unblocks the go/no-go decision on #845 — which cannot honestly be recorded against synthetic seed data.Part of epic #839. This PR changes only the eval corpus + docs — no engine/workflow behavior changes.
The corpus (stratified by navigation intensity, not defect archetype)
The pilot's success metric is navigation-token reduction with no precision regression — driven by cross-file navigation during review. So the 20 are stratified by how much navigation a correct review demands:
scripts/lib/*.shhelper → follow to callers in other files)publishDiagnosticshit)Why the original archetypes were dropped
An exhaustive sweep of real history (300 merged + all closed-unmerged shell PRs, two independent agents) found the original synthetic slots cannot be filled from real history:
shellcheck --severity=warning -xCI gate has run on every push since ~2026-05-16 (feat: Actions Fleet Monitor — pure telemetry, shim interface, docs, lint #197), so no such defect survives to any PR head, merged or closed.The one diagnostics case that does survive is PR #196: 5× SC2086 word-splitting in
pr_review_health.sh, which slipped the gate because SC2086 is info-level. bash-language-server surfaces it as a real diagnostic — the single legitimate defect-verification case in real history.Baseline / runs retired
The synthetic
baseline-lsp-off.jsonlandruns/*.jsonlwere keyed to the now-removed #701–706, so they're emptied rather than left dangling. The real A/B runner (scripts/lsp_pilot_run.sh) captures the LSP-off and LSP-on legs live on the same real PRs in one run, so the comparison does not depend on a pre-committed frozen baseline.docs/lsp-pilot-report.mdis banner-marked superseded.Decision surfaced for reviewers
The original design (#841) kept an immutable frozen LSP-off baseline as an anti-reward-hacking anchor. The #844 live A/B runner supersedes that by generating both legs live. This PR retires the frozen synthetic baseline; if you want to retain the frozen-baseline discipline, the first real LSP-off capture over these 20 PRs should be committed once and thereafter treated as immutable. Flagging rather than deciding unilaterally.
Next step (not in this PR)
Run
scripts/lsp_pilot_run.shover the repinned corpus per candidate server (within the ≤120 deep-tier-run cost cap), render the real report, then record the human go/no-go on #845.Validation
validate-cases.py evals→ green (43 cases across dev+holdout, no cross-split id overlap)tests/lsp_pilot_compare.bats+tests/lsp_pilot_report.bats→ pass (use fixtures, not committed data)donpetry-botauthor passes;github-actions[bot]proposer still blocked (guard intact)shellcheck🤖 Generated with Claude Code
Summary by CodeRabbit
Documentation
Tests