# LLM Guide: Low-Level Project Data (`LowLevel/`)

## 1. Purpose

This data level provides the **most granular, detailed, and raw view** of the project's assets. It is designed for deep inspection of specific object properties, component values, and raw file contents.

**Use this data ONLY when:**
- The user asks for a specific property value that is not available in the Mid-Level data (e.g., "What are the exact position coordinates of the 'Player' object?").
- You need to read the content of a C# script or a shader file.
- You need to examine the raw, unmodified project settings files.

## 2. File Structure

The `LowLevel` folder contains a highly detailed breakdown of the project, where scenes and prefabs are exploded into their constituent GameObjects.

```
LowLevel/
├── Assets/
│   ├── Scenes/
│   │   └── SampleScene.unity/  // A directory, not a file
│   │       ├── 14854.json      // Represents the Main Camera GameObject
│   │       ├── 99012.json      // Represents the Player Character GameObject
│   │       └── root_objects.json // Lists the fileIDs of top-level objects
│   ├── Scripts/
│   │   └── PlayerController.cs // The actual C# script file
│   └── Shaders/
│       └── Lit.shader      // The actual shader file
└── ProjectSettings/
    ├── TagManager.json
    └── ... (other raw project settings files as JSON)
```

## 3. Key Files & Schema

### `Assets/.../{fileID}.json`

This file represents a **single GameObject or Component** from a scene or prefab. The filename is the object's unique `fileID` within its original asset file. This is a raw dump of the object's data as seen in the YAML source.

**Schema Example (`99012.json` for the Player Character):**
```json
{
  "GameObject": {
    "m_ObjectHideFlags": 0,
    "m_CorrespondingSourceObject": { "fileID": 0 },
    "m_PrefabInstance": { "fileID": 0 },
    "m_PrefabAsset": { "fileID": 0 },
    "m_Component": [
      { "component": { "fileID": 990120 } }, // Link to its own Transform
      { "component": { "fileID": 990121 } }, // Link to a BoxCollider
      { "component": { "fileID": 990122 } }  // Link to a MonoBehaviour
    ],
    "m_Layer": 8,
    "m_Name": "Player Character",
    "m_TagString": "Player",
    "m_IsActive": 1
  }
}
```
- The data is raw. To find the position, you would need to find the `Transform` component (e.g., `990120.json`) and look for the `m_LocalPosition` property within it.
- To find which script is attached, you would need to find the `MonoBehaviour` component (e.g., `990122.json`) and look for the `m_Script` property, which contains the script's GUID.

### `Assets/.../root_objects.json`

This file contains a simple JSON list of the `fileID`s for all the root (top-level) GameObjects within that scene or prefab.

**Schema Example:**
```json
[
  14854,
  99012,
  123456
]
```

### Other Files

-   **`*.cs` and `*.shader` files:** These are direct, plain-text copies of the original source files.
-   **`ProjectSettings/*.json`:** These are raw, one-to-one conversions of the corresponding `.asset` files from YAML to JSON.

## 4. Handling Shrunken / Tokenized Data

The JSON files in this folder may have been processed by `json_reducer.py`.

**If the data is shrunken:**
1.  The file content will look like this: `{"key_mapper":{"k0":"GameObject",...},"data":{"k0":{...}}}`
2.  You **MUST** use the `key_mapper` to de-tokenize the keys in the `data` object before you can interpret the schema.
3.  The `json_reducer` also removes keys with empty values. If a key is missing from a de-tokenized object, you can assume its value was empty.

Once de-tokenized, the data will conform to the schemas described above.