diff --git a/src/pages/docs/camelot/core/io.md b/src/pages/docs/camelot/core/io.md
index 761d504..a13de17 100644
--- a/src/pages/docs/camelot/core/io.md
+++ b/src/pages/docs/camelot/core/io.md
@@ -72,6 +72,122 @@ This returns memory to the originating allocator, preventing double-frees and li
| `STRING_format()` for allocator-aware formatting | Any format function bypassing `Allocator*` |
| All return values checked via `Result` | Unchecked truncation or overrun |
+## API Reference
+
+### `IO_read`
+
+```c
+Result IO_read(Allocator* alloc, String path);
+```
+
+**Summary**: Reads the entire contents of a file into a dynamically allocated buffer. Uses the provided allocator for safe memory tracking.
+
+- **Parameters**:
+ - `alloc` (`Allocator*`): The allocator used to provision the read buffer.
+ - `path` (`String`): The file system path to read from.
+- **Returns**: `Result` containing `OK` with the file data payload, `NIL` if the file is empty, or `ERR` on system failure.
+- **Errors**: Returns `ERR_FILE_ERROR` if the file does not exist or permissions are denied.
+- **See Also**: [`IO_write`](#io_write)
+
+
+Example Usage
+
+```c
+Result res = IO_read(arena, STRING("config.txt"));
+if (res.status == RESULT_OK) {
+ Slice data = res.payload;
+ // Process data...
+}
+```
+
+
+
+### `IO_write`
+
+```c
+Result IO_write(Allocator* alloc, String path, Slice data);
+```
+
+**Summary**: Safely writes a slice of bytes to a file. Overwrites the file if it exists, or creates it if it does not.
+
+- **Parameters**:
+ - `alloc` (`Allocator*`): The allocator used for any internal temporary buffers.
+ - `path` (`String`): The destination file system path.
+ - `data` (`Slice`): The byte payload to write to disk.
+- **Returns**: `Result` containing `OK` on success, or `ERR` on failure.
+- **Errors**: Returns `ERR_FILE_ERROR` on permission denial or I/O failure.
+- **See Also**: [`IO_read`](#io_read)
+
+
+Example Usage
+
+```c
+String content = STRING("Hello, Camelot!");
+Slice data = SLICE_FROM_STRING(content);
+Result res = IO_write(arena, STRING("output.txt"), data);
+```
+
+
+
+### `STRING_format`
+
+```c
+[[nodiscard]] Result STRING_format(Allocator* alloc, const char* fmt, ...);
+```
+
+**Summary**: Allocator-aware string formatting utility. Acts as a memory-safe alternative to `asprintf`, preventing double-frees and unmanaged memory.
+
+- **Parameters**:
+ - `alloc` (`Allocator*`): The allocator to provision the resulting string.
+ - `fmt` (`const char*`): A standard `printf`-style format string.
+ - `...`: Variadic arguments matching the format specifiers.
+- **Returns**: `Result` containing an `OwnedString*` payload on success.
+- **Errors**: Returns `ERR_MEMORY_ERROR` if allocation fails, or `ERR_FORMAT_ERROR` on encoding issues.
+- **See Also**: [`OWNEDSTRING_deinit`](#ownedstring_deinit), [`STRING_formatVariadic`](#string_formatvariadic)
+
+
+Example Usage
+
+```c
+Result res = STRING_format(arena, "Failed to open %s (Code: %d)", path.ptr, err_code);
+if (res.status == RESULT_OK) {
+ OwnedString* str = res.payload;
+ printf("%s\n", str->view.ptr);
+ OWNEDSTRING_deinit(str);
+}
+```
+
+
+
+### `STRING_formatVariadic`
+
+```c
+[[nodiscard]] Result STRING_formatVariadic(Allocator* alloc, const char* fmt, va_list args);
+```
+
+**Summary**: Variadic list variant of `STRING_format`. Useful for building custom logging or formatting wrappers.
+
+- **Parameters**:
+ - `alloc` (`Allocator*`): The allocator to provision the resulting string.
+ - `fmt` (`const char*`): A standard `printf`-style format string.
+ - `args` (`va_list`): An initialized variadic argument list.
+- **Returns**: `Result` containing an `OwnedString*` payload on success.
+- **See Also**: [`STRING_format`](#string_format)
+
+### `OWNEDSTRING_deinit`
+
+```c
+void OWNEDSTRING_deinit(OwnedString* str);
+```
+
+**Summary**: Safely deallocates an `OwnedString`, returning its memory to the originating allocator.
+
+- **Parameters**:
+ - `str` (`OwnedString*`): A pointer to the owned string to destroy. If `NULL`, the function is a no-op.
+- **Side Effects**: The memory underlying `str->view` is freed, and the `str` struct itself is destroyed.
+- **See Also**: [`STRING_format`](#string_format)
+
+
## CI/CD Pipeline
The I/O module is validated through the full CI/CD pipeline defined in `.github/workflows/ci.yml`:
diff --git a/src/pages/docs/camelot/core/merlin.md b/src/pages/docs/camelot/core/merlin.md
index 3d3a072..4e4e959 100644
--- a/src/pages/docs/camelot/core/merlin.md
+++ b/src/pages/docs/camelot/core/merlin.md
@@ -123,16 +123,85 @@ When launched without arguments, Merlin presents an animated terminal dashboard
🔮 Merlin >
```
-### Available Commands
-
-| Command | Aliases | Description |
-|---|---|---|
-| `all` | `build`, `1` | Compile the full framework |
-| `test` | `2` | Build and run the sanitizer test suite |
-| `run` | `3` | Build and launch the executable |
-| `clean` | `4` | Delete all object files and binaries |
-| `help` | `dashboard`, `h` | Redraw the dashboard with updated metrics |
-| `exit` | `quit`, `q`, `5` | Exit the Merlin shell |
+## Command Reference
+
+### `all`
+
+**Aliases**: `build`, `1`
+
+**Summary**: Compiles the entire Camelot framework. It discovers all `.c` files in the `src/` directory and compiles them based on the active profile.
+
+- **Side Effects**: Generates object files in `obj/` and outputs the final binary to `bin/camelot`.
+- **Errors**: Halts and displays compiler errors if any source file fails to compile.
+
+
+Example Usage
+
+```bash
+# Interactive mode
+🔮 Merlin > all
+
+# Non-interactive CI mode
+./bin/merlin all
+```
+
+
+
+### `test`
+
+**Aliases**: `2`
+
+**Summary**: Compiles and executes the sanitizer test suite. It builds all framework objects and test files, automatically excluding the main application entry point.
+
+- **Side Effects**: Generates the `bin/test_camelot` executable and runs it.
+- **Errors**: Returns a non-zero exit code if any assertions fail or if Address/Leak/Undefined Behavior Sanitizers detect issues.
+
+
+Example Usage
+
+```bash
+🔮 Merlin > test
+```
+
+
+
+### `run`
+
+**Aliases**: `3`
+
+**Summary**: Builds the executable (if not already up-to-date) and launches it directly from the build engine.
+
+- **Side Effects**: Suspends Merlin temporarily while the child process `bin/camelot` runs.
+- **See Also**: [`all`](#all)
+
+### `clean`
+
+**Aliases**: `4`
+
+**Summary**: Purges all generated artifacts to ensure a pristine workspace.
+
+- **Side Effects**: Recursively deletes the `obj/` and `bin/` directories.
+
+
+Example Usage
+
+```bash
+🔮 Merlin > clean
+```
+
+
+
+### `help`
+
+**Aliases**: `dashboard`, `h`
+
+**Summary**: Redraws the interactive dashboard UI. Useful if the terminal gets cluttered by compiler warnings or child process output.
+
+### `exit`
+
+**Aliases**: `quit`, `q`, `5`
+
+**Summary**: Gracefully terminates the interactive Merlin shell and returns to the system prompt.
### CI/CD Non-Interactive Mode