Files
Saxon Fletcher 91e23a0f2d docs: define detection checks and specialist monitoring prompts (#50075)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

Yes.

## What kind of change does this PR introduce?

Documentation update.

## What is the current behavior?

Specialist monitoring prompts leave some comparison windows, baselines,
thresholds, and missing-data behavior undefined. This can produce
reports or forecasts without sufficient evidence.

## What is the new behavior?

Detection checks define inputs, comparison windows, thresholds, units,
missing-data behavior, and next investigation steps. Query regressions
require comparable snapshots and reset history; capacity forecasts
require saved measurements and a matching confirmed limit.

Health, Security, Performance, and Capacity prompts fetch and follow the
shared detection checks automatically. They record finding, clear, or
unable to assess, preserve alert state, and suppress unchanged repeats.
Missing history or failed access cannot become a healthy result.

Specialist pages retain their diagrams and the sections What it watches,
When it watches, What it will output, and Set up the agent. Setup
explains the necessary documentation access and saved state; optional
links explain report triggers. Prompt and provider setup tabs remain
available in HTML and Markdown. The Hire an agent overview and
Generalist page and prompt remain unchanged.

Prompt Markdown exports use the Markdown serializer to safely contain
nested code fences, preserving the full Generalist prompt and its SQL
examples. Both prompt exporters have parser-based round-trip coverage.

## Additional context

Full docs suite: 215 passed, 2 skipped against a freshly reset
disposable Supabase stack. Typecheck, targeted ESLint, formatting, and
guides Markdown generation also pass after the export fix.

Earlier validation: production docs build, docs typecheck, targeted
ESLint, formatting, and guides Markdown generation pass. All four
specialist exports contain their diagrams, setup sections, enhanced
prompts, and provider instructions. The Health page diagram and setup
tab were checked in the browser. Changed pages have no MDX lint
violations; existing repository-wide violations remain.

The unchanged detection SQL was previously smoke-tested in a disposable
sandbox. Hosted MCP runs, scheduler persistence, notifications, and
agent evals are outside this validation. Evals remain outside this
change.

Stage 3 of 3; depends on stage 2.

Stack: #50073 → #50074 → #50075.



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **Documentation**
- Reworked observability guidance around hourly, read-only monitoring
checks.
- Updated health, security, performance, and usage monitors to identify
new findings, data gaps, regressions, and resource growth.
- Added clearer setup instructions for linked documentation, saved
measurements, and alert state.
- Replaced the issue-detection guide with standardized outcomes:
finding, clear, or unable to assess.
- Added explicit thresholds, evidence details, investigation links, and
verification steps for turning detections into diagnoses.
- **Improvements**
- Standardized monitoring prompts and presentation across supported
agent types.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 08:48:51 +10:00

50 lines
2.0 KiB
TypeScript

import { getMonitoringAgent, getMonitoringAgentPrompt } from '~/data/monitoring-agents.utils'
import { fromMarkdown } from 'mdast-util-from-markdown'
import { describe, expect, it } from 'vitest'
import { AgentSetup } from './AgentSetup'
describe('AgentSetup markdown schema', () => {
it.each(['health', 'security', 'performance', 'usage', 'all'])(
'preserves the complete %s prompt in one code block',
(id) => {
const markdown = AgentSetup({ props: { id } })
const codeBlocks = fromMarkdown(markdown).children.filter((node) => node.type === 'code')
expect(codeBlocks).toHaveLength(1)
expect(codeBlocks[0]).toMatchObject({
lang: 'text',
value: getMonitoringAgentPrompt(getMonitoringAgent(id)),
})
}
)
it('serializes the prompt and harness setup for a registered agent', () => {
const markdown = AgentSetup({ props: { id: 'health' } })
expect(markdown).toContain('**Prompt**')
expect(markdown).toContain('You are "Health monitor"')
expect(markdown).toContain('```text')
expect(markdown).toContain('**Claude**')
expect(markdown).toContain('**Codex**')
expect(markdown).toContain('**Cursor**')
expect(markdown).toContain('claude.ai/code/routines')
expect(markdown).toContain('`0 * * * *`')
expect(markdown).toContain('[Claude docs](https://code.claude.com/docs/en/routines)')
expect(markdown).toContain('[Codex docs](https://developers.openai.com/codex/app/automations)')
expect(markdown).toContain('[Cursor docs](https://cursor.com/docs/cloud-agent/automations)')
})
it('points hourly agents at Claude cloud routines', () => {
const markdown = AgentSetup({ props: { id: 'performance' } })
expect(markdown).toContain('claude.ai/code/routines')
expect(markdown).not.toContain('Desktop scheduled task')
})
it('fails clearly for an unknown agent', () => {
expect(() => AgentSetup({ props: { id: 'missing' } })).toThrow(
'Unknown monitoring agent id: missing'
)
})
})