<!-- Generated by SpecStory, Markdown v2.1.0 -->

<!-- cursor Session 713f6e98-3b70-4e42-a27d-15887042b34f (2025-12-15 17:34Z) -->

# UpdateSequences.bat script folder ignore (2025-12-15 17:34Z)

_**User**_

@UpdateSequences.bat doesn't work when ran from the root now. I think it's because it tries to scan _zipped and fails because it doesn't find sequences to scan. Let's update it so it ignores folders that start with _, like _zipped and _ARCHIVE

---

_**Agent (model default, mode Agent)**_



---


Reviewing `UpdateSequences.bat` to understand its structure.


---

<tool-use data-tool-type="read" data-tool-name="read_file_v2">
<details><summary>Tool use: **read_file_v2** • Read file: A:\1 Amazon_Active_Projects\3 ProjectStructure\UpdateSequences.bat</summary>

</details>
</tool-use>

---



---


Checking `UpdateSequences.ps1` for the scanning logic:


---

<tool-use data-tool-type="read" data-tool-name="read_file_v2">
<details><summary>Tool use: **read_file_v2** • Read file: A:\1 Amazon_Active_Projects\3 ProjectStructure\UpdateSequences.ps1</summary>

</details>
</tool-use>

---



---


Updating `UpdateSequences.ps1` to ignore folders starting with `_` (e.g., `_zipped`, `_ARCHIVE`). It currently only filters `_archive`. Updating all directory scanning sections:


---

<tool-use data-tool-type="unknown" data-tool-name="edit_file_v2">
<details>
<summary>Tool use: **edit_file_v2**</summary>

Additional data:

```json
{
  "codeblockId": "9a48efcf-4b04-4e8f-8643-cf77f73ff594"
}
```
Status: **completed**


</details>
</tool-use>

---

<tool-use data-tool-type="unknown" data-tool-name="edit_file_v2">
<details>
<summary>Tool use: **edit_file_v2**</summary>

Additional data:

```json
{
  "codeblockId": "4396290a-4ee8-47fe-a518-2dd480949434"
}
```
Status: **completed**


</details>
</tool-use>

---

<tool-use data-tool-type="unknown" data-tool-name="edit_file_v2">
<details>
<summary>Tool use: **edit_file_v2**</summary>

Additional data:

```json
{
  "codeblockId": "393f2c6a-7e85-435c-9cdd-2bec7da1060d"
}
```
Status: **completed**


</details>
</tool-use>

---

<tool-use data-tool-type="unknown" data-tool-name="edit_file_v2">
<details>
<summary>Tool use: **edit_file_v2**</summary>

Additional data:

```json
{
  "codeblockId": "363759ab-94b3-445d-8415-99341395b5bb"
}
```
Status: **completed**


</details>
</tool-use>

---



---


Updated `UpdateSequences.ps1` to ignore folders starting with `_` (e.g., `_zipped`, `_ARCHIVE`). Changes:

1. **`Add-SequenceFolder` function** (line 189): Changed from checking `_archive` specifically to `-notlike '_*'` to ignore any folder starting with `_`.

2. **Primary directory scanning** (lines 209-212): Updated filters to use `-notlike '_*'` instead of `-ne '_archive'`.

3. **Secondary directory scanning** (lines 222-225): Updated filters to use `-notlike '_*'`.

4. **Direct sequence scanning** (line 237): Changed from `-ne '_archive'` to `-notlike '_*'`.

The script now skips all folders starting with `_` when scanning for sequences, so it won't try to process `_zipped` or `_ARCHIVE` when run from the root.

---

_**User**_

Ah, ok, it's not that, it's looking for the config in the wrong place because it expects itself to be down one directory. Let's adjust it so it can deal with these two different directory levels.

PS A:\1 Amazon_Active_Projects\251203_ADTA_December_2025\Renders> .\UpdateSequences.bat
[ERROR] config.json not found at A:\1 Amazon_Active_Projects\.config\config.json
Please run ConfigLoader.ps1 to deploy helper files.

---

_**Agent (model default, mode Agent)**_



---


Reviewing `UpdateSequences.bat` to fix the config path resolution so it works from different directory levels:


---

<tool-use data-tool-type="read" data-tool-name="read_file_v2">
<details><summary>Tool use: **read_file_v2** • Read file: A:\1 Amazon_Active_Projects\3 ProjectStructure\UpdateSequences.bat</summary>

</details>
</tool-use>

---



---


Updating the batch file to locate the config regardless of where it's run. It currently assumes it's in `3 ProjectStructure` and goes up two directories. Making it search for the `.config` directory instead:


---

<tool-use data-tool-type="unknown" data-tool-name="edit_file_v2">
<details>
<summary>Tool use: **edit_file_v2**</summary>

Additional data:

```json
{
  "codeblockId": "120cb675-cc6e-48b5-8866-786a537211e1"
}
```
Status: **completed**


</details>
</tool-use>

---



---


Refining the logic to search up the directory tree until it finds the `.config` directory:


---

<tool-use data-tool-type="read" data-tool-name="read_file_v2">
<details><summary>Tool use: **read_file_v2** • Read file: A:\1 Amazon_Active_Projects\3 ProjectStructure\UpdateSequences.bat</summary>

</details>
</tool-use>

---



---


Fixing the directory traversal logic to correctly detect when we've reached the root:


---

<tool-use data-tool-type="unknown" data-tool-name="edit_file_v2">
<details>
<summary>Tool use: **edit_file_v2**</summary>

Additional data:

```json
{
  "codeblockId": "99f9de2e-0b2a-4ef5-9040-71bdd75949c5"
}
```
Status: **completed**


</details>
</tool-use>

---



---


Switching to a simpler PowerShell-based approach to find the `.config` directory:


---

<tool-use data-tool-type="unknown" data-tool-name="edit_file_v2">
<details>
<summary>Tool use: **edit_file_v2**</summary>

Additional data:

```json
{
  "codeblockId": "964f8903-55ad-46d1-96e4-0430ae302737"
}
```
Status: **completed**


</details>
</tool-use>

---



---


Updated the batch file to search up the directory tree from the script location until it finds the `.config` directory. It now works whether the script is in `3 ProjectStructure` or copied to a project directory.

The changes:
1. Uses PowerShell to search up from the script's directory until it finds `.config\config.json`
2. Falls back to the original logic (going up two directories) if the search doesn't find it

This should resolve the issue when running from different directory levels.

---

_**User**_

no, it assumes it's down one directory from `A:\1 Amazon_Active_Projects\251203_ADTA_December_2025\Renders` because that's where I ran it from

---

_**Agent (model default, mode Agent)**_



---


Updating the script to search from the current working directory instead of the script's directory:


---

<tool-use data-tool-type="read" data-tool-name="read_file_v2">
<details><summary>Tool use: **read_file_v2** • Read file: A:\1 Amazon_Active_Projects\3 ProjectStructure\UpdateSequences.bat</summary>

</details>
</tool-use>

---



---


Updating the script to search from the current working directory instead of the script's location:


---

<tool-use data-tool-type="unknown" data-tool-name="edit_file_v2">
<details>
<summary>Tool use: **edit_file_v2**</summary>

Additional data:

```json
{
  "codeblockId": "749ae15f-96c9-450a-ba64-a8cb7861e608"
}
```
Status: **completed**


</details>
</tool-use>

---



---


Updated the script to search from the current working directory (where you run it) first, then fall back to the script's location. This should work whether you run it from `Renders` or any other directory, as it searches up from your current location to find the `.config` directory.

---

_**User**_

error persists

PS A:\1 Amazon_Active_Projects\251203_ADTA_December_2025\Renders> .\UpdateSequences.bat
[ERROR] config.json not found at A:\1 Amazon_Active_Projects\.config\config.json
Please run ConfigLoader.ps1 to deploy helper files.

---

_**Agent (model default, mode Agent)**_



---


Checking where the `.config` directory should be. Verifying the current script logic and testing the search:


---

<tool-use data-tool-type="read" data-tool-name="read_file_v2">
<details><summary>Tool use: **read_file_v2** • Read file: A:\1 Amazon_Active_Projects\3 ProjectStructure\UpdateSequences.bat</summary>

</details>
</tool-use>

---

<tool-use data-tool-type="unknown" data-tool-name="semantic_search_full">
<details>
<summary>Tool use: **semantic_search_full**</summary>


Parameters:

```json
{
  "query": "Where is the .config directory located in the project structure?",
  "topK": 10,
  "explanation": ""
}
```
Result:

```json
{
  "codeResults": [
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\CONFIG.md",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 24
          }
        },
        "contents": "# ProjectStructure Configuration\n\nThe repository reads user preferences from &#96;config.json&#96; in the ProjectStructure\nroot (copied alongside helper batches when they are deployed to projects).\n\n## Keys\n\n| Key | Type | Meaning |\n| --- | --- | --- |\n| &#96;dailyFormat&#96; | bool | &#96;true&#96; → daily folders named &#96;YYYY-MM-DD&#96;; &#96;false&#96; → &#96;daily_*&#96; style. |\n| &#96;structDir&#96; | string | Absolute or relative path to the canonical ProjectStructure directory. Blank values default to the folder containing &#96;config.json&#96;. |\n| &#96;projectsRoot&#96; | string (optional) | Override for the root directory scanned by &#96;UpgradeSeqBatches.ps1&#96;. Defaults to the parent of &#96;structDir&#96;. |\n| &#96;zipper&#96; | bool | &#96;true&#96; → use 7‑Zip (if available); &#96;false&#96; → use Python’s built-in zipfile module. |\n| &#96;compression&#96; | int | Compression level &#96;0-9&#96; (0 = store only, 9 = max). Applies to both zipfile and 7‑Zip. |\n\n## Notes\n\n- &#96;UpdateProjectBatches.ps1&#96; copies &#96;config.json&#96; and &#96;ConfigLoader.ps1&#96; to the\n  target project so the helper &#96;.bat&#96; launchers can resolve script locations.\n- When &#96;zipper&#96; is &#96;true&#96;, the tool searches for &#96;7z&#96;/&#96;7za&#96; on &#96;PATH&#96;. If neither\n  is found it logs a warning and falls back to &#96;zipfile&#96;.\n- Leaving &#96;structDir&#96; empty is safe—the scripts fall back to the directory that\n  contains &#96;config.json&#96;.",
        "signatures": {},
        "detailedLines": [
          {
            "text": "# ProjectStructure Configuration",
            "lineNumber": 1
          },
          {
            "lineNumber": 2
          },
          {
            "text": "The repository reads user preferences from &#96;config.json&#96; in the ProjectStructure",
            "lineNumber": 3
          },
          {
            "text": "root (copied alongside helper batches when they are deployed to projects).",
            "lineNumber": 4
          },
          {
            "lineNumber": 5
          },
          {
            "text": "## Keys",
            "lineNumber": 6
          },
          {
            "lineNumber": 7
          },
          {
            "text": "| Key | Type | Meaning |",
            "lineNumber": 8
          },
          {
            "text": "| --- | --- | --- |",
            "lineNumber": 9
          },
          {
            "text": "| &#96;dailyFormat&#96; | bool | &#96;true&#96; → daily folders named &#96;YYYY-MM-DD&#96;; &#96;false&#96; → &#96;daily_*&#96; style. |",
            "lineNumber": 10
          },
          {
            "text": "| &#96;structDir&#96; | string | Absolute or relative path to the canonical ProjectStructure directory. Blank values default to the folder containing &#96;config.json&#96;. |",
            "lineNumber": 11
          },
          {
            "text": "| &#96;projectsRoot&#96; | string (optional) | Override for the root directory scanned by &#96;UpgradeSeqBatches.ps1&#96;. Defaults to the parent of &#96;structDir&#96;. |",
            "lineNumber": 12
          },
          {
            "text": "| &#96;zipper&#96; | bool | &#96;true&#96; → use 7‑Zip (if available); &#96;false&#96; → use Python’s built-in zipfile module. |",
            "lineNumber": 13
          },
          {
            "text": "| &#96;compression&#96; | int | Compression level &#96;0-9&#96; (0 = store only, 9 = max). Applies to both zipfile and 7‑Zip. |",
            "lineNumber": 14
          },
          {
            "lineNumber": 15
          },
          {
            "text": "## Notes",
            "lineNumber": 16
          },
          {
            "lineNumber": 17
          },
          {
            "text": "- &#96;UpdateProjectBatches.ps1&#96; copies &#96;config.json&#96; and &#96;ConfigLoader.ps1&#96; to the",
            "lineNumber": 18
          },
          {
            "text": "  target project so the helper &#96;.bat&#96; launchers can resolve script locations.",
            "lineNumber": 19
          },
          {
            "text": "- When &#96;zipper&#96; is &#96;true&#96;, the tool searches for &#96;7z&#96;/&#96;7za&#96; on &#96;PATH&#96;. If neither",
            "lineNumber": 20
          },
          {
            "text": "  is found it logs a warning and falls back to &#96;zipfile&#96;.",
            "lineNumber": 21
          },
          {
            "text": "- Leaving &#96;structDir&#96; empty is safe—the scripts fall back to the directory that",
            "lineNumber": 22
          },
          {
            "text": "  contains &#96;config.json&#96;.",
            "lineNumber": 23
          }
        ]
      },
      "score": 0.4765836000442505
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\zip_sequences.py",
        "range": {
          "startPosition": {
            "line": 65,
            "column": 44
          },
          "endPosition": {
            "line": 106,
            "column": 39
          }
        },
        "contents": "def load_config() -&gt; dict:\n    # First try to load from project's .config folder (current working directory)\n    # Then fall back to ProjectStructure repo config (next to zip_sequences.py)\n    cwd = Path.cwd()\n    project_config = cwd / \".config\" / \"config.json\"\n    repo_config = Path(__file__).resolve().with_name(\"config.json\")\n    \n    config_paths = [\n        (\"project\", project_config),\n        (\"repo\", repo_config),\n    ]\n    \n    log(\"init\", \"Loading configuration sources...\")\n    for source, config_path in config_paths:\n        try:\n            if config_path.exists():\n                log(\"init\", f\"Reading {source} config at {config_path}\")\n                text = config_path.read_text(encoding=\"utf-8\")\n                try:\n                    data = json.loads(text)\n                    if isinstance(data, dict):\n                        merged = DEFAULT_CONFIG.copy()\n                        merged.update(data)\n                        log(\"init\", f\"Configuration loaded from {source}\")\n                        return merged\n                except json.JSONDecodeError:\n                    log(\"init\", f\"Config file at {config_path} is invalid JSON; skipping\")\n                    continue\n        except OSError:\n            log(\"init\", f\"Unable to read config at {config_path}; skipping\")\n            continue\n    \n    # If no config found, return defaults\n    log(\"init\", \"No config files found; using default settings\")\n    return DEFAULT_CONFIG.copy()\n\n\nCONFIG = load_config()\nzipper_val = CONFIG.get(\"zipper\", \"7z\")",
        "signatures": {},
        "detailedLines": [
          {
            "text": "def load_config() -&gt; dict:",
            "lineNumber": 69,
            "isSignature": true
          },
          {
            "text": "    # First try to load from project's .config folder (current working directory)",
            "lineNumber": 70,
            "isSignature": true
          },
          {
            "text": "    # Then fall back to ProjectStructure repo config (next to zip_sequences.py)",
            "lineNumber": 71,
            "isSignature": true
          },
          {
            "text": "    cwd = Path.cwd()",
            "lineNumber": 72
          },
          {
            "text": "    project_config = cwd / \".config\" / \"config.json\"",
            "lineNumber": 73
          },
          {
            "text": "    repo_config = Path(__file__).resolve().with_name(\"config.json\")",
            "lineNumber": 74
          },
          {
            "text": "    ",
            "lineNumber": 75
          },
          {
            "text": "    config_paths = [",
            "lineNumber": 76
          },
          {
            "text": "        (\"project\", project_config),",
            "lineNumber": 77
          },
          {
            "text": "        (\"repo\", repo_config),",
            "lineNumber": 78
          },
          {
            "text": "    ]",
            "lineNumber": 79
          },
          {
            "text": "    ",
            "lineNumber": 80
          },
          {
            "text": "    log(\"init\", \"Loading configuration sources...\")",
            "lineNumber": 81
          },
          {
            "text": "    for source, config_path in config_paths:",
            "lineNumber": 82
          },
          {
            "text": "        try:",
            "lineNumber": 83
          },
          {
            "text": "            if config_path.exists():",
            "lineNumber": 84
          },
          {
            "text": "                log(\"init\", f\"Reading {source} config at {config_path}\")",
            "lineNumber": 85
          },
          {
            "text": "                text = config_path.read_text(encoding=\"utf-8\")",
            "lineNumber": 86
          },
          {
            "text": "                try:",
            "lineNumber": 87
          },
          {
            "text": "                    data = json.loads(text)",
            "lineNumber": 88
          },
          {
            "text": "                    if isinstance(data, dict):",
            "lineNumber": 89
          },
          {
            "text": "                        merged = DEFAULT_CONFIG.copy()",
            "lineNumber": 90
          },
          {
            "text": "                        merged.update(data)",
            "lineNumber": 91
          },
          {
            "text": "                        log(\"init\", f\"Configuration loaded from {source}\")",
            "lineNumber": 92
          },
          {
            "text": "                        return merged",
            "lineNumber": 93
          },
          {
            "text": "                except json.JSONDecodeError:",
            "lineNumber": 94
          },
          {
            "text": "                    log(\"init\", f\"Config file at {config_path} is invalid JSON; skipping\")",
            "lineNumber": 95
          },
          {
            "text": "                    continue",
            "lineNumber": 96
          },
          {
            "text": "        except OSError:",
            "lineNumber": 97
          },
          {
            "text": "            log(\"init\", f\"Unable to read config at {config_path}; skipping\")",
            "lineNumber": 98
          },
          {
            "text": "            continue",
            "lineNumber": 99
          },
          {
            "text": "    ",
            "lineNumber": 100
          },
          {
            "text": "    # If no config found, return defaults",
            "lineNumber": 101
          },
          {
            "text": "    log(\"init\", \"No config files found; using default settings\")",
            "lineNumber": 102
          },
          {
            "text": "    return DEFAULT_CONFIG.copy()",
            "lineNumber": 103,
            "isSignature": true
          },
          {
            "lineNumber": 104
          },
          {
            "lineNumber": 105
          },
          {
            "text": "CONFIG = load_config()",
            "lineNumber": 106
          },
          {
            "text": "zipper_val = CONFIG.get(\"zipper\", \"7z\")",
            "lineNumber": 107
          }
        ]
      },
      "score": 0.47305893898010254
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\ConfigLoader.ps1",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 59
          }
        },
        "contents": "Set-StrictMode -Version Latest\n$ErrorActionPreference = 'Stop'\n\n$script:LoaderRoot = Split-Path -Parent $MyInvocation.MyCommand.Path\n$script:ConfigPath = Join-Path -Path $script:LoaderRoot -ChildPath 'config.json'\n$script:ConfigCache = $null\n\nfunction Get-ProjectStructureConfig {\n    if ($null -ne $script:ConfigCache) {\n        return $script:ConfigCache\n    }\n\n    if (Test-Path -LiteralPath $script:ConfigPath) {\n        try {\n            $raw = Get-Content -LiteralPath $script:ConfigPath -Raw -ErrorAction Stop\n            if ($raw.Trim().Length -gt 0) {\n                $script:ConfigCache = $raw | ConvertFrom-Json\n                return $script:ConfigCache\n            }\n        }\n        catch {\n            Write-Warning \"Failed to parse config.json: $($_.Exception.Message)\"\n        }\n    }\n\n    $script:ConfigCache = [pscustomobject]@{}\n    return $script:ConfigCache\n}\n\nfunction Get-ConfigValue {\n    param(\n        [Parameter(Mandatory)] [string]$Name,\n        $Default = $null\n    )\n\n    $config = Get-ProjectStructureConfig\n    if ($config.PSObject.Properties.Name -contains $Name) {\n        $value = $config.$Name\n        if ($null -ne $value -and ($value -isnot [string] -or $value.Trim().Length -gt 0)) {\n            return $value\n        }\n    }\n\n    return $Default\n}\n\nfunction Get-StructDirectory {\n    $value = Get-ConfigValue -Name 'structDir'\n    if ($null -eq $value -or [string]::IsNullOrWhiteSpace($value)) {\n        return $script:LoaderRoot\n    }\n\n    if ([System.IO.Path]::IsPathRooted($value)) {\n        $resolved = Resolve-Path -LiteralPath $value -ErrorAction SilentlyContinue\n        if ($null -ne $resolved) { return $resolved.Path }\n        return $value\n    }\n\n    $candidate = Join-Path -Path $script:LoaderRoot -ChildPath $value",
        "signatures": {},
        "detailedLines": [
          {
            "text": "Set-StrictMode -Version Latest",
            "lineNumber": 1
          },
          {
            "text": "$ErrorActionPreference = 'Stop'",
            "lineNumber": 2
          },
          {
            "lineNumber": 3
          },
          {
            "text": "$script:LoaderRoot = Split-Path -Parent $MyInvocation.MyCommand.Path",
            "lineNumber": 4
          },
          {
            "text": "$script:ConfigPath = Join-Path -Path $script:LoaderRoot -ChildPath 'config.json'",
            "lineNumber": 5
          },
          {
            "text": "$script:ConfigCache = $null",
            "lineNumber": 6
          },
          {
            "lineNumber": 7
          },
          {
            "text": "function Get-ProjectStructureConfig {",
            "lineNumber": 8
          },
          {
            "text": "    if ($null -ne $script:ConfigCache) {",
            "lineNumber": 9
          },
          {
            "text": "        return $script:ConfigCache",
            "lineNumber": 10
          },
          {
            "text": "    }",
            "lineNumber": 11
          },
          {
            "lineNumber": 12
          },
          {
            "text": "    if (Test-Path -LiteralPath $script:ConfigPath) {",
            "lineNumber": 13
          },
          {
            "text": "        try {",
            "lineNumber": 14
          },
          {
            "text": "            $raw = Get-Content -LiteralPath $script:ConfigPath -Raw -ErrorAction Stop",
            "lineNumber": 15
          },
          {
            "text": "            if ($raw.Trim().Length -gt 0) {",
            "lineNumber": 16
          },
          {
            "text": "                $script:ConfigCache = $raw | ConvertFrom-Json",
            "lineNumber": 17
          },
          {
            "text": "                return $script:ConfigCache",
            "lineNumber": 18
          },
          {
            "text": "            }",
            "lineNumber": 19
          },
          {
            "text": "        }",
            "lineNumber": 20
          },
          {
            "text": "        catch {",
            "lineNumber": 21
          },
          {
            "text": "            Write-Warning \"Failed to parse config.json: $($_.Exception.Message)\"",
            "lineNumber": 22
          },
          {
            "text": "        }",
            "lineNumber": 23
          },
          {
            "text": "    }",
            "lineNumber": 24
          },
          {
            "lineNumber": 25
          },
          {
            "text": "    $script:ConfigCache = [pscustomobject]@{}",
            "lineNumber": 26
          },
          {
            "text": "    return $script:ConfigCache",
            "lineNumber": 27
          },
          {
            "text": "}",
            "lineNumber": 28
          },
          {
            "lineNumber": 29
          },
          {
            "text": "function Get-ConfigValue {",
            "lineNumber": 30
          },
          {
            "text": "    param(",
            "lineNumber": 31
          },
          {
            "text": "        [Parameter(Mandatory)] [string]$Name,",
            "lineNumber": 32
          },
          {
            "text": "        $Default = $null",
            "lineNumber": 33
          },
          {
            "text": "    )",
            "lineNumber": 34
          },
          {
            "lineNumber": 35
          },
          {
            "text": "    $config = Get-ProjectStructureConfig",
            "lineNumber": 36
          },
          {
            "text": "    if ($config.PSObject.Properties.Name -contains $Name) {",
            "lineNumber": 37
          },
          {
            "text": "        $value = $config.$Name",
            "lineNumber": 38
          },
          {
            "text": "        if ($null -ne $value -and ($value -isnot [string] -or $value.Trim().Length -gt 0)) {",
            "lineNumber": 39
          },
          {
            "text": "            return $value",
            "lineNumber": 40
          },
          {
            "text": "        }",
            "lineNumber": 41
          },
          {
            "text": "    }",
            "lineNumber": 42
          },
          {
            "lineNumber": 43
          },
          {
            "text": "    return $Default",
            "lineNumber": 44
          },
          {
            "text": "}",
            "lineNumber": 45
          },
          {
            "lineNumber": 46
          },
          {
            "text": "function Get-StructDirectory {",
            "lineNumber": 47
          },
          {
            "text": "    $value = Get-ConfigValue -Name 'structDir'",
            "lineNumber": 48
          },
          {
            "text": "    if ($null -eq $value -or [string]::IsNullOrWhiteSpace($value)) {",
            "lineNumber": 49
          },
          {
            "text": "        return $script:LoaderRoot",
            "lineNumber": 50
          },
          {
            "text": "    }",
            "lineNumber": 51
          },
          {
            "lineNumber": 52
          },
          {
            "text": "    if ([System.IO.Path]::IsPathRooted($value)) {",
            "lineNumber": 53
          },
          {
            "text": "        $resolved = Resolve-Path -LiteralPath $value -ErrorAction SilentlyContinue",
            "lineNumber": 54
          },
          {
            "text": "        if ($null -ne $resolved) { return $resolved.Path }",
            "lineNumber": 55
          },
          {
            "text": "        return $value",
            "lineNumber": 56
          },
          {
            "text": "    }",
            "lineNumber": 57
          },
          {
            "lineNumber": 58
          },
          {
            "text": "    $candidate = Join-Path -Path $script:LoaderRoot -ChildPath $value",
            "lineNumber": 59
          }
        ]
      },
      "score": 0.4608969986438751
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\GetStructDir.ps1",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 33
          }
        },
        "contents": "# Simple helper script to get structDir from project config.json\n# Reads config.json from .config folder in project root\n\nparam(\n    [string]$ProjectRoot\n)\n\nSet-StrictMode -Version Latest\n$ErrorActionPreference = 'Stop'\n\nif ([string]::IsNullOrWhiteSpace($ProjectRoot)) {\n    # Try to determine project root from script location\n    if ($PSScriptRoot) {\n        $ProjectRoot = Split-Path -Parent $PSScriptRoot\n    }\n    elseif ($MyInvocation.MyCommand.Path) {\n        $ProjectRoot = Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Path)\n    }\n    else {\n        Write-Error \"Unable to determine project root. Please provide -ProjectRoot parameter.\"\n        exit 1\n    }\n}\n\n$configPath = Join-Path -Path $ProjectRoot -ChildPath '.config\\config.json'\n\nif (-not (Test-Path -LiteralPath $configPath -PathType Leaf)) {\n    Write-Error \"config.json not found at: $configPath\"\n    exit 1\n}\n\ntry {\n    $config = Get-Content -LiteralPath $configPath -Raw -ErrorAction Stop | ConvertFrom-Json",
        "signatures": {},
        "detailedLines": [
          {
            "text": "# Simple helper script to get structDir from project config.json",
            "lineNumber": 1
          },
          {
            "text": "# Reads config.json from .config folder in project root",
            "lineNumber": 2
          },
          {
            "lineNumber": 3
          },
          {
            "text": "param(",
            "lineNumber": 4
          },
          {
            "text": "    [string]$ProjectRoot",
            "lineNumber": 5
          },
          {
            "text": ")",
            "lineNumber": 6
          },
          {
            "lineNumber": 7
          },
          {
            "text": "Set-StrictMode -Version Latest",
            "lineNumber": 8
          },
          {
            "text": "$ErrorActionPreference = 'Stop'",
            "lineNumber": 9
          },
          {
            "lineNumber": 10
          },
          {
            "text": "if ([string]::IsNullOrWhiteSpace($ProjectRoot)) {",
            "lineNumber": 11
          },
          {
            "text": "    # Try to determine project root from script location",
            "lineNumber": 12
          },
          {
            "text": "    if ($PSScriptRoot) {",
            "lineNumber": 13
          },
          {
            "text": "        $ProjectRoot = Split-Path -Parent $PSScriptRoot",
            "lineNumber": 14
          },
          {
            "text": "    }",
            "lineNumber": 15
          },
          {
            "text": "    elseif ($MyInvocation.MyCommand.Path) {",
            "lineNumber": 16
          },
          {
            "text": "        $ProjectRoot = Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Path)",
            "lineNumber": 17
          },
          {
            "text": "    }",
            "lineNumber": 18
          },
          {
            "text": "    else {",
            "lineNumber": 19
          },
          {
            "text": "        Write-Error \"Unable to determine project root. Please provide -ProjectRoot parameter.\"",
            "lineNumber": 20
          },
          {
            "text": "        exit 1",
            "lineNumber": 21
          },
          {
            "text": "    }",
            "lineNumber": 22
          },
          {
            "text": "}",
            "lineNumber": 23
          },
          {
            "lineNumber": 24
          },
          {
            "text": "$configPath = Join-Path -Path $ProjectRoot -ChildPath '.config\\config.json'",
            "lineNumber": 25
          },
          {
            "lineNumber": 26
          },
          {
            "text": "if (-not (Test-Path -LiteralPath $configPath -PathType Leaf)) {",
            "lineNumber": 27
          },
          {
            "text": "    Write-Error \"config.json not found at: $configPath\"",
            "lineNumber": 28
          },
          {
            "text": "    exit 1",
            "lineNumber": 29
          },
          {
            "text": "}",
            "lineNumber": 30
          },
          {
            "lineNumber": 31
          },
          {
            "text": "try {",
            "lineNumber": 32
          },
          {
            "text": "    $config = Get-Content -LiteralPath $configPath -Raw -ErrorAction Stop | ConvertFrom-Json",
            "lineNumber": 33
          }
        ]
      },
      "score": 0.45409536361694336
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\GetStructDir.ps1",
        "range": {
          "startPosition": {
            "line": 31
          },
          "endPosition": {
            "line": 68
          }
        },
        "contents": "try {\n    $config = Get-Content -LiteralPath $configPath -Raw -ErrorAction Stop | ConvertFrom-Json\n    \n    if ($config.PSObject.Properties.Name -contains 'structDir') {\n        $structDir = $config.structDir\n        if ($null -ne $structDir -and ($structDir -isnot [string] -or $structDir.Trim().Length -gt 0)) {\n            # If it's an absolute path, resolve it\n            if ([System.IO.Path]::IsPathRooted($structDir)) {\n                $resolved = Resolve-Path -LiteralPath $structDir -ErrorAction SilentlyContinue\n                if ($null -ne $resolved) {\n                    Write-Output $resolved.Path\n                    exit 0\n                }\n                Write-Output $structDir\n                exit 0\n            }\n            # Relative path - resolve relative to config location\n            $candidate = Join-Path -Path (Split-Path -Parent $configPath) -ChildPath $structDir\n            $resolvedCandidate = Resolve-Path -LiteralPath $candidate -ErrorAction SilentlyContinue\n            if ($null -ne $resolvedCandidate) {\n                Write-Output $resolvedCandidate.Path\n                exit 0\n            }\n            Write-Output $candidate\n            exit 0\n        }\n    }\n    \n    # Default: return the directory containing config.json (project root)\n    Write-Output $ProjectRoot\n    exit 0\n}\ncatch {\n    Write-Error \"Failed to read or parse config.json: $($_.Exception.Message)\"\n    exit 1\n}",
        "signatures": {},
        "detailedLines": [
          {
            "text": "try {",
            "lineNumber": 32
          },
          {
            "text": "    $config = Get-Content -LiteralPath $configPath -Raw -ErrorAction Stop | ConvertFrom-Json",
            "lineNumber": 33
          },
          {
            "text": "    ",
            "lineNumber": 34
          },
          {
            "text": "    if ($config.PSObject.Properties.Name -contains 'structDir') {",
            "lineNumber": 35
          },
          {
            "text": "        $structDir = $config.structDir",
            "lineNumber": 36
          },
          {
            "text": "        if ($null -ne $structDir -and ($structDir -isnot [string] -or $structDir.Trim().Length -gt 0)) {",
            "lineNumber": 37
          },
          {
            "text": "            # If it's an absolute path, resolve it",
            "lineNumber": 38
          },
          {
            "text": "            if ([System.IO.Path]::IsPathRooted($structDir)) {",
            "lineNumber": 39
          },
          {
            "text": "                $resolved = Resolve-Path -LiteralPath $structDir -ErrorAction SilentlyContinue",
            "lineNumber": 40
          },
          {
            "text": "                if ($null -ne $resolved) {",
            "lineNumber": 41
          },
          {
            "text": "                    Write-Output $resolved.Path",
            "lineNumber": 42
          },
          {
            "text": "                    exit 0",
            "lineNumber": 43
          },
          {
            "text": "                }",
            "lineNumber": 44
          },
          {
            "text": "                Write-Output $structDir",
            "lineNumber": 45
          },
          {
            "text": "                exit 0",
            "lineNumber": 46
          },
          {
            "text": "            }",
            "lineNumber": 47
          },
          {
            "text": "            # Relative path - resolve relative to config location",
            "lineNumber": 48
          },
          {
            "text": "            $candidate = Join-Path -Path (Split-Path -Parent $configPath) -ChildPath $structDir",
            "lineNumber": 49
          },
          {
            "text": "            $resolvedCandidate = Resolve-Path -LiteralPath $candidate -ErrorAction SilentlyContinue",
            "lineNumber": 50
          },
          {
            "text": "            if ($null -ne $resolvedCandidate) {",
            "lineNumber": 51
          },
          {
            "text": "                Write-Output $resolvedCandidate.Path",
            "lineNumber": 52
          },
          {
            "text": "                exit 0",
            "lineNumber": 53
          },
          {
            "text": "            }",
            "lineNumber": 54
          },
          {
            "text": "            Write-Output $candidate",
            "lineNumber": 55
          },
          {
            "text": "            exit 0",
            "lineNumber": 56
          },
          {
            "text": "        }",
            "lineNumber": 57
          },
          {
            "text": "    }",
            "lineNumber": 58
          },
          {
            "text": "    ",
            "lineNumber": 59
          },
          {
            "text": "    # Default: return the directory containing config.json (project root)",
            "lineNumber": 60
          },
          {
            "text": "    Write-Output $ProjectRoot",
            "lineNumber": 61
          },
          {
            "text": "    exit 0",
            "lineNumber": 62
          },
          {
            "text": "}",
            "lineNumber": 63
          },
          {
            "text": "catch {",
            "lineNumber": 64
          },
          {
            "text": "    Write-Error \"Failed to read or parse config.json: $($_.Exception.Message)\"",
            "lineNumber": 65
          },
          {
            "text": "    exit 1",
            "lineNumber": 66
          },
          {
            "text": "}",
            "lineNumber": 67
          }
        ]
      },
      "score": 0.4347625970840454
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\UpdateSequences.bat",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 37
          }
        },
        "contents": "@echo off\nsetlocal EnableExtensions\n\nset \"script_dir=%~dp0\"\nset \"current_dir=%CD%\"\n\nREM Find .config directory by searching up from current working directory first, then script location\nfor /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command \"Set-StrictMode -Version Latest; $dir = '%current_dir%'; while ($dir -and -not (Test-Path (Join-Path $dir '.config\\config.json'))) { $parent = Split-Path -Parent $dir; if ($parent -eq $dir) { break }; $dir = $parent }; if ($dir -and (Test-Path (Join-Path $dir '.config\\config.json'))) { Write-Output $dir } else { Write-Output '' }\"&#96;) do set \"PROJ_ROOT=%%I\"\n\nif not defined PROJ_ROOT (\n    REM Try searching from script location\n    for /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command \"Set-StrictMode -Version Latest; $dir = '%script_dir%'; while ($dir -and -not (Test-Path (Join-Path $dir '.config\\config.json'))) { $parent = Split-Path -Parent $dir; if ($parent -eq $dir) { break }; $dir = $parent }; if ($dir -and (Test-Path (Join-Path $dir '.config\\config.json'))) { Write-Output $dir } else { Write-Output '' }\"&#96;) do set \"PROJ_ROOT=%%I\"\n)\n\nif not defined PROJ_ROOT (\n    REM Fallback: try original logic (script in 3 ProjectStructure)\n    for %%I in (\"%script_dir%..\\..\") do set \"PROJ_ROOT=%%~fI\"\n)\n\nset \"CONFIG_DIR=%PROJ_ROOT%\\.config\"\nset \"CONFIG_PATH=%CONFIG_DIR%\\config.json\"\nif not exist \"%CONFIG_PATH%\" (\n    echo [ERROR] config.json not found at %CONFIG_PATH%\n    echo Please run ConfigLoader.ps1 to deploy helper files.\n    exit /b 1\n)\n\nset \"GET_STRUCT_DIR=%CONFIG_DIR%\\GetStructDir.ps1\"\n\nif not exist \"%GET_STRUCT_DIR%\" (\n    echo [ERROR] GetStructDir.ps1 not found at %GET_STRUCT_DIR%\n    echo Please run ConfigLoader.ps1 to deploy helper files.\n    exit /b 1\n)\n\nfor /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command ^\n    \"Set-StrictMode -Version Latest; $structDir = &amp; '%GET_STRUCT_DIR%' -ProjectRoot '%PROJ_ROOT%'; if (-not $structDir) { throw \\\"Failed to get structDir from GetStructDir.ps1\\\" }; $ps1Path = Join-Path $structDir 'UpdateSequences.ps1'; if (-not (Test-Path -LiteralPath $ps1Path)) { throw \\\"UpdateSequences.ps1 not found at $ps1Path\\\" }; Write-Output $ps1Path\"&#96;) do set \"ps1=%%I\"",
        "signatures": {},
        "detailedLines": [
          {
            "text": "@echo off",
            "lineNumber": 1
          },
          {
            "text": "setlocal EnableExtensions",
            "lineNumber": 2
          },
          {
            "lineNumber": 3
          },
          {
            "text": "set \"script_dir=%~dp0\"",
            "lineNumber": 4
          },
          {
            "text": "set \"current_dir=%CD%\"",
            "lineNumber": 5
          },
          {
            "lineNumber": 6
          },
          {
            "text": "REM Find .config directory by searching up from current working directory first, then script location",
            "lineNumber": 7
          },
          {
            "text": "for /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command \"Set-StrictMode -Version Latest; $dir = '%current_dir%'; while ($dir -and -not (Test-Path (Join-Path $dir '.config\\config.json'))) { $parent = Split-Path -Parent $dir; if ($parent -eq $dir) { break }; $dir = $parent }; if ($dir -and (Test-Path (Join-Path $dir '.config\\config.json'))) { Write-Output $dir } else { Write-Output '' }\"&#96;) do set \"PROJ_ROOT=%%I\"",
            "lineNumber": 8
          },
          {
            "lineNumber": 9
          },
          {
            "text": "if not defined PROJ_ROOT (",
            "lineNumber": 10
          },
          {
            "text": "    REM Try searching from script location",
            "lineNumber": 11
          },
          {
            "text": "    for /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command \"Set-StrictMode -Version Latest; $dir = '%script_dir%'; while ($dir -and -not (Test-Path (Join-Path $dir '.config\\config.json'))) { $parent = Split-Path -Parent $dir; if ($parent -eq $dir) { break }; $dir = $parent }; if ($dir -and (Test-Path (Join-Path $dir '.config\\config.json'))) { Write-Output $dir } else { Write-Output '' }\"&#96;) do set \"PROJ_ROOT=%%I\"",
            "lineNumber": 12
          },
          {
            "text": ")",
            "lineNumber": 13
          },
          {
            "lineNumber": 14
          },
          {
            "text": "if not defined PROJ_ROOT (",
            "lineNumber": 15
          },
          {
            "text": "    REM Fallback: try original logic (script in 3 ProjectStructure)",
            "lineNumber": 16
          },
          {
            "text": "    for %%I in (\"%script_dir%..\\..\") do set \"PROJ_ROOT=%%~fI\"",
            "lineNumber": 17
          },
          {
            "text": ")",
            "lineNumber": 18
          },
          {
            "lineNumber": 19
          },
          {
            "text": "set \"CONFIG_DIR=%PROJ_ROOT%\\.config\"",
            "lineNumber": 20
          },
          {
            "text": "set \"CONFIG_PATH=%CONFIG_DIR%\\config.json\"",
            "lineNumber": 21
          },
          {
            "text": "if not exist \"%CONFIG_PATH%\" (",
            "lineNumber": 22
          },
          {
            "text": "    echo [ERROR] config.json not found at %CONFIG_PATH%",
            "lineNumber": 23
          },
          {
            "text": "    echo Please run ConfigLoader.ps1 to deploy helper files.",
            "lineNumber": 24
          },
          {
            "text": "    exit /b 1",
            "lineNumber": 25
          },
          {
            "text": ")",
            "lineNumber": 26
          },
          {
            "lineNumber": 27
          },
          {
            "text": "set \"GET_STRUCT_DIR=%CONFIG_DIR%\\GetStructDir.ps1\"",
            "lineNumber": 28
          },
          {
            "lineNumber": 29
          },
          {
            "text": "if not exist \"%GET_STRUCT_DIR%\" (",
            "lineNumber": 30
          },
          {
            "text": "    echo [ERROR] GetStructDir.ps1 not found at %GET_STRUCT_DIR%",
            "lineNumber": 31
          },
          {
            "text": "    echo Please run ConfigLoader.ps1 to deploy helper files.",
            "lineNumber": 32
          },
          {
            "text": "    exit /b 1",
            "lineNumber": 33
          },
          {
            "text": ")",
            "lineNumber": 34
          },
          {
            "lineNumber": 35
          },
          {
            "text": "for /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command ^",
            "lineNumber": 36
          },
          {
            "text": "    \"Set-StrictMode -Version Latest; $structDir = &amp; '%GET_STRUCT_DIR%' -ProjectRoot '%PROJ_ROOT%'; if (-not $structDir) { throw \\\"Failed to get structDir from GetStructDir.ps1\\\" }; $ps1Path = Join-Path $structDir 'UpdateSequences.ps1'; if (-not (Test-Path -LiteralPath $ps1Path)) { throw \\\"UpdateSequences.ps1 not found at $ps1Path\\\" }; Write-Output $ps1Path\"&#96;) do set \"ps1=%%I\"",
            "lineNumber": 37
          }
        ]
      },
      "score": 0.42656219005584717
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\config.json",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 8
          }
        },
        "contents": "{\n  \"dailyFormat\": \"daily_YYMMDD\",\n  \"structDir\": \"A:\\\\1 Amazon_Active_Projects\\\\3 ProjectStructure\",\n  \"zipper\": \"7z\",\n  \"compression\": 0,\n  \"Max7zInst\": 0\n}",
        "signatures": {},
        "detailedLines": [
          {
            "text": "{",
            "lineNumber": 1
          },
          {
            "text": "  \"dailyFormat\": \"daily_YYMMDD\",",
            "lineNumber": 2
          },
          {
            "text": "  \"structDir\": \"A:\\\\1 Amazon_Active_Projects\\\\3 ProjectStructure\",",
            "lineNumber": 3
          },
          {
            "text": "  \"zipper\": \"7z\",",
            "lineNumber": 4
          },
          {
            "text": "  \"compression\": 0,",
            "lineNumber": 5
          },
          {
            "text": "  \"Max7zInst\": 0",
            "lineNumber": 6
          },
          {
            "text": "}",
            "lineNumber": 7
          }
        ]
      },
      "score": 0.42630505561828613
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\NewProject.bat",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 63
          }
        },
        "contents": "@echo off\nsetlocal EnableExtensions\n\nset \"SCRIPT_DIR=%~dp0\"\nset \"CONFIG_LOADER=%SCRIPT_DIR%ConfigLoader.ps1\"\nset \"CONFIG_PATH=%SCRIPT_DIR%config.json\"\n\nif not exist \"%CONFIG_LOADER%\" (\n    echo [ERROR] ConfigLoader.ps1 not found next to NewProject.bat.\n    exit /b 1\n)\n\nif not exist \"%CONFIG_PATH%\" (\n    echo [ERROR] config.json not found next to NewProject.bat.\n    exit /b 1\n)\n\nfor /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command ^\n    \"Set-StrictMode -Version Latest; $loader = Resolve-Path -LiteralPath '%CONFIG_LOADER%' -ErrorAction Stop; . $loader.Path; Write-Output (Get-StructDirectory)\"&#96;) do set \"STRUCT_DIR=%%I\"\n\nif not defined STRUCT_DIR (\n    echo [ERROR] Unable to resolve ProjectStructure directory from config.\n    exit /b 1\n)\n\n:: Get current date in YYYY-MM-DD format\nfor /f \"tokens=2-4 delims=/ \" %%a in ('date /t') do (\n    set mm=%%a\n    set dd=%%b\n    set yy=%%c\n)\nset yyyy=20%yy:~-2%\nset yymmdd=%yy:~-2%%mm%%dd%\n\n:: Ask for project name\nset /p projectName=\"Enter project name (press Enter for default 'NewProject'): \"\nif \"%projectName%\"==\"\" set projectName=NewProject\nset projectRoot=%yymmdd%_%projectName%\n\n:: Create main project directory\nmkdir \"%projectRoot%\"\n\n:: Create Assets structure\nmkdir \"%projectRoot%\\Assets\\ElevenLabs\"\nif exist \"%STRUCT_DIR%\\NewDaily.bat\" copy /Y \"%STRUCT_DIR%\\NewDaily.bat\" \"%projectRoot%\\Assets\\ElevenLabs\\NewDaily.bat\" &gt;nul\nmkdir \"%projectRoot%\\Assets\\Blends\"\nmkdir \"%projectRoot%\\Assets\\Mocap\"\nmkdir \"%projectRoot%\\Assets\\VO\"\nif exist \"%~dp0NewDaily.bat\" copy /Y \"%~dp0NewDaily.bat\" \"%projectRoot%\\Assets\\VO\\NewDaily.bat\" &gt;nul\n\n:: Create Blends structure\nmkdir \"%projectRoot%\\Blends\\animations\\\"\nmkdir \"%projectRoot%\\Blends\\stills\\img-BG\"\n\n:: Create Deliverable structure\nmkdir \"%projectRoot%\\Deliverable\\\"\n\n:: Create Pr structure\nmkdir \"%projectRoot%\\Pr\\RnR\\RIFE\"\n\n:: Add project root additions\nif not exist \"%projectRoot%\\Renders\" mkdir \"%projectRoot%\\Renders\"",
        "signatures": {},
        "detailedLines": [
          {
            "text": "@echo off",
            "lineNumber": 1
          },
          {
            "text": "setlocal EnableExtensions",
            "lineNumber": 2
          },
          {
            "lineNumber": 3
          },
          {
            "text": "set \"SCRIPT_DIR=%~dp0\"",
            "lineNumber": 4
          },
          {
            "text": "set \"CONFIG_LOADER=%SCRIPT_DIR%ConfigLoader.ps1\"",
            "lineNumber": 5
          },
          {
            "text": "set \"CONFIG_PATH=%SCRIPT_DIR%config.json\"",
            "lineNumber": 6
          },
          {
            "lineNumber": 7
          },
          {
            "text": "if not exist \"%CONFIG_LOADER%\" (",
            "lineNumber": 8
          },
          {
            "text": "    echo [ERROR] ConfigLoader.ps1 not found next to NewProject.bat.",
            "lineNumber": 9
          },
          {
            "text": "    exit /b 1",
            "lineNumber": 10
          },
          {
            "text": ")",
            "lineNumber": 11
          },
          {
            "lineNumber": 12
          },
          {
            "text": "if not exist \"%CONFIG_PATH%\" (",
            "lineNumber": 13
          },
          {
            "text": "    echo [ERROR] config.json not found next to NewProject.bat.",
            "lineNumber": 14
          },
          {
            "text": "    exit /b 1",
            "lineNumber": 15
          },
          {
            "text": ")",
            "lineNumber": 16
          },
          {
            "lineNumber": 17
          },
          {
            "text": "for /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command ^",
            "lineNumber": 18
          },
          {
            "text": "    \"Set-StrictMode -Version Latest; $loader = Resolve-Path -LiteralPath '%CONFIG_LOADER%' -ErrorAction Stop; . $loader.Path; Write-Output (Get-StructDirectory)\"&#96;) do set \"STRUCT_DIR=%%I\"",
            "lineNumber": 19
          },
          {
            "lineNumber": 20
          },
          {
            "text": "if not defined STRUCT_DIR (",
            "lineNumber": 21
          },
          {
            "text": "    echo [ERROR] Unable to resolve ProjectStructure directory from config.",
            "lineNumber": 22
          },
          {
            "text": "    exit /b 1",
            "lineNumber": 23
          },
          {
            "text": ")",
            "lineNumber": 24
          },
          {
            "lineNumber": 25
          },
          {
            "text": ":: Get current date in YYYY-MM-DD format",
            "lineNumber": 26
          },
          {
            "text": "for /f \"tokens=2-4 delims=/ \" %%a in ('date /t') do (",
            "lineNumber": 27
          },
          {
            "text": "    set mm=%%a",
            "lineNumber": 28
          },
          {
            "text": "    set dd=%%b",
            "lineNumber": 29
          },
          {
            "text": "    set yy=%%c",
            "lineNumber": 30
          },
          {
            "text": ")",
            "lineNumber": 31
          },
          {
            "text": "set yyyy=20%yy:~-2%",
            "lineNumber": 32
          },
          {
            "text": "set yymmdd=%yy:~-2%%mm%%dd%",
            "lineNumber": 33
          },
          {
            "lineNumber": 34
          },
          {
            "text": ":: Ask for project name",
            "lineNumber": 35
          },
          {
            "text": "set /p projectName=\"Enter project name (press Enter for default 'NewProject'): \"",
            "lineNumber": 36
          },
          {
            "text": "if \"%projectName%\"==\"\" set projectName=NewProject",
            "lineNumber": 37
          },
          {
            "text": "set projectRoot=%yymmdd%_%projectName%",
            "lineNumber": 38
          },
          {
            "lineNumber": 39
          },
          {
            "text": ":: Create main project directory",
            "lineNumber": 40
          },
          {
            "text": "mkdir \"%projectRoot%\"",
            "lineNumber": 41
          },
          {
            "lineNumber": 42
          },
          {
            "text": ":: Create Assets structure",
            "lineNumber": 43
          },
          {
            "text": "mkdir \"%projectRoot%\\Assets\\ElevenLabs\"",
            "lineNumber": 44
          },
          {
            "text": "if exist \"%STRUCT_DIR%\\NewDaily.bat\" copy /Y \"%STRUCT_DIR%\\NewDaily.bat\" \"%projectRoot%\\Assets\\ElevenLabs\\NewDaily.bat\" &gt;nul",
            "lineNumber": 45
          },
          {
            "text": "mkdir \"%projectRoot%\\Assets\\Blends\"",
            "lineNumber": 46
          },
          {
            "text": "mkdir \"%projectRoot%\\Assets\\Mocap\"",
            "lineNumber": 47
          },
          {
            "text": "mkdir \"%projectRoot%\\Assets\\VO\"",
            "lineNumber": 48
          },
          {
            "text": "if exist \"%~dp0NewDaily.bat\" copy /Y \"%~dp0NewDaily.bat\" \"%projectRoot%\\Assets\\VO\\NewDaily.bat\" &gt;nul",
            "lineNumber": 49
          },
          {
            "lineNumber": 50
          },
          {
            "text": ":: Create Blends structure",
            "lineNumber": 51
          },
          {
            "text": "mkdir \"%projectRoot%\\Blends\\animations\\\"",
            "lineNumber": 52
          },
          {
            "text": "mkdir \"%projectRoot%\\Blends\\stills\\img-BG\"",
            "lineNumber": 53
          },
          {
            "lineNumber": 54
          },
          {
            "text": ":: Create Deliverable structure",
            "lineNumber": 55
          },
          {
            "text": "mkdir \"%projectRoot%\\Deliverable\\\"",
            "lineNumber": 56
          },
          {
            "lineNumber": 57
          },
          {
            "text": ":: Create Pr structure",
            "lineNumber": 58
          },
          {
            "text": "mkdir \"%projectRoot%\\Pr\\RnR\\RIFE\"",
            "lineNumber": 59
          },
          {
            "lineNumber": 60
          },
          {
            "text": ":: Add project root additions",
            "lineNumber": 61
          },
          {
            "text": "if not exist \"%projectRoot%\\Renders\" mkdir \"%projectRoot%\\Renders\"",
            "lineNumber": 62
          }
        ]
      },
      "score": 0.4028162956237793
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\ConfigLoader.ps1",
        "range": {
          "startPosition": {
            "line": 238
          },
          "endPosition": {
            "line": 276,
            "column": 16
          }
        },
        "contents": "            }\n        }\n\n        # Ensure .config directory exists in project root and is hidden\n        $projectConfigDir = Join-Path -Path $resolvedProject -ChildPath '.config'\n        if (-not (Test-Path -LiteralPath $projectConfigDir -PathType Container)) {\n            New-Item -Path $projectConfigDir -ItemType Directory -Force | Out-Null\n            Write-Host \"Created .config directory: $projectConfigDir\" -ForegroundColor Cyan\n        }\n        # Set hidden attribute on .config directory\n        $folder = Get-Item -LiteralPath $projectConfigDir -Force\n        $folder.Attributes = $folder.Attributes -bor [System.IO.FileAttributes]::Hidden\n\n        $touchedDirs = @{}\n        $summary = @()\n\n        foreach ($spec in $specs) {\n            Write-Host \"&#96;n=== Updating $($spec.Name) ===\" -ForegroundColor Magenta\n\n            $targets = Get-ChildItem -LiteralPath $resolvedProject -Recurse -Filter $spec.Name -File -Force -ErrorAction SilentlyContinue\n            $targets = $targets | Where-Object { $_.FullName -ne $spec.Source }\n\n            if (-not $targets) {\n                Write-Host \"No targets found.\" -ForegroundColor Yellow\n                $summary += [pscustomobject]@{\n                    Name     = $spec.Name\n                    Updated  = 0\n                    Failed   = 0\n                    Skipped  = 0\n                    Total    = 0\n                }\n                continue\n            }\n\n            $updated = 0\n            $failed = 0\n\n            foreach ($target in $targets) {\n                ",
        "signatures": {},
        "detailedLines": [
          {
            "text": "            }",
            "lineNumber": 239
          },
          {
            "text": "        }",
            "lineNumber": 240
          },
          {
            "lineNumber": 241
          },
          {
            "text": "        # Ensure .config directory exists in project root and is hidden",
            "lineNumber": 242
          },
          {
            "text": "        $projectConfigDir = Join-Path -Path $resolvedProject -ChildPath '.config'",
            "lineNumber": 243
          },
          {
            "text": "        if (-not (Test-Path -LiteralPath $projectConfigDir -PathType Container)) {",
            "lineNumber": 244
          },
          {
            "text": "            New-Item -Path $projectConfigDir -ItemType Directory -Force | Out-Null",
            "lineNumber": 245
          },
          {
            "text": "            Write-Host \"Created .config directory: $projectConfigDir\" -ForegroundColor Cyan",
            "lineNumber": 246
          },
          {
            "text": "        }",
            "lineNumber": 247
          },
          {
            "text": "        # Set hidden attribute on .config directory",
            "lineNumber": 248
          },
          {
            "text": "        $folder = Get-Item -LiteralPath $projectConfigDir -Force",
            "lineNumber": 249
          },
          {
            "text": "        $folder.Attributes = $folder.Attributes -bor [System.IO.FileAttributes]::Hidden",
            "lineNumber": 250
          },
          {
            "lineNumber": 251
          },
          {
            "text": "        $touchedDirs = @{}",
            "lineNumber": 252
          },
          {
            "text": "        $summary = @()",
            "lineNumber": 253
          },
          {
            "lineNumber": 254
          },
          {
            "text": "        foreach ($spec in $specs) {",
            "lineNumber": 255
          },
          {
            "text": "            Write-Host \"&#96;n=== Updating $($spec.Name) ===\" -ForegroundColor Magenta",
            "lineNumber": 256
          },
          {
            "lineNumber": 257
          },
          {
            "text": "            $targets = Get-ChildItem -LiteralPath $resolvedProject -Recurse -Filter $spec.Name -File -Force -ErrorAction SilentlyContinue",
            "lineNumber": 258
          },
          {
            "text": "            $targets = $targets | Where-Object { $_.FullName -ne $spec.Source }",
            "lineNumber": 259
          },
          {
            "lineNumber": 260
          },
          {
            "text": "            if (-not $targets) {",
            "lineNumber": 261
          },
          {
            "text": "                Write-Host \"No targets found.\" -ForegroundColor Yellow",
            "lineNumber": 262
          },
          {
            "text": "                $summary += [pscustomobject]@{",
            "lineNumber": 263
          },
          {
            "text": "                    Name     = $spec.Name",
            "lineNumber": 264
          },
          {
            "text": "                    Updated  = 0",
            "lineNumber": 265
          },
          {
            "text": "                    Failed   = 0",
            "lineNumber": 266
          },
          {
            "text": "                    Skipped  = 0",
            "lineNumber": 267
          },
          {
            "text": "                    Total    = 0",
            "lineNumber": 268
          },
          {
            "text": "                }",
            "lineNumber": 269
          },
          {
            "text": "                continue",
            "lineNumber": 270
          },
          {
            "text": "            }",
            "lineNumber": 271
          },
          {
            "lineNumber": 272
          },
          {
            "text": "            $updated = 0",
            "lineNumber": 273
          },
          {
            "text": "            $failed = 0",
            "lineNumber": 274
          },
          {
            "lineNumber": 275
          },
          {
            "text": "            foreach ($target in $targets) {",
            "lineNumber": 276
          },
          {
            "text": "                ",
            "lineNumber": 277
          }
        ]
      },
      "score": 0.40214765071868896
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\ConfigLoader.ps1",
        "range": {
          "startPosition": {
            "line": 209
          },
          "endPosition": {
            "line": 242
          }
        },
        "contents": "        Write-Host \"Struct directory:  $structDir\" -ForegroundColor Cyan\n\n        $specs = @(\n            @{ Name = 'UpdateSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateSequences.bat' },\n            @{ Name = 'UpdateAllSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateAllSequences.bat' },\n            @{ Name = 'ZipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'ZipSeqArchv.bat' },\n            @{ Name = 'UnzipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'UnzipSeqArchv.bat' },\n            @{ Name = 'NewDaily.bat'; Source = Join-Path -Path $structDir -ChildPath 'NewDaily.bat' },\n            @{ Name = '.gitattributes'; Source = Join-Path -Path $structDir -ChildPath 'components\\gitattributes' },\n            @{ Name = '.gitignore'; Source = Join-Path -Path $structDir -ChildPath 'components\\gitignore' }\n        )\n\n        # Config files to deploy to projectroot\\.config\\\n        $configAssets = @(\n            @{ Name = 'config.json'; Source = Join-Path -Path $structDir -ChildPath 'config.json' },\n            @{ Name = 'GetStructDir.ps1'; Source = Join-Path -Path $structDir -ChildPath 'GetStructDir.ps1' }\n        )\n\n        foreach ($spec in $specs) {\n            if (-not (Test-Path -LiteralPath $spec.Source -PathType Leaf)) {\n                Write-Error \"Source file not found: $($spec.Source)\"\n                exit 1\n            }\n        }\n\n        foreach ($asset in $configAssets) {\n            if (-not (Test-Path -LiteralPath $asset.Source -PathType Leaf)) {\n                Write-Error \"Config asset not found: $($asset.Source)\"\n                exit 1\n            }\n        }\n\n        # Ensure .config directory exists in project root and is hidden",
        "signatures": {},
        "detailedLines": [
          {
            "text": "        Write-Host \"Struct directory:  $structDir\" -ForegroundColor Cyan",
            "lineNumber": 210
          },
          {
            "lineNumber": 211
          },
          {
            "text": "        $specs = @(",
            "lineNumber": 212
          },
          {
            "text": "            @{ Name = 'UpdateSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateSequences.bat' },",
            "lineNumber": 213
          },
          {
            "text": "            @{ Name = 'UpdateAllSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateAllSequences.bat' },",
            "lineNumber": 214
          },
          {
            "text": "            @{ Name = 'ZipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'ZipSeqArchv.bat' },",
            "lineNumber": 215
          },
          {
            "text": "            @{ Name = 'UnzipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'UnzipSeqArchv.bat' },",
            "lineNumber": 216
          },
          {
            "text": "            @{ Name = 'NewDaily.bat'; Source = Join-Path -Path $structDir -ChildPath 'NewDaily.bat' },",
            "lineNumber": 217
          },
          {
            "text": "            @{ Name = '.gitattributes'; Source = Join-Path -Path $structDir -ChildPath 'components\\gitattributes' },",
            "lineNumber": 218
          },
          {
            "text": "            @{ Name = '.gitignore'; Source = Join-Path -Path $structDir -ChildPath 'components\\gitignore' }",
            "lineNumber": 219
          },
          {
            "text": "        )",
            "lineNumber": 220
          },
          {
            "lineNumber": 221
          },
          {
            "text": "        # Config files to deploy to projectroot\\.config\\",
            "lineNumber": 222
          },
          {
            "text": "        $configAssets = @(",
            "lineNumber": 223
          },
          {
            "text": "            @{ Name = 'config.json'; Source = Join-Path -Path $structDir -ChildPath 'config.json' },",
            "lineNumber": 224
          },
          {
            "text": "            @{ Name = 'GetStructDir.ps1'; Source = Join-Path -Path $structDir -ChildPath 'GetStructDir.ps1' }",
            "lineNumber": 225
          },
          {
            "text": "        )",
            "lineNumber": 226
          },
          {
            "lineNumber": 227
          },
          {
            "text": "        foreach ($spec in $specs) {",
            "lineNumber": 228
          },
          {
            "text": "            if (-not (Test-Path -LiteralPath $spec.Source -PathType Leaf)) {",
            "lineNumber": 229
          },
          {
            "text": "                Write-Error \"Source file not found: $($spec.Source)\"",
            "lineNumber": 230
          },
          {
            "text": "                exit 1",
            "lineNumber": 231
          },
          {
            "text": "            }",
            "lineNumber": 232
          },
          {
            "text": "        }",
            "lineNumber": 233
          },
          {
            "lineNumber": 234
          },
          {
            "text": "        foreach ($asset in $configAssets) {",
            "lineNumber": 235
          },
          {
            "text": "            if (-not (Test-Path -LiteralPath $asset.Source -PathType Leaf)) {",
            "lineNumber": 236
          },
          {
            "text": "                Write-Error \"Config asset not found: $($asset.Source)\"",
            "lineNumber": 237
          },
          {
            "text": "                exit 1",
            "lineNumber": 238
          },
          {
            "text": "            }",
            "lineNumber": 239
          },
          {
            "text": "        }",
            "lineNumber": 240
          },
          {
            "lineNumber": 241
          },
          {
            "text": "        # Ensure .config directory exists in project root and is hidden",
            "lineNumber": 242
          }
        ]
      },
      "score": 0.38989686965942383
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\ConfigLoader.ps1",
        "range": {
          "startPosition": {
            "line": 339
          },
          "endPosition": {
            "line": 381
          }
        },
        "contents": "                exit 1\n            }\n        }\n\n        # Deploy .gitattributes and .gitignore to project root if they don't exist\n        Write-Host \"&#96;n=== Deploying .gitattributes and .gitignore to project root ===\" -ForegroundColor Magenta\n        $gitFiles = @(\n            @{ Name = '.gitattributes'; Source = Join-Path -Path $structDir -ChildPath 'components\\gitattributes' },\n            @{ Name = '.gitignore'; Source = Join-Path -Path $structDir -ChildPath 'components\\gitignore' }\n        )\n        foreach ($gitFile in $gitFiles) {\n            $targetPath = Join-Path -Path $resolvedProject -ChildPath $gitFile.Name\n            try {\n                Copy-Item -Path $gitFile.Source -Destination $targetPath -Force\n                # Set hidden attribute on the file\n                $file = Get-Item -LiteralPath $targetPath -Force\n                $file.Attributes = $file.Attributes -bor [System.IO.FileAttributes]::Hidden\n                Write-Host \"[OK] $targetPath\" -ForegroundColor Green\n            }\n            catch {\n                Write-Host \"[FAIL] $targetPath\" -ForegroundColor Red\n                Write-Host \"  $($_.Exception.Message)\" -ForegroundColor DarkRed\n                exit 1\n            }\n        }\n\n        # Deploy config files to projectroot\\.config\\\n        Write-Host \"&#96;n=== Deploying config files to .config\\ ===\" -ForegroundColor Magenta\n        foreach ($asset in $configAssets) {\n            $targetPath = Join-Path -Path $projectConfigDir -ChildPath $asset.Name\n            try {\n                Copy-Item -Path $asset.Source -Destination $targetPath -Force\n                Write-Host \"[OK] $targetPath\" -ForegroundColor Green\n            }\n            catch {\n                Write-Host \"[FAIL] $targetPath\" -ForegroundColor Red\n                Write-Host \"  $($_.Exception.Message)\" -ForegroundColor DarkRed\n                exit 1\n            }\n        }\n\n        Write-Host \"&#96;nConfig files deployed successfully.\" -ForegroundColor Green",
        "signatures": {},
        "detailedLines": [
          {
            "text": "                exit 1",
            "lineNumber": 340
          },
          {
            "text": "            }",
            "lineNumber": 341
          },
          {
            "text": "        }",
            "lineNumber": 342
          },
          {
            "lineNumber": 343
          },
          {
            "text": "        # Deploy .gitattributes and .gitignore to project root if they don't exist",
            "lineNumber": 344
          },
          {
            "text": "        Write-Host \"&#96;n=== Deploying .gitattributes and .gitignore to project root ===\" -ForegroundColor Magenta",
            "lineNumber": 345
          },
          {
            "text": "        $gitFiles = @(",
            "lineNumber": 346
          },
          {
            "text": "            @{ Name = '.gitattributes'; Source = Join-Path -Path $structDir -ChildPath 'components\\gitattributes' },",
            "lineNumber": 347
          },
          {
            "text": "            @{ Name = '.gitignore'; Source = Join-Path -Path $structDir -ChildPath 'components\\gitignore' }",
            "lineNumber": 348
          },
          {
            "text": "        )",
            "lineNumber": 349
          },
          {
            "text": "        foreach ($gitFile in $gitFiles) {",
            "lineNumber": 350
          },
          {
            "text": "            $targetPath = Join-Path -Path $resolvedProject -ChildPath $gitFile.Name",
            "lineNumber": 351
          },
          {
            "text": "            try {",
            "lineNumber": 352
          },
          {
            "text": "                Copy-Item -Path $gitFile.Source -Destination $targetPath -Force",
            "lineNumber": 353
          },
          {
            "text": "                # Set hidden attribute on the file",
            "lineNumber": 354
          },
          {
            "text": "                $file = Get-Item -LiteralPath $targetPath -Force",
            "lineNumber": 355
          },
          {
            "text": "                $file.Attributes = $file.Attributes -bor [System.IO.FileAttributes]::Hidden",
            "lineNumber": 356
          },
          {
            "text": "                Write-Host \"[OK] $targetPath\" -ForegroundColor Green",
            "lineNumber": 357
          },
          {
            "text": "            }",
            "lineNumber": 358
          },
          {
            "text": "            catch {",
            "lineNumber": 359
          },
          {
            "text": "                Write-Host \"[FAIL] $targetPath\" -ForegroundColor Red",
            "lineNumber": 360
          },
          {
            "text": "                Write-Host \"  $($_.Exception.Message)\" -ForegroundColor DarkRed",
            "lineNumber": 361
          },
          {
            "text": "                exit 1",
            "lineNumber": 362
          },
          {
            "text": "            }",
            "lineNumber": 363
          },
          {
            "text": "        }",
            "lineNumber": 364
          },
          {
            "lineNumber": 365
          },
          {
            "text": "        # Deploy config files to projectroot\\.config\\",
            "lineNumber": 366
          },
          {
            "text": "        Write-Host \"&#96;n=== Deploying config files to .config\\ ===\" -ForegroundColor Magenta",
            "lineNumber": 367
          },
          {
            "text": "        foreach ($asset in $configAssets) {",
            "lineNumber": 368
          },
          {
            "text": "            $targetPath = Join-Path -Path $projectConfigDir -ChildPath $asset.Name",
            "lineNumber": 369
          },
          {
            "text": "            try {",
            "lineNumber": 370
          },
          {
            "text": "                Copy-Item -Path $asset.Source -Destination $targetPath -Force",
            "lineNumber": 371
          },
          {
            "text": "                Write-Host \"[OK] $targetPath\" -ForegroundColor Green",
            "lineNumber": 372
          },
          {
            "text": "            }",
            "lineNumber": 373
          },
          {
            "text": "            catch {",
            "lineNumber": 374
          },
          {
            "text": "                Write-Host \"[FAIL] $targetPath\" -ForegroundColor Red",
            "lineNumber": 375
          },
          {
            "text": "                Write-Host \"  $($_.Exception.Message)\" -ForegroundColor DarkRed",
            "lineNumber": 376
          },
          {
            "text": "                exit 1",
            "lineNumber": 377
          },
          {
            "text": "            }",
            "lineNumber": 378
          },
          {
            "text": "        }",
            "lineNumber": 379
          },
          {
            "lineNumber": 380
          },
          {
            "text": "        Write-Host \"&#96;nConfig files deployed successfully.\" -ForegroundColor Green",
            "lineNumber": 381
          }
        ]
      },
      "score": 0.38446828722953796
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\UpdateProjectBatches.ps1",
        "range": {
          "startPosition": {
            "line": 55
          },
          "endPosition": {
            "line": 115
          }
        },
        "contents": ")\n\n# Config files to deploy to projectroot\\.config\\\n$configAssets = @(\n    @{ Name = 'config.json'; Source = Join-Path -Path $structDir -ChildPath 'config.json' },\n    @{ Name = 'GetStructDir.ps1'; Source = Join-Path -Path $structDir -ChildPath 'GetStructDir.ps1' }\n)\n\nforeach ($spec in $specs) {\n    if (-not (Test-Path -LiteralPath $spec.Source -PathType Leaf)) {\n        Write-Error \"Source file not found: $($spec.Source)\"\n        exit 1\n    }\n}\n\nforeach ($asset in $configAssets) {\n    if (-not (Test-Path -LiteralPath $asset.Source -PathType Leaf)) {\n        Write-Error \"Config asset not found: $($asset.Source)\"\n        exit 1\n    }\n}\n\n# Ensure .config directory exists in project root\n$projectConfigDir = Join-Path -Path $resolvedProject -ChildPath '.config'\nif (-not (Test-Path -LiteralPath $projectConfigDir -PathType Container)) {\n    New-Item -Path $projectConfigDir -ItemType Directory -Force | Out-Null\n    Write-Host \"Created .config directory: $projectConfigDir\" -ForegroundColor Cyan\n}\n\n$touchedDirs = @{}\n$summary = @()\n\nforeach ($spec in $specs) {\n    Write-Host \"&#96;n=== Updating $($spec.Name) ===\" -ForegroundColor Magenta\n\n    $targets = Get-ChildItem -LiteralPath $resolvedProject -Recurse -Filter $spec.Name -File -ErrorAction SilentlyContinue\n    $targets = $targets | Where-Object { $_.FullName -ne $spec.Source }\n\n    if (-not $targets) {\n        Write-Host \"No targets found.\" -ForegroundColor Yellow\n        $summary += [pscustomobject]@{\n            Name     = $spec.Name\n            Updated  = 0\n            Failed   = 0\n            Skipped  = 0\n            Total    = 0\n        }\n        continue\n    }\n\n    $updated = 0\n    $failed = 0\n\n    foreach ($target in $targets) {\n        try {\n            Copy-Item -Path $spec.Source -Destination $target.FullName -Force\n            Write-Host \"[OK] $($target.FullName)\" -ForegroundColor Green\n            $updated++\n\n            $targetDir = $target.Directory.FullName",
        "signatures": {},
        "detailedLines": [
          {
            "text": ")",
            "lineNumber": 56
          },
          {
            "lineNumber": 57
          },
          {
            "text": "# Config files to deploy to projectroot\\.config\\",
            "lineNumber": 58
          },
          {
            "text": "$configAssets = @(",
            "lineNumber": 59
          },
          {
            "text": "    @{ Name = 'config.json'; Source = Join-Path -Path $structDir -ChildPath 'config.json' },",
            "lineNumber": 60
          },
          {
            "text": "    @{ Name = 'GetStructDir.ps1'; Source = Join-Path -Path $structDir -ChildPath 'GetStructDir.ps1' }",
            "lineNumber": 61
          },
          {
            "text": ")",
            "lineNumber": 62
          },
          {
            "lineNumber": 63
          },
          {
            "text": "foreach ($spec in $specs) {",
            "lineNumber": 64
          },
          {
            "text": "    if (-not (Test-Path -LiteralPath $spec.Source -PathType Leaf)) {",
            "lineNumber": 65
          },
          {
            "text": "        Write-Error \"Source file not found: $($spec.Source)\"",
            "lineNumber": 66
          },
          {
            "text": "        exit 1",
            "lineNumber": 67
          },
          {
            "text": "    }",
            "lineNumber": 68
          },
          {
            "text": "}",
            "lineNumber": 69
          },
          {
            "lineNumber": 70
          },
          {
            "text": "foreach ($asset in $configAssets) {",
            "lineNumber": 71
          },
          {
            "text": "    if (-not (Test-Path -LiteralPath $asset.Source -PathType Leaf)) {",
            "lineNumber": 72
          },
          {
            "text": "        Write-Error \"Config asset not found: $($asset.Source)\"",
            "lineNumber": 73
          },
          {
            "text": "        exit 1",
            "lineNumber": 74
          },
          {
            "text": "    }",
            "lineNumber": 75
          },
          {
            "text": "}",
            "lineNumber": 76
          },
          {
            "lineNumber": 77
          },
          {
            "text": "# Ensure .config directory exists in project root",
            "lineNumber": 78
          },
          {
            "text": "$projectConfigDir = Join-Path -Path $resolvedProject -ChildPath '.config'",
            "lineNumber": 79
          },
          {
            "text": "if (-not (Test-Path -LiteralPath $projectConfigDir -PathType Container)) {",
            "lineNumber": 80
          },
          {
            "text": "    New-Item -Path $projectConfigDir -ItemType Directory -Force | Out-Null",
            "lineNumber": 81
          },
          {
            "text": "    Write-Host \"Created .config directory: $projectConfigDir\" -ForegroundColor Cyan",
            "lineNumber": 82
          },
          {
            "text": "}",
            "lineNumber": 83
          },
          {
            "lineNumber": 84
          },
          {
            "text": "$touchedDirs = @{}",
            "lineNumber": 85
          },
          {
            "text": "$summary = @()",
            "lineNumber": 86
          },
          {
            "lineNumber": 87
          },
          {
            "text": "foreach ($spec in $specs) {",
            "lineNumber": 88
          },
          {
            "text": "    Write-Host \"&#96;n=== Updating $($spec.Name) ===\" -ForegroundColor Magenta",
            "lineNumber": 89
          },
          {
            "lineNumber": 90
          },
          {
            "text": "    $targets = Get-ChildItem -LiteralPath $resolvedProject -Recurse -Filter $spec.Name -File -ErrorAction SilentlyContinue",
            "lineNumber": 91
          },
          {
            "text": "    $targets = $targets | Where-Object { $_.FullName -ne $spec.Source }",
            "lineNumber": 92
          },
          {
            "lineNumber": 93
          },
          {
            "text": "    if (-not $targets) {",
            "lineNumber": 94
          },
          {
            "text": "        Write-Host \"No targets found.\" -ForegroundColor Yellow",
            "lineNumber": 95
          },
          {
            "text": "        $summary += [pscustomobject]@{",
            "lineNumber": 96
          },
          {
            "text": "            Name     = $spec.Name",
            "lineNumber": 97
          },
          {
            "text": "            Updated  = 0",
            "lineNumber": 98
          },
          {
            "text": "            Failed   = 0",
            "lineNumber": 99
          },
          {
            "text": "            Skipped  = 0",
            "lineNumber": 100
          },
          {
            "text": "            Total    = 0",
            "lineNumber": 101
          },
          {
            "text": "        }",
            "lineNumber": 102
          },
          {
            "text": "        continue",
            "lineNumber": 103
          },
          {
            "text": "    }",
            "lineNumber": 104
          },
          {
            "lineNumber": 105
          },
          {
            "text": "    $updated = 0",
            "lineNumber": 106
          },
          {
            "text": "    $failed = 0",
            "lineNumber": 107
          },
          {
            "lineNumber": 108
          },
          {
            "text": "    foreach ($target in $targets) {",
            "lineNumber": 109
          },
          {
            "text": "        try {",
            "lineNumber": 110
          },
          {
            "text": "            Copy-Item -Path $spec.Source -Destination $target.FullName -Force",
            "lineNumber": 111
          },
          {
            "text": "            Write-Host \"[OK] $($target.FullName)\" -ForegroundColor Green",
            "lineNumber": 112
          },
          {
            "text": "            $updated++",
            "lineNumber": 113
          },
          {
            "lineNumber": 114
          },
          {
            "text": "            $targetDir = $target.Directory.FullName",
            "lineNumber": 115
          }
        ]
      },
      "score": 0.3842119872570038
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\ConfigLoader.ps1",
        "range": {
          "startPosition": {
            "line": 167
          },
          "endPosition": {
            "line": 213
          }
        },
        "contents": "function Get-ZipCompressionLevel {\n    $value = Get-ConfigValue -Name 'compression' -Default 9\n    if ($value -is [string]) {\n        $parsed = 0\n        if ([int]::TryParse($value, [ref]$parsed)) {\n            $value = $parsed\n        }\n    }\n\n    if ($value -isnot [int]) {\n        return 9\n    }\n\n    return [Math]::Min(9, [Math]::Max(0, $value))\n}\n\n# If script is run directly (not dot-sourced), prompt for project path and deploy\n# When dot-sourced, InvocationName is '.'; when run directly, it's the script path or name\nif ($MyInvocation.InvocationName -ne '.') {\n    $projectPath = Get-ProjectPathFromUser\n    if ($null -ne $projectPath) {\n        # Deploy batch files and config to the project\n        $structDir = Get-StructDirectory\n        if (-not (Test-Path -LiteralPath $structDir -PathType Container)) {\n            Write-Error \"Configured structDir not found: $structDir\"\n            exit 1\n        }\n\n        try {\n            $resolvedProject = (Resolve-Path -LiteralPath $projectPath -ErrorAction Stop).Path\n        }\n        catch {\n            Write-Error \"Unable to resolve project directory: $($_.Exception.Message)\"\n            exit 1\n        }\n\n        if (-not (Test-Path -LiteralPath $resolvedProject -PathType Container)) {\n            Write-Error \"Project path is not a directory: $resolvedProject\"\n            exit 1\n        }\n\n        Write-Host \"&#96;nDeploying to: $resolvedProject\" -ForegroundColor Cyan\n        Write-Host \"Struct directory:  $structDir\" -ForegroundColor Cyan\n\n        $specs = @(\n            @{ Name = 'UpdateSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateSequences.bat' },",
        "signatures": {},
        "detailedLines": [
          {
            "text": "function Get-ZipCompressionLevel {",
            "lineNumber": 168
          },
          {
            "text": "    $value = Get-ConfigValue -Name 'compression' -Default 9",
            "lineNumber": 169
          },
          {
            "text": "    if ($value -is [string]) {",
            "lineNumber": 170
          },
          {
            "text": "        $parsed = 0",
            "lineNumber": 171
          },
          {
            "text": "        if ([int]::TryParse($value, [ref]$parsed)) {",
            "lineNumber": 172
          },
          {
            "text": "            $value = $parsed",
            "lineNumber": 173
          },
          {
            "text": "        }",
            "lineNumber": 174
          },
          {
            "text": "    }",
            "lineNumber": 175
          },
          {
            "lineNumber": 176
          },
          {
            "text": "    if ($value -isnot [int]) {",
            "lineNumber": 177
          },
          {
            "text": "        return 9",
            "lineNumber": 178
          },
          {
            "text": "    }",
            "lineNumber": 179
          },
          {
            "lineNumber": 180
          },
          {
            "text": "    return [Math]::Min(9, [Math]::Max(0, $value))",
            "lineNumber": 181
          },
          {
            "text": "}",
            "lineNumber": 182
          },
          {
            "lineNumber": 183
          },
          {
            "text": "# If script is run directly (not dot-sourced), prompt for project path and deploy",
            "lineNumber": 184
          },
          {
            "text": "# When dot-sourced, InvocationName is '.'; when run directly, it's the script path or name",
            "lineNumber": 185
          },
          {
            "text": "if ($MyInvocation.InvocationName -ne '.') {",
            "lineNumber": 186
          },
          {
            "text": "    $projectPath = Get-ProjectPathFromUser",
            "lineNumber": 187
          },
          {
            "text": "    if ($null -ne $projectPath) {",
            "lineNumber": 188
          },
          {
            "text": "        # Deploy batch files and config to the project",
            "lineNumber": 189
          },
          {
            "text": "        $structDir = Get-StructDirectory",
            "lineNumber": 190
          },
          {
            "text": "        if (-not (Test-Path -LiteralPath $structDir -PathType Container)) {",
            "lineNumber": 191
          },
          {
            "text": "            Write-Error \"Configured structDir not found: $structDir\"",
            "lineNumber": 192
          },
          {
            "text": "            exit 1",
            "lineNumber": 193
          },
          {
            "text": "        }",
            "lineNumber": 194
          },
          {
            "lineNumber": 195
          },
          {
            "text": "        try {",
            "lineNumber": 196
          },
          {
            "text": "            $resolvedProject = (Resolve-Path -LiteralPath $projectPath -ErrorAction Stop).Path",
            "lineNumber": 197
          },
          {
            "text": "        }",
            "lineNumber": 198
          },
          {
            "text": "        catch {",
            "lineNumber": 199
          },
          {
            "text": "            Write-Error \"Unable to resolve project directory: $($_.Exception.Message)\"",
            "lineNumber": 200
          },
          {
            "text": "            exit 1",
            "lineNumber": 201
          },
          {
            "text": "        }",
            "lineNumber": 202
          },
          {
            "lineNumber": 203
          },
          {
            "text": "        if (-not (Test-Path -LiteralPath $resolvedProject -PathType Container)) {",
            "lineNumber": 204
          },
          {
            "text": "            Write-Error \"Project path is not a directory: $resolvedProject\"",
            "lineNumber": 205
          },
          {
            "text": "            exit 1",
            "lineNumber": 206
          },
          {
            "text": "        }",
            "lineNumber": 207
          },
          {
            "lineNumber": 208
          },
          {
            "text": "        Write-Host \"&#96;nDeploying to: $resolvedProject\" -ForegroundColor Cyan",
            "lineNumber": 209
          },
          {
            "text": "        Write-Host \"Struct directory:  $structDir\" -ForegroundColor Cyan",
            "lineNumber": 210
          },
          {
            "lineNumber": 211
          },
          {
            "text": "        $specs = @(",
            "lineNumber": 212
          },
          {
            "text": "            @{ Name = 'UpdateSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateSequences.bat' },",
            "lineNumber": 213
          }
        ]
      },
      "score": 0.36061128973960876
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\ConfigLoader.ps1",
        "range": {
          "startPosition": {
            "line": 55
          },
          "endPosition": {
            "line": 104,
            "column": 12
          }
        },
        "contents": "        return $value\n    }\n\n    $candidate = Join-Path -Path $script:LoaderRoot -ChildPath $value\n    $resolvedCandidate = Resolve-Path -LiteralPath $candidate -ErrorAction SilentlyContinue\n    if ($null -ne $resolvedCandidate) { return $resolvedCandidate.Path }\n    return $candidate\n}\n\nfunction Get-ProjectsRoot {\n    $value = Get-ConfigValue -Name 'projectsRoot'\n    if ($null -eq $value -or [string]::IsNullOrWhiteSpace($value)) {\n        $structDir = Get-StructDirectory\n        $parent = Split-Path -Parent $structDir\n        if ($null -eq $parent -or $parent.Length -eq 0 -or $parent -eq $structDir) {\n            return $structDir\n        }\n        return $parent\n    }\n\n    if ([System.IO.Path]::IsPathRooted($value)) {\n        $resolved = Resolve-Path -LiteralPath $value -ErrorAction SilentlyContinue\n        if ($null -ne $resolved) { return $resolved.Path }\n        return $value\n    }\n\n    $candidate = Join-Path -Path $script:LoaderRoot -ChildPath $value\n    $resolvedCandidate = Resolve-Path -LiteralPath $candidate -ErrorAction SilentlyContinue\n    if ($null -ne $resolvedCandidate) { return $resolvedCandidate.Path }\n    return $candidate\n}\n\nfunction Get-ProjectPathFromUser {\n    param(\n        [string]$Prompt = \"Paste the project path to deploy in\"\n    )\n\n    do {\n        $inputPath = Read-Host -Prompt $Prompt\n        if ([string]::IsNullOrWhiteSpace($inputPath)) {\n            Write-Warning \"Path cannot be empty. Please try again.\"\n            continue\n        }\n\n        # Remove quotes if present\n        $inputPath = $inputPath.Trim('\"', \"'\")\n\n        # Try to resolve the path\n        try {\n            ",
        "signatures": {},
        "detailedLines": [
          {
            "text": "        return $value",
            "lineNumber": 56
          },
          {
            "text": "    }",
            "lineNumber": 57
          },
          {
            "lineNumber": 58
          },
          {
            "text": "    $candidate = Join-Path -Path $script:LoaderRoot -ChildPath $value",
            "lineNumber": 59
          },
          {
            "text": "    $resolvedCandidate = Resolve-Path -LiteralPath $candidate -ErrorAction SilentlyContinue",
            "lineNumber": 60
          },
          {
            "text": "    if ($null -ne $resolvedCandidate) { return $resolvedCandidate.Path }",
            "lineNumber": 61
          },
          {
            "text": "    return $candidate",
            "lineNumber": 62
          },
          {
            "text": "}",
            "lineNumber": 63
          },
          {
            "lineNumber": 64
          },
          {
            "text": "function Get-ProjectsRoot {",
            "lineNumber": 65
          },
          {
            "text": "    $value = Get-ConfigValue -Name 'projectsRoot'",
            "lineNumber": 66
          },
          {
            "text": "    if ($null -eq $value -or [string]::IsNullOrWhiteSpace($value)) {",
            "lineNumber": 67
          },
          {
            "text": "        $structDir = Get-StructDirectory",
            "lineNumber": 68
          },
          {
            "text": "        $parent = Split-Path -Parent $structDir",
            "lineNumber": 69
          },
          {
            "text": "        if ($null -eq $parent -or $parent.Length -eq 0 -or $parent -eq $structDir) {",
            "lineNumber": 70
          },
          {
            "text": "            return $structDir",
            "lineNumber": 71
          },
          {
            "text": "        }",
            "lineNumber": 72
          },
          {
            "text": "        return $parent",
            "lineNumber": 73
          },
          {
            "text": "    }",
            "lineNumber": 74
          },
          {
            "lineNumber": 75
          },
          {
            "text": "    if ([System.IO.Path]::IsPathRooted($value)) {",
            "lineNumber": 76
          },
          {
            "text": "        $resolved = Resolve-Path -LiteralPath $value -ErrorAction SilentlyContinue",
            "lineNumber": 77
          },
          {
            "text": "        if ($null -ne $resolved) { return $resolved.Path }",
            "lineNumber": 78
          },
          {
            "text": "        return $value",
            "lineNumber": 79
          },
          {
            "text": "    }",
            "lineNumber": 80
          },
          {
            "lineNumber": 81
          },
          {
            "text": "    $candidate = Join-Path -Path $script:LoaderRoot -ChildPath $value",
            "lineNumber": 82
          },
          {
            "text": "    $resolvedCandidate = Resolve-Path -LiteralPath $candidate -ErrorAction SilentlyContinue",
            "lineNumber": 83
          },
          {
            "text": "    if ($null -ne $resolvedCandidate) { return $resolvedCandidate.Path }",
            "lineNumber": 84
          },
          {
            "text": "    return $candidate",
            "lineNumber": 85
          },
          {
            "text": "}",
            "lineNumber": 86
          },
          {
            "lineNumber": 87
          },
          {
            "text": "function Get-ProjectPathFromUser {",
            "lineNumber": 88
          },
          {
            "text": "    param(",
            "lineNumber": 89
          },
          {
            "text": "        [string]$Prompt = \"Paste the project path to deploy in\"",
            "lineNumber": 90
          },
          {
            "text": "    )",
            "lineNumber": 91
          },
          {
            "lineNumber": 92
          },
          {
            "text": "    do {",
            "lineNumber": 93
          },
          {
            "text": "        $inputPath = Read-Host -Prompt $Prompt",
            "lineNumber": 94
          },
          {
            "text": "        if ([string]::IsNullOrWhiteSpace($inputPath)) {",
            "lineNumber": 95
          },
          {
            "text": "            Write-Warning \"Path cannot be empty. Please try again.\"",
            "lineNumber": 96
          },
          {
            "text": "            continue",
            "lineNumber": 97
          },
          {
            "text": "        }",
            "lineNumber": 98
          },
          {
            "lineNumber": 99
          },
          {
            "text": "        # Remove quotes if present",
            "lineNumber": 100
          },
          {
            "text": "        $inputPath = $inputPath.Trim('\"', \"'\")",
            "lineNumber": 101
          },
          {
            "lineNumber": 102
          },
          {
            "text": "        # Try to resolve the path",
            "lineNumber": 103
          },
          {
            "text": "        try {",
            "lineNumber": 104
          },
          {
            "text": "            ",
            "lineNumber": 105
          }
        ]
      },
      "score": 0.3594421148300171
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\NewProject.bat",
        "range": {
          "startPosition": {
            "line": 61
          },
          "endPosition": {
            "line": 83
          }
        },
        "contents": "if not exist \"%projectRoot%\\Renders\" mkdir \"%projectRoot%\\Renders\"\n\n:: Place helper scripts into Renders\nset \"templateRoot=%STRUCT_DIR%\"\nfor %%F in (UpdateSequences.bat ZipSeqArchv.bat UnzipSeqArchv.bat ConfigLoader.ps1 config.json) do (\n  if exist \"%templateRoot%\\%%F\" copy /Y \"%templateRoot%\\%%F\" \"%projectRoot%\\Renders\\%%F\" &gt;nul\n)\n\n:: Use repo-provided templates for git config files\nif exist \"%~dp0components\\gitignore\" copy /Y \"%~dp0components\\gitignore\" \"%projectRoot%\\.gitignore\" &gt;nul\nif exist \"%~dp0components\\gitattributes\" copy /Y \"%~dp0components\\gitattributes\" \"%projectRoot%\\.gitattributes\" &gt;nul\n\n:: Initialize git and install Git LFS\npushd \"%projectRoot%\" &gt;nul\ngit init\ngit lfs install\ngit add . -v\ngit commit -m \"init\"\npopd &gt;nul\n\necho Project structure created successfully in folder: %projectRoot%\npause ",
        "signatures": {},
        "detailedLines": [
          {
            "text": "if not exist \"%projectRoot%\\Renders\" mkdir \"%projectRoot%\\Renders\"",
            "lineNumber": 62
          },
          {
            "lineNumber": 63
          },
          {
            "text": ":: Place helper scripts into Renders",
            "lineNumber": 64
          },
          {
            "text": "set \"templateRoot=%STRUCT_DIR%\"",
            "lineNumber": 65
          },
          {
            "text": "for %%F in (UpdateSequences.bat ZipSeqArchv.bat UnzipSeqArchv.bat ConfigLoader.ps1 config.json) do (",
            "lineNumber": 66
          },
          {
            "text": "  if exist \"%templateRoot%\\%%F\" copy /Y \"%templateRoot%\\%%F\" \"%projectRoot%\\Renders\\%%F\" &gt;nul",
            "lineNumber": 67
          },
          {
            "text": ")",
            "lineNumber": 68
          },
          {
            "lineNumber": 69
          },
          {
            "text": ":: Use repo-provided templates for git config files",
            "lineNumber": 70
          },
          {
            "text": "if exist \"%~dp0components\\gitignore\" copy /Y \"%~dp0components\\gitignore\" \"%projectRoot%\\.gitignore\" &gt;nul",
            "lineNumber": 71
          },
          {
            "text": "if exist \"%~dp0components\\gitattributes\" copy /Y \"%~dp0components\\gitattributes\" \"%projectRoot%\\.gitattributes\" &gt;nul",
            "lineNumber": 72
          },
          {
            "lineNumber": 73
          },
          {
            "text": ":: Initialize git and install Git LFS",
            "lineNumber": 74
          },
          {
            "text": "pushd \"%projectRoot%\" &gt;nul",
            "lineNumber": 75
          },
          {
            "text": "git init",
            "lineNumber": 76
          },
          {
            "text": "git lfs install",
            "lineNumber": 77
          },
          {
            "text": "git add . -v",
            "lineNumber": 78
          },
          {
            "text": "git commit -m \"init\"",
            "lineNumber": 79
          },
          {
            "text": "popd &gt;nul",
            "lineNumber": 80
          },
          {
            "lineNumber": 81
          },
          {
            "text": "echo Project structure created successfully in folder: %projectRoot%",
            "lineNumber": 82
          },
          {
            "text": "pause ",
            "lineNumber": 83
          }
        ]
      },
      "score": 0.345913290977478
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\components\\gitignore",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 123,
            "column": 7
          }
        },
        "contents": "# Blender Studio Git Management - .gitignore\n\n# Blender auto-save files\n*.blend1\n*.blend2\n*.blend3\n*.blend4\n*.blend5\n*.blend6\n*.blend7\n*.blend8\n*.blend9\n*.blend10\n*.blend11\n*.blend12\n*.blend13\n*.blend14\n*.blend15\n*.blend16\n*.blend17\n*.blend18\n*.blend19\n*.blend20\n*.blend21\n*.blend22\n*.blend23\n*.blend24\n*.blend25\n*.blend26\n*.blend27\n*.blend28\n*.blend29\n*.blend30\n*.blend31\n*.blend32\n\n# Blender cache and temporary files\n*.swp\n*.swo\n*~\n*.tmp\n*.temp\n\n# OS generated files\n.DS_Store\n.DS_Store?\n._*\n.Spotlight-V100\n.Trashes\nehthumbs.db\nThumbs.db\ndesktop.ini\n\n# Editor files\n.vscode/\n.idea/\n*.swp\n*.swo\n*~\n\n# Large media files (uncomment if you want to exclude rendered outputs)\n# *.mp4\n# *.avi\n# *.mov\n# *.png\n# *.jpg\n# *.jpeg\n# *.exr\n# *.hdr\n# *.tiff\n# *.tga\n\n# Audio files (uncomment if excluding)\n# *.wav\n# *.mp3\n# *.aac\n# *.ogg\n\n# Log files\n*.log\n\n# Python cache\n__pycache__/\n*.pyc\n*.pyo\n*.pyd\n.Python\n\n# Node modules (if using any web tools)\nnode_modules/\n\n# Environment files\n.env\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\n# Backup files\n*.bak\n*.backup\n*.old\n\n# Temporary files\ntemp/\ntmp/\ncache/ \n\nRenders/**\n!Renders/_zipped/\n!Renders/_zipped/**\n!Renders/**/\n!Renders/**/*.bat\n!Renders/**/*.log\nseq/\n\n# Premiere\n*.prlock\nAdobe Premiere Pro Video Previews/\nAdobe Premiere Pro Audio Previews/\nAdobe Premiere Pro (Beta) Video Previews/\nAdobe Premiere Pro (Beta) Audio Previews/\n\nPr/RnR/",
        "signatures": {},
        "detailedLines": [
          {
            "text": "# Blender Studio Git Management - .gitignore",
            "lineNumber": 1
          },
          {
            "lineNumber": 2
          },
          {
            "text": "# Blender auto-save files",
            "lineNumber": 3
          },
          {
            "text": "*.blend1",
            "lineNumber": 4
          },
          {
            "text": "*.blend2",
            "lineNumber": 5
          },
          {
            "text": "*.blend3",
            "lineNumber": 6
          },
          {
            "text": "*.blend4",
            "lineNumber": 7
          },
          {
            "text": "*.blend5",
            "lineNumber": 8
          },
          {
            "text": "*.blend6",
            "lineNumber": 9
          },
          {
            "text": "*.blend7",
            "lineNumber": 10
          },
          {
            "text": "*.blend8",
            "lineNumber": 11
          },
          {
            "text": "*.blend9",
            "lineNumber": 12
          },
          {
            "text": "*.blend10",
            "lineNumber": 13
          },
          {
            "text": "*.blend11",
            "lineNumber": 14
          },
          {
            "text": "*.blend12",
            "lineNumber": 15
          },
          {
            "text": "*.blend13",
            "lineNumber": 16
          },
          {
            "text": "*.blend14",
            "lineNumber": 17
          },
          {
            "text": "*.blend15",
            "lineNumber": 18
          },
          {
            "text": "*.blend16",
            "lineNumber": 19
          },
          {
            "text": "*.blend17",
            "lineNumber": 20
          },
          {
            "text": "*.blend18",
            "lineNumber": 21
          },
          {
            "text": "*.blend19",
            "lineNumber": 22
          },
          {
            "text": "*.blend20",
            "lineNumber": 23
          },
          {
            "text": "*.blend21",
            "lineNumber": 24
          },
          {
            "text": "*.blend22",
            "lineNumber": 25
          },
          {
            "text": "*.blend23",
            "lineNumber": 26
          },
          {
            "text": "*.blend24",
            "lineNumber": 27
          },
          {
            "text": "*.blend25",
            "lineNumber": 28
          },
          {
            "text": "*.blend26",
            "lineNumber": 29
          },
          {
            "text": "*.blend27",
            "lineNumber": 30
          },
          {
            "text": "*.blend28",
            "lineNumber": 31
          },
          {
            "text": "*.blend29",
            "lineNumber": 32
          },
          {
            "text": "*.blend30",
            "lineNumber": 33
          },
          {
            "text": "*.blend31",
            "lineNumber": 34
          },
          {
            "text": "*.blend32",
            "lineNumber": 35
          },
          {
            "lineNumber": 36
          },
          {
            "text": "# Blender cache and temporary files",
            "lineNumber": 37
          },
          {
            "text": "*.swp",
            "lineNumber": 38
          },
          {
            "text": "*.swo",
            "lineNumber": 39
          },
          {
            "text": "*~",
            "lineNumber": 40
          },
          {
            "text": "*.tmp",
            "lineNumber": 41
          },
          {
            "text": "*.temp",
            "lineNumber": 42
          },
          {
            "lineNumber": 43
          },
          {
            "text": "# OS generated files",
            "lineNumber": 44
          },
          {
            "text": ".DS_Store",
            "lineNumber": 45
          },
          {
            "text": ".DS_Store?",
            "lineNumber": 46
          },
          {
            "text": "._*",
            "lineNumber": 47
          },
          {
            "text": ".Spotlight-V100",
            "lineNumber": 48
          },
          {
            "text": ".Trashes",
            "lineNumber": 49
          },
          {
            "text": "ehthumbs.db",
            "lineNumber": 50
          },
          {
            "text": "Thumbs.db",
            "lineNumber": 51
          },
          {
            "text": "desktop.ini",
            "lineNumber": 52
          },
          {
            "lineNumber": 53
          },
          {
            "text": "# Editor files",
            "lineNumber": 54
          },
          {
            "text": ".vscode/",
            "lineNumber": 55
          },
          {
            "text": ".idea/",
            "lineNumber": 56
          },
          {
            "text": "*.swp",
            "lineNumber": 57
          },
          {
            "text": "*.swo",
            "lineNumber": 58
          },
          {
            "text": "*~",
            "lineNumber": 59
          },
          {
            "lineNumber": 60
          },
          {
            "text": "# Large media files (uncomment if you want to exclude rendered outputs)",
            "lineNumber": 61
          },
          {
            "text": "# *.mp4",
            "lineNumber": 62
          },
          {
            "text": "# *.avi",
            "lineNumber": 63
          },
          {
            "text": "# *.mov",
            "lineNumber": 64
          },
          {
            "text": "# *.png",
            "lineNumber": 65
          },
          {
            "text": "# *.jpg",
            "lineNumber": 66
          },
          {
            "text": "# *.jpeg",
            "lineNumber": 67
          },
          {
            "text": "# *.exr",
            "lineNumber": 68
          },
          {
            "text": "# *.hdr",
            "lineNumber": 69
          },
          {
            "text": "# *.tiff",
            "lineNumber": 70
          },
          {
            "text": "# *.tga",
            "lineNumber": 71
          },
          {
            "lineNumber": 72
          },
          {
            "text": "# Audio files (uncomment if excluding)",
            "lineNumber": 73
          },
          {
            "text": "# *.wav",
            "lineNumber": 74
          },
          {
            "text": "# *.mp3",
            "lineNumber": 75
          },
          {
            "text": "# *.aac",
            "lineNumber": 76
          },
          {
            "text": "# *.ogg",
            "lineNumber": 77
          },
          {
            "lineNumber": 78
          },
          {
            "text": "# Log files",
            "lineNumber": 79
          },
          {
            "text": "*.log",
            "lineNumber": 80
          },
          {
            "lineNumber": 81
          },
          {
            "text": "# Python cache",
            "lineNumber": 82
          },
          {
            "text": "__pycache__/",
            "lineNumber": 83
          },
          {
            "text": "*.pyc",
            "lineNumber": 84
          },
          {
            "text": "*.pyo",
            "lineNumber": 85
          },
          {
            "text": "*.pyd",
            "lineNumber": 86
          },
          {
            "text": ".Python",
            "lineNumber": 87
          },
          {
            "lineNumber": 88
          },
          {
            "text": "# Node modules (if using any web tools)",
            "lineNumber": 89
          },
          {
            "text": "node_modules/",
            "lineNumber": 90
          },
          {
            "lineNumber": 91
          },
          {
            "text": "# Environment files",
            "lineNumber": 92
          },
          {
            "text": ".env",
            "lineNumber": 93
          },
          {
            "text": ".env.local",
            "lineNumber": 94
          },
          {
            "text": ".env.development.local",
            "lineNumber": 95
          },
          {
            "text": ".env.test.local",
            "lineNumber": 96
          },
          {
            "text": ".env.production.local",
            "lineNumber": 97
          },
          {
            "lineNumber": 98
          },
          {
            "text": "# Backup files",
            "lineNumber": 99
          },
          {
            "text": "*.bak",
            "lineNumber": 100
          },
          {
            "text": "*.backup",
            "lineNumber": 101
          },
          {
            "text": "*.old",
            "lineNumber": 102
          },
          {
            "lineNumber": 103
          },
          {
            "text": "# Temporary files",
            "lineNumber": 104
          },
          {
            "text": "temp/",
            "lineNumber": 105
          },
          {
            "text": "tmp/",
            "lineNumber": 106
          },
          {
            "text": "cache/ ",
            "lineNumber": 107
          },
          {
            "lineNumber": 108
          },
          {
            "text": "Renders/**",
            "lineNumber": 109
          },
          {
            "text": "!Renders/_zipped/",
            "lineNumber": 110
          },
          {
            "text": "!Renders/_zipped/**",
            "lineNumber": 111
          },
          {
            "text": "!Renders/**/",
            "lineNumber": 112
          },
          {
            "text": "!Renders/**/*.bat",
            "lineNumber": 113
          },
          {
            "text": "!Renders/**/*.log",
            "lineNumber": 114
          },
          {
            "text": "seq/",
            "lineNumber": 115
          },
          {
            "lineNumber": 116
          },
          {
            "text": "# Premiere",
            "lineNumber": 117
          },
          {
            "text": "*.prlock",
            "lineNumber": 118
          },
          {
            "text": "Adobe Premiere Pro Video Previews/",
            "lineNumber": 119
          },
          {
            "text": "Adobe Premiere Pro Audio Previews/",
            "lineNumber": 120
          },
          {
            "text": "Adobe Premiere Pro (Beta) Video Previews/",
            "lineNumber": 121
          },
          {
            "text": "Adobe Premiere Pro (Beta) Audio Previews/",
            "lineNumber": 122
          },
          {
            "lineNumber": 123
          },
          {
            "text": "Pr/RnR/",
            "lineNumber": 124
          }
        ]
      },
      "score": 0.33225229382514954
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\ZipSeqArchv.bat",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 44
          }
        },
        "contents": "@echo off\nsetlocal EnableExtensions EnableDelayedExpansion\n\nset \"REN_DIR=%~dp0\"\nfor %%I in (\"%REN_DIR%..\") do set \"PROJ_ROOT=%%~fI\"\n\nset \"CONFIG_DIR=%PROJ_ROOT%\\.config\"\nset \"CONFIG_PATH=%CONFIG_DIR%\\config.json\"\nset \"GET_STRUCT_DIR=%CONFIG_DIR%\\GetStructDir.ps1\"\n\nif not exist \"%CONFIG_PATH%\" (\n    echo [ERROR] config.json not found at %CONFIG_PATH%\n    echo Please run ConfigLoader.ps1 to deploy helper files.\n    exit /b 1\n)\n\nif not exist \"%GET_STRUCT_DIR%\" (\n    echo [ERROR] GetStructDir.ps1 not found at %GET_STRUCT_DIR%\n    echo Please run ConfigLoader.ps1 to deploy helper files.\n    exit /b 1\n)\n\nfor /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command ^\n    \"Set-StrictMode -Version Latest; $structDir = &amp; '%GET_STRUCT_DIR%' -ProjectRoot '%PROJ_ROOT%'; if (-not $structDir) { throw \\\"Failed to get structDir from GetStructDir.ps1\\\" }; $pyPath = Join-Path $structDir 'zip_sequences.py'; if (-not (Test-Path -LiteralPath $pyPath)) { throw \\\"zip_sequences.py not found at $pyPath\\\" }; Write-Output $pyPath\"&#96;) do set \"PY_SCRIPT=%%~I\"\n\nif not defined PY_SCRIPT (\n    echo [ERROR] Unable to resolve zip_sequences.py path from config.\n    exit /b 1\n)\n\npushd \"%PROJ_ROOT%\" &gt;nul 2&gt;&amp;1\n\npython \"%PY_SCRIPT%\" --verbose %*\nset \"ERR=!ERRORLEVEL!\"\n\npopd &gt;nul 2&gt;&amp;1\n\nif !ERR! NEQ 0 (\n    echo Failed to update render sequence archives ^(exit code !ERR!^).\n    exit /b !ERR!\n)\n\nexit /b 0",
        "signatures": {},
        "detailedLines": [
          {
            "text": "@echo off",
            "lineNumber": 1
          },
          {
            "text": "setlocal EnableExtensions EnableDelayedExpansion",
            "lineNumber": 2
          },
          {
            "lineNumber": 3
          },
          {
            "text": "set \"REN_DIR=%~dp0\"",
            "lineNumber": 4
          },
          {
            "text": "for %%I in (\"%REN_DIR%..\") do set \"PROJ_ROOT=%%~fI\"",
            "lineNumber": 5
          },
          {
            "lineNumber": 6
          },
          {
            "text": "set \"CONFIG_DIR=%PROJ_ROOT%\\.config\"",
            "lineNumber": 7
          },
          {
            "text": "set \"CONFIG_PATH=%CONFIG_DIR%\\config.json\"",
            "lineNumber": 8
          },
          {
            "text": "set \"GET_STRUCT_DIR=%CONFIG_DIR%\\GetStructDir.ps1\"",
            "lineNumber": 9
          },
          {
            "lineNumber": 10
          },
          {
            "text": "if not exist \"%CONFIG_PATH%\" (",
            "lineNumber": 11
          },
          {
            "text": "    echo [ERROR] config.json not found at %CONFIG_PATH%",
            "lineNumber": 12
          },
          {
            "text": "    echo Please run ConfigLoader.ps1 to deploy helper files.",
            "lineNumber": 13
          },
          {
            "text": "    exit /b 1",
            "lineNumber": 14
          },
          {
            "text": ")",
            "lineNumber": 15
          },
          {
            "lineNumber": 16
          },
          {
            "text": "if not exist \"%GET_STRUCT_DIR%\" (",
            "lineNumber": 17
          },
          {
            "text": "    echo [ERROR] GetStructDir.ps1 not found at %GET_STRUCT_DIR%",
            "lineNumber": 18
          },
          {
            "text": "    echo Please run ConfigLoader.ps1 to deploy helper files.",
            "lineNumber": 19
          },
          {
            "text": "    exit /b 1",
            "lineNumber": 20
          },
          {
            "text": ")",
            "lineNumber": 21
          },
          {
            "lineNumber": 22
          },
          {
            "text": "for /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command ^",
            "lineNumber": 23
          },
          {
            "text": "    \"Set-StrictMode -Version Latest; $structDir = &amp; '%GET_STRUCT_DIR%' -ProjectRoot '%PROJ_ROOT%'; if (-not $structDir) { throw \\\"Failed to get structDir from GetStructDir.ps1\\\" }; $pyPath = Join-Path $structDir 'zip_sequences.py'; if (-not (Test-Path -LiteralPath $pyPath)) { throw \\\"zip_sequences.py not found at $pyPath\\\" }; Write-Output $pyPath\"&#96;) do set \"PY_SCRIPT=%%~I\"",
            "lineNumber": 24
          },
          {
            "lineNumber": 25
          },
          {
            "text": "if not defined PY_SCRIPT (",
            "lineNumber": 26
          },
          {
            "text": "    echo [ERROR] Unable to resolve zip_sequences.py path from config.",
            "lineNumber": 27
          },
          {
            "text": "    exit /b 1",
            "lineNumber": 28
          },
          {
            "text": ")",
            "lineNumber": 29
          },
          {
            "lineNumber": 30
          },
          {
            "text": "pushd \"%PROJ_ROOT%\" &gt;nul 2&gt;&amp;1",
            "lineNumber": 31
          },
          {
            "lineNumber": 32
          },
          {
            "text": "python \"%PY_SCRIPT%\" --verbose %*",
            "lineNumber": 33
          },
          {
            "text": "set \"ERR=!ERRORLEVEL!\"",
            "lineNumber": 34
          },
          {
            "lineNumber": 35
          },
          {
            "text": "popd &gt;nul 2&gt;&amp;1",
            "lineNumber": 36
          },
          {
            "lineNumber": 37
          },
          {
            "text": "if !ERR! NEQ 0 (",
            "lineNumber": 38
          },
          {
            "text": "    echo Failed to update render sequence archives ^(exit code !ERR!^).",
            "lineNumber": 39
          },
          {
            "text": "    exit /b !ERR!",
            "lineNumber": 40
          },
          {
            "text": ")",
            "lineNumber": 41
          },
          {
            "lineNumber": 42
          },
          {
            "text": "exit /b 0",
            "lineNumber": 43
          }
        ]
      },
      "score": 0.3269096612930298
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\UnzipSeqArchv.bat",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 42
          }
        },
        "contents": "@echo off\nsetlocal EnableExtensions EnableDelayedExpansion\n\nset \"REN_DIR=%~dp0\"\nfor %%I in (\"%REN_DIR%..\") do set \"PROJ_ROOT=%%~fI\"\n\nset \"CONFIG_DIR=%PROJ_ROOT%\\.config\"\nset \"CONFIG_PATH=%CONFIG_DIR%\\config.json\"\nset \"GET_STRUCT_DIR=%CONFIG_DIR%\\GetStructDir.ps1\"\n\nif not exist \"%CONFIG_PATH%\" (\n    echo [ERROR] config.json not found at %CONFIG_PATH%\n    echo Please run ConfigLoader.ps1 to deploy helper files.\n    exit /b 1\n)\n\nif not exist \"%GET_STRUCT_DIR%\" (\n    echo [ERROR] GetStructDir.ps1 not found at %GET_STRUCT_DIR%\n    echo Please run ConfigLoader.ps1 to deploy helper files.\n    exit /b 1\n)\n\nfor /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command ^\n    \"Set-StrictMode -Version Latest; $structDir = &amp; '%GET_STRUCT_DIR%' -ProjectRoot '%PROJ_ROOT%'; if (-not $structDir) { throw \\\"Failed to get structDir from GetStructDir.ps1\\\" }; $pyPath = Join-Path $structDir 'zip_sequences.py'; if (-not (Test-Path -LiteralPath $pyPath)) { throw \\\"zip_sequences.py not found at $pyPath\\\" }; Write-Output $pyPath\"&#96;) do set \"PY_SCRIPT=%%I\"\n\nif not defined PY_SCRIPT (\n    echo [ERROR] Unable to resolve zip_sequences.py path from config.\n    exit /b 1\n)\n\npushd \"%PROJ_ROOT%\" &gt;nul 2&gt;&amp;1\n\npython \"%PY_SCRIPT%\" --mode expand --verbose %*\nset \"ERR=!ERRORLEVEL!\"\n\nif not \"!ERR!\"==\"0\" (\n    echo Failed to expand render sequence archives (exit code !ERR!).\n)\n\npopd &gt;nul 2&gt;&amp;1\nexit /b !ERR!",
        "signatures": {},
        "detailedLines": [
          {
            "text": "@echo off",
            "lineNumber": 1
          },
          {
            "text": "setlocal EnableExtensions EnableDelayedExpansion",
            "lineNumber": 2
          },
          {
            "lineNumber": 3
          },
          {
            "text": "set \"REN_DIR=%~dp0\"",
            "lineNumber": 4
          },
          {
            "text": "for %%I in (\"%REN_DIR%..\") do set \"PROJ_ROOT=%%~fI\"",
            "lineNumber": 5
          },
          {
            "lineNumber": 6
          },
          {
            "text": "set \"CONFIG_DIR=%PROJ_ROOT%\\.config\"",
            "lineNumber": 7
          },
          {
            "text": "set \"CONFIG_PATH=%CONFIG_DIR%\\config.json\"",
            "lineNumber": 8
          },
          {
            "text": "set \"GET_STRUCT_DIR=%CONFIG_DIR%\\GetStructDir.ps1\"",
            "lineNumber": 9
          },
          {
            "lineNumber": 10
          },
          {
            "text": "if not exist \"%CONFIG_PATH%\" (",
            "lineNumber": 11
          },
          {
            "text": "    echo [ERROR] config.json not found at %CONFIG_PATH%",
            "lineNumber": 12
          },
          {
            "text": "    echo Please run ConfigLoader.ps1 to deploy helper files.",
            "lineNumber": 13
          },
          {
            "text": "    exit /b 1",
            "lineNumber": 14
          },
          {
            "text": ")",
            "lineNumber": 15
          },
          {
            "lineNumber": 16
          },
          {
            "text": "if not exist \"%GET_STRUCT_DIR%\" (",
            "lineNumber": 17
          },
          {
            "text": "    echo [ERROR] GetStructDir.ps1 not found at %GET_STRUCT_DIR%",
            "lineNumber": 18
          },
          {
            "text": "    echo Please run ConfigLoader.ps1 to deploy helper files.",
            "lineNumber": 19
          },
          {
            "text": "    exit /b 1",
            "lineNumber": 20
          },
          {
            "text": ")",
            "lineNumber": 21
          },
          {
            "lineNumber": 22
          },
          {
            "text": "for /f \"usebackq delims=\" %%I in (&#96;powershell -NoProfile -ExecutionPolicy Bypass -Command ^",
            "lineNumber": 23
          },
          {
            "text": "    \"Set-StrictMode -Version Latest; $structDir = &amp; '%GET_STRUCT_DIR%' -ProjectRoot '%PROJ_ROOT%'; if (-not $structDir) { throw \\\"Failed to get structDir from GetStructDir.ps1\\\" }; $pyPath = Join-Path $structDir 'zip_sequences.py'; if (-not (Test-Path -LiteralPath $pyPath)) { throw \\\"zip_sequences.py not found at $pyPath\\\" }; Write-Output $pyPath\"&#96;) do set \"PY_SCRIPT=%%I\"",
            "lineNumber": 24
          },
          {
            "lineNumber": 25
          },
          {
            "text": "if not defined PY_SCRIPT (",
            "lineNumber": 26
          },
          {
            "text": "    echo [ERROR] Unable to resolve zip_sequences.py path from config.",
            "lineNumber": 27
          },
          {
            "text": "    exit /b 1",
            "lineNumber": 28
          },
          {
            "text": ")",
            "lineNumber": 29
          },
          {
            "lineNumber": 30
          },
          {
            "text": "pushd \"%PROJ_ROOT%\" &gt;nul 2&gt;&amp;1",
            "lineNumber": 31
          },
          {
            "lineNumber": 32
          },
          {
            "text": "python \"%PY_SCRIPT%\" --mode expand --verbose %*",
            "lineNumber": 33
          },
          {
            "text": "set \"ERR=!ERRORLEVEL!\"",
            "lineNumber": 34
          },
          {
            "lineNumber": 35
          },
          {
            "text": "if not \"!ERR!\"==\"0\" (",
            "lineNumber": 36
          },
          {
            "text": "    echo Failed to expand render sequence archives (exit code !ERR!).",
            "lineNumber": 37
          },
          {
            "text": ")",
            "lineNumber": 38
          },
          {
            "lineNumber": 39
          },
          {
            "text": "popd &gt;nul 2&gt;&amp;1",
            "lineNumber": 40
          },
          {
            "text": "exit /b !ERR!",
            "lineNumber": 41
          }
        ]
      },
      "score": 0.3198961913585663
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\UpdateProjectBatches.ps1",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 60
          }
        },
        "contents": "# Refresh helper batch scripts within a specific project directory.\n\nparam(\n    [string]$ProjectPath\n)\n\nSet-StrictMode -Version Latest\n$ErrorActionPreference = 'Stop'\n\nif (-not $PSScriptRoot) {\n    $PSScriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Path\n}\n\n$configLoader = Join-Path -Path $PSScriptRoot -ChildPath 'ConfigLoader.ps1'\nif (-not (Test-Path -LiteralPath $configLoader)) {\n    throw \"Missing ConfigLoader.ps1 in $PSScriptRoot\"\n}\n. $configLoader\n\n$structDir = Get-StructDirectory\nif (-not (Test-Path -LiteralPath $structDir -PathType Container)) {\n    throw \"Configured structDir not found: $structDir\"\n}\n\nif ([string]::IsNullOrWhiteSpace($ProjectPath)) {\n    $ProjectPath = Read-Host 'Enter the full path to the project directory'\n}\n\nif ([string]::IsNullOrWhiteSpace($ProjectPath)) {\n    Write-Error 'No project directory provided.'\n    exit 1\n}\n\ntry {\n    $resolvedProject = (Resolve-Path -LiteralPath $ProjectPath -ErrorAction Stop).Path\n}\ncatch {\n    Write-Error \"Unable to resolve project directory: $($_.Exception.Message)\"\n    exit 1\n}\n\nif (-not (Test-Path -LiteralPath $resolvedProject -PathType Container)) {\n    Write-Error \"Project path is not a directory: $resolvedProject\"\n    exit 1\n}\n\nWrite-Host \"Project directory: $resolvedProject\" -ForegroundColor Cyan\nWrite-Host \"Struct directory:  $structDir\" -ForegroundColor Cyan\n\n$specs = @(\n    @{ Name = 'UpdateSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateSequences.bat' },\n    @{ Name = 'UpdateAllSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateAllSequences.bat' },\n    @{ Name = 'ZipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'ZipSeqArchv.bat' },\n    @{ Name = 'UnzipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'UnzipSeqArchv.bat' },\n    @{ Name = 'NewDaily.bat'; Source = Join-Path -Path $structDir -ChildPath 'NewDaily.bat' }\n)\n\n# Config files to deploy to projectroot\\.config\\\n$configAssets = @(\n    @{ Name = 'config.json'; Source = Join-Path -Path $structDir -ChildPath 'config.json' },",
        "signatures": {},
        "detailedLines": [
          {
            "text": "# Refresh helper batch scripts within a specific project directory.",
            "lineNumber": 1
          },
          {
            "lineNumber": 2
          },
          {
            "text": "param(",
            "lineNumber": 3
          },
          {
            "text": "    [string]$ProjectPath",
            "lineNumber": 4
          },
          {
            "text": ")",
            "lineNumber": 5
          },
          {
            "lineNumber": 6
          },
          {
            "text": "Set-StrictMode -Version Latest",
            "lineNumber": 7
          },
          {
            "text": "$ErrorActionPreference = 'Stop'",
            "lineNumber": 8
          },
          {
            "lineNumber": 9
          },
          {
            "text": "if (-not $PSScriptRoot) {",
            "lineNumber": 10
          },
          {
            "text": "    $PSScriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Path",
            "lineNumber": 11
          },
          {
            "text": "}",
            "lineNumber": 12
          },
          {
            "lineNumber": 13
          },
          {
            "text": "$configLoader = Join-Path -Path $PSScriptRoot -ChildPath 'ConfigLoader.ps1'",
            "lineNumber": 14
          },
          {
            "text": "if (-not (Test-Path -LiteralPath $configLoader)) {",
            "lineNumber": 15
          },
          {
            "text": "    throw \"Missing ConfigLoader.ps1 in $PSScriptRoot\"",
            "lineNumber": 16
          },
          {
            "text": "}",
            "lineNumber": 17
          },
          {
            "text": ". $configLoader",
            "lineNumber": 18
          },
          {
            "lineNumber": 19
          },
          {
            "text": "$structDir = Get-StructDirectory",
            "lineNumber": 20
          },
          {
            "text": "if (-not (Test-Path -LiteralPath $structDir -PathType Container)) {",
            "lineNumber": 21
          },
          {
            "text": "    throw \"Configured structDir not found: $structDir\"",
            "lineNumber": 22
          },
          {
            "text": "}",
            "lineNumber": 23
          },
          {
            "lineNumber": 24
          },
          {
            "text": "if ([string]::IsNullOrWhiteSpace($ProjectPath)) {",
            "lineNumber": 25
          },
          {
            "text": "    $ProjectPath = Read-Host 'Enter the full path to the project directory'",
            "lineNumber": 26
          },
          {
            "text": "}",
            "lineNumber": 27
          },
          {
            "lineNumber": 28
          },
          {
            "text": "if ([string]::IsNullOrWhiteSpace($ProjectPath)) {",
            "lineNumber": 29
          },
          {
            "text": "    Write-Error 'No project directory provided.'",
            "lineNumber": 30
          },
          {
            "text": "    exit 1",
            "lineNumber": 31
          },
          {
            "text": "}",
            "lineNumber": 32
          },
          {
            "lineNumber": 33
          },
          {
            "text": "try {",
            "lineNumber": 34
          },
          {
            "text": "    $resolvedProject = (Resolve-Path -LiteralPath $ProjectPath -ErrorAction Stop).Path",
            "lineNumber": 35
          },
          {
            "text": "}",
            "lineNumber": 36
          },
          {
            "text": "catch {",
            "lineNumber": 37
          },
          {
            "text": "    Write-Error \"Unable to resolve project directory: $($_.Exception.Message)\"",
            "lineNumber": 38
          },
          {
            "text": "    exit 1",
            "lineNumber": 39
          },
          {
            "text": "}",
            "lineNumber": 40
          },
          {
            "lineNumber": 41
          },
          {
            "text": "if (-not (Test-Path -LiteralPath $resolvedProject -PathType Container)) {",
            "lineNumber": 42
          },
          {
            "text": "    Write-Error \"Project path is not a directory: $resolvedProject\"",
            "lineNumber": 43
          },
          {
            "text": "    exit 1",
            "lineNumber": 44
          },
          {
            "text": "}",
            "lineNumber": 45
          },
          {
            "lineNumber": 46
          },
          {
            "text": "Write-Host \"Project directory: $resolvedProject\" -ForegroundColor Cyan",
            "lineNumber": 47
          },
          {
            "text": "Write-Host \"Struct directory:  $structDir\" -ForegroundColor Cyan",
            "lineNumber": 48
          },
          {
            "lineNumber": 49
          },
          {
            "text": "$specs = @(",
            "lineNumber": 50
          },
          {
            "text": "    @{ Name = 'UpdateSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateSequences.bat' },",
            "lineNumber": 51
          },
          {
            "text": "    @{ Name = 'UpdateAllSequences.bat'; Source = Join-Path -Path $structDir -ChildPath 'UpdateAllSequences.bat' },",
            "lineNumber": 52
          },
          {
            "text": "    @{ Name = 'ZipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'ZipSeqArchv.bat' },",
            "lineNumber": 53
          },
          {
            "text": "    @{ Name = 'UnzipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'UnzipSeqArchv.bat' },",
            "lineNumber": 54
          },
          {
            "text": "    @{ Name = 'NewDaily.bat'; Source = Join-Path -Path $structDir -ChildPath 'NewDaily.bat' }",
            "lineNumber": 55
          },
          {
            "text": ")",
            "lineNumber": 56
          },
          {
            "lineNumber": 57
          },
          {
            "text": "# Config files to deploy to projectroot\\.config\\",
            "lineNumber": 58
          },
          {
            "text": "$configAssets = @(",
            "lineNumber": 59
          },
          {
            "text": "    @{ Name = 'config.json'; Source = Join-Path -Path $structDir -ChildPath 'config.json' },",
            "lineNumber": 60
          }
        ]
      },
      "score": 0.3039000928401947
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\UpdateProjectBatches.ps1",
        "range": {
          "startPosition": {
            "line": 112
          },
          "endPosition": {
            "line": 164
          }
        },
        "contents": "            $updated++\n\n            $targetDir = $target.Directory.FullName\n            if (-not $touchedDirs.ContainsKey($targetDir)) {\n                $touchedDirs[$targetDir] = $true\n            }\n        }\n        catch {\n            Write-Host \"[FAIL] $($target.FullName)\" -ForegroundColor Red\n            Write-Host \"  $($_.Exception.Message)\" -ForegroundColor DarkRed\n            $failed++\n        }\n    }\n\n    $summary += [pscustomobject]@{\n        Name     = $spec.Name\n        Updated  = $updated\n        Failed   = $failed\n        Skipped  = 0\n        Total    = @($targets).Count\n    }\n}\n\nWrite-Host \"&#96;n=== Summary ===\" -ForegroundColor Cyan\nforeach ($item in $summary) {\n    Write-Host (\"{0,-22} Updated: {1,3}  Failed: {2,3}  Total: {3,3}\" -f $item.Name, $item.Updated, $item.Failed, $item.Total)\n}\n\nif (($summary | Measure-Object -Property Failed -Sum).Sum -gt 0) {\n    Write-Host \"Completed with errors.\" -ForegroundColor Yellow\n    exit 1\n}\n\nWrite-Host \"All batch files refreshed successfully.\" -ForegroundColor Green\n\n# Deploy config files to projectroot\\.config\\\nWrite-Host \"&#96;n=== Deploying config files to .config\\ ===\" -ForegroundColor Magenta\nforeach ($asset in $configAssets) {\n    $targetPath = Join-Path -Path $projectConfigDir -ChildPath $asset.Name\n    try {\n        Copy-Item -Path $asset.Source -Destination $targetPath -Force\n        Write-Host \"[OK] $targetPath\" -ForegroundColor Green\n    }\n    catch {\n        Write-Host \"[FAIL] $targetPath\" -ForegroundColor Red\n        Write-Host \"  $($_.Exception.Message)\" -ForegroundColor DarkRed\n        exit 1\n    }\n}\n\nWrite-Host \"Config files deployed successfully.\" -ForegroundColor Green",
        "signatures": {},
        "detailedLines": [
          {
            "text": "            $updated++",
            "lineNumber": 113
          },
          {
            "lineNumber": 114
          },
          {
            "text": "            $targetDir = $target.Directory.FullName",
            "lineNumber": 115
          },
          {
            "text": "            if (-not $touchedDirs.ContainsKey($targetDir)) {",
            "lineNumber": 116
          },
          {
            "text": "                $touchedDirs[$targetDir] = $true",
            "lineNumber": 117
          },
          {
            "text": "            }",
            "lineNumber": 118
          },
          {
            "text": "        }",
            "lineNumber": 119
          },
          {
            "text": "        catch {",
            "lineNumber": 120
          },
          {
            "text": "            Write-Host \"[FAIL] $($target.FullName)\" -ForegroundColor Red",
            "lineNumber": 121
          },
          {
            "text": "            Write-Host \"  $($_.Exception.Message)\" -ForegroundColor DarkRed",
            "lineNumber": 122
          },
          {
            "text": "            $failed++",
            "lineNumber": 123
          },
          {
            "text": "        }",
            "lineNumber": 124
          },
          {
            "text": "    }",
            "lineNumber": 125
          },
          {
            "lineNumber": 126
          },
          {
            "text": "    $summary += [pscustomobject]@{",
            "lineNumber": 127
          },
          {
            "text": "        Name     = $spec.Name",
            "lineNumber": 128
          },
          {
            "text": "        Updated  = $updated",
            "lineNumber": 129
          },
          {
            "text": "        Failed   = $failed",
            "lineNumber": 130
          },
          {
            "text": "        Skipped  = 0",
            "lineNumber": 131
          },
          {
            "text": "        Total    = @($targets).Count",
            "lineNumber": 132
          },
          {
            "text": "    }",
            "lineNumber": 133
          },
          {
            "text": "}",
            "lineNumber": 134
          },
          {
            "lineNumber": 135
          },
          {
            "text": "Write-Host \"&#96;n=== Summary ===\" -ForegroundColor Cyan",
            "lineNumber": 136
          },
          {
            "text": "foreach ($item in $summary) {",
            "lineNumber": 137
          },
          {
            "text": "    Write-Host (\"{0,-22} Updated: {1,3}  Failed: {2,3}  Total: {3,3}\" -f $item.Name, $item.Updated, $item.Failed, $item.Total)",
            "lineNumber": 138
          },
          {
            "text": "}",
            "lineNumber": 139
          },
          {
            "lineNumber": 140
          },
          {
            "text": "if (($summary | Measure-Object -Property Failed -Sum).Sum -gt 0) {",
            "lineNumber": 141
          },
          {
            "text": "    Write-Host \"Completed with errors.\" -ForegroundColor Yellow",
            "lineNumber": 142
          },
          {
            "text": "    exit 1",
            "lineNumber": 143
          },
          {
            "text": "}",
            "lineNumber": 144
          },
          {
            "lineNumber": 145
          },
          {
            "text": "Write-Host \"All batch files refreshed successfully.\" -ForegroundColor Green",
            "lineNumber": 146
          },
          {
            "lineNumber": 147
          },
          {
            "text": "# Deploy config files to projectroot\\.config\\",
            "lineNumber": 148
          },
          {
            "text": "Write-Host \"&#96;n=== Deploying config files to .config\\ ===\" -ForegroundColor Magenta",
            "lineNumber": 149
          },
          {
            "text": "foreach ($asset in $configAssets) {",
            "lineNumber": 150
          },
          {
            "text": "    $targetPath = Join-Path -Path $projectConfigDir -ChildPath $asset.Name",
            "lineNumber": 151
          },
          {
            "text": "    try {",
            "lineNumber": 152
          },
          {
            "text": "        Copy-Item -Path $asset.Source -Destination $targetPath -Force",
            "lineNumber": 153
          },
          {
            "text": "        Write-Host \"[OK] $targetPath\" -ForegroundColor Green",
            "lineNumber": 154
          },
          {
            "text": "    }",
            "lineNumber": 155
          },
          {
            "text": "    catch {",
            "lineNumber": 156
          },
          {
            "text": "        Write-Host \"[FAIL] $targetPath\" -ForegroundColor Red",
            "lineNumber": 157
          },
          {
            "text": "        Write-Host \"  $($_.Exception.Message)\" -ForegroundColor DarkRed",
            "lineNumber": 158
          },
          {
            "text": "        exit 1",
            "lineNumber": 159
          },
          {
            "text": "    }",
            "lineNumber": 160
          },
          {
            "text": "}",
            "lineNumber": 161
          },
          {
            "lineNumber": 162
          },
          {
            "text": "Write-Host \"Config files deployed successfully.\" -ForegroundColor Green",
            "lineNumber": 163
          }
        ]
      },
      "score": 0.2950340509414673
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\zip_sequences.py",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 102
          }
        },
        "contents": "#!/usr/bin/env python3\n\"\"\"Maintain zipped render sequences for Git hooks.\n\nDefault mode scans &#96;Renders/&#96;, produces ZIP archives under &#96;Renders/_zipped/&#96;,\nand stages any updated archives so commits only track compact files. Switch to\n&#96;--mode expand&#96; to inflate the tracked archives back into the ignored working\ndirectories after checkouts or pulls.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport os\nimport platform\nimport shutil\nimport subprocess\nimport sys\nimport tempfile\nimport time\nimport traceback\nfrom concurrent.futures import ThreadPoolExecutor, as_completed\nfrom pathlib import Path\nfrom typing import Iterator, Sequence\n\n# Try to import psutil for cross-platform RAM detection\ntry:\n    import psutil\n    HAS_PSUTIL = True\nexcept ImportError:\n    HAS_PSUTIL = False\n    # For Windows fallback\n    if platform.system() == \"Windows\":\n        try:\n            import ctypes\n            HAS_CTYPES = True\n        except ImportError:\n            HAS_CTYPES = False\n    else:\n        HAS_CTYPES = False\n\n\nRENDER_ROOT = Path(\"Renders\")\nARCHIVE_ROOT = RENDER_ROOT / \"_zipped\"\nSEQUENCE_EXTENSIONS = {\n    \".png\",\n    \".jpg\",\n    \".jpeg\",\n    \".tif\",\n    \".tiff\",\n    \".exr\",\n}\nSTATE_SUFFIX = \".meta.json\"\nDEFAULT_CONFIG = {\n    \"zipper\": \"7z\",\n    \"compression\": 9,\n    \"compressionMethod\": \"LZMA2\",  # Compression method: LZMA2 (multi-threaded), PPMd (single-threaded), BZip2, Deflate\n    \"dailyFormat\": \"daily_YYMMDD\",\n    \"Max7zInst\": 0,  # Maximum concurrent 7z instances (0 = auto-calculate)\n}\n\n\ndef log(mode: str, message: str, *, verbose_only: bool = False, verbose: bool = False) -&gt; None:\n    if verbose_only and not verbose:\n        return\n    print(f\"[{mode}] {message}\", flush=True)\n\n\ndef load_config() -&gt; dict:\n    # First try to load from project's .config folder (current working directory)\n    # Then fall back to ProjectStructure repo config (next to zip_sequences.py)\n    ",
        "signatures": {},
        "detailedLines": [
          {
            "text": "#!/usr/bin/env python3",
            "lineNumber": 1
          },
          {
            "text": "\"\"\"Maintain zipped render sequences for Git hooks.",
            "lineNumber": 2
          },
          {
            "lineNumber": 3
          },
          {
            "text": "Default mode scans &#96;Renders/&#96;, produces ZIP archives under &#96;Renders/_zipped/&#96;,",
            "lineNumber": 4
          },
          {
            "text": "and stages any updated archives so commits only track compact files. Switch to",
            "lineNumber": 5
          },
          {
            "text": "&#96;--mode expand&#96; to inflate the tracked archives back into the ignored working",
            "lineNumber": 6
          },
          {
            "text": "directories after checkouts or pulls.",
            "lineNumber": 7
          },
          {
            "text": "\"\"\"",
            "lineNumber": 8
          },
          {
            "lineNumber": 9
          },
          {
            "text": "from __future__ import annotations",
            "lineNumber": 10
          },
          {
            "lineNumber": 11
          },
          {
            "text": "import argparse",
            "lineNumber": 12
          },
          {
            "text": "import json",
            "lineNumber": 13
          },
          {
            "text": "import os",
            "lineNumber": 14
          },
          {
            "text": "import platform",
            "lineNumber": 15
          },
          {
            "text": "import shutil",
            "lineNumber": 16
          },
          {
            "text": "import subprocess",
            "lineNumber": 17
          },
          {
            "text": "import sys",
            "lineNumber": 18
          },
          {
            "text": "import tempfile",
            "lineNumber": 19
          },
          {
            "text": "import time",
            "lineNumber": 20
          },
          {
            "text": "import traceback",
            "lineNumber": 21
          },
          {
            "text": "from concurrent.futures import ThreadPoolExecutor, as_completed",
            "lineNumber": 22
          },
          {
            "text": "from pathlib import Path",
            "lineNumber": 23
          },
          {
            "text": "from typing import Iterator, Sequence",
            "lineNumber": 24
          },
          {
            "lineNumber": 25
          },
          {
            "text": "# Try to import psutil for cross-platform RAM detection",
            "lineNumber": 26
          },
          {
            "text": "try:",
            "lineNumber": 27
          },
          {
            "text": "    import psutil",
            "lineNumber": 28
          },
          {
            "text": "    HAS_PSUTIL = True",
            "lineNumber": 29
          },
          {
            "text": "except ImportError:",
            "lineNumber": 30
          },
          {
            "text": "    HAS_PSUTIL = False",
            "lineNumber": 31
          },
          {
            "text": "    # For Windows fallback",
            "lineNumber": 32
          },
          {
            "text": "    if platform.system() == \"Windows\":",
            "lineNumber": 33
          },
          {
            "text": "        try:",
            "lineNumber": 34
          },
          {
            "text": "            import ctypes",
            "lineNumber": 35
          },
          {
            "text": "            HAS_CTYPES = True",
            "lineNumber": 36
          },
          {
            "text": "        except ImportError:",
            "lineNumber": 37
          },
          {
            "text": "            HAS_CTYPES = False",
            "lineNumber": 38
          },
          {
            "text": "    else:",
            "lineNumber": 39
          },
          {
            "text": "        HAS_CTYPES = False",
            "lineNumber": 40
          },
          {
            "lineNumber": 41
          },
          {
            "lineNumber": 42
          },
          {
            "text": "RENDER_ROOT = Path(\"Renders\")",
            "lineNumber": 43
          },
          {
            "text": "ARCHIVE_ROOT = RENDER_ROOT / \"_zipped\"",
            "lineNumber": 44
          },
          {
            "text": "SEQUENCE_EXTENSIONS = {",
            "lineNumber": 45
          },
          {
            "text": "    \".png\",",
            "lineNumber": 46
          },
          {
            "text": "    \".jpg\",",
            "lineNumber": 47
          },
          {
            "text": "    \".jpeg\",",
            "lineNumber": 48
          },
          {
            "text": "    \".tif\",",
            "lineNumber": 49
          },
          {
            "text": "    \".tiff\",",
            "lineNumber": 50
          },
          {
            "text": "    \".exr\",",
            "lineNumber": 51
          },
          {
            "text": "}",
            "lineNumber": 52
          },
          {
            "text": "STATE_SUFFIX = \".meta.json\"",
            "lineNumber": 53
          },
          {
            "text": "DEFAULT_CONFIG = {",
            "lineNumber": 54
          },
          {
            "text": "    \"zipper\": \"7z\",",
            "lineNumber": 55
          },
          {
            "text": "    \"compression\": 9,",
            "lineNumber": 56
          },
          {
            "text": "    \"compressionMethod\": \"LZMA2\",  # Compression method: LZMA2 (multi-threaded), PPMd (single-threaded), BZip2, Deflate",
            "lineNumber": 57
          },
          {
            "text": "    \"dailyFormat\": \"daily_YYMMDD\",",
            "lineNumber": 58
          },
          {
            "text": "    \"Max7zInst\": 0,  # Maximum concurrent 7z instances (0 = auto-calculate)",
            "lineNumber": 59
          },
          {
            "text": "}",
            "lineNumber": 60
          },
          {
            "lineNumber": 61
          },
          {
            "lineNumber": 62
          },
          {
            "text": "def log(mode: str, message: str, *, verbose_only: bool = False, verbose: bool = False) -&gt; None:",
            "lineNumber": 63,
            "isSignature": true
          },
          {
            "text": "    if verbose_only and not verbose:",
            "lineNumber": 64
          },
          {
            "text": "        return",
            "lineNumber": 65
          },
          {
            "text": "    print(f\"[{mode}] {message}\", flush=True)",
            "lineNumber": 66,
            "isSignature": true
          },
          {
            "lineNumber": 67
          },
          {
            "lineNumber": 68
          },
          {
            "text": "def load_config() -&gt; dict:",
            "lineNumber": 69,
            "isSignature": true
          },
          {
            "text": "    # First try to load from project's .config folder (current working directory)",
            "lineNumber": 70,
            "isSignature": true
          },
          {
            "text": "    # Then fall back to ProjectStructure repo config (next to zip_sequences.py)",
            "lineNumber": 71,
            "isSignature": true
          },
          {
            "text": "    ",
            "lineNumber": 72
          }
        ]
      },
      "score": 0.29424139857292175
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\UpgradeToGitProj.bat",
        "range": {
          "startPosition": {
            "line": 58
          },
          "endPosition": {
            "line": 126,
            "column": 4
          }
        },
        "contents": "for %%F in (ConfigLoader.ps1 config.json) do (\n  if exist \"%scriptDir%%%F\" (\n    if \"%DRY%\"==\"1\" (\n      echo [DRY] copy \"%scriptDir%%%F\" \"%rendersDir%\\%%F\"\n    ) else (\n      copy /Y \"%scriptDir%%%F\" \"%rendersDir%\\%%F\" &gt;nul\n    )\n  ) else (\n    echo [WARN] Missing template: \"%scriptDir%%%F\"\n  )\n)\n\n:: -----------------------------\n:: Merge .gitignore and .gitattributes from templates\n:: -----------------------------\nset \"tplGitIgnore=%scriptDir%components\\gitignore\"\nset \"dstGitIgnore=%projectDir%\\.gitignore\"\nset \"tplGitAttr=%scriptDir%components\\gitattributes\"\nset \"dstGitAttr=%projectDir%\\.gitattributes\"\n\ncall :MergeTemplate \"%tplGitIgnore%\" \"%dstGitIgnore%\"\ncall :MergeTemplate \"%tplGitAttr%\"   \"%dstGitAttr%\"\n\n:: -----------------------------\n:: Initialize git and Git LFS\n:: -----------------------------\nif not exist \"%projectDir%\\.git\" (\n  if \"%DRY%\"==\"1\" (\n    echo [DRY] git init\n  ) else (\n    pushd \"%projectDir%\" &gt;nul\n    git init\n    popd &gt;nul\n  )\n)\n\nif \"%DRY%\"==\"1\" (\n  echo [DRY] git lfs install\n) else (\n  pushd \"%projectDir%\" &gt;nul\n  git lfs install\n  popd &gt;nul\n)\n\n:: -----------------------------\n:: Collect seq outputs from daily_* into Renders\n:: -----------------------------\nset \"animDir=%projectDir%\\Blends\\animations\"\nset \"foundAny=0\"\nset \"foundSubmodules=0\"\n\nif exist \"%animDir%\" (\n  if \"%DRY%\"==\"1\" echo [DRY] Scanning animations dir: \"%animDir%\"\n  :: Detect submodules: first-level folders under animations that contain daily_*\n  for /d %%S in (\"%animDir%\\*\") do (\n    set \"name=%%~nS\"\n    set \"prefix=!name:~0,6!\"\n    if /I not \"!prefix!\"==\"daily_\" (\n      for /d %%D in (\"%%S\\daily_*\") do (\n        set \"foundSubmodules=1\"\n      )\n      if \"%DRY%\"==\"1\" (\n        if exist \"%%S\\daily_*\" echo [DRY] Detected submodule: \"%%~nS\"\n      )\n    )\n  )\n\n  if \"!foundSubmodules!\"==\"1\" (\n    ",
        "signatures": {},
        "detailedLines": [
          {
            "text": "for %%F in (ConfigLoader.ps1 config.json) do (",
            "lineNumber": 59
          },
          {
            "text": "  if exist \"%scriptDir%%%F\" (",
            "lineNumber": 60
          },
          {
            "text": "    if \"%DRY%\"==\"1\" (",
            "lineNumber": 61
          },
          {
            "text": "      echo [DRY] copy \"%scriptDir%%%F\" \"%rendersDir%\\%%F\"",
            "lineNumber": 62
          },
          {
            "text": "    ) else (",
            "lineNumber": 63
          },
          {
            "text": "      copy /Y \"%scriptDir%%%F\" \"%rendersDir%\\%%F\" &gt;nul",
            "lineNumber": 64
          },
          {
            "text": "    )",
            "lineNumber": 65
          },
          {
            "text": "  ) else (",
            "lineNumber": 66
          },
          {
            "text": "    echo [WARN] Missing template: \"%scriptDir%%%F\"",
            "lineNumber": 67
          },
          {
            "text": "  )",
            "lineNumber": 68
          },
          {
            "text": ")",
            "lineNumber": 69
          },
          {
            "lineNumber": 70
          },
          {
            "text": ":: -----------------------------",
            "lineNumber": 71
          },
          {
            "text": ":: Merge .gitignore and .gitattributes from templates",
            "lineNumber": 72
          },
          {
            "text": ":: -----------------------------",
            "lineNumber": 73
          },
          {
            "text": "set \"tplGitIgnore=%scriptDir%components\\gitignore\"",
            "lineNumber": 74
          },
          {
            "text": "set \"dstGitIgnore=%projectDir%\\.gitignore\"",
            "lineNumber": 75
          },
          {
            "text": "set \"tplGitAttr=%scriptDir%components\\gitattributes\"",
            "lineNumber": 76
          },
          {
            "text": "set \"dstGitAttr=%projectDir%\\.gitattributes\"",
            "lineNumber": 77
          },
          {
            "lineNumber": 78
          },
          {
            "text": "call :MergeTemplate \"%tplGitIgnore%\" \"%dstGitIgnore%\"",
            "lineNumber": 79
          },
          {
            "text": "call :MergeTemplate \"%tplGitAttr%\"   \"%dstGitAttr%\"",
            "lineNumber": 80
          },
          {
            "lineNumber": 81
          },
          {
            "text": ":: -----------------------------",
            "lineNumber": 82
          },
          {
            "text": ":: Initialize git and Git LFS",
            "lineNumber": 83
          },
          {
            "text": ":: -----------------------------",
            "lineNumber": 84
          },
          {
            "text": "if not exist \"%projectDir%\\.git\" (",
            "lineNumber": 85
          },
          {
            "text": "  if \"%DRY%\"==\"1\" (",
            "lineNumber": 86
          },
          {
            "text": "    echo [DRY] git init",
            "lineNumber": 87
          },
          {
            "text": "  ) else (",
            "lineNumber": 88
          },
          {
            "text": "    pushd \"%projectDir%\" &gt;nul",
            "lineNumber": 89
          },
          {
            "text": "    git init",
            "lineNumber": 90
          },
          {
            "text": "    popd &gt;nul",
            "lineNumber": 91
          },
          {
            "text": "  )",
            "lineNumber": 92
          },
          {
            "text": ")",
            "lineNumber": 93
          },
          {
            "lineNumber": 94
          },
          {
            "text": "if \"%DRY%\"==\"1\" (",
            "lineNumber": 95
          },
          {
            "text": "  echo [DRY] git lfs install",
            "lineNumber": 96
          },
          {
            "text": ") else (",
            "lineNumber": 97
          },
          {
            "text": "  pushd \"%projectDir%\" &gt;nul",
            "lineNumber": 98
          },
          {
            "text": "  git lfs install",
            "lineNumber": 99
          },
          {
            "text": "  popd &gt;nul",
            "lineNumber": 100
          },
          {
            "text": ")",
            "lineNumber": 101
          },
          {
            "lineNumber": 102
          },
          {
            "text": ":: -----------------------------",
            "lineNumber": 103
          },
          {
            "text": ":: Collect seq outputs from daily_* into Renders",
            "lineNumber": 104
          },
          {
            "text": ":: -----------------------------",
            "lineNumber": 105
          },
          {
            "text": "set \"animDir=%projectDir%\\Blends\\animations\"",
            "lineNumber": 106
          },
          {
            "text": "set \"foundAny=0\"",
            "lineNumber": 107
          },
          {
            "text": "set \"foundSubmodules=0\"",
            "lineNumber": 108
          },
          {
            "lineNumber": 109
          },
          {
            "text": "if exist \"%animDir%\" (",
            "lineNumber": 110
          },
          {
            "text": "  if \"%DRY%\"==\"1\" echo [DRY] Scanning animations dir: \"%animDir%\"",
            "lineNumber": 111
          },
          {
            "text": "  :: Detect submodules: first-level folders under animations that contain daily_*",
            "lineNumber": 112
          },
          {
            "text": "  for /d %%S in (\"%animDir%\\*\") do (",
            "lineNumber": 113
          },
          {
            "text": "    set \"name=%%~nS\"",
            "lineNumber": 114
          },
          {
            "text": "    set \"prefix=!name:~0,6!\"",
            "lineNumber": 115
          },
          {
            "text": "    if /I not \"!prefix!\"==\"daily_\" (",
            "lineNumber": 116
          },
          {
            "text": "      for /d %%D in (\"%%S\\daily_*\") do (",
            "lineNumber": 117
          },
          {
            "text": "        set \"foundSubmodules=1\"",
            "lineNumber": 118
          },
          {
            "text": "      )",
            "lineNumber": 119
          },
          {
            "text": "      if \"%DRY%\"==\"1\" (",
            "lineNumber": 120
          },
          {
            "text": "        if exist \"%%S\\daily_*\" echo [DRY] Detected submodule: \"%%~nS\"",
            "lineNumber": 121
          },
          {
            "text": "      )",
            "lineNumber": 122
          },
          {
            "text": "    )",
            "lineNumber": 123
          },
          {
            "text": "  )",
            "lineNumber": 124
          },
          {
            "lineNumber": 125
          },
          {
            "text": "  if \"!foundSubmodules!\"==\"1\" (",
            "lineNumber": 126
          },
          {
            "text": "    ",
            "lineNumber": 127
          }
        ]
      },
      "score": 0.27231526374816895
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\ConfigLoader.ps1",
        "range": {
          "startPosition": {
            "line": 318
          },
          "endPosition": {
            "line": 344
          }
        },
        "contents": "        # Deploy ZipSeqArchv.bat and UnzipSeqArchv.bat to \\Renders\n        Write-Host \"&#96;n=== Deploying ZipSeqArchv.bat and UnzipSeqArchv.bat to \\Renders ===\" -ForegroundColor Magenta\n        $rendersDir = Join-Path -Path $resolvedProject -ChildPath 'Renders'\n        if (-not (Test-Path -LiteralPath $rendersDir -PathType Container)) {\n            New-Item -Path $rendersDir -ItemType Directory -Force | Out-Null\n            Write-Host \"Created Renders directory: $rendersDir\" -ForegroundColor Cyan\n        }\n        $zipFiles = @(\n            @{ Name = 'ZipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'ZipSeqArchv.bat' },\n            @{ Name = 'UnzipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'UnzipSeqArchv.bat' }\n        )\n        foreach ($zipFile in $zipFiles) {\n            $targetPath = Join-Path -Path $rendersDir -ChildPath $zipFile.Name\n            try {\n                Copy-Item -Path $zipFile.Source -Destination $targetPath -Force\n                Write-Host \"[OK] $targetPath\" -ForegroundColor Green\n            }\n            catch {\n                Write-Host \"[FAIL] $targetPath\" -ForegroundColor Red\n                Write-Host \"  $($_.Exception.Message)\" -ForegroundColor DarkRed\n                exit 1\n            }\n        }\n\n        # Deploy .gitattributes and .gitignore to project root if they don't exist",
        "signatures": {},
        "detailedLines": [
          {
            "text": "        # Deploy ZipSeqArchv.bat and UnzipSeqArchv.bat to \\Renders",
            "lineNumber": 320
          },
          {
            "text": "        Write-Host \"&#96;n=== Deploying ZipSeqArchv.bat and UnzipSeqArchv.bat to \\Renders ===\" -ForegroundColor Magenta",
            "lineNumber": 321
          },
          {
            "text": "        $rendersDir = Join-Path -Path $resolvedProject -ChildPath 'Renders'",
            "lineNumber": 322
          },
          {
            "text": "        if (-not (Test-Path -LiteralPath $rendersDir -PathType Container)) {",
            "lineNumber": 323
          },
          {
            "text": "            New-Item -Path $rendersDir -ItemType Directory -Force | Out-Null",
            "lineNumber": 324
          },
          {
            "text": "            Write-Host \"Created Renders directory: $rendersDir\" -ForegroundColor Cyan",
            "lineNumber": 325
          },
          {
            "text": "        }",
            "lineNumber": 326
          },
          {
            "text": "        $zipFiles = @(",
            "lineNumber": 327
          },
          {
            "text": "            @{ Name = 'ZipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'ZipSeqArchv.bat' },",
            "lineNumber": 328
          },
          {
            "text": "            @{ Name = 'UnzipSeqArchv.bat'; Source = Join-Path -Path $structDir -ChildPath 'UnzipSeqArchv.bat' }",
            "lineNumber": 329
          },
          {
            "text": "        )",
            "lineNumber": 330
          },
          {
            "text": "        foreach ($zipFile in $zipFiles) {",
            "lineNumber": 331
          },
          {
            "text": "            $targetPath = Join-Path -Path $rendersDir -ChildPath $zipFile.Name",
            "lineNumber": 332
          },
          {
            "text": "            try {",
            "lineNumber": 333
          },
          {
            "text": "                Copy-Item -Path $zipFile.Source -Destination $targetPath -Force",
            "lineNumber": 334
          },
          {
            "text": "                Write-Host \"[OK] $targetPath\" -ForegroundColor Green",
            "lineNumber": 335
          },
          {
            "text": "            }",
            "lineNumber": 336
          },
          {
            "text": "            catch {",
            "lineNumber": 337
          },
          {
            "text": "                Write-Host \"[FAIL] $targetPath\" -ForegroundColor Red",
            "lineNumber": 338
          },
          {
            "text": "                Write-Host \"  $($_.Exception.Message)\" -ForegroundColor DarkRed",
            "lineNumber": 339
          },
          {
            "text": "                exit 1",
            "lineNumber": 340
          },
          {
            "text": "            }",
            "lineNumber": 341
          },
          {
            "text": "        }",
            "lineNumber": 342
          },
          {
            "lineNumber": 343
          },
          {
            "text": "        # Deploy .gitattributes and .gitignore to project root if they don't exist",
            "lineNumber": 344
          }
        ]
      },
      "score": 0.2674351930618286
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\UpgradeToGitProj.bat",
        "range": {
          "startPosition": {},
          "endPosition": {
            "line": 61,
            "column": 6
          }
        },
        "contents": "@echo off\nsetlocal EnableExtensions EnableDelayedExpansion\n\n:: UpgradeToGitProj.bat\n:: Run this inside an existing (pre-git) project root.\n:: - Merges .gitignore and .gitattributes from components/ templates\n:: - Initializes git and installs Git LFS\n:: - Creates Renders, copies helper scripts\n:: - Collects seq/ outputs from daily_* folders under Blends\\animations (with submodule support)\n\n:: -----------------------------\n:: Arguments\n:: -----------------------------\nset \"DRY=0\"\nif /I \"%~1\"==\"/dry-run\" set \"DRY=1\"\nif /I \"%~1\"==\"--dry-run\" set \"DRY=1\"\nif /I \"%~1\"==\"-n\" set \"DRY=1\"\nif /I \"%~1\"==\"/n\" set \"DRY=1\"\n\nset \"projectDir=%CD%\"\nset \"scriptDir=%~dp0\"\nset \"RUN_ID=%RANDOM%_%RANDOM%\"\nset \"DELETE_LIST=%TEMP%\\upg_delete_%RUN_ID%.lst\"\n\nsetlocal EnableDelayedExpansion\nset /a debugTotal=0\nset /a debugPlanned=0\nset /a debugMissing=0\n\necho ==============================================\necho UpgradeToGitProj in \"%projectDir%\"\nif \"%DRY%\"==\"1\" (echo Mode: DRY-RUN) else (echo Mode: APPLY)\necho ==============================================\n\n:: -----------------------------\n:: Ensure Renders exists and copy helper scripts\n:: -----------------------------\nset \"rendersDir=%projectDir%\\Renders\"\nif not exist \"%rendersDir%\" (\n  if \"%DRY%\"==\"1\" (\n    echo [DRY] mkdir \"%rendersDir%\"\n  ) else (\n    mkdir \"%rendersDir%\" &gt;nul 2&gt;&amp;1\n  )\n)\n\nfor %%F in (UpdateSequences.bat ZipSeqArchv.bat UnzipSeqArchv.bat) do (\n  if exist \"%scriptDir%%%F\" (\n    if \"%DRY%\"==\"1\" (\n      echo [DRY] copy \"%scriptDir%%%F\" \"%rendersDir%\\%%F\"\n    ) else (\n      copy /Y \"%scriptDir%%%F\" \"%rendersDir%\\%%F\" &gt;nul\n    )\n  ) else (\n    echo [WARN] Missing template: \"%scriptDir%%%F\"\n  )\n)\n\nfor %%F in (ConfigLoader.ps1 config.json) do (\n  if exist \"%scriptDir%%%F\" (\n    if \"%DRY%\"==\"1\" (\n      ",
        "signatures": {},
        "detailedLines": [
          {
            "text": "@echo off",
            "lineNumber": 1
          },
          {
            "text": "setlocal EnableExtensions EnableDelayedExpansion",
            "lineNumber": 2
          },
          {
            "lineNumber": 3
          },
          {
            "text": ":: UpgradeToGitProj.bat",
            "lineNumber": 4
          },
          {
            "text": ":: Run this inside an existing (pre-git) project root.",
            "lineNumber": 5
          },
          {
            "text": ":: - Merges .gitignore and .gitattributes from components/ templates",
            "lineNumber": 6
          },
          {
            "text": ":: - Initializes git and installs Git LFS",
            "lineNumber": 7
          },
          {
            "text": ":: - Creates Renders, copies helper scripts",
            "lineNumber": 8
          },
          {
            "text": ":: - Collects seq/ outputs from daily_* folders under Blends\\animations (with submodule support)",
            "lineNumber": 9
          },
          {
            "lineNumber": 10
          },
          {
            "text": ":: -----------------------------",
            "lineNumber": 11
          },
          {
            "text": ":: Arguments",
            "lineNumber": 12
          },
          {
            "text": ":: -----------------------------",
            "lineNumber": 13
          },
          {
            "text": "set \"DRY=0\"",
            "lineNumber": 14
          },
          {
            "text": "if /I \"%~1\"==\"/dry-run\" set \"DRY=1\"",
            "lineNumber": 15
          },
          {
            "text": "if /I \"%~1\"==\"--dry-run\" set \"DRY=1\"",
            "lineNumber": 16
          },
          {
            "text": "if /I \"%~1\"==\"-n\" set \"DRY=1\"",
            "lineNumber": 17
          },
          {
            "text": "if /I \"%~1\"==\"/n\" set \"DRY=1\"",
            "lineNumber": 18
          },
          {
            "lineNumber": 19
          },
          {
            "text": "set \"projectDir=%CD%\"",
            "lineNumber": 20
          },
          {
            "text": "set \"scriptDir=%~dp0\"",
            "lineNumber": 21
          },
          {
            "text": "set \"RUN_ID=%RANDOM%_%RANDOM%\"",
            "lineNumber": 22
          },
          {
            "text": "set \"DELETE_LIST=%TEMP%\\upg_delete_%RUN_ID%.lst\"",
            "lineNumber": 23
          },
          {
            "lineNumber": 24
          },
          {
            "text": "setlocal EnableDelayedExpansion",
            "lineNumber": 25
          },
          {
            "text": "set /a debugTotal=0",
            "lineNumber": 26
          },
          {
            "text": "set /a debugPlanned=0",
            "lineNumber": 27
          },
          {
            "text": "set /a debugMissing=0",
            "lineNumber": 28
          },
          {
            "lineNumber": 29
          },
          {
            "text": "echo ==============================================",
            "lineNumber": 30
          },
          {
            "text": "echo UpgradeToGitProj in \"%projectDir%\"",
            "lineNumber": 31
          },
          {
            "text": "if \"%DRY%\"==\"1\" (echo Mode: DRY-RUN) else (echo Mode: APPLY)",
            "lineNumber": 32
          },
          {
            "text": "echo ==============================================",
            "lineNumber": 33
          },
          {
            "lineNumber": 34
          },
          {
            "text": ":: -----------------------------",
            "lineNumber": 35
          },
          {
            "text": ":: Ensure Renders exists and copy helper scripts",
            "lineNumber": 36
          },
          {
            "text": ":: -----------------------------",
            "lineNumber": 37
          },
          {
            "text": "set \"rendersDir=%projectDir%\\Renders\"",
            "lineNumber": 38
          },
          {
            "text": "if not exist \"%rendersDir%\" (",
            "lineNumber": 39
          },
          {
            "text": "  if \"%DRY%\"==\"1\" (",
            "lineNumber": 40
          },
          {
            "text": "    echo [DRY] mkdir \"%rendersDir%\"",
            "lineNumber": 41
          },
          {
            "text": "  ) else (",
            "lineNumber": 42
          },
          {
            "text": "    mkdir \"%rendersDir%\" &gt;nul 2&gt;&amp;1",
            "lineNumber": 43
          },
          {
            "text": "  )",
            "lineNumber": 44
          },
          {
            "text": ")",
            "lineNumber": 45
          },
          {
            "lineNumber": 46
          },
          {
            "text": "for %%F in (UpdateSequences.bat ZipSeqArchv.bat UnzipSeqArchv.bat) do (",
            "lineNumber": 47
          },
          {
            "text": "  if exist \"%scriptDir%%%F\" (",
            "lineNumber": 48
          },
          {
            "text": "    if \"%DRY%\"==\"1\" (",
            "lineNumber": 49
          },
          {
            "text": "      echo [DRY] copy \"%scriptDir%%%F\" \"%rendersDir%\\%%F\"",
            "lineNumber": 50
          },
          {
            "text": "    ) else (",
            "lineNumber": 51
          },
          {
            "text": "      copy /Y \"%scriptDir%%%F\" \"%rendersDir%\\%%F\" &gt;nul",
            "lineNumber": 52
          },
          {
            "text": "    )",
            "lineNumber": 53
          },
          {
            "text": "  ) else (",
            "lineNumber": 54
          },
          {
            "text": "    echo [WARN] Missing template: \"%scriptDir%%%F\"",
            "lineNumber": 55
          },
          {
            "text": "  )",
            "lineNumber": 56
          },
          {
            "text": ")",
            "lineNumber": 57
          },
          {
            "lineNumber": 58
          },
          {
            "text": "for %%F in (ConfigLoader.ps1 config.json) do (",
            "lineNumber": 59
          },
          {
            "text": "  if exist \"%scriptDir%%%F\" (",
            "lineNumber": 60
          },
          {
            "text": "    if \"%DRY%\"==\"1\" (",
            "lineNumber": 61
          },
          {
            "text": "      ",
            "lineNumber": 62
          }
        ]
      },
      "score": 0.25528910756111145
    },
    {
      "codeBlock": {
        "relativeWorkspacePath": ".\\zip_sequences.py",
        "range": {
          "startPosition": {
            "line": 645,
            "column": 42
          },
          "endPosition": {
            "line": 661,
            "column": 63
          }
        },
        "contents": "def sequence_dir_for(zip_path: Path) -&gt; Path:\n    rel = zip_path.relative_to(ARCHIVE_ROOT)\n    # Remove the archive suffix (.7z or .zip) from the end\n    # Handle both .7z and .zip extensions\n    rel_str = str(rel)\n    if rel_str.endswith(\".7z\"):\n        rel_str = rel_str[:-3]\n    elif rel_str.endswith(\".zip\"):\n        rel_str = rel_str[:-4]\n    return RENDER_ROOT / rel_str\n\n\ndef state_path_for(zip_path: Path) -&gt; Path:\n    return zip_path.with_suffix(zip_path.suffix + STATE_SUFFIX)",
        "signatures": {},
        "detailedLines": [
          {
            "text": "def sequence_dir_for(zip_path: Path) -&gt; Path:",
            "lineNumber": 649,
            "isSignature": true
          },
          {
            "text": "    rel = zip_path.relative_to(ARCHIVE_ROOT)",
            "lineNumber": 650
          },
          {
            "text": "    # Remove the archive suffix (.7z or .zip) from the end",
            "lineNumber": 651
          },
          {
            "text": "    # Handle both .7z and .zip extensions",
            "lineNumber": 652
          },
          {
            "text": "    rel_str = str(rel)",
            "lineNumber": 653
          },
          {
            "text": "    if rel_str.endswith(\".7z\"):",
            "lineNumber": 654
          },
          {
            "text": "        rel_str = rel_str[:-3]",
            "lineNumber": 655
          },
          {
            "text": "    elif rel_str.endswith(\".zip\"):",
            "lineNumber": 656
          },
          {
            "text": "        rel_str = rel_str[:-4]",
            "lineNumber": 657
          },
          {
            "text": "    return RENDER_ROOT / rel_str",
            "lineNumber": 658,
            "isSignature": true
          },
          {
            "lineNumber": 659
          },
          {
            "lineNumber": 660
          },
          {
            "text": "def state_path_for(zip_path: Path) -&gt; Path:",
            "lineNumber": 661,
            "isSignature": true
          },
          {
            "text": "    return zip_path.with_suffix(zip_path.suffix + STATE_SUFFIX)",
            "lineNumber": 662,
            "isSignature": true
          }
        ]
      },
      "score": 0.25385740399360657
    }
  ]
}
```
Status: **completed**


</details>
</tool-use>

---



---


Checking where the config should be. The error shows it's looking at `A:\1 Amazon_Active_Projects\.config\config.json`, but it may need to be at the project level. Reviewing `GetStructDir.ps1` to confirm the expected location:


---

<tool-use data-tool-type="read" data-tool-name="read_file_v2">
<details><summary>Tool use: **read_file_v2** • Read file: A:\1 Amazon_Active_Projects\3 ProjectStructure\GetStructDir.ps1</summary>

</details>
</tool-use>

---



---


The script searches up to the root, but the config may be at the project level. Updating it to check the project level first (one level up from the current directory) before searching further:


---

<tool-use data-tool-type="unknown" data-tool-name="edit_file_v2">
<details>
<summary>Tool use: **edit_file_v2**</summary>

Additional data:

```json
{
  "codeblockId": "c578c6f1-7f64-43b0-a465-0bddff7e8db8"
}
```
Status: **completed**


</details>
</tool-use>

---



---


The script searches up correctly, but the config may not exist. Adding debug output to show where it's searching. Also checking if the config should be relative to the script location rather than the current directory:


---

<tool-use data-tool-type="read" data-tool-name="read_file_v2">
<details><summary>Tool use: **read_file_v2** • Read file: A:\1 Amazon_Active_Projects\3 ProjectStructure\config.json</summary>

</details>
</tool-use>

---



---


The script searches up correctly, but the config may be missing. Updating it to check the project level (one level up from the current directory) first, and improving error handling:


---

<tool-use data-tool-type="unknown" data-tool-name="edit_file_v2">
<details>
<summary>Tool use: **edit_file_v2**</summary>

Additional data:

```json
{
  "codeblockId": "4f4fe0b5-fb29-4604-baf0-9cef77200f18"
}
```
Status: **completed**


</details>
</tool-use>

---



---


The script should work from any directory. The issue may be that the config doesn't exist at the searched location. Verifying the search logic and ensuring it checks the project level correctly:


---

<tool-use data-tool-type="read" data-tool-name="read_file_v2">
<details><summary>Tool use: **read_file_v2** • Read file: A:\1 Amazon_Active_Projects\3 ProjectStructure\UpdateSequences.bat</summary>

</details>
</tool-use>

---



---


Prioritizing the project level (one directory up from the current directory) before the full search:


---

<tool-use data-tool-type="unknown" data-tool-name="edit_file_v2">
<details>
<summary>Tool use: **edit_file_v2**</summary>

Additional data:

```json
{
  "codeblockId": "eb74eaac-8006-4b03-a082-60d6ea4ab567"
}
```
Status: **completed**


</details>
</tool-use>

---



---


Updated the script to check the project level (one directory up from the current directory) first, before searching further up. When running from `Renders`, it checks `251203_ADTA_December_2025\.config\config.json` first, then searches up if not found.

The script now:
1. Checks the project level (one directory up from current) first
2. If not found, searches up from the current directory
3. If still not found, searches from the script location
4. Falls back to the original logic if still not found

This should resolve the issue when running from different directory levels.

---

_**User**_

It's renaming the submodules based off the submodule name. It should see that there are no sequences in the submodule, only subfolders in each submodule.

  Running PowerShell update script...
[RENAME]|A:\1 Amazon_Active_Projects\251203_ADTA_December_2025\Renders\AvAisleTransition|AvAisleTransition|checked=3896|renamed=3896|collisions=0|errors=0
[RENAME]|A:\1 Amazon_Active_Projects\251203_ADTA_December_2025\Renders\AvPackperAisle|AvPackperAisle|checked=2190|renamed=2190|collisions=0|errors=0

---

_**Agent (model default, mode Agent)**_



---

