# Anti-Drift Guardrails

This document exists to prevent architectural regression
caused by convenience changes, AI tooling, or incomplete context.

---

## Primary Drift Risk: Frontend Shortcuts

The most common drift vector is:

**Frontend → Agent**

This is **always wrong**, regardless of environment.

---

## Guardrail Rules (Hard)

- Browsers never call agents
- Browsers never see container IPs
- Agents never expose CORS headers
- API is the only control plane

---

## Codex / AI-Specific Guardrails

When using AI tools:

- Explicitly forbid frontend → agent calls
- Require API-only control paths
- Reject changes that "just work" via shortcuts
- Prefer deletion over convenience

If AI introduces direct agent calls:
- The change is invalid
- The prompt must be corrected

---

## Status & State Drift

- UI state is observational
- Pollers are authoritative
- Buttons express intent only
- No optimistic state transitions

---

## Restart Semantics

- Restart is agent-defined
- Restart is not "stop + start" in UI
- Restart must preserve PTY continuity where possible

---

## Terminal & Realtime UI Rules
- Terminal components must be isolated and client-only
- No terminal logic in shared utilities
- No implicit socket initialization at import time

---

## UI Philosophy
- Prefer boring, predictable UI over clever abstractions
- Do not introduce new visual metaphors without removing an old one
- No "sci-fi" effects unless strictly informational
- Avoid abstractions that hide client/server boundaries

---

## When Unsure
Default to:
- Removing code
- Leaving a comment
- Asking for review

Silence is better than instability.

---

## Enforcement Rule

If behavior and documentation disagree:

> **Documentation wins.**

This file exists to stop slow erosion of system integrity.

---

### Enforcement Note (Dec 28)

If portal code references:
- CSRF
- Cookies for auth
- Pterodactyl
- APIv1 routes

That code must be removed or refactored before merge.
