stablyai/orca · error · Error

No opencode terminal perf annotations found in the provided

Error message

No opencode terminal perf annotations found in the provided reports

What it means

Thrown by generateTerminalPerfHtmlReport when, after reading and parsing all input reports via collectTerminalPerfRows, the total number of collected scenario rows across all revisions is zero. The script only recognizes rows carrying the opencode terminal perf annotations; reports without them yield no rows (generate-terminal-perf-html-report.mjs:458-461).

Source

Thrown at config/scripts/generate-terminal-perf-html-report.mjs:460

  // Why: older callers (the scale report gate) pass bare inputPaths.
  const resolvedInputs =
    inputs ??
    (inputPaths ?? []).map((path) => ({
      label: basename(path).replace(/\.json$/i, ''),
      path
    }))
  const revisions = resolvedInputs.map(({ label, path }) => {
    const report = readJsonReport(path)
    return {
      label,
      path,
      stats: report.stats ?? null,
      rows: collectTerminalPerfRows(report, label)
    }
  })
  const totalRows = revisions.reduce((sum, revision) => sum + revision.rows.length, 0)
  if (totalRows === 0) {
    throw new Error('No opencode terminal perf annotations found in the provided reports')
  }
  const html = renderHtml({ generatedAt: now.toISOString(), revisions })
  mkdirSync(dirname(outputPath), { recursive: true })
  writeFileSync(outputPath, html)
  const latestFailures = revisions
    .at(-1)
    .rows.reduce((sum, row) => sum + budgetFailures(row).length, 0)
  return { outputPath, rowCount: totalRows, budgetFailureCount: latestFailures }
}

const isMain = process.argv[1] && import.meta.filename === process.argv[1]
if (isMain) {
  try {
    const { inputs, outputPath } = parseHtmlReportArgs(process.argv.slice(2))
    const result = generateTerminalPerfHtmlReport({ inputs, outputPath })
    console.log(
      `Terminal perf HTML report saved to ${result.outputPath} (${result.rowCount} rows, ${result.budgetFailureCount} budget failures).`
    )

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Confirm the input reports come from the terminal-perf Playwright suite that emits opencode- prefixed annotations.
  2. Open a report JSON and search for the annotation attachment type; if absent, re-run the correct perf suite.
  3. If the annotation key changed, update collectTerminalPerfRows or regenerate reports with the current suite.

Example fix

// before: report from a non-perf suite -> 0 rows
generateTerminalPerfHtmlReport({ inputs: [{ label: 'x', path: 'unit-report.json' }], outputPath: 'o.html' })
// after: report from the terminal-perf suite
//   generateTerminalPerfHtmlReport({ inputs: [{ label: 'v2', path: 'terminal-perf.json' }], outputPath: 'o.html' })
Defensive patterns

Strategy: validation

Validate before calling

import { collectTerminalPerfRows } from './terminal-perf-report-annotations.mjs'
const report = JSON.parse(readFileSync(path, 'utf8'))
if (collectTerminalPerfRows(report, 'check').length === 0) {
  throw new Error(`${path} has no opencode terminal perf annotations`)
}

Type guard

function reportHasTerminalPerfAnnotations(report) {
  return collectTerminalPerfRows(report, 'check').length > 0
}

Try / catch

try {
  generateTerminalPerfHtmlReport({ inputs, outputPath })
} catch (error) {
  if (/No opencode terminal perf annotations/.test(error.message)) {
    // wrong report source; point at the terminal-perf suite output
  } else throw error
}

Prevention

When it happens

Trigger: Passing a Playwright JSON report that has no opencode terminal perf annotations (e.g., a different suite, or annotations stripped by a reporter transform); passing reports from a test config that did not emit the perf annotation steps; passing a non-Playwright JSON.

Common situations: Pointing the generator at a generic Playwright report from a non-terminal-perf suite; a refactor that renamed or removed the annotation attachments; a report produced by an older/newer test version with a different annotation key.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/94ffd4e8db676ae2. Report an issue: GitHub.