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
- Confirm the input reports come from the terminal-perf Playwright suite that emits opencode- prefixed annotations.
- Open a report JSON and search for the annotation attachment type; if absent, re-run the correct perf suite.
- 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
- Confirm input reports originate from the terminal-perf Playwright suite that emits opencode- annotations.
- Spot-check a report JSON for the expected annotation attachment before bulk processing.
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
- ${path}: unsupported benchmark artifact; expected summaryMed
- No comparable benchmark metrics found.
- advertised-url-watcher.ts no longer contains \`${marker}\`
- ${name} must be a positive integer, received ${value}
- ORCA_ADVERTISED_URL_BENCH_ROUNDS must be even
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/94ffd4e8db676ae2.
Report an issue: GitHub.