> ## Documentation Index
> Fetch the complete documentation index at: https://prism.ntecdev.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Retro: Phase 0 — Scaffold + TestPrism + Bootstrap UX

> Phase 0 — Scaffold + TestPrism + Bootstrap UX

<Info>**Phase:** Phase 0 — Scaffold + TestPrism + Bootstrap UX · **Status:** `closed` · Filed 2026-04-16</Info>

## What Worked

* Manifest-return pattern (ADR-008) — clean separation, idempotent retries
* Atomic config writes with .bak.`<ts>` (ADR-009/010) — zero corrupted configs
* Idempotent FS-MCP path injection — agents call freely without state reasoning
* Dev API key bypass gated by ENVIRONMENT=development (ADR-005)
* Porting builtin.ts instead of redesigning the tree (ADR-011)
* One-shot start-backend.ps1 kept dev loop tight

## What Didn't

* last\_used\_at on API keys never persists on GET routes — commit skipped
* Initial install.py before the TS pivot — threw away \~200 LOC
* Asking 'which one next?' mid-build — violated AI FIRST mandate
* Implying Frank should extend the CLI — never frame work as a developer task
* Misnamed initial PIDs in TestPrism smoke — decide identity authority on day one
* Claude Desktop launches MCP servers with CWD = system32 — silent server

## Lessons

* **\[project]** L1 — GET handlers need explicit commits when they update audit fields
* **\[project]** L2 — All future scaffolders must port from a known-good source rather than redesign
* **\[project]** L3 — Every config edit through .bak.`<ts>` + atomic replace, no exceptions
* **\[project]** L4 — Server mints all identifiers (PIDs, IDs, slugs). Never accept from client
* **\[global]** G1 — CLI runtime tracks the editor ecosystem, not the backend
* **\[global]** G2 — AI FIRST and AI ONLY extends P2. When queue is clear, agent executes without asking
