TestNeo
TestNeo Docs Release Intelligence
Product guide

Release Intelligence — setup & end-to-end

Turn your IDE into a release-confidence engine: validate PRs with PASS / WARN / BLOCK, unify incident history into Engineering Memory, cluster failure patterns with 30-day trend, gate named Release Bundles, and learn from post-ship outcomes — in Cursor, VS Code, CI, and the web app.

Customer one-liner: Upload your incident history once. Every PR and every release decision gets smarter — with cited fixes from your team, not generic AI guesses.
Primary MCP tools: testneo_pr_validation_workflow (validate + Release Brief) or testneo_developer_release_workflow (mega-tool: memory sync → optional code generate → validate → optional bundle + gate). Planning runs without write access; test execution needs confirm: true + TESTNEO_MCP_ALLOW_WRITE=true.
ingest (Jira/CSV/postmortem) → patterns + trend → PR validate + memory match → release bundle + gate → record outcome → calibration

Business flow (end to end)

Five stages connect organizational memory to every ship decision:

StageWhoWhat happensOutcome
1. IngestQA leadUpload bug CSV, sync Jira, or paste postmortem RCAUnified incident timeline in Engineering Memory
2. PatternsQA leadRe-cluster → review source mix + Worsening/Stable trendRepeat failures visible before sprint ship
3. ValidateDeveloperPR validation + memory match cards with pattern_id linksKnow why risk is high before merge
4. ShipEM / PMNamed release bundle → Evaluate Gate → confidence + briefData-backed go/no-go for this deploy
5. LearnEM / on-callRecord rollback/incidents → calibration panelRead-only hints (e.g. ignored patterns → 3× rollback rate)

Trust: Calibration suggestions are read-only — TestNeo never auto-changes your gate threshold.

The intelligence lifecycle

Phase 1 — Onboard Create a project, connect repo context, optional CI. Enables blast radius and component health.
Phase 2 — Build signals Generate or import tests, run locally or in CI. Each run feeds failure rates, flakiness, and coverage maps.
Phase 3 — Validate & ship Every PR gets impact analysis + risk score. Jira/CSV bugs auto-sync before validate (Phase A) and match by changed files.

Teams with few tests today: start with MCP Customer E2E (generate → run), then return here for PR validation.

What is a PR validation?

One PR validation = one full review of a pull request or branch diff:

  1. Impact analysis on changed files
  2. Risk score (0–100) and AI release brief
  3. Optional impacted test execution (uses your test runs allowance separately)
  4. Evidence, fix plan, and PR comment draft

Each run is stored at /web/pr-validation/<workflow_id> — share the link in GitHub or Slack. Re-opening the same workflow does not use another credit.

SignalScoreMeaning
🟢 PASS0–34Low risk; standard review
🟡 WARN35–69Review impacted validation before merge
🔴 BLOCK70–100Blocking findings; hold the release

Three ways to validate: MCP in Cursor/VS Code · comment @TestNeo validate on a GitHub PR (when GitHub Release Intelligence is enabled) · manual trigger in the web app.

GitHub Release Intelligence shipped

Opt-in per project. When enabled, every PR open/sync (or a comment trigger) runs the same engine as MCP — including parallel impacted test execution by default.

Setup (5 minutes)

  1. PR Validation or Release Readiness → GitHub Release IntelligenceStep 1 — Connect repository (owner/repo + PAT with repo scope)
  2. Index from GitHub on your target branch — see Code index from GitHub (replaces ZIP for connected repos)
  3. Enable auto-validation → Register webhook (or use Run on a PR # for smoke test)
  4. Toggle Execute impacted tests (default on) and optional Jira sync before validate
  5. On any open PR, comment @TestNeo validate to re-run
SettingDefaultNotes
execute_impacted_teststrueRuns mapped tests on PR (parallel, max 10)
max_parallelism4Concurrent test runs
comment_trigger_enabledtrue@TestNeo validate on PR comments
post_check_runtrueGitHub Check Run on head SHA

Release gate in CI: use the testneo-release-gate GitHub Action with a bundle_id — returns GATE_PASS or fails the job on GATE_BLOCK.

Code index from GitHub

No ZIP upload when your repo is connected — clone, index, and reuse across PR validations for blast radius, impacted tests, and execution evidence.

Blast radius See which flows and functions change when a PR lands — grounded in your repo structure, not guesses.
Impacted tests Map changed code to tests already in TestNeo. Execute up to 10 mapped tests per PR when enabled.
Version history Index per branch. Re-index, activate an older version, or download JSON from Index history.

Step by step

  1. Connect GitHub — Release Intelligence → Step 1 — Connect repository (owner/repo + PAT)
  2. Pick branch — Code index → Branch to index (default or feature branch)
  3. Index from GitHub — Wait 1–3 minutes; confirm Active index shows file/function counts
  4. Validate PRs — Leave Use code impact when index is available ON in GitHub Release Intelligence
PAT scopes (minimum): Classic repo. Add webhook scope if you use Register webhook from the UI.
Fine-grained: Contents Read · Pull requests Read and write · Metadata Read · Webhooks Read and write (optional).
Self-hosted: set GITHUB_ENCRYPTION_KEY in server .env before first connect. If the key changes, use Update token and paste a new PAT.

Without a code index, PR validation still runs but shows neutral execution evidence and no blast radius. Air-gapped repos: AI Assistant → Code Scanning (ZIP) or MCP testneo_sync_code_structure.

Hands-on demo — GitHub to ship readiness

~15 minutes on app.testneo.ai: connect repo → index → Engineering Memory → validate a PR.

StepWhere in TestNeoWhat you should see
1. ProjectCreate or open a project with at least one environmentTests exist or will be added; risk scoring works from day one
2. Connect GitHubPR Validation → GitHub Release IntelligenceConnected repo name; PAT stored securely
3. Code indexSame panel → Code index → branch dropdown → Index from GitHubActive index with file/function counts; optional index history row
4. Engineering MemoryEngineering Memory → upload bug CSV or Add postmortemEntries ingested; Re-cluster on Patterns tab
5. Auto-validationGitHub Release Intelligence toggles + Register webhookWebhook active; or use Run on a PR # for a manual smoke test
6. PR validationPR Validation detail for the runRisk score + PASS/WARN/BLOCK; memory matches when changed files overlap prior incidents
7. Release readiness (optional)Release Readiness → bundle + gateConfidence score across validated PRs in the window
Sample fixtures (optional): Use your own bug CSV and postmortem, or start from TestNeo sample files in the testneo-api fixtures folder (realworld_app_engineering_memory_bugs.csv, realworld_app_postmortem_signin.md). Memory is project-scoped — matching uses changed file paths in the PR diff, not the GitHub repo name.
Demo script (15 min) 1) GitHub + active index · 2) Memory + one pattern · 3) PR on a hot file · 4) Risk breakdown + matches · 5) Release Readiness (if time)
Common fixes Empty branch list → update PAT (repo). 0 memory matches → PR paths must overlap CSV/postmortem. 0 impacted tests → run tests in TestNeo first. Webhook not firing locally → use Run on PR #.

Full customer setup: Customer PR validation flow. Self-hosted / local stack: Realworld App demo.

Setup — MCP in your IDE

1. Account & API key

Sign up → Settings → API keys (tn_…).

2. MCP config (Cursor or VS Code)

Cursor: ~/.cursor/mcp.json · VS Code + Copilot: .vscode/mcp.json in your project — then Developer: Reload Window (no npm install).

{
  "mcpServers": {
    "testneo": {
      "command": "npx",
      "args": ["-y", "@testneo/mcp-server@0.2.1"],
      "env": {
        "TESTNEO_BASE_URL": "https://app.testneo.ai",
        "TESTNEO_API_KEY": "YOUR_API_KEY",
        "TESTNEO_MCP_ALLOW_WRITE": "false"
      }
    }
  }
}

Set TESTNEO_MCP_ALLOW_WRITE to true only when you want test execution inside validation.

3. Verify

In chat: Validate my TestNeo connection or call testneo_validate_connection.

4. IDE playbooks (auto-behavior)

Optional IDE playbooks (Cursor, VS Code Copilot, and other agents) auto-detect git context and call testneo_pr_validation_workflow first when configured in your project.

Full install steps: MCP Quickstart.

End-to-end checklist (PR focus)

StepAction
1MCP connected (testneo_validate_connection)
2testneo_list_projects → note <PROJECT_ID>
3Connect Jira once (AI Assistant → Jira Integration → select project key) or prepare bug CSV
4testneo_pr_validation_workflow with confirm: false — or testneo_developer_release_workflow for one-shot generate + validate + bundle
4bOptional: enable GitHub Release Intelligence → comment @TestNeo validate on PR
5Open /web/pr-validation/<workflow_id> in the app
6If BLOCK → testneo_explain_failure + testneo_suggest_fix
7Sprint ship → create release bundle → Evaluate Gate
8Engineering Memory → Patterns tab → Re-cluster → review trends
9After deploy → Record outcome on Release Readiness → review calibration

Greenfield (no tests yet)? Run Customer E2E first, then repeat from step 4 on every PR.

Prompt techniques (copy-paste)

Replace <PROJECT_ID> and <PR_NUMBER> with your values. More prompts: MCP Prompt Packs — PR Validation.

Validate PR (planning only)

Ask in Cursor / Copilot:

Validate PR <PR_NUMBER> for project <PROJECT_ID>.
Use git to detect base_sha, head_sha, and changed_files.
Call testneo_pr_validation_workflow with confirm false.
Show PASS/WARN/BLOCK, risk score, top findings, and the PR comment draft.
Give me the workflow_id link to the web board.

Preflight (before you push)

I'm modifying [list files] in project <PROJECT_ID>.
What's the historical failure rate and flakiness on related tests?
Have we seen BLOCK-level PRs on these paths recently?

After BLOCK — explain & fix

Explain why this PR is blocked — root cause per finding.
Then give me the NOW/NEXT fix plan and which tests to rerun.

Release readiness (end of sprint)

Is project <PROJECT_ID> ready to release to production?
Give me release confidence and a Go / No-Go verdict with top risks.

PR risk trend

Show recent PR validation history for project <PROJECT_ID> —
what's the risk trend over the last two weeks?

🆕 Define a Release Bundle and get unlock actions (v1.1)

Define release v2.4.0 for project <PROJECT_ID>.
Include these PR validation IDs: [<WF_ID_1>, <WF_ID_2>, <WF_ID_3>].
Gate policy: both. Min confidence: 85.
What do I need to fix to ship?

🆕 Pre-validate Engineering Memory hint (v1.1)

I'm about to change: app/services/order_service.py, app/models/order.py.
Before I push — any historical risk patterns for these files? Project <PROJECT_ID>.

Patterns + trend (QA lead)

Call testneo_refresh_engineering_memory_patterns with project_id <PROJECT_ID>.
Call testneo_list_engineering_memory_patterns with project_id <PROJECT_ID>.
Summarize worsening patterns, source_mix, and best_resolution for each.

Full ship loop + outcome learning (EM5–EM8)

Create release bundle v2.4.0 for project <PROJECT_ID> with workflow_ids [...].
Call testneo_evaluate_release_gate with bundle_id, policy both, min_confidence 85.
After deploy: testneo_record_release_outcome with rollback / incident_within_7d.
Call testneo_get_release_calibration — leadership summary.

Engineering Memory — validate PR with Jira (Phase A, default)

Validate PR <PR_NUMBER> for project <PROJECT_ID>.
Use git for base_sha, head_sha, changed_files.
Call testneo_pr_validation_workflow with sync_jira_before_validate true and confirm false.
Show Historical Incident Matches and explain they match by file/area — not PR number.

Engineering Memory — Jira & CSV → live PR matches

Store historical bugs in TestNeo (bug CSV, Jira Bug/Incident issues, postmortems). When a PR is validated, memory rows are scored against that PR's changed files — there is no permanent bug-to-PR link.

Phase A flow (shipped)

QA files bug in Jira (label: orders)
     ↓
Dev validates PR (MCP / webhook / open PR in UI)
     ↓
Auto: Jira → Engineering Memory  ← Phase A
     ↓
Auto: score memory vs PR changed files
     ↓
"Engineering Memory Match" on PR board
PathWhen Jira syncs
MCP testneo_pr_validation_workflowStep 0a — sync_jira_before_validate: true (default)
GitHub webhookBefore validate — toggle in GitHub Release Intelligence
PR detail UIBefore live · live memory lookup on page load
ManualEngineering Memory page → Sync from Jira (optional)

Setup (one-time)

  1. TestNeo → AI Assistant → Jira Integration → connect → select project key (e.g. SCRUM)
  2. Team-managed Jira: use labels (orders, checkout) — Components may not exist
  3. Or upload bug CSV with affected_area column (no Jira required)

MCP: Workflow 8 · Workflow 10 · Prompts EM1–EM9 · Tools: Engineering Memory reference

Unified patterns & trend

After ingest, Re-cluster groups memory entries into unified failure patterns across Jira, CSV, and postmortem sources. Each pattern shows:

  • Occurrence count with source mix (e.g. Seen 5× (2 Jira, 1 postmortem))
  • Trend badgeWorsening if last 30 days > prior 30 days; otherwise Stable
  • Best-known fix from your RCAs
  • Shareable drill-down: /web/engineering-memory?project_id=<ID>&pattern_id=<ID>&view=patterns

Web UI — step by step

  1. Open Engineering Memory → select project → Patterns tab
  2. Click Re-cluster after bulk ingest
  3. Click a pattern row → detail panel with trend narrative + contributing entries
  4. View contributing entries filters the Entries tab by pattern_id

PR validation link-through

On /web/pr-validation/<workflow_id>, Engineering Memory Match cards include View pattern → — opens the pattern detail with context preserved.

MCP

testneo_refresh_engineering_memory_patterns(project_id)
testneo_list_engineering_memory_patterns(project_id)          // list + trend
testneo_list_engineering_memory_patterns(project_id, pattern_id)  // detail
testneo_list_engineering_memory(project_id, pattern_id)       // contributing entries

Release Bundles — named release candidates v1.1

A Release Bundle is a named group of PR validations representing a specific release candidate — "Release v2.4.0 = these 8 PRs" instead of "the last 14 days of history". The confidence score, unlock actions, and AI Release Brief are all scoped to exactly that bundle.

Why bundles matter: Time-window scores are averages. Bundles answer the real question: "Are the PRs going out in this deploy safe to ship?"

What you get from a bundle

  • Confidence score — 5-factor unified score scoped to exactly the PRs in the bundle
  • Unlock actions — "Fix PR #278 → +8 confidence" — specific, not vague
  • AI Release Brief — Go/No-Go verdict, release notes, deploy checklist, rollback plan
  • CI/CD gate — API endpoint your pipeline calls; returns GATE_PASS or GATE_BLOCK
  • Shareable link/web/release-readiness?bundle_id=<id> — PM and on-call don't need Cursor

MCP tools (C22–C25)

ToolWhat it does
testneo_developer_release_workflowMega-tool (C25). Memory sync → optional generate_if_unmapped → validate → optional auto_release_bundle + gate in one call.
testneo_sync_code_structureIndex repo ZIP for code impact before first PR validate.
testneo_generate_tests_from_codeGenerate NLP tests from function/file/folder/codebase (VS Code parity).
testneo_create_release_bundleDefine release candidate by name + PR validation IDs. Returns confidence + unlock actions.
testneo_generate_release_briefAccepts bundle_id to generate a brief scoped to the bundle.
testneo_pre_validate_hintEngineering Memory check before coding — surfaces historical risk for changed files (C23).
testneo_get_release_readinessAccepts bundle_id to score exactly the bundled PRs.

Unified confidence formula (v1.1 — 5 factors)

FactorWeightSignal
Verification Coverage35%% of PRs that are PASS or WARN (not BLOCK)
Execution Evidence20%Impacted tests ran + pass rate + flaky suppression. Neutral (50) if no runs — no penalty.
Average PR Risk20%Inverted mean risk score across all PRs in bundle
Component Health15%High-risk / worsening components across changed files
Engineering Memory10%HIGH-tier incident matches — recurring failure patterns

CI/CD Gate policies

PolicyBlocks when
both (recommended)Any BLOCK PR exists or confidence < threshold
no_blockAny BLOCK PR exists
min_confidenceConfidence < threshold
warn_onlyNever hard-blocks — posts GATE_WARN check

Override: EM-level users can pass override_reason to force-pass the gate. The override is recorded with user, timestamp, and reason for audit.

Gate + outcome stub

When testneo_evaluate_release_gate returns GATE_PASS, TestNeo automatically creates an outcome stub row you can update after deploy. Use testneo_evaluate_release_gate from MCP or Evaluate Gate in Release Readiness.

Outcome learning — ship → measure → calibrate

Close the loop after production deploy. TestNeo correlates gate decisions with post-ship signals (rollback, incidents, hotfixes) and surfaces read-only calibration suggestions — e.g. “Releases that ignored HIGH memory patterns had 3× rollback rate.”

Important: Calibration never auto-changes your gate policy. Suggestions are advisory until your team opts in.

Web UI — step by step

  1. Open Release Readiness → select a release bundle (?bundle_id=<uuid>)
  2. Click Evaluate Gate (GATE_PASS stubs an outcome row) or Mark bundle deployed
  3. After deploy window: Release Outcome LearningRecord outcome — rollback, incident within 7d/30d, hotfix count, notes
  4. After 2–3 recorded outcomes: Calibration panel shows suggestions

Note: Post-ship Jira/PagerDuty webhook setup is API/MCP advanced only in the current release — not in the web UI. Day-1 ship loops use manual Record outcome above.

MCP tools

ToolPurpose
testneo_evaluate_release_gateGate decision; stubs outcome on GATE_PASS
testneo_get_release_outcomesList outcome history for project/bundle
testneo_record_release_outcomeMark deployed or PATCH post-ship signals
testneo_get_release_calibrationRead-only policy suggestions

Recipe: MCP Workflow 10 · Prompts EM5–EM8

15-minute customer demo

Quick timeline for a live call. Step-by-step setup: Hands-on demo · Code index from GitHub.

MinStepWeb UIMCP
0–2Connect GitHub + code indexGitHub Release Intelligence → Code index
2–5Ingest bugs + postmortemEngineering Memory → upload / pastetestneo_ingest_*
5–7Patterns + trendPatterns tab → click patterntestneo_list_engineering_memory_patterns
7–10PR with memory matchPR Validation detail → View patterntestneo_pr_validation_workflow
10–12Bundle + gateRelease Readiness → Evaluate Gatetestneo_evaluate_release_gate
12–15Outcome + calibrationRecord outcome modaltestneo_get_release_calibration

Web UI (same data as MCP)

  • PR Validation board/web/pr-validation
  • PR detail/web/pr-validation/<workflow_id> (live Engineering Memory · auto Jira sync)
  • Engineering Memory/web/engineering-memory — CSV, Jira sync, postmortem, Patterns tab with trend
  • Pattern drill-down/web/engineering-memory?project_id=<ID>&pattern_id=<ID>&view=patterns
  • Branch health — Analytics → Branch (CI + PR risk overlay)
  • Release Readiness/web/release-readiness — confidence, bundle picker, Release Brief, gate, Outcome Learning panel
  • Create Bundle wizard/web/release-bundle-create — 3-step: name + policy → select PRs → create
  • Shareable bundle link/web/release-readiness?bundle_id=<id> — share with PM/on-call, no login required to view

Tool reference and JSON contracts: PR Validation & Release Confidence.

Plans & limits

PlanPR validations / 30dMCP writes / day
Free2530
Starter5050
Pro200 per user150
Release Intelligence800 per user400
Team2000 shared pool500

Errors: release_verification_limit_reached (monthly PR validation cap) or MCP 403 (daily write cap). See MCP troubleshooting — limits.

FAQ

QuestionAnswer
Do memory entries need a PR number?No — matching uses changed files and impact areas.
When should we Re-cluster?After bulk ingest (CSV, Jira sync, postmortem).
What does “Worsening” mean?More hits in the last 30 days than the prior 30 days for that pattern.
Does calibration change our gate automatically?No — suggestions are read-only.
What counts toward plan limits?Each new PR validation (one pull request or branch review) = one credit. Test runs inside a validation are separate.

Current release scope

SurfaceStatusNotes
PR validation (GitHub + MCP)Auto on PR; @TestNeo validate
Engineering MemoryJira, CSV, postmortem → patterns + PR matches
Release ReadinessBundle, gate, Mark deployed → Record outcome → Calibration
Test Manager → CLI exportExport .testneo ZIP — see TestNeo CLI
MCP (@testneo/mcp-server@0.2.1)Default cloud execution in mcp.json.example
Post-ship webhooks UINot in web UI; API/MCP tools remain for integrators

Last updated July 2026 · Release 2.2 + Layer 4 brief · Engineering Memory Phases 1–5 · MCP @testneo/mcp-server@0.2.1 (69 tools) · Default MCP config: cloud execution · PR/GitHub comments show Why this score, Test gaps, release-confidence drivers