> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://documentation.celestory.io/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Testing your project and reading the debugger

# ▶️ Testing your project and reading the debugger

You've laid down a branch, created a variable, written two lines of dialogue. Now you need to check that it actually works. Celestory will tell you almost nothing on its own: it's up to you to look, and above all to **know where to look**. 👀

This article lays out a repeatable test routine, then details what the debug window shows you — and what it doesn't.

🔺 This article covers **method**. The catalogue of failures that display no message at all lives elsewhere: see *When nothing works, and nothing tells you why*.

---

${frame}[Video: Testing your project and reading the debugger](https://celestory-docs-videos.netlify.app/en/geste-ui/test-and-read-the-debugger.html)

## 🔁 The routine: five steps, always in this order

1. **Save** (`Cmd/Ctrl + S`). The test won't do it for you.
2. **Play**: the **Play current module** button in the top bar.
3. **Watch** — the game window *and* the **Debug** window next to it, *and* the graph behind them, which recenters itself on the block currently running.
4. **Close** the test window before you fix anything.
5. **Fix it**, then start again at step 1.

⚠️ Step 4 is not a nicety. The test window **freezes the state of the project at the moment it opens**: the project is compiled once, on opening, from whatever the editor has in memory. You can edit ten blocks while the test is running — the window will keep playing the old version. Closing and reopening is the **only** way to recompile.

---

## ▶️ The Play button: what it actually does

The **Play current module** button opens a floating window titled **Play test**, right inside the Creator. A second window opens automatically next to it, **Debug**, 360 × 640 pixels, docked to the right of the screen.

Three misconceptions to clear up right away:

⚠️ **Play doesn't save.** The test compiles whatever your browser has in memory, not what's on the server. Consequences: a successful test protects you from nothing if you close the tab without saving; and a colleague who opens the project won't see what you just tested.

⚠️ **Play produces no link.** There's no URL, no public page, nothing to send to anyone. The test lives in your editor window and dies with it. To get a playable link, you have to go through **Publish** and pick the **Direct link** platform. And watch out: the **Share** button does *not* do this — it invites collaborators into **the editor**, not players into the game.

⚠️ **The `Shift + P` shortcut is shown but doesn't work.** The button's tooltip announces it ("Play from the module. Shift+P"), but the combination isn't wired to anything in the code. Click the button.

### 🏷️ The watermark

A semi-transparent Celestory logo appears at the top center of the test window. It disappears if the subscription is **Premium**, **Pro** or **Business**.

🔺 A verified subtlety: the watermark follows the **project owner's** subscription, not yours. If you're working on someone else's project, it's their subscription that decides.

### 🍔 Starting on a menu

Hover the Play button without clicking: a small panel unfolds with an **Open menu …** entry for every launchable menu in the project. Only menus of type **Home** and **Page** appear there — HUD and Overlay menus are excluded, which makes sense: they aren't starting points.

---

## 🎯 Playing from a specific block

Yes, this exists, but it's not in the toolbar. **Right-click a single block** on the graph → **Play from this block**.

🔺 The entry only appears if **exactly one** block is selected (no groups) **and** that block has at least one Stream output. A block that only produces a value can't be a starting point: nothing would flow out of it.

This is the tool that saves the most time when you're fixing the end of a long story: no need to replay the first twenty minutes.

---

## 🔎 The Debug window: three tabs

### 📍 **General** tab — where the story stands

This is the heart of the debugger. It permanently shows:

- **Current block**: its **ID** and its **name**, both selectable (so copyable).
- **Center view on block**: brings the graph back to the block currently running.
- **Restart**: relaunches the story from the beginning. ⚠️ This also **resets every variable** to its starting value.
- A language selector + **Restart with selected language**, if your project is translated.
- **Load last checkpoint** and **Remove last checkpoint data** — only if a checkpoint was recorded during the playthrough.
- **Replace scenario with content played** (see below ⤵️).

✨ The best part of the debugger isn't even in this window: **the graph recenters itself on the block currently running, at every single step.** If the story jumps to another graph, the editor opens it and recenters there too. Put the test window next to the canvas and watch both: you *see* your story unfold block by block. This is where you spot the branches heading off in the wrong direction.

### 🔢 **Variables** tab — live values

Contrary to what you may have heard, **yes, the debugger does show variable values in real time.** The tab lists every variable in the project, **grouped by type** (Texts, Numbers, Booleans, Images, Objects, Files…), with a **search** field at the top. Each value updates at every step of the story.

A variable that hasn't received anything yet shows **Undefined**.

✨ Even better: the values are **editable in place**. Change a number in the tab and the story continues with your value. It's the fastest way to test a conditional branch without replaying the whole path that leads to it.

🔺 This injection only affects **the current playthrough**. Nothing is written back to the graph, and **Restart** resets everything to zero.

### 📐 **Display** tab — screen formats

- **Preview device ratio**: pick a format (9/16, 16/9, 21/9, 9/19.5…), then **Resize** applies it to the test window. Useful for seeing what your scenery looks like on a phone in portrait mode.
- **Ratio du projet**: this one, by contrast, **genuinely changes the project**. Don't touch it out of curiosity.

⚠️ **On mobile, the Debug window doesn't open at all.** Below 768 pixels wide, the game launches, but with no tracking tools whatsoever. Test from a computer.

---

## 🕰️ "Contenu test joué": the retrospective debugger

Here's the least-known feature, and one of the most useful. It doesn't live in the Debug window — it lives in a **block's editing window**.

After playing and then **closing** the test window, open a block the story passed through. Right at the bottom of its editing window, a section appears called **"Contenu test joué,"** with one collapsible row **per test**, dated ("22/09/2026 at 14:35"). Expand it: you see, **input by input**, the value the block actually received during that test.

This is exactly what you need to answer "but what did this block actually have, at the moment it ran?" — a text assembled from variables, a reply returned by an AI, a row read from Baserow.

⚠️ Three limits, all verified:

- The section **only appears after** the test window is closed. While you're playing, nothing is recorded.
- The history is **never saved** with the project. Reload the page and every "Contenu test joué" entry disappears.
- The section's title is **hard-coded in French in the source code**: it's displayed in French even when the rest of the Creator is set to English. This isn't a display bug on your end — it's simply not been translated.

### 🔀 And the "Replace scenario with content played" button?

This button, in the General tab, **doesn't display anything at all**: it's not a view, it's a **write action**. It opens a window where you pick a session (the current session, or a dated test), then:

- **Replace**: overwrites the content of every block played in the graph with what was actually played.
- **Duplicate module**: does the same thing, but in a copy of the module.

⚠️ **Replace is destructive.** If your content comes from variables or an AI, duplicate the original module first — which is exactly what the window itself recommends. The action goes through the history, so `Cmd/Ctrl + Z` can undo it, but don't count on that.

---

## 🙈 What the debugger doesn't show you

| What you'd expect to find | The reality |
|---|---|
| A step-by-step log, like a scrolling list | No. The path taken **is** recorded in memory, but **no screen displays it**. You only see the current block. |
| Compilation errors | No. See the next section: they only ever go to the browser console. |
| Unwired outputs | No. A branch that leads nowhere compiles without a word. |
| A message when a block fails | No. A block that gets stuck simply stays stuck, and "Current block" stops advancing. |
| Variable values | Yes! This is in fact what it does best. 🎉 |

---

## 🔕 The three errors nobody will ever tell you about

Celestory can detect three kinds of defects when it compiles your project. It files them into a list of errors… **that no interface reads.** They only ever go out to the browser's technical console.

| Error | What it means | Translated? |
|---|---|---|
| `noStartFound` | The module has **no** **start** block at all. | Yes, in both French and English — but never displayed. |
| `tooManyStarts` | The module has **several** **start** blocks. | ❌ **None**, in either French or English. |
| `blockNotFound` | The graph contains a block of a type this version of the Creator doesn't recognize. | ❌ **None**, in either French or English. |

**What you'll see instead:** in the first two cases, the player starts on an empty start block — the **Play test** window stays blank and the Debug window shows no current block at all. No message, no red cross. A test window that stays blank on launch is **this**, nine times out of ten.

🔺 Rest assured: inside the editor, these first two errors are hard to trigger by hand. Adding a second **start** is refused with a message (in English: *Can't add more start block in this graph*), the start block won't paste and won't delete. They mostly show up on a module that's been **imported**, **duplicated**, or built by the **graph's AI agent**. `blockNotFound`, for its part, almost always signals a project that came from a different version.

### 🔬 How to read them anyway

Two paths, both real:

- **The developer window.** Type the letters **`d`**, then **`b`**, then **`g`** in a row on the canvas. A *Celestory Debug Mode* window opens (in English). Choose **Build project save data**: you get the full compilation of your project as text. Search it for `"errors"`: if the array isn't empty, you have the error's name and the block involved.
- **The graph's AI agent.** Its validation tool compiles the project and **returns this exact same list of errors**, in plain language — plus the outputs that lead nowhere and the value inputs that read nothing. Just ask it to validate your module.

🔺 A deliberate quirk: the AI assistant gets an error report the human interface doesn't. 🤖

---

## 🗂️ Symptom → likely cause → where to look

| Symptom | Likely cause | Where to look |
|---|---|---|
| The **Play test** window stays blank right from launch | No **start** block, or several, in the module | `d` `b` `g` → **Build project save data** → search for `"errors"`; or ask the AI agent for a validation |
| The game window stays blank even though the module does have a start | A block of a type this version doesn't recognize (`blockNotFound`) | Same place: the error names the faulty block type |
| **My fix has no effect** in the test | The test window froze the project when it opened | Close it, reopen it. And check you actually clicked **outside** the code editor beforehand (see *When nothing works…*) |
| **The story stops** and never resumes | A block is waiting for something that never arrives (external sound, network call…) | **General** tab → the **current block name** stops changing: that's the culprit. Use **Center view on block** to find it |
| A branch **always** goes the same way | The condition reads a variable that doesn't have the expected value | **Variables** tab at the moment of the choice. If the variable shows **Undefined**, its input is wired to nothing |
| A text shows `{{FirstName}}` **as is** | The variable was never wired into the text | **Variables** tab: does the variable exist under that exact name, with no accent? |
| **I don't know what value the block received** | — | Close the test, open the block, expand **"Contenu test joué"** |
| The test **starts over from the beginning** when I wanted to test the end | You used the Play button | Right-click the block you want → **Play from this block** |
| No **Debug** window opens at all | Screen under 768 px, or the window was closed by mistake | Enlarge the browser window, close and relaunch the test |
| A **Celestory logo** shows at the top of the game | Subscription below Premium **for the project owner** | Nothing to fix: that's the watermark, see *AI Credits and Subscription* |
| My colleague doesn't see what I just tested | Play doesn't save | `Cmd/Ctrl + S` |

---

## 🧭 The rule to remember

**The debugger answers "where does the story stand" and "what are the variables worth." It never answers "why isn't this working."** That answer, you have to build yourself: by following the current block through the graph, by reading the variables at the right moment, and by expanding "Contenu test joué" after the fact.

And none of it is saved. Every test that taught you something evaporates the moment you reload the page — write down what you find. 📝

---

→ Next step: now that you're testing seriously, there's one thing left that Celestory will never do in your place — head to **Saving: Celestory doesn't do it for you**. 💾