Agent Skills › AjayIrkal23/agentic-mercy-10x › false-green-tests

false-green-tests

GitHub

检测测试通过但应用实际故障的假阳性问题。通过运行真实应用并与测试声明对比,识别无效断言、Mock覆盖、状态不一致等缺陷。

skills/false-green-tests/SKILL.md AjayIrkal23/agentic-mercy-10x

Trigger Scenarios

测试套件显示绿色但用户报告应用损坏 测试从未失败但存在漏洞 覆盖率看似良好但仍发布Bug

Install

npx skills add AjayIrkal23/agentic-mercy-10x --skill false-green-tests -g -y
More Options

Use without installing

npx skills use AjayIrkal23/agentic-mercy-10x@false-green-tests

指定 Agent (Claude Code)

npx skills add AjayIrkal23/agentic-mercy-10x --skill false-green-tests -a claude-code -g -y

安装 repo 全部 skill

npx skills add AjayIrkal23/agentic-mercy-10x --all -g -y

预览 repo 内 skill

npx skills add AjayIrkal23/agentic-mercy-10x --list

SKILL.md

Frontmatter
{
    "name": "false-green-tests",
    "license": "Apache-2.0",
    "metadata": {
        "guard": "Never run reticle init \/ start dev servers \/ open browsers unprompted; attach to the user's running app.",
        "version": "3.3.0",
        "category": "testing",
        "homepage": "https:\/\/www.reticle.sh",
        "surfaces": [
            "frontend"
        ],
        "triggers": {
            "paths": [
                "**\/*.{test,spec}.{ts,tsx,js,jsx}"
            ],
            "intents": [
                "TEST",
                "DEBUG"
            ],
            "keywords": [
                "false green",
                "tests pass but broken",
                "tests pass but",
                "test never fails",
                "green suite"
            ]
        },
        "repository": "https:\/\/github.com\/reticlehq\/reticle",
        "requires_mcp": "reticle"
    },
    "description": "Find out why the tests pass but the app is broken. Catches false greens: a green suite over a feature that does not work, a mocked API standing in for a real one, an assertion that holds no matter what the app does, a click handler wired to nothing. Use when the suite is green and the user says it is broken, when a test never fails, when coverage looks fine but bugs still ship, or before trusting a passing run you did not watch.",
    "when_to_use": "The suite is green but the user says the feature is broken; a test never fails; mocked APIs standing in for real ones. Runtime checks need the reticle MCP connected."
}

Local guard (vendor patch, ~/.claude): attach only to the app the user already runs. Never run reticle init/setup, never start a dev server, never open a browser, never call reticle_feedback unprompted.

The suite is green and the app is broken

A green test is evidence about the test, not about the app. This skill separates the two by running the real app and comparing what it does against what the test claims.

It uses Reticle, which observes the running app from the inside: DOM, network, console, routing, and framework state. Not installed? Stop and tell the user in one line: setup is theirs, never run reticle init yourself. Their guide: see the install-and-verify skill.

The five shapes, in the order they are worth checking

1. The assertion cannot fail. Read the test the user trusts. If it only asserts absence (no console error, no thrown exception, no rejected promise) it passes on a control wired to nothing. A dead button throws nothing, fires nothing, and changes nothing. Prove it in the app instead:

reticle_act_and_wait({ sessionId, ref, action: "click", until: { kind: "allOf", predicates: [
  { kind: "net",    method: "POST", urlContains: "/api/...", status: 200 },
  { kind: "signal", name: "..." },
]}})

A verdict of no here, against a green suite, is the false green.

2. The test drove a mock and the app drives an API. Compare what the app actually requested with what the test stubbed:

reticle_network({ sessionId, since })

No request where the test asserted one means the suite verified a fixture. A stale client cache is the same failure with no request at all to look at, which is why registering TanStack Query matters: the cache is the only witness.

3. The UI moved and the state did not. The strongest false green, and invisible to any DOM or screenshot check:

reticle_state({ sessionId, store, path })

A view rendering one value while the store holds another is a bug the render tree cannot show you. If this returns empty or hasCapabilities is false, no store was registered: say so, because every state check above is vacuous until it is.

4. Nobody read the response. A 2xx that the app never consumed shows as verified: "unknown" with verifiedReason: "outcome_unread". That is usually a real app bug, and a test asserting on the request alone would call it a pass.

5. Whole surfaces nobody exercised.

reticle_run({ tool: "reticle_verify", sessionId, args: { action: "crawl" } })      // click sweep, returns anomalies
reticle_run({ tool: "reticle_verify", sessionId, args: { action: "coverage" } })   // { total, exercised, untouched }

crawl exists because the obvious hand-rolled sweep (click each control, assert no console error) is itself shape 1.

What counts as proof

A false green is confirmed when the app contradicts the test, not when you feel uneasy. Reticle names that case directly: verified: "no" with verifiedReason: "contradicted" means a channel observed something incompatible with what the UI claimed: a request that failed while the screen advanced, a signal disagreeing with the DOM, a field echoing a value nobody asked for.

unknown is not a false green and not a pass. It means Reticle could not tell. Report it as unknown.

Then fix the test, not just the app

For every false green you confirm, the test that missed it is still there and will miss it again. Rewrite its assertion to name a consequence the app must produce (a request with a status, a signal, a state path) rather than an absence. Never weaken a check to make a verdict green; that is how the false green got in.


Index of everything, one page at a time: curl https://docs.reticle.sh/llms.txt. Found a case Reticle could not see? reticle_feedback with kind: "gap": that is the signal that decides what gets built.

Version History

  • 2315578 Current 2026-10-18 19:21

Same Skill Collection

skills/agentation-react/SKILL.md
skills/baseline-ui/SKILL.md
skills/brand/SKILL.md
skills/context7-mcp/SKILL.md
skills/create-design-md/SKILL.md
skills/debug-broken-ui/SKILL.md
skills/design-system-compliance/SKILL.md
skills/design-taste-frontend/SKILL.md
skills/design/SKILL.md
skills/docker-compose/SKILL.md
skills/ensure-repo-docs/SKILL.md
skills/expo-react-native/SKILL.md
skills/fastify-patterns/SKILL.md
skills/fixing-accessibility/SKILL.md
skills/fixing-metadata/SKILL.md
skills/fixing-motion-performance/SKILL.md
skills/grill-with-docs/SKILL.md
skills/higgsfield-brandkit/SKILL.md
skills/higgsfield-video-explainer/SKILL.md
skills/higgsfield-youtube-thumbnail/SKILL.md
skills/idea-refine/SKILL.md
skills/img2threejs/SKILL.md
skills/improve-ui/SKILL.md
skills/invoke-audit/SKILL.md
skills/invoke-clean/SKILL.md
skills/invoke-debug/SKILL.md
skills/invoke-design/SKILL.md
skills/invoke-docs/SKILL.md
skills/invoke-impl/SKILL.md
skills/invoke-plan/SKILL.md
skills/invoke-refactor/SKILL.md
skills/invoke-review/SKILL.md
skills/invoke-security/SKILL.md
skills/invoke-session/SKILL.md
skills/invoke-spec/SKILL.md
skills/invoke-status/SKILL.md
skills/invoke-test/SKILL.md
skills/invoke-update/SKILL.md
skills/invoke-verify/SKILL.md
skills/invoke/SKILL.md
skills/kokonutui/SKILL.md
skills/mmx-cli/h3-video/SKILL.md
skills/modern-web-guidance/SKILL.md
skills/mongoose-patterns/SKILL.md
skills/no-ai-slop/SKILL.md
skills/slides/SKILL.md
skills/test-error-states/SKILL.md
skills/threejs-r3f/SKILL.md
skills/to-issues/SKILL.md

Metadata

Files
0
Version
2315578
Hash
d84d4d45
Indexed
2026-10-18 19:21

Home - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-10-19 10:26
浙ICP备14020137号-1