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.
Start here (web UI): Create GitHub PAT with the right scopesUI walkthrough (connect → code index → Engineering Memory → PR validation → Release Readiness). MCP path: Setup (MCP).
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.

Before first PR Validation: create a GitHub PAT with the right scopes (PAT & permissions), then follow the UI walkthrough — connect → index → memory → validate → release confidence.

GitHub PAT & permissions required first

Do this before you paste a token into TestNeo or ask a teammate to share repo access. Wrong scopes = empty branch list, no PR comments, failed webhook register, or silent Check Run skip.

Recommended for most teams: a Classic Personal Access Token with repo + admin:repo_hook. That single combo covers code index, PR diffs, comments, Check Runs, and Register webhook from the UI. Prefer fine-grained only if org policy forbids classic tokens.

What TestNeo needs access for

CapabilityWhyNeeds write?
Clone / code indexBlast radius, test gaps, impacted-test mappingRead contents
Read PR + diffValidate on open/sync and manual RunRead PRs
Post PR commentPASS/WARN/BLOCK summary on the PRWrite issues/PRs
GitHub Check RunCommit status on the head SHAClassic repo (fine-grained: turn Check Run off)
Register webhookAuto-validate on every PR open/updateWebhooks R/W or admin:repo_hook
@TestNeo validateRe-run from a PR commentWebhook + Issues/PR write

Option A — Classic PAT (best combination)

  1. GitHub → profile → SettingsDeveloper settingsPersonal access tokensTokens (classic)
  2. Generate new token (classic) — note: not “Fine-grained”
  3. Note: e.g. TestNeo Release Intelligence · Expiration: 90 days (or org policy)
  4. Select scopes below → Generate token → copy once (ghp_…)
  5. If the repo is under an organization with SSO: open the token → Configure SSOAuthorize for that org before pasting into TestNeo
Classic scopeRequired?What it unlocks
repoYesPrivate/public repo contents, PR read/write, comments, Check Runs
admin:repo_hookYes for UI Register webhookCreate/update the TestNeo webhook on the repo
read:orgIf org SSO / listing failsOrg membership visibility; still authorize SSO on the token
workflowNo (unless you push workflow files via API)Not needed for PR Validation

Minimum that still works for index + manual Run: repo only. Add admin:repo_hook before you rely on auto-validation.

Option B — Fine-grained PAT (org policy)

  1. GitHub → SettingsDeveloper settingsPersonal access tokensFine-grained tokensGenerate new token
  2. Resource owner: you or the org that owns the repo
  3. Repository access: Only select repositories → pick the app repo(s)
  4. Under Repository permissions, set exactly:
PermissionAccessRequired?
ContentsRead-onlyYes — code index / clone
MetadataRead-onlyYes (always required by GitHub)
Pull requestsRead and writeYes — diffs + PR comments
IssuesRead and writeYes if comment trigger / sticky comments need Issues API
WebhooksRead and writeYes for Register webhook
Commit statusesRead and writeOptional — Check Runs still often need classic; see note below
Fine-grained + Check Run: GitHub Check Runs are not fully supported on fine-grained PATs the same way as classic repo. In TestNeo → GitHub Release Intelligence, turn GitHub Check Run off when using a fine-grained token. PR comments and the TestNeo board still work.

Before you share access (security checklist)

  • Create a dedicated token for TestNeo — do not reuse a personal “god” token
  • Scope to one repo (fine-grained) or accept that classic repo covers all repos the account can see — use a machine/bot user if you need least privilege
  • Set an expiration; calendar a rotate every 90 days
  • Never commit the PAT to git, Slack, or ticket comments — paste only into TestNeo Connect repository / Update token
  • Org SSO: Authorize the token for the org or clone/index will fail with 404/empty branches
  • Self-hosted TestNeo: set GITHUB_ENCRYPTION_KEY in server .env before first connect; if the key changes, use Update token and paste a new PAT
  • Revoke the token in GitHub immediately if it leaks

Where to paste the token in TestNeo

  1. Open app.testneo.ai → select your project
  2. PR Validation (or Release Readiness) → expand GitHub Release Intelligence
  3. Step 1 — Connect repositoryowner/repo (e.g. acme/shop-web) + paste PAT → connect
  4. Confirm the connected repo name appears. Empty branch list → fix scopes / SSO → Update token

Next: UI walkthrough (index → memory → validate → release confidence) · auto-validation toggles.

How to use it from the UI step by step

One path from a fresh project to ship confidence. Do these in order on app.testneo.ai. MCP in Cursor is optional and parallel — webhooks do not require MCP.

Project + env + tests → GitHub PAT → Connect → Code index → Engineering Memory → Auto-validate / Run PR → PR board → Release bundle + gate → Record outcome

Phase A — One-time setup (~30–45 min)

#In the UIWhat you doDone when
1Projects → EnvironmentsCreate/open project; add environment base_url (+ login if tests need auth)Env ready
2Test Cases / VS Code / MCPAdd a few tests (execution needs something to map)Tests listed
3Create GitHub PATClassic repo + admin:repo_hook (or fine-grained table above)Token copied
4PR Validation → GitHub Release Intelligence → Step 1Connect owner/repo + PATRepo name shown
5Same panel → Code indexPick branch → Index from GitHub (1–3 min)Active index file/function counts
6Engineering Memory (recommended)Jira sync and/or bug CSV and/or Add postmortemPatterns → Re-clusterEntries + at least one pattern
7GitHub Release Intelligence togglesEnable auto-validation; leave Post comment / Execute tests / Sync Jira ON; Register webhook“Webhook active — PRs auto-validate”
8Same panel → PR # → RunSmoke-test one open PR (use this on localhost if webhooks cannot reach you)Row on PR Validation board

Phase B — Every PR (automatic after webhook)

WhoActionWhere you see results
DeveloperOpens or pushes to an open PRGitHub PR comment + optional Check Run
DeveloperRe-run: comment @TestNeo validate or /testneo validateUpdated sticky comment
AnyoneOpen the link in the comment/web/pr-validation/<workflow_id> — risk, test gaps, memory matches, fix plan
QA / leadBrowse history (no “start collection” button)PR Validation board — /web/pr-validation

Does not auto-run: push to a branch with no open PR. Open a PR, or use Run / MCP.

Phase C — Engineering Memory → richer PR risk

  1. AI Assistant → Jira Integration (optional) → connect → pick project key (e.g. SCRUM) → Engineering Memory → Sync from Jira
  2. Or Upload Bug Reports (CSV) / Add postmortem with file paths in the body
  3. Patterns → Re-cluster
  4. Leave Sync Jira bugs before validate ON in GitHub Release Intelligence
  5. Validate a PR whose changed files overlap memory paths → expect Engineering Memory Match cards on PR detail

Matching is by changed file paths (and impact areas), not by PR number or repo name. Details: Engineering Memory.

Phase D — Release confidence (ship decision)

  1. Confirm the PRs you care about are validated (PASS/WARN/BLOCK) on the PR Validation board
  2. Open Release ReadinessCreate Bundle (or /web/release-bundle-create)
  3. Name the release (e.g. v2.4.0) → select the PR validation rows in the lookback window → create
  4. Review confidence score, unlock actions, and optional AI Release Brief
  5. Click Evaluate Gate (policy both recommended) → GATE_PASS / GATE_BLOCK
  6. Share /web/release-readiness?bundle_id=<id> with EM/PM
  7. After deploy: Mark deployed / Record outcome (rollback, incidents 7d/30d) → later review Calibration

Deep dives: Release Bundles · Outcome learning.

Quick map — which page does what

PageURLUse when
GitHub Release IntelligenceInside PR Validation / Release ReadinessConnect PAT, index, webhook, smoke Run
PR Validation board/web/pr-validationHistory of runs; open a workflow
PR detail/web/pr-validation/<id>Risk, gaps, memory matches, fix plan
Engineering Memory/web/engineering-memoryIngest bugs; Patterns + trend
Release Readiness/web/release-readinessBundle confidence, gate, outcomes

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. Create the PAT first: GitHub PAT & permissions. Full UI order: How to use it from the UI.

Setup (5 minutes)

  1. PR Validation or Release Readiness → GitHub Release IntelligenceStep 1 — Connect repository (owner/repo + PAT — classic repo + admin:repo_hook)
  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: full guide — GitHub PAT & permissions. Classic best combo: repo + admin:repo_hook. Fine-grained: Contents Read · Pull requests Read and write · Metadata Read · Issues Read and write · Webhooks Read and write; turn GitHub Check Run off. Self-hosted: set GITHUB_ENCRYPTION_KEY before first connect. If the key changes, use Update token.

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
What GitHub PAT should I create?Classic: repo + admin:repo_hook. Fine-grained: Contents/Metadata Read, PRs + Issues + Webhooks R/W. Full steps: GitHub PAT & permissions.
Where do I set this up in the UI?UI walkthrough — connect → index → memory → validate → Release Readiness bundle + gate.
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.
Empty branch list / index fails?Update PAT scopes, authorize org SSO on the token, then Update token in Connect repository.
Fine-grained Check Run missing?Turn GitHub Check Run off; comments + TestNeo board still work.

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 (83 tools) · Default MCP config: cloud execution · PAT + UI walkthrough: #github-pat · #ui-from-zero · PR/GitHub comments show Why this score, Test gaps, release-confidence drivers