frontend/verification/mcp-2175/report.html
instructions textarea✓ Verified end-to-end against a real mcpproxy (frontend PR #651 + backend PR #652). 158/158 vitest + Playwright e2e green.
Editable instructions textarea in Settings → Advanced → MCP server instructions , bound to the top-level instructions key via the key-driven SettingsSection pattern. The built-in default is fetched from /api/v1/status default_instructions and shown as the placeholder (asserted equal to the backend value — never hardcoded). Clearing the box persists "", which Go maps back to the default.
#Advanced → MCP server instructions section
Expected: New 'MCP server instructions' accordion appears as the first card in the Advanced tab.
Observed: Accordion renders at the top of Advanced with its description.
#Empty textarea shows the REAL built-in default as placeholder
Expected: When instructions is empty, the Go built-in default — fetched live from /api/v1/status default_instructions (backend PR #652) — is shown greyed-out as the placeholder. Asserted to equal the backend value EXACTLY (no hardcoding, no drift).
Observed: Placeholder == backend default_instructions (865 chars, 'This is mcpproxy-go…'); Save disabled.
#Custom value saved
Expected: Typing a custom value marks the row dirty; Save persists it via PATCH /api/v1/config.
Observed: Solid custom text, dirty badge, Save enabled → saved (verified config.instructions == custom via REST).
#Custom value persists across full reload
Expected: After Save + full page reload the saved value is read back from /api/v1/config.
Observed: Textarea re-hydrates with the saved value (toHaveValue assertion passed).
#Cleared (whitespace-only) → back to default placeholder
Expected: Clearing the box persists "" (Go maps "" -> default); the real default re-appears as the placeholder.
Observed: Value == "" (REST config.instructions empty); placeholder == backend default again.