Next generation e2e testing framework for web and mobile apps.
This report summarizes scanner evidence for e2e-inc/e2e, a TypeScript project with 13,664 GitHub stars. SynthScan examined 308,178 lines of code across 1866 source files, recording 182 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 1.2 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-11-11.
Can maintainers explain intent, assumptions, and trade-offs? 69 finding(s).
Are imports declared and package/API names verified? 113 finding(s).
Are wrappers, guards, and repeated structures necessary? 22 finding(s).
Which changes need focused human review? 182 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 182 distinct pattern matches across 6 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …es/e2e/tests/integration/screenshot-assertions.test.ts | 336 | const result = local.outcome.report.run.results.find((candidate) => candidate.titlePath.at(-1) === 'home')!; | CODE |
| CRITICAL | …es/e2e/tests/integration/screenshot-assertions.test.ts | 351 | const result = ci.outcome.report.run.results.find((candidate) => candidate.titlePath.at(-1) === 'home')!; | CODE |
| CRITICAL⚡ | packages/e2e/tests/integration/runner-lifecycle.test.ts | 222 | expect(narrowed.outcome.report.run.results.map((result) => result.titlePath.at(-1))).toEqual(['runs']); | CODE |
| CRITICAL⚡ | packages/e2e/tests/integration/runner-lifecycle.test.ts | 232 | expect(named.outcome.report.run.errors.map((error) => error.code)).toEqual(['COLLECTION_ERROR']); | CODE |
| CRITICAL⚡ | packages/e2e/tests/integration/runner-lifecycle.test.ts | 238 | expect(whole.outcome.report.run.errors.map((error) => error.code)).toEqual(['COLLECTION_ERROR']); | CODE |
| CRITICAL | packages/e2e/tests/integration/runner-lifecycle.test.ts | 1146 | expect(fresh.outcome.report.run.errors.map((error) => [error.code, error.phase])).toEqual([['NO_LAST_RUN', 'collec | CODE |
| CRITICAL | packages/e2e/tests/integration/runner-lifecycle.test.ts | 1305 | expect(missing.outcome.report.run.errors.map((error) => [error.code, error.message])).toEqual([ | CODE |
| CRITICAL | packages/e2e/tests/integration/traces.test.ts | 137 | const offSteps = off.outcome.report.run.results.flatMap((result) => result.attempts.flatMap((attempt) => attempt.s | CODE |
| CRITICAL | packages/e2e/tests/integration/engine-contract.test.ts | 1279 | expect(refused.outcome.report.run.errors.find((error) => error.code === 'UNSUPPORTED_ARTIFACT')?.message).toBe( | CODE |
| CRITICAL | packages/e2e/tests/integration/engine-contract.test.ts | 1290 | expect(byTarget.outcome.report.run.errors.find((error) => error.code === 'UNSUPPORTED_ARTIFACT')?.message).toBe( | CODE |
| CRITICAL | …es/e2e/tests/integration/foreign-engine-errors.test.ts | 75 | expect(invalid.outcome.report.run.errors.map(({ code, message }) => ({ code, message }))).toEqual([ | CODE |
| CRITICAL | packages/e2e/tests/integration/expected-failure.test.ts | 190 | expect(outside.outcome.report.run.errors.map((error) => error.code)).toEqual(['COLLECTION_ERROR']); | CODE |
| CRITICAL | packages/e2e/src/agent/act.ts | 409 | const capture = this.runtime.engine.session.artifacts.screenshot('assert', operation); | CODE |
| CRITICAL | packages/e2e/src/mcp/run-code.ts | 330 | const credential = this.attempt.agentRuntime.config.credentials.get(name); | CODE |
| CRITICAL | packages/e2e/src/mcp/run-code.ts | 340 | const secret = this.attempt.agentRuntime.config.secrets.get(value.name); | CODE |
| CRITICAL | packages/e2e/src/mcp/session.ts | 482 | if (base !== undefined && live.step.context.target.verbs.has('navigate')) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …s/web/tests/integration/closed-shadow-locators.test.ts | 113 | const placeholder = await locate(query({ kind: 'placeholder', value: exact('Access code') })); | CODE |
| LOW | …s/web/tests/integration/closed-shadow-locators.test.ts | 130 | expect(testId.map((node) => node.attributes?.['placeholder'])).toEqual(['Access code']); | CODE |
| LOW | …s/web/tests/integration/closed-shadow-locators.test.ts | 237 | const [code] = await locate(query({ kind: 'placeholder', value: exact('Access code') })); | CODE |
| LOW | packages/web/tests/integration/read-node-names.test.ts | 63 | expect(byTestId.get('search')?.attributes?.['placeholder']).toBe('Search products'); | CODE |
| LOW | packages/web/tests/integration/read-node-names.test.ts | 67 | expect(email?.attributes?.['placeholder']).toBe('you@example.test'); | CODE |
| LOW | packages/web/tests/integration/lifecycle.test.ts | 503 | kind: 'text' | 'label' | 'placeholder' | 'displayValue' | 'testId' | 'role', | CODE |
| LOW | packages/web/tests/integration/lifecycle.test.ts | 516 | ['placeholder', 'Search memory...'], | CODE |
| LOW | packages/web/tests/integration/lifecycle.test.ts | 588 | const [search] = await engine.locate!(query('placeholder', 'Search memory...', true), operation('v1')); | CODE |
| LOW | packages/web/src/locators.ts | 148 | case 'placeholder': | CODE |
| LOW | packages/web/src/in-page/read-semantics.ts | 84 | attributes: ['type', 'autocomplete', 'href', 'role', 'placeholder'], | CODE |
| LOW | packages/web/src/in-page/read-semantics.ts | 951 | const placeholder = el.getAttribute('placeholder'); | CODE |
| LOW | packages/mobile/CHANGELOG.md | 259 | - [#534](https://github.com/tester-army/e2e/pull/534) [`e19c4e0`](https://github.com/tester-army/e2e/commit/e19c4e0f9c43 | CODE |
| LOW | packages/mobile/tests/unit/locate.test.ts | 12 | function query(kind: 'role' | 'label' | 'placeholder' | 'text' | 'displayValue' | 'testId', value: string, extra: object | CODE |
| LOW | packages/mobile/tests/unit/locate.test.ts | 48 | expect(names(query('placeholder', 'anything'))).toEqual([]); | CODE |
| LOW | packages/mobile/src/locate.ts | 151 | case 'placeholder': { | CODE |
| LOW | packages/mobile/src/locate.ts | 152 | const placeholder = node.attributes?.['placeholder']; | CODE |
| LOW | packages/decision/src/elements.ts | 366 | return node.name ?? node.attributes?.['placeholder'] ?? node.text ?? ''; | CODE |
| LOW | packages/decision/src/elements.ts | 378 | if (name === '') return text === '' ? (node.attributes?.['placeholder'] ?? '').trim() : text; | CODE |
| LOW | packages/e2e/tests/unit/trace-template.test.ts | 80 | const templates = [{ pointer: paramPointer('', 'a}b'), value: 'Acme Corp' }]; | CODE |
| LOW | packages/e2e/tests/unit/trace-template.test.ts | 81 | const templated = templateText('tap "Acme Corp"', templates); | CODE |
| LOW⚡ | packages/e2e/tests/unit/trace-template.test.ts | 186 | const odd: ActionTrace = { ...trace('Acme Corp'), summary: 'typed {{param:/name}} literally' }; | CODE |
| LOW⚡ | packages/e2e/tests/unit/trace-template.test.ts | 187 | expect(templateTrace(odd, name('Acme Corp'))).toBeUndefined(); | CODE |
| LOW⚡ | packages/e2e/tests/unit/trace-template.test.ts | 192 | const shared = [...name('Acme Corp'), { pointer: '/slug', value: 'Acme Corp' }]; | CODE |
| LOW⚡ | packages/e2e/tests/unit/trace-template.test.ts | 193 | expect(templateTrace(trace('Acme Corp'), shared)).toBeUndefined(); | CODE |
| LOW⚡ | packages/e2e/tests/unit/trace-template.test.ts | 195 | const aliased = [...name('Acme Corp'), { pointer: '/slug', value: 'Acme%20Corp' }]; | CODE |
| LOW⚡ | packages/e2e/tests/unit/trace-template.test.ts | 196 | expect(templateTrace(trace('Acme Corp'), aliased)).toBeUndefined(); | CODE |
| LOW | packages/e2e/tests/unit/agent-secrets.test.ts | 19 | const admin: ResolvedCredential = { name: 'admin', username: 'admin@example.com', password: adminPassword }; | CODE |
| LOW | packages/e2e/tests/unit/locator-engine.test.ts | 641 | ['getByPlaceholder', (visible) => textQuery('placeholder', 'Save', visible === undefined ? undefined : { visible }, | CODE |
| LOW | packages/e2e/tests/unit/secrets.test.ts | 11 | const admin: ResolvedCredential = { name: 'admin', username: 'admin@example.com', password: adminPassword }; | CODE |
| LOW | packages/e2e/tests/unit/secrets.test.ts | 43 | expect(handle.username).toBe('admin@example.com'); | CODE |
| LOW | packages/e2e/tests/unit/agent-observation.test.ts | 513 | const filler = 'lorem ipsum. '.repeat(50); | CODE |
| LOW | packages/e2e/tests/unit/resolve-expression.test.ts | 107 | expect(ids(query('placeholder', 'anything'))).toEqual([]); | CODE |
| LOW | packages/e2e/tests/unit/resolve-expression.test.ts | 109 | expect(ids(query('placeholder', 'you@example.test'), field)).toEqual(['email']); | CODE |
| LOW | packages/e2e/src/locator/expression.ts | 47 | kind: 'label' | 'placeholder' | 'text' | 'displayValue', | CODE |
| LOW | packages/e2e/src/locator/engine.ts | 688 | placeholder: field(node.attributes?.['placeholder']), | CODE |
| LOW | packages/e2e/src/locator/screen.ts | 194 | this.build(textQuery('placeholder', text, options, this.scope)), | CODE |
| LOW | packages/e2e/src/cache/relocate.ts | 56 | const IDENTITY_FIELDS: readonly DescriptorField[] = ['role', 'name', 'testId', 'placeholder', 'inputPurpose']; | CODE |
| LOW | packages/e2e/src/cache/anchors.ts | 61 | const ANCHOR_FIELDS: readonly DescriptorField[] = ['role', 'name', 'text', 'testId', 'placeholder', 'inputPurpose']; | CODE |
| LOW | packages/e2e/src/cache/trace.ts | 50 | export function targetLabel(target: Pick<TraceTargetDescriptor, 'role' | 'name' | 'text' | 'placeholder' | 'testId'>): s | CODE |
| LOW | packages/e2e/src/cache/trace.ts | 490 | 'placeholder', | CODE |
| LOW | packages/e2e/src/cache/trace.ts | 502 | const DESCRIPTOR_TEXT_FIELDS = ['name', 'text', 'testId', 'placeholder', 'within', 'value'] as const; | CODE |
| LOW | packages/e2e/src/agent/actions.ts | 370 | const placeholder = field(node.attributes?.['placeholder']); | CODE |
| LOW | packages/e2e/src/agent/observation.ts | 494 | const placeholder = node.attributes?.['placeholder']; | CODE |
| LOW | packages/e2e/src/mcp/test-lines.ts | 489 | const placeholder = clean(node.attributes?.['placeholder']); | CODE |
| LOW | packages/e2e/src/mcp/test-lines.ts | 587 | return [node.role ?? '', field(node.name), field(node.text), field(node.attributes?.['placeholder'])].join('\u0000'); | CODE |
| LOW | packages/e2e/src/mcp/catalog.ts | 228 | return { expression: textQuery('placeholder', placeholder!, { exact }, undefined), code: `screen.getByPlaceholder(${JS | CODE |
| LOW | packages/e2e/src/run/failure-evidence.ts | 138 | const own = new Set(tokens(`${node.name ?? ''} ${node.text ?? ''} ${node.attributes?.['placeholder'] ?? ''}`)); | CODE |
| LOW | packages/e2e/src/engine/contract.ts | 60 | export type QueryKind = 'role' | 'label' | 'placeholder' | 'text' | 'displayValue' | 'testId'; | CODE |
| LOW | packages/e2e/src/engine/resolve.ts | 215 | case 'placeholder': { | CODE |
| LOW | packages/e2e/src/engine/resolve.ts | 216 | const placeholder = node.attributes?.['placeholder']; | CODE |
| LOW | apps/mobile-benchmark/tests/controls.e2e.ts | 59 | await expect(screen.getByTestId('name-input')).toHaveAttribute('placeholder', 'Type your name'); | CODE |
| LOW | apps/mobile-benchmark/tests/controls.e2e.ts | 60 | expect(await screen.getByTestId('name-input').getAttribute('placeholder')).toBe('Type your name'); | CODE |
| LOW | …e85fc85537606ea1ed445e1175357020711139c55c755d169.json | 12 | "placeholder": "Search…", | CODE |
| LOW | …e85fc85537606ea1ed445e1175357020711139c55c755d169.json | 22 | "placeholder": "Search…", | CODE |
| LOW | …e85fc85537606ea1ed445e1175357020711139c55c755d169.json | 82 | "placeholder": "Search…" | CODE |
| LOW | …4e07e871685ee5cc1e425f5f592d9c90fcddb96ab4163ae50.json | 12 | "placeholder": "Email", | CODE |
| LOW | …4e07e871685ee5cc1e425f5f592d9c90fcddb96ab4163ae50.json | 23 | "placeholder": "Password", | CODE |
| LOW | …4e07e871685ee5cc1e425f5f592d9c90fcddb96ab4163ae50.json | 45 | "placeholder": "Password", | CODE |
| LOW | …4e07e871685ee5cc1e425f5f592d9c90fcddb96ab4163ae50.json | 101 | "placeholder": "Email", | CODE |
| LOW | …4e07e871685ee5cc1e425f5f592d9c90fcddb96ab4163ae50.json | 107 | "placeholder": "Password", | CODE |
| 37 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 1 | <a href="https://e2e.com?utm_source=e2e&utm_medium=github&utm_campaign=readme_banner"><img src="./.github/assets/readme- | CODE |
| MEDIUM | README.md | 84 | | [`e2e-cige`](https://www.npmjs.com/package/e2e-cige) | [CIGE](https://www.amazon.science/publications/cige-an-agentic- | CODE |
| MEDIUM | plugins/e2e/skills/e2e/SKILL.md | 17 | # e2e: agentic end-to-end tests | COMMENT |
| MEDIUM | plugins/e2e/skills/e2e/references/running.md | 19 | npx e2e init [directory] [--yes] # scaffold a project, refresh the agent skill | CODE |
| MEDIUM | packages/e2e/CHANGELOG.md | 815 | - [#520](https://github.com/tester-army/e2e/pull/520) [`c1547c9`](https://github.com/tester-army/e2e/commit/c1547c9deb96 | CODE |
| MEDIUM | packages/e2e/CHANGELOG.md | 815 | - [#520](https://github.com/tester-army/e2e/pull/520) [`c1547c9`](https://github.com/tester-army/e2e/commit/c1547c9deb96 | CODE |
| MEDIUM | packages/e2e/CHANGELOG.md | 853 | - [#463](https://github.com/tester-army/e2e/pull/463) [`8802b0f`](https://github.com/tester-army/e2e/commit/8802b0f0dc85 | CODE |
| MEDIUM | packages/e2e/CHANGELOG.md | 853 | - [#463](https://github.com/tester-army/e2e/pull/463) [`8802b0f`](https://github.com/tester-army/e2e/commit/8802b0f0dc85 | CODE |
| MEDIUM⚡ | packages/e2e/CHANGELOG.md | 1247 | - [#282](https://github.com/tester-army/e2e/pull/282) [`ff33218`](https://github.com/tester-army/e2e/commit/ff33218345d9 | CODE |
| MEDIUM⚡ | packages/e2e/CHANGELOG.md | 1247 | - [#282](https://github.com/tester-army/e2e/pull/282) [`ff33218`](https://github.com/tester-army/e2e/commit/ff33218345d9 | CODE |
| MEDIUM⚡ | packages/e2e/CHANGELOG.md | 1247 | - [#282](https://github.com/tester-army/e2e/pull/282) [`ff33218`](https://github.com/tester-army/e2e/commit/ff33218345d9 | CODE |
| MEDIUM | .github/workflows/mobile.yml | 18 | # of its own on a shared machine, #502). The agentic suite replays the | COMMENT |
| MEDIUM | .github/workflows/mobile.yml | 26 | # The merge queue runs with this repository's secrets, so it runs the agentic | COMMENT |
| MEDIUM | .github/workflows/mobile.yml | 58 | # GitHub grants on `pull_request`: the agentic suite is skipped there and | COMMENT |
| MEDIUM | .github/workflows/mobile.yml | 104 | # Dependabot's secrets, which hold no model key: the agentic suite | COMMENT |
| MEDIUM | .github/workflows/mobile.yml | 123 | # deterministic suite and the agentic one take about as long as each other, | COMMENT |
| MEDIUM | .github/workflows/benchmark.yml | 13 | # did not comment. The agentic suite needs the model key, so on a pull request | COMMENT |
| MEDIUM | .github/workflows/benchmark.yml | 17 | # runs the agentic suite for every pull request. Never switch this workflow to `pull_request_target` to get the key | COMMENT |
| MEDIUM | .github/workflows/benchmark.yml | 105 | # The agentic suite runs from the recordings committed under | COMMENT |
| MEDIUM | skills/e2e/SKILL.md | 17 | # e2e: agentic end-to-end tests | COMMENT |
| MEDIUM | skills/e2e/references/running.md | 19 | npx e2e init [directory] [--yes] # scaffold a project, refresh the agent skill | CODE |
| MEDIUM | apps/web-benchmark/e2e.config.ts | 28 | // The key names this suite's comment beside the agentic one's. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/examples-nightly/run-tests.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packages/web/src/support.ts | 121 | const page = await targetPage(source); | COMMENT |
| LOW | packages/web/src/in-page/read-semantics.ts | 1401 | // rendered, spaces and newlines included. An empty editor renders | COMMENT |
| LOW | packages/mobile/src/surface.ts | 1401 | COMMENT | |
| LOW | packages/mobile/src/nodes.ts | 521 | // carries an accessible name beside it, its name too: Android names a | COMMENT |
| LOW | packages/e2e/tests/helpers/fixture-pages/canvas.ts | 121 | export const CANVAS_PAGES: Record<string, PageRenderer> = { | COMMENT |
| LOW | packages/e2e/tests/helpers/fixture-pages/forms.ts | 221 | </body> | COMMENT |
| LOW | packages/e2e/src/config/resolve.ts | 1081 | // identity before any clone sees it, since its object graph may not | COMMENT |
| LOW | packages/e2e/src/agent/step-cache.ts | 621 | // How long the app took to show its end state after the last action, | COMMENT |
| LOW | packages/e2e/src/explore/body.ts | 121 | // A model that cannot produce a plan in the grammar, even after the | COMMENT |
| LOW | packages/e2e/src/run/execute.ts | 1241 | // the next turn of the event loop; waiting that turn out lands it on | COMMENT |
| LOW | packages/e2e/src/run/runner.ts | 481 | if (options.agent !== undefined) cli.agents = typeof options.agent === 'string' ? [options.agent] : options.agent; | COMMENT |
| LOW | packages/e2e/src/run/runner.ts | 601 | ); | COMMENT |
| LOW | packages/e2e/src/run/runner.ts | 1041 | const layout = outputLayout(config.output); | COMMENT |
| LOW | .github/filters.yml | 1 | # What a change has to touch before a suite can see it. Read by | COMMENT |
| LOW | .github/workflows/mobile.yml | 1 | name: mobile | COMMENT |
| LOW | .github/workflows/mobile.yml | 21 | # and not for Dependabot's, whose runs get no secrets either. Android runs | COMMENT |
| LOW | .github/workflows/mobile.yml | 41 | # what the job's status says. | COMMENT |
| LOW | .github/workflows/benchmark.yml | 1 | name: benchmark | COMMENT |
| LOW | .github/workflows/examples.yml | 1 | name: examples | COMMENT |
| LOW | .github/actions/expo-app/action.yml | 1 | name: Expo app | COMMENT |
| LOW | apps/mobile-benchmark/tests/controls.e2e.ts | 321 | // double-tap gesture reaches a Pressable as one press. The app prints how | COMMENT |
| LOW | …ps/testbed/app/playwright/assets/offscreenbuttons.html | 21 | right: 0; | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/web/tests/unit/frame-screen.test.ts | 14 | function browserWithRecordingContext() { | CODE |
| LOW | packages/web/tests/integration/read-node-states.test.ts | 56 | async function expectAgreesWithPlaywright(states: Map<string, boolean>): Promise<void> { | CODE |
| LOW | packages/mobile/src/errors.ts | 239 | export function isSnapshotPresentationFailure(error: unknown): boolean { | CODE |
| LOW | packages/e2e/tests/unit/locator-engine.test.ts | 611 | function makeLocatorEngineOverEngine(nodes: readonly SemanticNode[] = twins) { | CODE |
| LOW | packages/e2e/tests/unit/tool-loop-prefix.test.ts | 140 | function downgradingForcedToolChoice(base: ModelInstance): ModelInstance { | CODE |
| LOW | packages/e2e/tests/helpers/run-project.ts | 188 | export async function runExistingWithConfigFile( | CODE |
| LOW | packages/e2e/tests/helpers/session-schema.ts | 35 | export function assertValidSessionEnvelope(document: unknown): void { | CODE |
| LOW | packages/e2e/src/collect/registry.ts | 576 | function validateFixtureDefinitions( | CODE |
| LOW | packages/e2e/src/oauth/providers/opencode-console.ts | 34 | export function createOpencodeConsoleProvider(options: OpencodeConsoleProviderOptions = {}): OAuthProvider<OpencodeConso | CODE |
| LOW | packages/e2e/src/oauth/providers/opencode-console.ts | 84 | async function sendOpencodeConsoleRequest(request: Request, credentials: OpencodeConsoleCredentials, upstream: FetchFunc | CODE |
| LOW | packages/e2e/src/oauth/providers/opencode-console.ts | 129 | async function listOpencodeConsoleModels(fetch: FetchFunction, consoleUrl: string): Promise<SubscriptionModel[]> { | CODE |
| LOW | packages/e2e/src/config/resolve.ts | 575 | function removedRecordingReplacement(kinds: readonly unknown[] | undefined, trace: unknown): string { | CODE |
| LOW | packages/e2e/src/internal/errors.ts | 393 | export function translateProvisioningError(cause: unknown, suffix = ''): E2EError { | CODE |
| LOW | packages/e2e/src/internal/runtime.ts | 80 | export function unsupportedRuntimeMessage( | CODE |
| LOW | packages/e2e/src/internal/expected-failure.ts | 38 | export function markRunningTestExpectedToFail(condition: boolean, reason: string | undefined): void { | CODE |
| LOW | packages/e2e/src/internal/package-manager.ts | 60 | export function detectWorkspacePackageManager( | CODE |
| LOW | packages/e2e/src/agent/observation.ts | 727 | export function isTransitionalObservation(observation: AgentObservation): boolean { | CODE |
| LOW | packages/e2e/src/agent/model/tool-choice.ts | 32 | export function isForcedToolChoiceDowngraded(warning: { readonly type: string; readonly feature?: string }): boolean { | CODE |
| LOW | packages/e2e/src/agent/model/tool-choice.ts | 56 | export function isForcedToolCallMismatched(error: unknown): error is { readonly content: readonly unknown[] } { | CODE |
| LOW | packages/e2e/src/agent/model/tool-choice.ts | 76 | export function isForcedToolChoiceRejected(error: unknown): boolean { | CODE |
| LOW | apps/mobile-benchmark/tests-agent/scenarios.e2e.ts | 48 | async function resetMicrophonePermission({ device, platform }: { device: Device; platform: string }): Promise<void> { | CODE |
| LOW | …estbed/app/playwright/assets/input/handle-locator.html | 66 | function setupAnnoyingInterstitial(event, times, capture) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/decision/src/decide.ts | 128 | * as a language model answering through a gateway fallback returns, is a | COMMENT |
| MEDIUM | packages/decision/src/types.ts | 9 | * `probabilities`, as a language model reached through a gateway fallback | COMMENT |