diff --git a/src/components/playground/AutopsyPanel.tsx b/src/components/playground/AutopsyPanel.tsx
index 919d8cb..3d526f2 100644
--- a/src/components/playground/AutopsyPanel.tsx
+++ b/src/components/playground/AutopsyPanel.tsx
@@ -119,6 +119,19 @@ export default function AutopsyPanel({
+ ) : session.metrics.length === 0 ? (
+
+
+
—
+
+ runtime monitor waiting
+
+ 0 samples yet — the engine cannot judge curves it has not seen.
+ Point the recorder at your app (--app-url) so health samples arrive.
+
+
+
+
) : (
diff --git a/src/components/playground/city.ts b/src/components/playground/city.ts
index 696b249..f48e112 100644
--- a/src/components/playground/city.ts
+++ b/src/components/playground/city.ts
@@ -243,7 +243,10 @@ export function buildPlaygroundCity(
);
});
- // Ambient district blocks keep the city legible without inventing file facts.
+ // Ambient district blocks keep the demo city legible without inventing file
+ // facts. Live recordings never get filler: their skyline is exactly the set
+ // of files the session actually touched — zero files = an honest empty city.
+ if (!isLive) {
const ambientCount = 44;
for (let i = 0; i < ambientCount; i += 1) {
let guard = 0;
@@ -273,6 +276,7 @@ export function buildPlaygroundCity(
z,
);
}
+ }
return towers;
}