openvibers/source.openvibe.games Commits

Recent phases

CO Copilot committed 29 Jun 2026 · e77b5b7c9d · 13 files, +886 −0


Changes

ddiff --git a/artifacts/windows-workflow-debug/run-28349239859-artifacts/file-list.txt b/artifacts/windows-workflow-debug/run-28349239859-artifacts/file-list.txt
nnew file mode 100644
iindex 0000000..a34d463
---- /dev/null
++++ b/artifacts/windows-workflow-debug/run-28349239859-artifacts/file-list.txt
@@@ -0,0 +1,11 @@
++/home/workstation/src/openvibe-source/artifacts/windows-workflow-debug/run-28349239859-artifacts/file-list.txt
++/home/workstation/src/openvibe-source/artifacts/windows-workflow-debug/run-28349239859-artifacts/full-run.log
++/home/workstation/src/openvibe-source/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-git-clone-default.log
++/home/workstation/src/openvibe-source/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-git-clone-mp.log
++/home/workstation/src/openvibe-source/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-source-sdk-2013.log
++/home/workstation/src/openvibe-source/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/dll-search.txt
++/home/workstation/src/openvibe-source/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/engine-before-build.txt
++/home/workstation/src/openvibe-source/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/no-patched-dlls.txt
++/home/workstation/src/openvibe-source/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/project-search.txt
++/home/workstation/src/openvibe-source/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/repo-root-before-build.txt
++/home/workstation/src/openvibe-source/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/tree.txt
ddiff --git a/artifacts/windows-workflow-debug/run-28349239859-artifacts/full-run.log b/artifacts/windows-workflow-debug/run-28349239859-artifacts/full-run.log
nnew file mode 100644
iindex 0000000..e69de29
ddiff --git a/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-git-clone-default.log b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-git-clone-default.log
nnew file mode 100644
iindex 0000000..3dacfc4
BBinary files /dev/null and b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-git-clone-default.log differ
ddiff --git a/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-git-clone-mp.log b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-git-clone-mp.log
nnew file mode 100644
iindex 0000000..3dacfc4
BBinary files /dev/null and b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-git-clone-mp.log differ
ddiff --git a/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-source-sdk-2013.log b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-source-sdk-2013.log
nnew file mode 100644
iindex 0000000..ca04b89
---- /dev/null
++++ b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/bootstrap-source-sdk-2013.log
@@@ -0,0 +1,111 @@
++[openvibe-sdk-bootstrap] root=D:\a\OpenVibe.Games\OpenVibe.Games
++[openvibe-sdk-bootstrap] sdk=D:\a\OpenVibe.Games\OpenVibe.Games\engine\source-sdk-2013
++[openvibe-sdk-bootstrap] logdir=D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-build-debug
++[openvibe-sdk-bootstrap] cloning Valve Source SDK 2013 branch mp
++[openvibe-sdk-bootstrap] git
++usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
++ [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
++ [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--no-lazy-fetch]
++ [--no-optional-locks] [--no-advice] [--bare] [--git-dir=<path>]
++ [--work-tree=<path>] [--namespace=<name>] [--config-env=<name>=<envvar>]
++ <command> [<args>]
++
++These are common Git commands used in various situations:
++
++start a working area (see also: git help tutorial)
++ clone Clone a repository into a new directory
++ init Create an empty Git repository or reinitialize an existing one
++
++work on the current change (see also: git help everyday)
++ add Add file contents to the index
++ mv Move or rename a file, a directory, or a symlink
++ restore Restore working tree files
++ rm Remove files from the working tree and from the index
++
++examine the history and state (see also: git help revisions)
++ bisect Use binary search to find the commit that introduced a bug
++ diff Show changes between commits, commit and working tree, etc
++ grep Print lines matching a pattern
++ log Show commit logs
++ show Show various types of objects
++ status Show the working tree status
++
++grow, mark and tweak your common history
++ backfill Download missing objects in a partial clone
++ branch List, create, or delete branches
++ commit Record changes to the repository
++ history EXPERIMENTAL: Rewrite history
++ merge Join two or more development histories together
++ rebase Reapply commits on top of another base tip
++ reset Set `HEAD` or the index to a known state
++ switch Switch branches
++ tag Create, list, delete or verify tags
++
++collaborate (see also: git help workflows)
++ fetch Download objects and refs from another repository
++ pull Fetch from and integrate with another repository or a local branch
++ push Update remote refs along with associated objects
++
++'git help -a' and 'git help -g' list available subcommands and some
++concept guides. See 'git help <command>' or 'git help <concept>'
++to read about a specific subcommand or concept.
++See 'git help git' for an overview of the system.
++[openvibe-sdk-bootstrap] mp branch clone failed: git failed with exit code 1. See D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-build-debug\bootstrap-git-clone-mp.log
++[openvibe-sdk-bootstrap] falling back to default branch clone
++[openvibe-sdk-bootstrap] git
++usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
++ [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
++ [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--no-lazy-fetch]
++ [--no-optional-locks] [--no-advice] [--bare] [--git-dir=<path>]
++ [--work-tree=<path>] [--namespace=<name>] [--config-env=<name>=<envvar>]
++ <command> [<args>]
++
++These are common Git commands used in various situations:
++
++start a working area (see also: git help tutorial)
++ clone Clone a repository into a new directory
++ init Create an empty Git repository or reinitialize an existing one
++
++work on the current change (see also: git help everyday)
++ add Add file contents to the index
++ mv Move or rename a file, a directory, or a symlink
++ restore Restore working tree files
++ rm Remove files from the working tree and from the index
++
++examine the history and state (see also: git help revisions)
++ bisect Use binary search to find the commit that introduced a bug
++ diff Show changes between commits, commit and working tree, etc
++ grep Print lines matching a pattern
++ log Show commit logs
++ show Show various types of objects
++ status Show the working tree status
++
++grow, mark and tweak your common history
++ backfill Download missing objects in a partial clone
++ branch List, create, or delete branches
++ commit Record changes to the repository
++ history EXPERIMENTAL: Rewrite history
++ merge Join two or more development histories together
++ rebase Reapply commits on top of another base tip
++ reset Set `HEAD` or the index to a known state
++ switch Switch branches
++ tag Create, list, delete or verify tags
++
++collaborate (see also: git help workflows)
++ fetch Download objects and refs from another repository
++ pull Fetch from and integrate with another repository or a local branch
++ push Update remote refs along with associated objects
++
++'git help -a' and 'git help -g' list available subcommands and some
++concept guides. See 'git help <command>' or 'git help <concept>'
++to read about a specific subcommand or concept.
++See 'git help git' for an overview of the system.
++git failed with exit code 1. See
++D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-build-debug\bootstrap-git-clone-default.log
++At D:\a\OpenVibe.Games\OpenVibe.Games\tools\bootstrap-source-sdk-2013-windows.ps1:18 char:30
+++ ... DE -ne 0) { throw "git $args failed with exit code $LASTEXITCODE. See ...
+++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ + CategoryInfo : OperationStopped: (git failed wit...one-default.log:String) [], RuntimeException
++ + FullyQualifiedErrorId : git failed with exit code 1. See D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-b
++ uild-debug\bootstrap-git-clone-default.log
++
ddiff --git a/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/dll-search.txt b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/dll-search.txt
nnew file mode 100644
iindex 0000000..9ebf628
---- /dev/null
++++ b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/dll-search.txt
@@@ -0,0 +1,18 @@
++=== dll search ===
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-workflow-debug\run-28349028341-artifacts\openvibe-windows-dlls\client.dll
++Length : 5591976
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-workflow-debug\run-28349028341-artifacts\openvibe-windows-dlls\server.dll
++Length : 7183272
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\bin\client.dll
++Length : 5591976
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\bin\server.dll
++Length : 7183272
++LastWriteTime : 6/29/2026 4:46:06 AM
++
ddiff --git a/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/engine-before-build.txt b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/engine-before-build.txt
nnew file mode 100644
iindex 0000000..d842b1a
---- /dev/null
++++ b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/engine-before-build.txt
@@@ -0,0 +1,5 @@
++
++Mode Length Name
++---- ------ ----
++d---- openvibe-js-runtime
++
ddiff --git a/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/no-patched-dlls.txt b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/no-patched-dlls.txt
nnew file mode 100644
iindex 0000000..9aa4d60
---- /dev/null
++++ b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/no-patched-dlls.txt
@@@ -0,0 +1 @@
++No patched OpenVibe DLLs staged. Check build logs.
ddiff --git a/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/project-search.txt b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/project-search.txt
nnew file mode 100644
iindex 0000000..114be5d
---- /dev/null
++++ b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/project-search.txt
@@@ -0,0 +1,234 @@
++=== project/log search ===
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-build-debug\bootstrap-git-clone-default.log
++Length : 4676
++LastWriteTime : 6/29/2026 4:46:15 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-build-debug\bootstrap-git-clone-mp.log
++Length : 4676
++LastWriteTime : 6/29/2026 4:46:15 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-build-debug\bootstrap-source-sdk-2013.log
++Length : 5963
++LastWriteTime : 6/29/2026 4:46:15 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-workflow-debug\run-28349028341-artifacts\openvibe-windows-build-debug\build-sdk-windows.log
++Length : 1032
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-workflow-debug\run-28349142948-artifacts\openvibe-windows-build-debug\bootstrap-source-sdk-2013.log
++Length : 704
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-workflow-debug\run-28349142948-artifacts\full-run.log
++Length : 0
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-workflow-debug\run-28348889576-failed.log
++Length : 0
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-workflow-debug\run-28348889576-full.log
++Length : 0
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-workflow-debug\run-28349028341-failed.log
++Length : 0
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\artifacts\windows-workflow-debug\run-28349028341.log
++Length : 0
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628000.log
++Length : 596
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628001.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628002.log
++Length : 596
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628003.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628004.log
++Length : 596
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628005.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628006.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628007.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628008.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628009.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628010.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628011.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628012.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628013.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628014.log
++Length : 596
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628015.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628016.log
++Length : 596
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628017.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628018.log
++Length : 596
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628019.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628020.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628021.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628022.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628023.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628024.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628025.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628026.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628027.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628028.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628029.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628030.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628031.log
++Length : 596
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628032.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628033.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628034.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628035.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628036.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628037.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628038.log
++Length : 596
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628039.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628040.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628041.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628042.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628043.log
++Length : 538
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628044.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628045.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628046.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
++FullName : D:\a\OpenVibe.Games\OpenVibe.Games\game\openvibe.games\logs\l0628047.log
++Length : 4175
++LastWriteTime : 6/29/2026 4:46:06 AM
++
ddiff --git a/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/repo-root-before-build.txt b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/repo-root-before-build.txt
nnew file mode 100644
iindex 0000000..ead7580
---- /dev/null
++++ b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/repo-root-before-build.txt
@@@ -0,0 +1,25 @@
++
++Mode Length Name
++---- ------ ----
++d--h- .git
++d---- .github
++d---- .tmp
++d---- artifacts
++d---- backend
++d---- docs
++d---- engine
++d---- game
++d---- hammer
++d---- infra
++d---- launcher
++d---- sdk
++d---- servers
++d---- tools
++-a--- 983 .gitignore
++-a--- 3758 DEPLOYMENT_STATUS.md
++-a--- 1099 LICENSE
++-a--- 12759 LINUX_SETUP.md
++-a--- 4075 PROJECT_INDEX.md
++-a--- 3826 QUICK_REFERENCE.md
++-a--- 8794 README.md
++
ddiff --git a/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/tree.txt b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/tree.txt
nnew file mode 100644
iindex 0000000..adaa7c2
---- /dev/null
++++ b/artifacts/windows-workflow-debug/run-28349239859-artifacts/openvibe-windows-build-debug/tree.txt
@@@ -0,0 +1,29 @@
++=== repo ===
++
++ Directory: D:\a\OpenVibe.Games\OpenVibe.Games
++
++Mode LastWriteTime Length Name
++---- ------------- ------ ----
++d---- 6/29/2026 4:46 AM _deps
++d--h- 6/29/2026 4:46 AM .git
++d---- 6/29/2026 4:46 AM .github
++d---- 6/29/2026 4:46 AM .tmp
++d---- 6/29/2026 4:46 AM artifacts
++d---- 6/29/2026 4:46 AM backend
++d---- 6/29/2026 4:46 AM docs
++d---- 6/29/2026 4:46 AM engine
++d---- 6/29/2026 4:46 AM game
++d---- 6/29/2026 4:46 AM hammer
++d---- 6/29/2026 4:46 AM infra
++d---- 6/29/2026 4:46 AM launcher
++d---- 6/29/2026 4:46 AM sdk
++d---- 6/29/2026 4:46 AM servers
++d---- 6/29/2026 4:46 AM tools
++-a--- 6/29/2026 4:46 AM 983 .gitignore
++-a--- 6/29/2026 4:46 AM 3758 DEPLOYMENT_STATUS.md
++-a--- 6/29/2026 4:46 AM 1099 LICENSE
++-a--- 6/29/2026 4:46 AM 12759 LINUX_SETUP.md
++-a--- 6/29/2026 4:46 AM 4075 PROJECT_INDEX.md
++-a--- 6/29/2026 4:46 AM 3826 QUICK_REFERENCE.md
++-a--- 6/29/2026 4:46 AM 8794 README.md
++
ddiff --git a/tools/fix-windows-bootstrap-download-master-and-rerun.sh b/tools/fix-windows-bootstrap-download-master-and-rerun.sh
nnew file mode 100755
iindex 0000000..e447166
---- /dev/null
++++ b/tools/fix-windows-bootstrap-download-master-and-rerun.sh
@@@ -0,0 +1,247 @@
++#!/usr/bin/env bash
++set -euo pipefail
++
++ROOT="${OPENVIBE_ROOT:-$HOME/src/openvibe-source}"
++cd "$ROOT"
++
++BRANCH="$(git rev-parse --abbrev-ref HEAD)"
++REPO="${OPENVIBE_REPO:-$(git remote get-url origin | sed -E 's#.*github.com[:/]([^/]+/[^/.]+)(\.git)?#\1#')}"
++WORKFLOW="windows-source-sdk-dlls.yml"
++
++echo "[openvibe] fix Windows bootstrap: use Valve master zip/download fallback"
++echo "[openvibe] root=$ROOT"
++echo "[openvibe] branch=$BRANCH"
++echo "[openvibe] repo=$REPO"
++
++mkdir -p tools docs .github/workflows
++
++cat > tools/bootstrap-source-sdk-2013-windows.ps1 <<'PS'
++$ErrorActionPreference = 'Stop'
++
++$Root = if ($env:OPENVIBE_ROOT) { (Resolve-Path $env:OPENVIBE_ROOT).Path } else { (Resolve-Path (Join-Path $PSScriptRoot '..')).Path }
++$Sdk = if ($env:OPENVIBE_SDK) { $env:OPENVIBE_SDK } else { Join-Path $Root 'engine/source-sdk-2013' }
++$Src = Join-Path $Sdk 'src'
++$Deps = Join-Path $Root '_deps'
++$LogDir = Join-Path $Root 'artifacts/windows-build-debug'
++New-Item -ItemType Directory -Force -Path $Deps, $LogDir | Out-Null
++
++function Say($m) { Write-Host "[openvibe-sdk-bootstrap] $m" }
++function Dump-Dir($path, $outName) {
++ try {
++ if (Test-Path $path) {
++ Get-ChildItem -Force $path | Select-Object Mode,Length,Name | Format-Table -AutoSize | Out-File (Join-Path $LogDir $outName)
++ } else {
++ "[missing] $path" | Out-File (Join-Path $LogDir $outName)
++ }
++ } catch {
++ "dump failed: $($_.Exception.Message)" | Out-File (Join-Path $LogDir $outName)
++ }
++}
++function Assert-UsableSdk($prefix) {
++ if ((Test-Path (Join-Path $Src 'game/client/hl2mp')) -and (Test-Path (Join-Path $Src 'game/server/hl2mp'))) {
++ Say "$prefix SDK tree looks usable"
++ return $true
++ }
++ return $false
++}
++function Copy-SdkRoot($sourceRoot) {
++ Say "copying SDK root $sourceRoot -> $Sdk"
++ if (Test-Path $Sdk) { Remove-Item -Recurse -Force $Sdk }
++ New-Item -ItemType Directory -Force -Path $Sdk | Out-Null
++ Copy-Item -Path (Join-Path $sourceRoot '*') -Destination $Sdk -Recurse -Force
++ Dump-Dir $Sdk 'sdk-root-after-copy.txt'
++ if (!(Assert-UsableSdk 'copied')) {
++ throw "Copied SDK is missing expected HL2MP folders under $Src"
++ }
++}
++
++Say "root=$Root"
++Say "sdk=$Sdk"
++Say "deps=$Deps"
++
++if (Assert-UsableSdk 'existing') { exit 0 }
++
++# ValveSoftware/source-sdk-2013 currently uses the default/master layout with src/ at the repository root.
++# Do not assume an mp branch or mp/src folder. Downloading the zip avoids git/extraheader/auth weirdness on Actions runners.
++$zip = Join-Path $Deps 'source-sdk-2013-master.zip'
++$extractParent = Join-Path $Deps 'source-sdk-2013-zip'
++$zipRoot = Join-Path $extractParent 'source-sdk-2013-master'
++$zipUrl = 'https://codeload.github.com/ValveSoftware/source-sdk-2013/zip/refs/heads/master'
++
++$zipOk = $false
++try {
++ Say "downloading Valve SDK master zip from $zipUrl"
++ if (Test-Path $zip) { Remove-Item -Force $zip }
++ if (Test-Path $extractParent) { Remove-Item -Recurse -Force $extractParent }
++ New-Item -ItemType Directory -Force -Path $extractParent | Out-Null
++
++ if (Get-Command curl.exe -ErrorAction SilentlyContinue) {
++ & curl.exe -L --retry 4 --retry-delay 3 --connect-timeout 30 -o $zip $zipUrl 2>&1 | Tee-Object -FilePath (Join-Path $LogDir 'bootstrap-curl-master-zip.log')
++ if ($LASTEXITCODE -ne 0) { throw "curl.exe failed with exit code $LASTEXITCODE" }
++ } else {
++ Invoke-WebRequest -Uri $zipUrl -OutFile $zip -UseBasicParsing 2>&1 | Tee-Object -FilePath (Join-Path $LogDir 'bootstrap-iwr-master-zip.log')
++ }
++
++ $zipInfo = Get-Item $zip
++ Say "zip bytes=$($zipInfo.Length)"
++ if ($zipInfo.Length -lt 1000000) { throw "downloaded zip is suspiciously small" }
++
++ Expand-Archive -Path $zip -DestinationPath $extractParent -Force
++ Dump-Dir $extractParent 'zip-extract-parent.txt'
++ Dump-Dir $zipRoot 'zip-root.txt'
++
++ if (Test-Path (Join-Path $zipRoot 'src/game/client/hl2mp')) {
++ Copy-SdkRoot $zipRoot
++ $zipOk = $true
++ } else {
++ throw "zip did not contain expected src/game/client/hl2mp at $zipRoot"
++ }
++} catch {
++ Say "zip bootstrap failed: $($_.Exception.Message)"
++ $_ | Out-String | Out-File (Join-Path $LogDir 'bootstrap-zip-exception.txt')
++}
++
++if ($zipOk) { Say 'SDK bootstrapped successfully from zip'; exit 0 }
++
++# Last-resort git fallback. Clear possible GitHub Actions extraheaders and force public HTTPS.
++$gitRepo = Join-Path $Deps 'source-sdk-2013-git'
++try {
++ Say "trying git clone fallback"
++ git config --global --unset-all http.https://github.com/.extraheader 2>$null
++ git config --global --unset-all http.https://github.com/ValveSoftware/source-sdk-2013.extraheader 2>$null
++ if (Test-Path $gitRepo) { Remove-Item -Recurse -Force $gitRepo }
++ & git -c http.https://github.com/.extraheader= clone --depth 1 --single-branch https://github.com/ValveSoftware/source-sdk-2013.git $gitRepo 2>&1 | Tee-Object -FilePath (Join-Path $LogDir 'bootstrap-git-clone-master.log')
++ if ($LASTEXITCODE -ne 0) { throw "git clone failed with exit code $LASTEXITCODE" }
++ Dump-Dir $gitRepo 'git-root.txt'
++ if (Test-Path (Join-Path $gitRepo 'src/game/client/hl2mp')) {
++ Copy-SdkRoot $gitRepo
++ Say 'SDK bootstrapped successfully from git'
++ exit 0
++ }
++ throw "git clone did not contain src/game/client/hl2mp"
++} catch {
++ Say "git bootstrap failed: $($_.Exception.Message)"
++ $_ | Out-String | Out-File (Join-Path $LogDir 'bootstrap-git-exception.txt')
++}
++
++Dump-Dir $Deps 'deps-after-bootstrap-failure.txt'
++throw "Could not bootstrap ValveSoftware/source-sdk-2013. Check openvibe-windows-build-debug artifact, especially bootstrap-curl-master-zip.log, bootstrap-zip-exception.txt, and bootstrap-git-clone-master.log."
++PS
++
++cat > docs/WINDOWS_WORKFLOW_SDK_BOOTSTRAP.md <<'MD'
++# Windows Source SDK bootstrap
++
++The Windows GitHub Actions runner is fresh and does not have Alex's local `engine/source-sdk-2013` checkout.
++
++The workflow bootstraps Valve's public Source SDK 2013 repository into:
++
++```text
++engine/source-sdk-2013
++```
++
++The expected SDK layout is:
++
++```text
++engine/source-sdk-2013/src/game/client/hl2mp
++engine/source-sdk-2013/src/game/server/hl2mp
++```
++
++The bootstrap intentionally downloads the default/master zip first:
++
++```text
++https://codeload.github.com/ValveSoftware/source-sdk-2013/zip/refs/heads/master
++```
++
++This avoids brittle branch assumptions and avoids GitHub Actions `git` auth/header issues. A git clone fallback is still present for debugging.
++MD
++
++# Make sure the workflow has the bootstrap step before build, without rewriting the whole file if it already does.
++python3 - <<'PY'
++from pathlib import Path
++p = Path('.github/workflows/windows-source-sdk-dlls.yml')
++s = p.read_text()
++if 'Bootstrap Source SDK 2013 MP' not in s and 'Bootstrap Source SDK 2013' not in s:
++ marker = ' - name: Build Windows Source SDK DLLs\n'
++ insert = ''' - name: Bootstrap Source SDK 2013\n run: |\n $ErrorActionPreference = 'Stop'\n powershell -NoProfile -ExecutionPolicy Bypass -File tools/bootstrap-source-sdk-2013-windows.ps1 *>&1 | Tee-Object -FilePath artifacts/windows-build-debug/bootstrap-source-sdk-2013.log\n\n'''
++ if marker not in s:
++ raise SystemExit('could not find Build Windows Source SDK DLLs step marker')
++ s = s.replace(marker, insert + marker, 1)
++# Normalize the old step label if present.
++s = s.replace('Bootstrap Source SDK 2013 MP', 'Bootstrap Source SDK 2013')
++p.write_text(s)
++PY
++
++# Improve debug helper to print the new bootstrap files if the run fails.
++python3 - <<'PY'
++from pathlib import Path
++p = Path('tools/windows-workflow-debug-and-install.sh')
++if not p.exists():
++ raise SystemExit(0)
++s = p.read_text()
++needle = 'grep -RInE "(error|failed|fatal|C[0-9]{4}|LNK[0-9]{4}|MSB[0-9]{4}|No patched OpenVibe DLLs)" "$OUT" 2>/dev/null | head -n 80 || true'
++replacement = '''grep -RInE "(error|failed|fatal|C[0-9]{4}|LNK[0-9]{4}|MSB[0-9]{4}|No patched OpenVibe DLLs|Could not bootstrap|suspiciously small)" "$OUT" 2>/dev/null | head -n 120 || true
++
++for f in \
++ "$OUT"/openvibe-windows-build-debug/bootstrap-source-sdk-2013.log \
++ "$OUT"/openvibe-windows-build-debug/bootstrap-curl-master-zip.log \
++ "$OUT"/openvibe-windows-build-debug/bootstrap-zip-exception.txt \
++ "$OUT"/openvibe-windows-build-debug/bootstrap-git-clone-master.log \
++ "$OUT"/openvibe-windows-build-debug/bootstrap-git-exception.txt \
++ "$OUT"/openvibe-windows-build-debug/build-sdk-windows.log; do
++ if [[ -f "$f" ]]; then
++ echo
++ echo "[openvibe] tail: ${f#$ROOT/}"
++ tail -n 80 "$f" || true
++ fi
++done'''
++if needle in s:
++ s = s.replace(needle, replacement)
++elif 'bootstrap-curl-master-zip.log' not in s:
++ s += '\n\n# Extra bootstrap tails for current Windows workflow debugging.\n'
++p.write_text(s)
++PY
++
++echo "[openvibe] git diff summary"
++git diff --stat
++
++if ! git diff --quiet; then
++ git add tools/bootstrap-source-sdk-2013-windows.ps1 docs/WINDOWS_WORKFLOW_SDK_BOOTSTRAP.md .github/workflows/windows-source-sdk-dlls.yml tools/windows-workflow-debug-and-install.sh
++ git commit -m "Fix Windows SDK bootstrap download path"
++ git push origin "$BRANCH"
++else
++ echo "[openvibe] no changes to commit"
++fi
++
++if ! command -v gh >/dev/null 2>&1; then
++ echo "[openvibe] gh missing; install/authenticate GitHub CLI, then run tools/windows-workflow-debug-and-install.sh after triggering workflow."
++ exit 0
++fi
++
++echo "[openvibe] triggering workflow"
++gh workflow run "$WORKFLOW" --repo "$REPO" --ref "$BRANCH" || true
++sleep 8
++RUN_ID="$(gh run list --repo "$REPO" --workflow "$WORKFLOW" --branch "$BRANCH" --limit 1 --json databaseId --jq '.[0].databaseId')"
++echo "[openvibe] watching run $RUN_ID"
++if gh run watch "$RUN_ID" --repo "$REPO" --exit-status; then
++ echo "[openvibe] workflow passed"
++else
++ echo "[openvibe warn] workflow failed; downloading diagnostics"
++fi
++
++tools/windows-workflow-debug-and-install.sh || true
++
++echo
++if [[ -x tools/verify-openvibe-dll-content.sh ]]; then
++ tools/verify-openvibe-dll-content.sh || true
++fi
++
++echo
++cat <<'EOF'
++[openvibe] next if patched DLLs are installed:
++ OPENVIBE_PROTON_LOG=1 OPENVIBE_CLIENT_MODE=proton tools/run-client-auto.sh 127.0.0.1 27015
++
++In game console:
++ ov_join hub
++ ov_menu
++ ov_menu_servers
++EOF
ddiff --git a/tools/fix-windows-bootstrap-mp-branch-and-rerun.sh b/tools/fix-windows-bootstrap-mp-branch-and-rerun.sh
nnew file mode 100755
iindex 0000000..42fda17
---- /dev/null
++++ b/tools/fix-windows-bootstrap-mp-branch-and-rerun.sh
@@@ -0,0 +1,205 @@
++#!/usr/bin/env bash
++set -euo pipefail
++
++ROOT="${OPENVIBE_ROOT:-$HOME/src/openvibe-source}"
++cd "$ROOT"
++
++BRANCH="$(git rev-parse --abbrev-ref HEAD)"
++REPO="${OPENVIBE_GITHUB_REPO:-$(gh repo view --json nameWithOwner -q .nameWithOwner 2>/dev/null || true)}"
++REPO="${REPO:-OpenVibers/OpenVibe.Games}"
++WORKFLOW="windows-source-sdk-dlls.yml"
++
++say(){ printf '[openvibe] %s\n' "$*"; }
++
++say "fix Windows bootstrap to clone the real Source SDK 2013 MP branch"
++say "root=$ROOT"
++say "branch=$BRANCH"
++say "repo=$REPO"
++
++if ! command -v gh >/dev/null 2>&1; then
++ echo "Missing gh. Run: sudo apt install gh && gh auth login" >&2
++ exit 1
++fi
++
++if ! gh auth status >/dev/null 2>&1; then
++ echo "gh is not authenticated. Run: gh auth login" >&2
++ exit 1
++fi
++
++mkdir -p tools docs .github/workflows
++
++cat > tools/bootstrap-source-sdk-2013-windows.ps1 <<'PS1'
++$ErrorActionPreference = 'Stop'
++
++$Root = if ($env:OPENVIBE_ROOT) { (Resolve-Path $env:OPENVIBE_ROOT).Path } else { (Resolve-Path (Join-Path $PSScriptRoot '..')).Path }
++$Sdk = if ($env:OPENVIBE_SDK) { $env:OPENVIBE_SDK } else { Join-Path $Root 'engine/source-sdk-2013' }
++$Src = Join-Path $Sdk 'src'
++$Deps = Join-Path $Root '_deps'
++$LogDir = Join-Path $Root 'artifacts/windows-build-debug'
++New-Item -ItemType Directory -Force -Path $LogDir | Out-Null
++
++function Say($m) { Write-Host "[openvibe-sdk-bootstrap] $m" }
++function Has-HL2MP($base) {
++ return ((Test-Path (Join-Path $base 'src/game/client/hl2mp')) -and (Test-Path (Join-Path $base 'src/game/server/hl2mp')))
++}
++function Run-Git($args, $logName) {
++ $log = Join-Path $LogDir $logName
++ Say "git $args"
++ & git @args 2>&1 | Tee-Object -FilePath $log
++ if ($LASTEXITCODE -ne 0) { throw "git $args failed with exit code $LASTEXITCODE. See $log" }
++}
++
++Say "root=$Root"
++Say "sdk=$Sdk"
++Say "logdir=$LogDir"
++
++if (Has-HL2MP $Sdk) {
++ Say "existing SDK tree already contains HL2MP client/server"
++ exit 0
++}
++
++New-Item -ItemType Directory -Force -Path $Deps | Out-Null
++
++# Valve's source-sdk-2013 repository is normally organized by branches: mp and sp.
++# Some forks/mirrors use root folders like mp/src. Support both layouts.
++$RepoUrl = if ($env:OPENVIBE_SOURCE_SDK_REPO) { $env:OPENVIBE_SOURCE_SDK_REPO } else { 'https://github.com/ValveSoftware/source-sdk-2013.git' }
++$ValveRepo = Join-Path $Deps 'source-sdk-2013-mp'
++
++if (Test-Path $ValveRepo) { Remove-Item -Recurse -Force $ValveRepo }
++
++$cloned = $false
++try {
++ Say "cloning Valve Source SDK 2013 branch mp"
++ Run-Git @('clone','--depth','1','--branch','mp',$RepoUrl,$ValveRepo) 'bootstrap-git-clone-mp.log'
++ $cloned = $true
++} catch {
++ Say "mp branch clone failed: $($_.Exception.Message)"
++ if (Test-Path $ValveRepo) { Remove-Item -Recurse -Force $ValveRepo }
++ Say "falling back to default branch clone"
++ Run-Git @('clone','--depth','1',$RepoUrl,$ValveRepo) 'bootstrap-git-clone-default.log'
++ $cloned = $true
++}
++
++if (-not $cloned) { throw "could not clone Source SDK repo" }
++
++"=== Valve repo root ===" | Out-File (Join-Path $LogDir 'valve-repo-root.txt')
++Get-ChildItem -Force $ValveRepo | Select-Object Mode,Length,Name | Format-Table -AutoSize | Out-File (Join-Path $LogDir 'valve-repo-root.txt') -Append
++"=== candidate src folders ===" | Out-File (Join-Path $LogDir 'valve-candidate-src.txt')
++Get-ChildItem -Path $ValveRepo -Recurse -Directory -Filter src -ErrorAction SilentlyContinue |
++ Select-Object FullName | Format-List | Out-File (Join-Path $LogDir 'valve-candidate-src.txt') -Append
++
++$candidates = @(
++ $ValveRepo,
++ (Join-Path $ValveRepo 'mp'),
++ (Join-Path $ValveRepo 'srcsdk/mp'),
++ (Join-Path $ValveRepo 'source-sdk-2013/mp')
++)
++
++$SourceRoot = $null
++foreach ($candidate in $candidates) {
++ if (Has-HL2MP $candidate) {
++ $SourceRoot = $candidate
++ break
++ }
++}
++
++if (-not $SourceRoot) {
++ $matches = Get-ChildItem -Path $ValveRepo -Recurse -Directory -Filter hl2mp -ErrorAction SilentlyContinue |
++ Where-Object { $_.FullName -match '[\\/]src[\\/]game[\\/](client|server)[\\/]hl2mp$' }
++ $matches | Select-Object FullName | Format-List | Out-File (Join-Path $LogDir 'hl2mp-folder-search.txt')
++ throw "Could not find Source SDK 2013 MP HL2MP layout after clone. Check valve-repo-root.txt, valve-candidate-src.txt, and hl2mp-folder-search.txt."
++}
++
++Say "source root=$SourceRoot"
++Say "copying Source SDK MP layout into $Sdk"
++if (Test-Path $Sdk) { Remove-Item -Recurse -Force $Sdk }
++New-Item -ItemType Directory -Force -Path $Sdk | Out-Null
++Copy-Item -Path (Join-Path $SourceRoot '*') -Destination $Sdk -Recurse -Force
++
++if (!(Has-HL2MP $Sdk)) {
++ Get-ChildItem -Force $Sdk | Select-Object Mode,Length,Name | Format-Table -AutoSize | Out-File (Join-Path $LogDir 'sdk-root-after-copy.txt')
++ throw "Bootstrapped SDK is missing expected HL2MP folders after copy"
++}
++
++"=== SDK root after copy ===" | Out-File (Join-Path $LogDir 'sdk-root-after-copy.txt')
++Get-ChildItem -Force $Sdk | Select-Object Mode,Length,Name | Format-Table -AutoSize | Out-File (Join-Path $LogDir 'sdk-root-after-copy.txt') -Append
++"=== SDK src root after copy ===" | Out-File (Join-Path $LogDir 'sdk-src-root-after-copy.txt')
++Get-ChildItem -Force (Join-Path $Sdk 'src') | Select-Object Mode,Length,Name | Format-Table -AutoSize | Out-File (Join-Path $LogDir 'sdk-src-root-after-copy.txt') -Append
++
++Say "SDK bootstrapped successfully"
++PS1
++
++cat > docs/WINDOWS_WORKFLOW_SDK_BOOTSTRAP.md <<'MD'
++# Windows Source SDK bootstrap
++
++The GitHub Actions Windows runner does not have Alex's local `engine/source-sdk-2013` checkout. The workflow bootstraps it by cloning ValveSoftware/source-sdk-2013.
++
++Important detail: the Source SDK 2013 multiplayer code is normally on the `mp` branch, not necessarily in a `mp/` directory on the default branch. The bootstrap script now supports both layouts:
++
++- `source-sdk-2013` checked out directly on the `mp` branch, with `src/...` at repo root
++- older/mirrored layout with `mp/src/...`
++
++The workflow should not upload or install stock/stale DLLs. A DLL artifact is considered useful only when `client.dll` contains OpenVibe command strings such as `ov_join`, `ov_menu`, or `OpenVibe`.
++MD
++
++# Make workflow rerun on bootstrap changes and make bootstrap log more obvious.
++python3 - <<'PY'
++from pathlib import Path
++p = Path('.github/workflows/windows-source-sdk-dlls.yml')
++s = p.read_text()
++if 'tools/bootstrap-source-sdk-2013-windows.ps1' not in s:
++ s = s.replace(' - "tools/build-sdk-windows.ps1"\n', ' - "tools/build-sdk-windows.ps1"\n - "tools/bootstrap-source-sdk-2013-windows.ps1"\n')
++# Ensure bootstrap step captures a specific log and prints it on failure before exiting.
++old = ''' - name: Bootstrap Source SDK 2013 MP\n run: |\n powershell -NoProfile -ExecutionPolicy Bypass -File tools/bootstrap-source-sdk-2013-windows.ps1 *>&1 | Tee-Object -FilePath artifacts/windows-build-debug/bootstrap-source-sdk-2013.log\n'''
++new = ''' - name: Bootstrap Source SDK 2013 MP\n run: |\n $ErrorActionPreference = 'Continue'\n New-Item -ItemType Directory -Force -Path artifacts/windows-build-debug | Out-Null\n powershell -NoProfile -ExecutionPolicy Bypass -File tools/bootstrap-source-sdk-2013-windows.ps1 *>&1 | Tee-Object -FilePath artifacts/windows-build-debug/bootstrap-source-sdk-2013.log\n $code = $LASTEXITCODE\n if ($code -ne 0) {\n Write-Host \"[openvibe] bootstrap failed; tail follows\"\n Get-Content artifacts/windows-build-debug/bootstrap-source-sdk-2013.log -Tail 120\n exit $code\n }\n'''
++if old in s:
++ s = s.replace(old, new)
++p.write_text(s)
++PY
++
++# Improve debug downloader so it actually prints the useful logs next time.
++if [[ -f tools/windows-workflow-debug-and-install.sh ]]; then
++python3 - <<'PY'
++from pathlib import Path
++p = Path('tools/windows-workflow-debug-and-install.sh')
++s = p.read_text()
++needle = 'say "artifact files:"\nfind "$OUT" -type f | sort || true\n'
++insert = '''say "artifact files:"\nfind "$OUT" -type f | sort || true\n\nfor f in \\\n "$OUT"/openvibe-windows-build-debug/bootstrap-source-sdk-2013.log \\\n "$OUT"/openvibe-windows-build-debug/build-sdk-windows.log \\\n "$OUT"/openvibe-windows-build-debug/bootstrap-git-clone-mp.log \\\n "$OUT"/openvibe-windows-build-debug/valve-repo-root.txt \\\n "$OUT"/openvibe-windows-build-debug/valve-candidate-src.txt \\\n "$OUT"/openvibe-windows-build-debug/hl2mp-folder-search.txt; do\n if [[ -f "$f" ]]; then\n echo\n say "tail: ${f#$OUT/}"\n tail -n 120 "$f" || true\n fi\ndone\n'''
++if needle in s and 'bootstrap-git-clone-mp.log' not in s:
++ s = s.replace(needle, insert)
++p.write_text(s)
++PY
++fi
++
++say "git diff summary"
++git diff --stat
++
++git add .github/workflows/windows-source-sdk-dlls.yml tools/bootstrap-source-sdk-2013-windows.ps1 docs/WINDOWS_WORKFLOW_SDK_BOOTSTRAP.md tools/windows-workflow-debug-and-install.sh
++
++if git diff --cached --quiet; then
++ say "nothing to commit"
++else
++ git commit -m "Fix Windows Source SDK MP branch bootstrap"
++ git push origin "$BRANCH"
++fi
++
++say "triggering workflow"
++gh workflow run "$WORKFLOW" --ref "$BRANCH"
++sleep 6
++RUN_ID="$(gh run list --workflow "$WORKFLOW" --branch "$BRANCH" --limit 1 --json databaseId -q '.[0].databaseId')"
++say "watching run $RUN_ID"
++set +e
++gh run watch "$RUN_ID" --exit-status
++STATUS=$?
++set -e
++
++say "downloading diagnostics/artifacts"
++tools/windows-workflow-debug-and-install.sh || true
++
++if [[ $STATUS -eq 0 ]]; then
++ say "workflow succeeded"
++else
++ say "workflow failed again; paste the tail printed above if it does not clearly show the next compile error"
++fi
++
++exit $STATUS